linux_command - yuhannah/skills_map GitHub Wiki
Linux 下常用命令
终止当前程序
Ctrl+c # 在命令行下起着终止当前执行程序的作用
Ctrl+d # 相当于 exit 命令,退出当前 shell
Ctrl+s # 挂起当前 shell(保护作用很明显哦)
Ctrl+q # 解冻挂起的 shell 再不行就重新连接打开一个终端,reboot linux 或 kill 相关进程
复制
复制指定目录下的全部文件到另一个目录中:
# 如果 dir2 目录不存在,可以直接使用
cp -r dir1 dir2
# 如果 dir2 目录已存在且存在文件,需要先删除 rm -rf dir/*,否则会一个个文件提示你确认再使用
cp -r dir1/. dir2
# 如果这时使用 cp -r dir1 dir2,则也会将 dir1 目录复制到 dir2 中。
移动
移动文件或者文件夹:
mv [选项] [源文件或目录] [目标文件或目录]
# -b:若需覆盖文件,则覆盖前先行备份
# -f:force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
# -i:若目标文件 (destination) 已经存在时,就会询问是否覆盖
# -u:若目标文件已经存在,且source比较新,才会更新(update)
删除
删除文件夹和文件的命令:
rm -rf [目录]
rm -f [文件名]
# -r:向下递归,不管有多少级目录,一并删除
# -f:直接强行删除,不作任何提示
apt-get
查询sudo apt-get install
命令安装的软件位置,用 dpkg 命令:
dpkg -L [软件名]
# /.
# /usr
# /usr/bin
# /usr/bin/pcmanfm
# /usr/share
# /usr/share/locale
# ...
查询apt-get
获得的软件包存放的位置:
computer/var/cache/apt/archives
目录下。下载文件的位置可以在/etc/apt/source.list
文件中指定。
切换普通用户和 root 用户
# 从普通用户切换到 root 用户
# 方法一:需要输入密码
yu@yu-virtual-machine:~$ sudo su - root
[sudo] password for yu:
root@yu-virtual-machine:~#
# 方法二:不用输入密码
yu@yu-virtual-machine:~$ exit
root@yu-virtual-machine:~#
# 从 root 用户切换到普通用户
root@yu-virtual-machine:~# su - yu
yu@yu-virtual-machine:~$
GCC/G++ command
查看 gcc/g++ 版本
gcc –v
g++ -v
编译
# 若文件很少,命令如下
# 若文件较多,写一个makefile文件,批量解决
gcc [选项] [文件名]
gcc -c xxx.c # 生成 xxx.o
gcc xxx.c -o yyy # 生成 yyy.o
gcc -o yyy xxx.c # 同上
gcc -g xxx.c -o yyy # 生成 yyy.o,包含调试内容
gcc -Wall xxx.c -o yyy # 生成 yyy.o,输出 warning 警告信息
gcc -I /路径/include xxx.c -o yyy.o # 生成 yyy.o,先在指定目录 /路径/include 中查找头文件
gcc -lzzz xxx.c -o yyy # 生成 yyy.o,库文件名为 libzzz.so,选项为 -lzzz
gcc -lzzz -L/绝对路径/lib xxx.c -o yyy # 生成 yyy.o,库文件名为 libzzz.so,库文件绝对路径为 /路径/lib
gcc -lzzz -L. xxx.c -o yyy # 生成 yyy.o,库文件名为 libzzz.so,库文件路径为当前路径
选项:
-c:仅执行编译操作,不进行连接操作
-E:仅执行编译预处理
-g:产生符号调试工具(GNU的gdb)所必要的符号信息,插入到生成的二进制代码中。表示编译 DEBUG 版本。想要对源代码进行调试,就必须加入这个选项。当然,会增加可执行文件的大小。
-I:(大写的 i)向头文件搜索目录中添加新的目录,先在指定的目录查找,然后再按常规的顺序去找。
-l:(小写的 l)说明库文件的名字
-L:说明库文件所在的路径,-L.表示当前路径,或者添加绝对路径,如果没有提供-L选项,gcc 将在默认库文件路径下搜索。
-o:指定生成的输出文件
-S:将 C 代码转换为汇编代码
-shared:指定生成动态连接库,不用该标志外部程序无法连接。相当于一个可执行文件,生成 .so 文件
-static:强制使用静态链接库,生成.a文件。因为 gcc在链接时优先选择动态链接库,只有当动态链接库不存在时才使用静态链接库。加上该选项可强制使用静态链接库。
-Wall:使 gcc 产生尽可能多的警告信息,警告信息很有可能是错误的来源,特别是隐式编程错误,所以尽量保持 0 warning。
.so和.a的区别:运行时动态加载,编译时静态加载。
举例:多个文件一起编译。文件:test_a.c test_b.c
# 一起编译
gcc test_a.c test_b.c -o test
# 分别编译各个源文件,之后对编译后输出的目标文件链接
gcc -c test_a.c
gcc -c test_b.c
gcc -o test_a.o test_b.o -o test
比较:第一种方法编译时需要所有文件重新编译;第二种只用重新编译修改的文件,未修改的不用重新编译。