Linux操作系统
文章目录
linux简介
- GNU
由Emacs编辑系统、 BASH shell程序、 gcc、 gdb、等开发工具组成,Linux与gnu结合完全自由的操作系统”gnu/linux”简称Linux。
- POSIX
posix标准定义了操作系统与应用程序的接口标准。
- 内核版
- 稳定版与开发版 https://www.kernel.org
- 发行版本ubuntu 、centos、Red Hat 等等。
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 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
文章作者 周军
上次更新 2019-08-31