进入管理员模式 sudo su
推出管理员模式 exit
常用查看类型指令
ls 查看当前目录下所有文件
ll -a 查看当前目录下所有隐藏文件
la -a 查看当前目录下所有隐藏文件
ll 查看当前目录下所有文件详细信息及隐藏文件
pwd 查看当前路径
切换路径 例如 cd /home/stu<=> cd ~
创建文件
touch main.c 创建main.c文件
vim main1.c 创建main1.c并打开
创建文件
touch 文件名 | 在当前路径下创建一个文件 |
---|---|
vim 文件名 | 在当前路径下创建并打开一个文件 |
mkdir 文件夹 | 在当前路径下创建一个文件夹 |
删除文件
rm 文件名 | 删除当前路径下的一个文件 |
---|---|
rm *.c | 删除当前路径下的以 .c 结尾的所有文件 |
rm main* | 删除当前路径下的以main 开头的所有文件 |
rm * | 删除当前路径下的所有文件 |
rm -r 文件夹 | 删除当前路径下的一个文件夹 |
rmdir 文件夹 | 删除当前路径下的一个文件 |
为文件更改属性(改变文件的可读、可写、可执行属性)
u(使用者) r(可读) chomd g(同组工作者)+- w(可写) o(其他人) x(可执行)
cp 指令(文件拷贝)
cp a.txt b.txt | 文件拷贝,将a.txt拷贝给b.txt |
---|---|
cp A B | 文件夹拷贝 将A文件夹拷贝给B文件夹(注意:如果B文件夹存在,则拷贝给B,如果B不存在,则重新创建B并拷贝) |
cat a.txt | 查看a.txt文件内容 |
mv 指令(移动/重命名)
mv a.txt b.txt | 将a.txt重新命名为b.txt |
---|---|
mv 源文件路径+文件名 目标路径 | 将源文件移动到目标路径下 |
文本编辑
:q | 直接推出编辑 |
---|---|
:wq | 保存并推出编辑 |
n+shift+g | 将光标跳到最后一行 |
gg | 将光标跳到第一行 |
n dd | 删除从光标开始的n行 |
n yy | 拷贝从光标开始的n行 |
u | 撤销上一步操作 |
压缩与解压
tar cfv my.tar a.txt b.txt c.txt | 将a.txt b.txt c.txt打包为my.tar |
---|---|
gzip my.tar => my.tar.gz | 将my.tar压缩生成my.tar.gz压缩包 |
gzip -d my.tar.gz | 将my.tar.gz解压为 my.tar |
tar xfv my.tar | 将my.tar解包为…… |
tar zcfv my.tar a.txt b.txt c.txt | 一步压缩 将a.txt b.txt c.txt压缩为my.tar.gz |
tar zxfv my.tar.gz | 一步解压 将my.tar.gz 解压并解包…… |
文件处理
文件过滤(过滤在a.txt中含有hello的行) | grep "hello" a.txt |
---|---|
管道文件(过滤/home目录下含 sh 的文件) | ls /home l grep sh |
文件查找(查找/home/stu路径下的main.c文件) | find /home/stu -name main.c |
wc命令(统计)
wc -w a.txt 统计a.txt中单词的个数
wc -c a.txt 统计a.txt中字符的个数
wc -l a.txt 统计a.txt中的行数
进程命令
ps -e | 显示系统中所有的进程信息 |
---|---|
ps -f | 显示更多的进程属性信息 |
ps -l | 显示进程中 线程的pid |
ps -ef | 查看系统中所有的进程信息并展示更多的属性信息 |
kill pid | 结束一个进程 |
kill -9 pid | 强制结束一个进程 |
kill -STOP pid | 挂起一个进程 |
jobs | 显示当前终端的任务,以及后台运行及挂起的任务,和id |
bg %id | 将挂起的任务唤醒到后台执行 |
fg %id | 将后台执行的任务移动到前台运行 |
sleep 2000 (执行进程sleep 2000s)
sleep 2000&(将sleep 2000s挂起在后台执行)
运行 编译C
分布执行
gcc -E main.c -o main.i | 预编译阶段 |
---|---|
gcc -S main.i -o main.s | 编译 |
gcc -c main.s -o main.o | 汇编 |
gcc main.o -o main | 链接生成可执行文件 main |
一步编译
gcc -o main main.c
执行可执行文件main ./main
调试
gcc -o main main.c -g | 生成可调试文件 |
---|---|
gdb main.c | 进入main.c的调试环境 |
gdb l | 展示10行源代码(可重复执行 至显示全部代码) |
b n | 在第n行下断点 |
p +val | 展示 变量内容 |
r | 开始执行 |
n | 下一步 |
l+n | 展示n行上下的源代码 |
c/continue | 从当前断点跳到下一个断点 |
ptype+val | 展示 变量类型 |
info break/info b | 展示断点信息及断点编号 |
---|---|
delete+断点标号 | 删除该断点 |
s | 进入函数内部(函数调用) |
finish | 推出函数调用 |
q | 结束调试 |
静态库 libxxx.a 共享库
vim max.c 编写max函数 vim min.c vim operate.h 编写头文件 int max();函数声明 定义 int min(); gcc -c max.c 生产max.o文件 gcc -c min.c ar crv libfoo.a max.o min.o 打包压缩 vim main.c 编写主函数 #include"operate.h" gcc -o main main.c -l. -lfoo gcc -shared -fPIC -o libfoo.so max.o min.o 生成可执行文件main 系统只会在默认路径下查找(/usr/lib)中 ./main 执行main sudo mv libfoo.so /usr/lib 移动 gcc -o main mian.c -lfoo 生成mian ./main 执行main
区别:静态库在链接的时候将所有用到的函数包含到最终生成的可执行文件中
共享库不会包含到最终生成的文件中,只会做标记,在运行时才动态加载,所以共享库体积很小