常用命令
- history 查看历史命令(可以使用上下键查看之前的命令)
- ls 查看文件信息
- ls -l 显示详细信息
- ls -a 显示隐藏信息
- ls -R 递归显示子目录的内容
- ls -lrt 按照时间进行排序
- 通配符
- *表示任意多个字符
- ?代表任意一个字符
- cd change dir 更改目录
- 回到家目录
- cd
- cd ~
- $HOME
- 绝对路径
- 回到家目录
- pwd 显示当前工作目录
- mkdir 创建目录
- mkdir [option] dirname1,dirname2…
- rmdir 删除非空目录
- which 显示对应的命令所在路径
- cd不在任何一个目录,他是shell自带的
- touch 创建文件–文件存在,更改访问时间,文件不存在,则创建文件
- rm 删除文件或目录
- rm -r 递归删除当前目录的全部内容
- rm -rf 强制删除当前目录的全部内容
- cp 拷贝文件或目录
- cp [option] srcpath despath
- 当despath是目录,将srcpath拷贝到目录下
- 当despath不是目录,会拷贝内容到文件中
- cp [option] srcpath despath
- mv 移动文件或目录(剪切)
- cat 显示文件信息(文件信息较少)
- more和 less 分页显示
- more 回车–逐行显示
- more 空格–一页一页显示
- less 回车或上下方向键可以来回显示
- head 和tail
- head 查看文件头,默认显示10行
- head -n 可以显示指定的行数
- tail 查看文件尾,默认显示10行
- -n 可以显示指定行数
- -f 可以一直跟踪文件末尾
- tree 树形显示目录结构
- wc word count (行数、单词数、字节数)
- -l 显示行
- -w 单词
- -c 字节
- du 显示目录所占的空间大小
- -h 适合人类观看的方式
- –max-depth=1 只显示当前路径下的目录的大小
- df 显示磁盘空间信息
- ln src des 创建硬链接
- ln -s src des 创建软连接,目录也可以创建软连接–》相当于创建了一个快捷方式
- unlink 删除软硬连接
- chmod 改变文件权限
- chmod [u|g|o|a] [+|-][r|w|x] filename
- 用数字的方式改变文件权限
- 例子 chmod 0664 a.out
- 注意:目录要有可执行权限才能进入目录
- whoami:显示一下我是谁
- chown和chgrp 改变用户和组
- chown 用户名:组名 文件名|目录
- chgrp 组名 文件名|目录
- alias 配置命令别名
- man 查看帮助手册
查找和检索
- find命令 find dir [option] 内容
- -name 按照名字查找 例子:find ./ -name “*.c”
- -type 按照类型查找 例子: find ./ -type f
- -size 按照大小查找 例子:find ./ -size +1M -size -5M
- 最深路径 例子:find ./ -maxdepth 1 -size +1M
- 查找并查看详细信息
- find ./ -maxdepth 1 -size +1M -exec ls -l {} \;
- 安全模式,每一条指令都提示 find ./ -maxdepth 1 -size +1M -ok ls -l {} \;
- xargs 是find命令的好伴侣:利用管道 find ./ maxdepth 1 -type l |xargs ls -l
- grep 对内容进行过滤
- find ./ -maxdepth 1 -type f |grep txt
- 过滤内容并显示行号: grep -rn “main” *.c
- umask -S 用文字显示对应文件权限
压缩包管理
- zip/unzip — zip格式
- zip -r 压缩包名 原材料 — -r代表递归子目录
- unzip 压缩包名字
- gizp和gunzip — zp格式
- tar —最常用打包工具 .tar.gz
- -c 压缩文件
- -v 显示信息
- -f 指定压缩包名字
- -z gz格式压缩
- tar [option] 压缩包名字 原材料 —添加压缩
- tar zcvf bb.tar.gz bb
- tar zxvf bb.tar.gz ----解压缩
- bzip2 格式压缩和解压缩
- tar jcvf bb.tar.bzip2 bb
- tar jxvf bb.tar.bzip2
- rar 格式
- a 代表压缩
- -r 递归子目录
- x 解压缩
- rar a -r newdir dir
- rar x newdir.rar
软件的安装和卸载
- apt-get方式 自动安装软件,需要知道软件名
- sudo apt-get update 更新源
- sudo apt-get install 软件名
- sudo apt-get remove 软件名
- sudo apt-get clean 清理包
- dpkg根据deb安装包来安装软件
- sudo dpkg -i xxx.deb 安装软件包
- sudo dpkg -r xxx.deb 卸载软件包
- 源码安装
- 1.解压源码包
- 2.cd dir
- 3./configure 检查文件是否缺失,创建Makefile,检测编译环境
- 4.make 编译源码,生成库和可执行文件
- 5.sudo make install 把库和可执行程序,安装到系统目录下
- 6.sudo make distclean 删除和卸载软件
补充:文件类型
- l -->符号连接
- b -->块连接
- c -->字符连接
- p --> 管道设备(pipe)
- s -->本地套接字
硬链接:注意与cp的区别
目录
目录 | 表示,存放 |
---|---|
根目录 | / |
/bin | 二进制可执行文件 |
/boot | 启动 |
/lib | library,存放库 |
/media | 挂载设备媒体,U盘,光驱等 |
/mnt | 手动挂载 |
/usr | unix system resource 庞大,很多应用会安装在这 |
/usr/local | 用户自己安装的软件一般都是安装在这 |
/sbin | super binary 超级管理员的可执行程序 |
/proc | 系统进程映射,会保留进程的一些信息 |
/etc | 系统配置 |
/dev | 设备文件目录 |
/home/usr | 用户家目录 |
vim的使用
vi与vim->vim是vi的增强版
- 查看vim教程:vimtutor
基本操作
命令模式下:
移动光标
- 0 行首
- $行尾
- gg–文件的开头
- G–文件的末尾
- nG–到n行
删除内容
- x 删除光标所在的字母
- X 删除光标前的字母
- dw 删除单词(从光标位置开始删)
- d0 删除光标到行首
- d$(D) 删除光标到行尾
- dd 删除光标所在行
- ndd 删除光标所在行的n行
- u 撤销
- ctrl+r 反撤销
复制粘贴
- yy 复制一行
- dd 剪切一行
- nyy 复制n行
- p/P 粘贴(注意粘贴位置)
- r 替换(输入r之后,再输入一个字母)
- 可视模式
- v 进入可视模式
- 移动光标选中内容
- 按y复制内容
- 移动光标到目的地
- 按p/P将内容粘贴
查找操作
- /srcpattern
- n/N 进行遍历,注意向前还是向后
- ?srcpattern
- n/N 进行遍历,方向与/相反
- 光标移动到字符串上,按#,也可以查找
格式调整
- gg=G 文件整体调整格式
- >> 当前行光标向右移动一个tab
- << 当前行光标向左移动一个tab
- n>> 当前行开始n行光标向右移动一个tab
- n<< 当前行开始n行光标向左移动一个tab
man帮助查看K或n+K
命令模式变为编辑模式:
- i 在光标前插入
- a 在光标后插入
- I 在行首插入
- A在行尾插入
- o 在下一行插入
- O 在上一行插入
- s 删除当前字母变为插入模式
- S 删除当前行变为插入模式
末行模式
-
执行命令 :! ls -l
-
替换
-
😒/src/des 只会替换当前行第一个匹配的src为des
-
😒/src/des/g 只会替换当前行所有的src为des
-
:%s/src/des 只会替换所有行的第一个匹配的src为des
-
%😒/src/des/g 替换文件内所有的src为des
-
保存和退出
- :wq 保存退出
- :w 保存
- :q 只退出,文件不能修改
- :q! 强制退出
- :x 保存退出
- zz 保存退出(命令模式)
-
分屏
- 横分 :sp filename
- 竖分 :vsp filename
- 退出
- :q 退出一个文件
- :qall 全部文件退出
- : wqall 全部保存退出
gcc
gcc流程
gcc编译参数
- I-包含头文件路径(可以绝对路径,也可相对路径)
- O-优化选项,1-3越高优先级越高
- L–包含的库路径
- l–指定库名 libxxx.so—> -lxxx
- o–目标文件
- c-编译成.o文件
- g–用于gdb调试,不加此选项不能进行gdb调试
- Wall–显示更多警告
- D–指定宏编译
- lstdc++ 编译c++代码(g++)
- E 输出到标准输出,宏替换,头文件展开
- S编译成汇编
例子:
编译GCC目录代码
gcc add.c -I./include/ -D DEBUG -o app -g -Wall -O1
编译c++代码
gcc hello.cpp -lstdc++ -o cppapp -O
制作静态库和共享库
静态库
静态库的文件命名:libxxx.a----window下的.lib文件
步骤:
- 生成.o文件
例子:
gcc -c add.c -I ../include/
- 再生成libxxx.a文件
ar rcs libCalc.a add.o
- 可以用nm命令查看生成文件的内容
nm libCalc.a
- 发布 将头文件和静态库发布即可
- 使用静态库时候用到-L(指定库路径) 和-l(指定库名)
动态库
制作步骤:
- 编译与位置无关的代码,生成.o,关键参数-fPIC
gcc -fPIC -c *.c -I ../include/
- 将.o文件打包,关键参数:-shared
gcc -shared -o libCalc.so *.o
- 将库与头文件一起发布
- 动态库的使用
- -L指定动态库路径,-l指定库名
- 解决不能加载动态库的问题
- 1.拷贝到系统/lib下—不允许
- 2.将库路径增加到环境变量LD_LIBARY_PATH中,不是特别推荐
- 配置 sudo vi /etc/ld.so.conf文件,增加库路径,执行sudo Idconfig -v
优缺总结:
缺点:
- 执行时需要加载动态库,相对来说比静态库慢
- 发布应用时需要同时发布动态库
优点:
- 执行程序体积小
- 库变更时,一般不需要重新编译应用