


cd、pwd、export、source、history、export)。ls、cp、mv、rm、chmod、find、ping、cat、apt、dpkg、uname、lsp_releace、echo、wc)。if、while)。ls :列出目录下内容(不包括隐藏文件)
ls -a :列出目录下所有文件包括隐藏文件ls -l :显示当前目录下文件的详细信息(文件类型+属主权限+同组用户权限+用户权限)ls -r :列出目录下所有文件不包括隐藏文件(反向排序输出)
cd / :进入根目录cd ~ :进入用户主目录(就是家目录)cd . :原地cd .. :进入上级目录cd - :进入上次访问目录cd :返回家目录
touch
1.创建一个空文件(普通文件)
2.更新文件状态
mkdir&rmdir&rm
1.mkdir
mkdir filenamemkdir 路径/filename //创建一个空目录(路径必须存在)mkdir -p +文件路径/filename //如果路径不存在会创建整个路径
rmdir filenameermdir 路径/filename //删除一个空目录rmdir -p +文件路径/ //可以删除整个路径
rm :删除文件或目录(不可恢复)选项:-f :强制删除-i :询问删除-r :删除目录(非空也可)
cp&mv
1.cp
1.cp :复制一个源文件到目标文件(夹)cp 文件名 路径/filenamecp 文件名1 文件名2(原位置拷贝文件)cp 文件名1 文件名2 +路径(两个文件一起拷贝到目标文件路径下) //可以复制多个文件cp -r 文件名1 路径/文件名2(把文件复制到另一个路径下)cp +*.c(拷贝所有相同类型文件)-i :覆盖时询问(交互)-r :可复制文件夹
mv :对文件移动或改名字-i :交互mv 文件名1 文件名2(改名字)mv 文件名 路径/文件名(移动文件到路径下并改名) //可以移动多个文件
chmod 数字 文件(夹):将文件设置为数字代表的权限数字代表权限:r:4(读),w:2(写):,x:1(执行)
(1)lsb_release -a或者-r(-a详细,-r简略)(2)cat /etc/issue (查看文件中的内容)
(1)uname -a或者-r(2)cat /proc/version (在文件中查看)
(1)源文件地址:/etc/apt/sources.list(2)更新软件源:sudo apt-get update第一步:先复制一份以防万一:sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak第二步:打开修改:sudo vi /ets/apt/sources.list第三步:更新软件源
1.查看man手册
man mandf -Th 或者 df -hdate:查看当前系统日期clear:清屏echo:向终端输出内容
1.新建用户
sudo addusersu 用户名注:不加用户名默认切换到root用户(超级管理员账户)
sudo passwd(更新当前用户密码)(1).先进入root超级管理员账户su root(2).打开用户权限文档/etc/sudoersvi etc/sudoers(3).修改文档用户名 ALL=(ALL:ALL) ALL
(1). 检查用户是否存在id username //确认用户存在(2). 终止用户所有进程(1)查找用户进程:ps -u username(2)终止用户进程:sudo killall -u username //终止所有进程sudo pkill -u username //另一种方式(3). 删除用户及其主目录sudo deluser 用户名 //删除用户的同时,不会删除用户主目录sudo deluser --remove-home用户名 //删除用户的同时,删除用户主目录sudo userdel -r 用户名 //删除用户的同时,删除用户主目录sudo userdel -rf 用户名 //强制删除(4). 验证删除结果id username //应提示“无此用户”ls /home //确认主目录已删除(若使用 `-r` 选项)
1.查看进程状态
(1).ps -aux //查看所有用户所有进程使用场景:快速查看进程的资源占用情况USER(用户) PID(进程id) %CPU %MEM VSZ RSS TTY(是否依赖终端 ?是不依赖) STAT(状态) START TIME COMMAND(2).ps -ef //(-e 所有进程,-f 完整格式)使用场景:查看进程的父子关系和启动时间UID PID PPID C STIME TTY TIME CMD(3).ps -ajx适用场景:适合需要同时查看进程关系和资源占用的场景。PPID PID PGID(组id) SID(会话id) TTY TPGID STAT UID TIME COMMAND(4).man ps //查看进程状态的信息(5).常见状态R Running(运行中):进程正在 CPU 上运行或可运行(在运行队列中等待调度)。S Sleeping(可中断睡眠):进程正在等待某个事件(如 I/O 操作完成),可被信号唤醒。D Uninterruptible Sleep(不可中断睡眠):进程正在等待 I/O 操作(如磁盘读写),不可被信号唤醒。通常与硬件交互相关。T Stopped(已停止):进程被暂停(如通过 Ctrl+Z 或 SIGSTOP 信号)。t Tracing Stop(跟踪停止):进程被调试器(如 strace 或 gdb)暂停。Z Zombie(僵尸进程):进程已终止,但其父进程尚未调用 wait() 回收其退出状态。X Dead(已死亡):进程已终止,但尚未被系统完全清理(罕见状态)。< 高优先级进程:进程的优先级较高(nice 值为负数)。N 低优先级进程:进程的优先级较低(nice 值为正数)。L 内存锁定:进程的部分或全部内存被锁定在物理内存中(防止被交换到磁盘)。I 表示进程为空闲的内核线程。这类线程通常由内核创建,用于执行特定任务,且在空闲时不会占用CPU资源。s 会话领导者:进程是会话的领导者(如终端的 shell)。l 多线程进程:进程是多线程的(ps 命令中通常不单独显示,但可能与其他状态组合)。+ 前台进程组:进程属于前台进程组(通常与终端关联)。(6).处理前后台运行进程./a.out & //将a.out在后台运行fg 编号 //将后台运行进程拉到前台运行ctrl z //将前台运行进程拉到后台运行并且暂停bg 编号 //将后台进程暂停运行

PR表示进程的优先级NI是用来调整进程优先级的参数,取值范围:-20~19普通进程:PR=20+NI实时进程:NI无效
sudo renice -n num PID //修改NI值sudo nice -n num ./可执行文件5.使用kill给进程发送信号
常用信号:

Kill -9 PID //杀死进程Kill -19 PID //暂停进程
(1)文件系统类型:磁盘文件系统;网络文件系统;专有/虚拟文件系统
(2)Linux文件:
/bin:存放系统中最常用的可执行文件/dev:存放所有设备文件,包括硬盘、分区、键盘、鼠标、USB、tty等/home:用户主目录的默认位置/mnt:该目录通常用于作为被挂载的文件系统的挂载点/usr:用于存放与系统用户直接有关的文件和目录,例如应用程序及支持它们的库文件
(3)文件操作相关命令
1.查看文件属性
查看文件属性file 文件名
cat 文件名cat -n 文件名 //显示行号
find 路径 -name "文件名" //引号可加可不加grep "字符串" 文件名 //在文件中查找指定字符串;引号可加可不加grep "字符串" -nR //从当前路径开始查找,找到所有用过这个字符的文件
rm -f 文件名 //-f强制删除rm -rf 目录名 //-r对目录操作
head 文件名 //默认删除10行head -num 文件名字 //输出num行
tail 文件名 //默认输出文件后10行tail -num 文件名 //输出文件后num行head -15 文件名 | tail -5 //输出文件前15行的后5行
1.硬链接:
硬链接文件:ln 被链接文件查看inode号: ls -li
2.软链接:
存储内容 目标文件的路径(字符串)
原文件删除 链接失效(成为“悬空链接”)
文件大小 等于路径字符串的长度(如 /path/to/file 占 14 字节)
inode 号 有独立的 inode
更新行为 若目标文件被移动/重命名,链接失效
权限显示 显示链接文件自身的权限(但访问时受目标文件权限限制)
跨文件系统引用 软链接可以跨文件系统
软链接文件:ln -s 被链接文件只能对单个的普通文件进行压缩或解压
压缩或解压后源文件不存在
压缩格式为.gz
gzip 文件名 //默认生成:文件名.gzgunzip 文件名.gz
同上
压缩后生成的压缩格式为 .bz2 格式
bzip2 文件名 //默认生成:文件名.bz2 压缩文件bunzip2 压缩文件名 //默认解压为:文件名
同上
压缩后生成的压缩格式为.xz格式
xz 文件名 //默认生成:文件名.xz 压缩文件unxz 压缩文件名 //默认解压为:文件名
具有对多个文件归档功能,并进行压缩(会保留源文件)
可以压缩文件夹,后缀为.zip。压缩文件夹需加-r
压缩或者解压后源文件依然存在
zip 文件名.zip 文件名1 文件名2 文件名3unzip
(1)
具有归档功能,并通过选项可以进行压缩或解压 (会保留源文件)
压缩或解压后源文件存在
需要写全压缩或解压的文件名格式:文件名.tar.压缩格式
(2)
选项:
-c:创建一个新的归档文件
-v:显示归档和释放的过程信息
-x:释放归档文件
-f:用户指定归档文件的文件名
-t:列出tar归档文件中包含的文件或目录
-j:由tar生成归档,然后由bzip2压缩 .bz2
-z:由tar生成归档,然后由gzip压缩 .gz
-J:由tar生成归档,然后由xz压缩 .xz
压缩:tar -cvjf 文件名.tar.bz2 *tar -cvzf 文件名.tar.gz *tar -cvJf 文件名.tar.xz *解压:tar -xvf 文件名.tar.压缩格式全部归档:tar -cvf 文件名.tar

Command [-Options] Argument1 Argument2 ...
(1)通配符

{1..3}:也可以取范围
(2)管道:把前一项命令的输出结果传给下一个命令
|输入重定向:<输出重定向:> >> 2> &>
``或者$echo "my name is `hostname`" //``是解引用命令,返回命令执行后的内容echo "my name is $(hostname)" //只有hostname可以echo "my name is $HOSTNAME"echo "my name is" $HOSTNAME
什么是shell脚本: shell命令的有序集合
1.自定义变量:和变量没有其他数据类型,所有赋值都解释为一串字符
定义格式: //等号两边不能有空格变量名=值变量名="值"变量名='值' //内不能使用$展开变量的值取值:$变量名清空变量值:unset只读变量:readonly
查看环境变量:env 或者 printenv临时改变环境变量:export 变量名 = 值永久改变: vi ~/.bashrc
获取指定的外部参数: $n //n取值0~9${n} //n大于等于10获取外部参数的个数: $# //不包含脚本名获取所有外部参数: $* 或者 $@ //不包含脚本名
获取上一条命令是否正确的执行结果: $? //0为真,1为假获取当前脚本的进程ID: $$
1.功能性语句
(1)shell中的赋值(相当于C语言中的scanf)
read 变量read -s 变量 //输入的信息不回显read -t 秒数 变量 //如果用户n秒不输入,就结束输入向后执行read -n 个数 变量名 //如果输入n个字符,自动停止read -p "内容" 变量 //先显示内容,相当于先pirntf内容再输入
1.expr:(1).对数字表达式运算运算符左右两侧必须有空格*和()必须加转义字符,\* 、 \( \)expr语句可以直接输出运算结果expr \( 12 + 3 \) \* 2NUM=`expr \( 12 + 3 \) \* 2`(2).对字符串运算match 字符串 字符串 //计算两个字符串从头相等的字符有几个substr 字符串 偏移量 n //从偏移量的字符开始截取n个字符index 字符串 字符 //返回字符在字符串中第一次被查找到时的下标,下标从1开始length 字符串 //计算字符串的长度2.let:let运算时,运算符两侧不能有空格let中使用变量时,可以加$也可以不加如果直接写成 let 表达式,表达式会运行,但是没有办法接收let NUM=2+3*3let NUM=NUM++
1.字符串测试:test s1 = s2 //测试字符串的内容是否完全一样test s1 != s2 //测试字符串的内容是否存在差异test -z s1 //测试字符串的长度是否为空test -n s1 //测试字符串的长度是否不为空2.整数的测试:test a -eq b //是否相等test a -ne b //是否不相等test a -gt b //是否大于btest a -ge b //是否大于等于btest a -lt b //是否小于btest a -le b //是否小于等于b3.文件属性测试FILE1 -nt FILE2 //1的时间戳比2的更新FILE1 -ot FILE2 //1的时间戳比2的更旧-b FILE: //文件存在且是一个块设备文件-c FILE: //文件存在且是一个字符设备文件-d FILE: //文件存在且是一个目录文件-f FILE: //文件存在且是一个普通文件-e FILE: //文件存在-h或者-L FILE: //文件存在且为软链接文件-s FILE: //文件存在且大小不为0-S FILE: //文件存在且是一个套接字文件-p FILE: //文件存在且是一个管道文件-w FILE: //文件存在且有可写权限-r FILE: //文件存在且有可读权限-x FILE: //文件存在且有可执行权限
2.结构性语句
(1)if
if 表达式thenif 表达式then命令1fielifthen命令2else命令3fi
case 变量 in模式)命令表1;; //类似break,仅限case使用*)命令表n;;esac
while 命令或表达式do命令表done
for 变量名 in 单词表 //单词表为*的时候获取当前目录的所有文件do命令表done
一.头文件:.h结尾的文件
1.包含头文件、宏定义、typedef、结构体、共用体、枚举的定义、函数声明、外部引用。
2.全局变量一般不定义在头文件中
二.源文件:.c结尾的文件
1.包括main.c 和其他子函数.c 文件
2.主函数要和子函数文件一起编译:gcc main.c fun.c -o test
1.预处理:#展开头文件,替换宏定义,删除注释,不会进行语法检测。
gcc-E xx.c-oxx.i
2.编译:检查语法错误,词法错误,将.i文件转换成.s汇编文件
gcc-S xx.i -oxx.s
3.汇编:将汇编文件转换成二进制(不可执行)
gcc-c xx.s-oxx.o
4.链接:链接库文件,将不可执行的二进制文件转换成可执行的二进制文件。
gcc xx.o -o xx
注:使用 gcc -c xx.c -o xx.o 可以将前三步骤一起实现
1.gdb 可执行文件:进入程序调试页面
2.选项: r:运行代码
l:查看文件
b 行号或者函数名:添加断点
info b:查看断点情况
d num:删除断点(num是断点编号)
p 变量名:查看变量的值
n:逐行执行,遇到函数调用时直接执行完整个函数,不进入内部。
s:逐语句执行,遇到函数调用时进入函数内部逐行调试。
c: 执行到下一个断点的位置
help:帮助
q:退出
1.定义:工程管理器也就是个“自动编译管理器”,这里的“自动”是指它能构根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件文件的内容来执行大量的编译工作。
2.makefile格式:
(1)格式:
目标:依赖命令
test:main.ogcc main.o -o testmain.o:main.cgcc -c main.c -o main.o
(2)伪目标:
目的:去执行目标下面的命令
test:main.ogcc main.o -o testmain.o:main.cgcc -c main.c -o main.o.PHONY:cleanclean:rm test *.o
test:main.o fun.ogcc main.o fun.o -o testmain.o :main.cgcc -c main.c -o main.ofun.o:fun.cgcc -c fun.c -o fun.o.PHONY:cleanclean:rm test *.o test
4.makefile变量
(1)自定义变量:一般用大写表示变量名
= :递归方式展开
:= :直接赋值
+= :在变量后copy这个值的值
?= :判断是否定义过,如果该变量没有定义过赋值
(2)预定义变量:系统预先定义好的
RM :文件删除程序的名称,默认值为rm -f
CC :C编译器的名称,默认值为cc
CPP :C预编译器的名称,默认值为$(CC) –E (一般用不到)
CFLAGS :C编译器的选项,无默认值
OBJS :生成的二进制文件或目标文件,自己定义
CC=gccCFLAGS=-c -g // -g是加调试BOJS=main.o fun.otest:$(BOJS)$(CC) $(BOJS) -o testmain.o:main.c$(CC) $(CFLAGS) main.c -o main.ofun.o:fun.c$(CC) $(CFLAGS) fun.c -o fun.o.PHONY:cleanclean:$(RM) *.o test
(3)自动变量
$< :第一个依赖文件的名称
$^ :所有不重复的依赖文件,以空格隔开
$@ :目标文件的完整名称
CC=gccCFLAGS=-cBOJS=main.o fun.otest:$(BOJS)$(CC) $^ -o $@%.o:%.c$(CC) $(CFLAGS) $^ -o $@.PHONY:cleanclean:$(RM) *.o test
5.make指令
make -s :隐藏执行的指令
make -C 路径 :进入路径下执行make指令
1. 根据宏是否定义
#define 宏名#ifdef 宏名代码块1#else代码2#endif
#define 宏名 值#if 宏名 //宏的值是否为非0代码块1#else代码块2#endif
#ifndef 宏名#define 宏名头文件中内容#endif