linux简介

  • GNU

由Emacs编辑系统、 BASH shell程序、 gcc、 gdb、等开发工具组成,Linux与gnu结合完全自由的操作系统”gnu/linux”简称Linux。

  • POSIX

posix标准定义了操作系统与应用程序的接口标准。

shell(linux常用命令)

  • ls

查看当前目录下所包含的文件信息
ls -a 查看所有文件包含隐藏文件
ls -l 以列表形式查看文件,不包含隐藏文件
ls -lh 以列表形式查看文件,不包含隐藏文件 ,按照1024倍数显示{KB MB GB}
ls -all以列表形式查看文件,包含隐藏文件 快捷方式【ll】
】 匹配任意多个字符【0-256】 a 一个以上字符 256一下
【?】 匹配任意一个字符 a? 两个字符
【[a-z]】 区间法 匹配a到z的所有字符 只能确定一个字符
【[abcde]】 穷举法 权值法 匹配abcde的所有字符 只能确定一个字符

  • cd

切换工作目录,cd./文件名 进入目录下的某个文件, cd ../文件名 返回上级目录并且进入 上级目录里面的某个文件。 (这是相对位置,绝对位置全部写出俩/文件名/文件名/文件名)
cd 切换到用户主目录
cd ~ 切换到当前用户的主目录
cd .. 切换到上级目录
cd . 切换到当前目录
cd - 切换到上一次目录

  • pwd

查看当前所处路径

  • file

Windows以后缀.exe.txt.doc区分, linux以颜色进行区分 , file 文件名获取文件类型等信息

  • help man

mkdir –help, mkdi man(但是可以用tab键用来补全命令,按两下tab 显示列表), man mkdir.

  • ll|moer

通过管道多页显示命令 mkdir rmdir
mkdir 目录名 -p 递归创建
rmdir 目录名 目录一定是空的
rm 文件 -i询问 -r 递归传出

  • ln ln-s

ln 源文件 链接文件 硬链接
ln -s 源文件 链接文件 软连接
硬链接文件占磁盘空间 但是删除源文件不会影响硬链接文件
硬链接和拷贝(复制)区别 无论你修改了哪一个链接之后的文件 两个文件都会改变 保持一致 但是拷贝不会
软链接文件不占磁盘空间 但是删除源文件会影响软链接文件

  • 在Linux中文件分为

普通文件
目录文件
设备文件(字符设备文件 块设备文件)
管道文件
链接文件

  • 文件权限

d rwx rwx rwx 分为三组
d 目录 成为文件类型
第一组:文件的所属用户
第二组:文件的所属组
第三组:其他用户

  • 文本搜索:

grep ‘搜索内容’ 文件名
-n 显示行号
-v 反选
-i 忽略大小写

  • 通配符:

【^a】以a为起始的字符搜索文件
【a$】以a为结尾的字符搜索文件
【.】 配匹任意一个非换行的字符
【*】匹配任意字符(大于0的整数)

  • 文件搜索:

find 目录 参数 文件名(可以使用通配符)
-name 文件名
-size 大小
-perm rwx

  • 归档:

tar -cvf 归档文件名.tar 文件1 文件2 目录1 目录2
解归档:
tar -xvf 归档文件名.tar -C 路径

  • 压缩:

gzip 归档文件名.tar 生成了一个文件 归档文件名.tar.gz 文件大小小于归档文件大小 归档文件名.tar不存在了
解压缩:
gzip -d 归档文件名.tar.gz 生成了一个文件 归档文件名.tar

  • 一步归档压缩:

tar -czvf 文件名.tar.gz 文件1 文件2 目录1 目录2

  • 一步解归档压缩:

tar -xzvf 文件名.tar.gz -C 路径

  • bzip2压缩:

tar -cjvf 文件名.tar.bz2 文件1 文件2 目录1 目录2

  • bzip2解压缩:

tar -xjvf 文件名.tar.bz2 -C 路径

  • zip压缩:

zip 文件名 文件1 文件2 目录1 目录2 生成一个文件为:文件名.zip

  • unzip解压缩:

unzip 文件名.zip -C 路径

vim

vim是vi的增强版 可以装一些插件。

命令模式

  • vimtutor 查看教程

  • 移动光标 :

hjkl左 上 下 右
0 行首
$ 行尾
gg 文件开头
G 文件末尾
nG 到n行

  • 删除内容:

x 删除光标所在字母
X 删除光标前的字母
dw 删除单词(从光标开始删)
d0 删除光标到行首
d$ 删除到行尾
dd 删除光标所在行
ndd 删除光标所在行开始n行

  • 复制粘贴 :

yy 复制一行内容
dd 剪切一行内容
nyy 复制n行内容
P/p 粘贴
r 替换输入 r之后再输入一个字母

  • 可视模式:

v 进入可视模式
移动光标选内容
按y复制内容
移动光标到目的地
按p/P 将内容粘贴

  • 内容查找:

/ 加要查找的内容
n/N 向后向向前遍历
? 加要查找的内容 n/N 遍历的方向与上面相反

  • 格式化操作

gg=G 文件整体调整格式
“>> ” 向后移动
“<<” 向前移动
“n>> ” 当前行开始n行向后移动
“n<<” 当前行开始n行向前移动
n+shift+k 查看这个函数的man文档 n对应的页码

编辑模式

1
2
3
4
5
6
i 光标前的插入  
a 光标后的插入  
o 下一行插入     
I 在行首插入     
A 在行尾插入   
O 上一行插入 

末行模式

  • : 进入 esc 退出该模式
  • 替换操作

:s/a/b 只替换当前行第一个匹配的a为b
:s/a/b/g 只会替换当前所有匹配的a为b
:%s/a/b 只替换所有行的第一个a为b
:%s/a/b/g 替换文件内所有的a为b

  • 保存退出

wq保存退出
x保存退出
zz 保存退出
q! 强制退出

  • 分屏

sp +文件名 横分屏
vsp +文件名 竖分屏 qall 全部退出

  • vim设置

/etc/vim/vimrc 系统vim配置文件

gcc

hello.c 先预处理 汇编 二进文件 可执行文件 。

gcc编译流程

gcc hello.c -I./include/ -o app -I包含头文件相对路径-O指定可执行文件名字。
./a.out 执行可执行文件
-D 指定宏编译
-L 包含库路径-I指定库名
-g 用于gdb 调试
-wall 显示警告信息 gcc hello.c -lstdc++ 等同于g++ hello.c 编译c++代码(c到c++)
O 大偶是优化选项 1-3

静态库与动态库

静态库

libxxxx.a 对应windows 下的.lib文件。
cat hello.c 查看文件 静态库制作步骤:
1编译为.o文件 gcc
2 ar rcs libmycalc.a file1.o file2.0 (*.o) 打包
3 nm libycalc.a 查看打包好的
4发布 mv libhello.so ../lib/
5 使用 gcc main.c -o newapp -I include/ -L lib/ -l hello
优点:执行快 发布应用时不需要发布库 在text中

动态库

1编译与位置无关的代码 .o 关键参数gcc -fplc
2将.o文件打包 关键参数gcc -shared libhello.so *.o
3发布 mv libhello.so ../lib/
4使用 gcc main.c -o newapp -I include/ -L lib/ -l hello
5(1)拷贝到/lib 下 不推荐(2)将库路径增加到环境变量LD_LIBRARY_PATH中不是特别推荐 (3)配置这个文件sudo vi /etc/ld.so.conf增加路径../lib 执行sudo ldconfig-v 优点:执行体积小 库变更时一般不需要重新编译应用 在共享库中

makefile

makefile中的变量
makefile中的函数
makefile的三要素:(1)目标(2依赖(3)规则命令
make与makefile:
在linux系统中make是一个非常重要的编译命令,不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或makeinstall。利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。makefile 带来的好处就是“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

Make的工作原理:
当make 命令被执行时,它会扫描当前目录下Makefile或makefile文件找到目标以及其依赖。如果这些依赖自身也是目标,继续为这些依赖扫描Makefile 建立其依赖关系,然后编译它们。一旦主依赖编译之后,然后就编译主目标,假设你对某个源文件进行了修改,你再次执行make 命令,它将只编译与该源文件相关的目标文件,因此,编译完最终的可执行文件节省了大量的时间。

gdb