Linux基础命令学习
Linux基础命令学习(上)
本篇将要学习的命令有:
chgrp、chmod、chown、ln、ps、grep、find、tar、zip、unzip、zipinfo、apt、systemctl、ssh、file、kill、pkill、uname、who、df、du
chgrp
chgrp(change group)命令用于修改文件或目录的所属组。
参数说明
参数 | 说明 |
---|---|
-c | 显示更改的部分 |
-f | 命令使用出错时,不显示错误信息 |
-h | 只对符号连接的文件作修改,而不改动其他任何相关文件 |
-R | 递归处理,将指定目录下的所有文件及子目录一并处理 |
-v | 显示指令执行过程 |
–reference=[参考文件或目录] | 把指定文件或目录的所属群组设成和参考文件或目录的所属组 |
实例
sudo chgrp a 1.txt // 修改文件 1.txt 的所属组为 a
sudo chgrp a 1.txt -v // 修改文件 1.txt 的所属组为 a,并显示其执行过程
sudo chgrp a test -R // 修改文件目录 test 及其子目录中所有文件的所属组为 a
sudo chgrp --reference=2.txt 1.txt // 修改文件 1.txt 的所属组为文件 2.txt 的所属组
sudo chgrp -h a 1.txt.link // 只修改链接文件 1.txt.link 的所属组为 a,不修改被链接的文件 1.txt 的所属组
chmod命令
chmod(change mode)命令用于修改用户对文件的权限。
文件权限描述
Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。
利用ls -l 1.txt
命令查看文件权限
-rwxrwxrwx 1 a a 0 2月 17 09:35 1.txt
rwx rwx rwx
红色 部分代表文件所有者的权限,绿色 部分代表用户组的权限,蓝色部分代表其它用户权限。
r 表示可读,w 表示可写,x 表示可执行。
只有文件所有者和root用户才可以修改文件或目录的权限。
使用权限为文件所有者。
语法
chmod [ugoa][+-=][rwx][-cfvR] 文件
chmod [mode][-cfvR] 文件 // mode 表示八进制语法权限
参数
参数 | 说明 |
---|---|
u | 表示所有者(user) |
g | 表示用户组(group) |
o | 表示其他用户(other) |
a | 表示所有用户(all) |
+ | 表示增加权限 |
- | 表示取消权限 |
= | 表示设置成指定权限 |
r | 表示可读权限 |
w | 表示可写权限 |
x | 表示可执行权限 |
-c | 如果文件权限已经被更改,则显示更改信息 |
-f | 如果文件权限更改时报错,也不显示错误信息 |
-v | 显示权限更改的详细信息 |
-R | 递归处理,将指定目录下的所有文件及子目录一并处理 |
–reference=[参考文件或目录] | 把指定文件或目录的权限设成和参考文件或目录的权限 |
八进制语法
# | 权限 | rwx | 二进制 |
---|---|---|---|
7 | 读 + 写 + 执行 | rwx | 111 |
6 | 读 + 写 | rw- | 110 |
5 | 读 + 执行 | r-x | 101 |
4 | 只读 | r– | 100 |
3 | 写 + 执行 | -wx | 011 |
2 | 只写 | -w- | 010 |
1 | 只执行 | –x | 001 |
0 | 无 | — | 000 |
实例
chmod a+r 1.txt -c // 将文件 1.txt 设置为所有人都可读,并显示更改信息
chmod ugo+w 1.txt -v // 将文件 1.txt 设置为所有人都可写,并显示更改详细信息
chmod +x 1.txt // 将文件 1.txt 设置为所有人都可执行
chmod a-x 1.txt // 去除 1.txt 的所有用户的可执行权限
chmod u-x 1.txt // 去除 1.txt 所有者的可执行权限
chmod go-w 1.txt // 去除 1.txt 用户组和其他用户的可写权限
chmod +rwx 1.txt // 增加 1.txt 的所有用户读写执行权限
chmod 777 1.txt // 增加 1.txt 的所有用户读写执行权限
chmod a=r // 将 1.txt 的所有用户的权限设置为只读的
chmod u=rw,go= 1.txt // 将 1.txt 的所有者设置读写权限,并清空该用户组和其他用户对 1.txt 的所有权限(空格代表无权限)
chmod u+r,go-r abc -R // 对目录 abc 和其子目录中的所有文件给用户增加读权限,而对用户组和其他用户去除读权限
chmod 664 1.txt // 对 1.txt 的所有者和用户组设置读写权限, 为其其他用户设置读权限
chmod 0755 1.txt // 对 1.txt 的所有者和用户组设置读写可执行权限, 为用户组和其他用户设置读和可执行权限
chmod 1.txt --reference=2.txt // 设置 1.txt 的权限为 2.txt 的权限
chown命令
chown(change owner)命令用于设置文件所有者和所属组的命令。
需要 root 权限才能执行 chown 命令。
语法
chown [user:group] 文件或目录 [-cfhvR]
chown [user:group] [-cfhvR] 文件或目录
参数
参数 | 说明 |
---|---|
user | 新的文件拥有者的使用者ID |
group | 新的文件拥有者的使用者组(group) |
-c | 显示更改的部分的信息 |
-f | 忽略错误信息 |
-h | 修复符号链接 |
-v | 显示详细的处理信息 |
-R | 递归处理 |
–reference=[参考文件或目录] | 把指定文件或目录的所有者和所属组设成和参考文件或目录的所有者和所属组 |
实例
sudo chown root 1.txt -v // 将 1.txt 的所有者设置为 root,并显示详细处理信息
sudo chown :root 1.txt -c // 将 1.txt 的所属组设置为 root,并显示更改信息
sudo chown a:a 1.txt // 将 1.txt 的所有者和所属组设置为 a
sudo chown root 1.txt.link -h // 只修改链接文件 1.txt.link 的所有者为 root,不修改被链接的文件 1.txt 的所有者
sudo chown --reference=2.txt 1.txt // 将 1.txt 的所有者和所属组设置成与 2.txt 一样的所有者和所属组
sudo chown :1001 1.txt // 将 1.txt 的所属组设置成组ID号为1001的所属组
sudo chown root -R abc // 将目录 abc 及其子目录中的所有文件和目录的所有者设置成 root
ln
ln(lnk files)命令用于为文件创建一个同步的链接。
链接的介绍
可以将链接视为源文件的别名,操作链接时相同的操作也会同步到源文件。链接有两种:硬链接(hard link)和软链接(symbolic link)。硬链接的意思是一个档案可以有多个名称,而软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。
软连接
- 软连接以路径的形式存在。类似于Windows中的快捷方法。
- 软连接可以跨文件系统,硬链接不可以。
- 软连接可以对一个不存在的文件名进行链接。
- 软连接可以对目录进行链接。
硬链接
- 硬链接以文件副本的形式存在,但不占用实际空间。
- 不允许给目录创建硬链接。
- 硬链接只有在同一个文件系统中才能创建。
语法
ln [参数][源文件或目录][链接文件或目录]
参数
参数 | 说明 |
---|---|
-b | 如果链接文件已存在,则先对已存在的链接文件进行备份 |
-f | 如果存在同名的链接文件,则强制覆盖 |
-i | 如果存在同名的链接文件,则先询问是否覆盖 |
-n | 如果链接是到目录的符号链接,则将其视为普通文件 |
-s | 创建软连接 |
-v | 显示详细处理过程 |
-S [备份文件后缀] | 指定备份文件的后缀 |
实例
ln 1.txt 1.txt.link // 为 1.txt 创建硬链接 1.txt.link
ln 1.txt 1.txt.link -b // 为 1.txt 创建硬链接 1.txt.link,并备份已存在的 1.txt.link 为 1.txt.link~
ln 1.txt 1.txt.link -bS bak // 为 1.txt 创建硬链接 1.txt.link,指定备份的后缀 bak, 备份文件为1.txt.linkbak
ln 1.txt 1.txt.link -s // 为 1.txt 创建软连接 1.txt.link
ln aaa aaa.link -s // 为 aaa 目录创建软链接 aaa.link
-n 参数的使用
首先创建 a b两个目录
mkdir a b
分别为 a 和 b 创建软链接 c,再用ls -l查看目录信息
ln a c -s
ln b c -s
ls -l
发现 c 并没有指向 b,而且在c目录中还生成了一个死链b,而我们是想为 b 创建软链接 c
现在使用-n参数
ln a c -s
ln b c -snf
ls -l
现在为 b 创建了软连接 c 了
ps
ps(process status)命令用于显示当前进程的状态,类似于Windows的任务管理器。
参数
参数 | 说明 |
---|---|
-A , -e | 列出所有的进程 |
-a | 列出当前用户下的所有进程 |
-u [username] 或 [UID] | 列出指定用户下的所有进程,默认为当前用户 |
-U , --user [username>]或 [UID] | 列出指定用户下的所有进程,没有缺省值 |
-g [groupname] 或 [UID] | 列出指定用户组下的所有进程,默认为当前用户所属组 |
-G , --group [groupname] 或 [GID] | 列出指定用户组下的所有进程,没有缺省值 |
-C [进程名] | 列出指定进程名的进程 |
-f | 列出进程较详细的信息,通常搭配其他参数使用,例如 ps -ef |
-p , --pid [PID] | 列出指定进程ID号的进程 |
-x | 显示各个进程的具体路径 |
-o | 自定义格式显示 |
-l | 显示进程信息,在参数-f 显示的信息的基础上加上其他信息(带有FLAGS,WCHAN,PRI,NI,ADDR,SZ等信息) |
-j | 显示进程信息,将打出进程组id(PGID) |
u | 显示进程所有信息 |
h | 不显示第一行 |
e | 列出进程的环境变量 |
-ef | 显示进程较详细信息 |
-aux | 显示进程详细信息 |
-ajx | 显示进程详细信息 |
表头信息介绍
- USER: 进程拥有者
- PID: 进程ID号
- %CPU: 进程的CPU占用率
- %MEN: 进程的内存占用率
- VSZ: 进程所使用的虚拟内存的大小,字节为单位
- RSS: 该进程占用的固定的内存量,字节为单位
- TTY: 该进程是在哪个终端机上面运作,若与终端机无关,则显示 ?。tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
- STAT: 进程的状态,进程的状态有:
- R(Running): 运行,正在运行或者在运行列队中等待的进程
- S(Sleeping): 睡眠,睡眠中,在等待某个条件的形成或接受到信号
- I(Idle): 空闲
- Z(Zombie): 僵死,进程已终止,但父进程没有回收该进程资源,进程描述符仍然存在
- D: 不可中断,收到信号不唤醒和不可运行,进程必须等待直到有中断发生
- T: 终止,进程收到信号停止运行
- P: 等待交换页
- W: 无驻留页,没有足够的记忆体分页可分配
- X: 死掉的进程
- <: 高优先级进程,高优先序的进程
- N: 低优先级进程,低优先序的进程
- L(Lock): 内存锁页,有记忆体分页分配并缩在记忆体内
- s: 进程的领导者,在它之下有子进程
- l: 多进程的
- +: 位于后台的进程组
- START: 进程启动时间和日期
- TIME: 进程使用的总CPU时间
- COMMAND: 正在执行的命令行命令
- NI(Nice): 优先级
- PRI(Priority): 进程优先级编号,值越小越早被执行
- WCHAN: 进程正在睡眠的内核函数名称
- FLAGS: 与进程相关的数字标识
- ELAPSED: 进程运行的总时间
- SID(Sesson Id): 会话ID
- PPID(Parent Process Id): 父进程的进程ID
- PGID(Process Group Id): 进程组ID
- ADDR: 这个是内核函数,指出该程序在内存的哪个部分,如果是个执行的程序,一般都是
-
- SZ: 使用掉的内存大小,以字节为单位
实例
ps -ef // 查看所有进程,展示进程较详细信息
ps -aux // 查看所有进程,并展示更详细的信息
ps -u root // 列出 root 下的所有进程
ps -u root u // 列出 root 用户 下的所有进程以及进程的详细信息
ps u -g root // 列出 root 组 下的所有进程以及进程的详细信息
ps eu -u 1000 // 列出 uid为1000的用户下的所有进程及进程的详细信息包括环境变量
ps -p 1495,2472 u // 列出指定pid的进程详细信息
ps -el // 查看所有进程,展示进程详细信息
ps --ppid 2470 // 显示2470进程的子进程
ps -e -o uname,pid,pcpu,pmen,comm // 显示进程的指定信息
ps -e -o pid,uname=USERNAME,pcpu=CPU_USAGE // 显示进程的指定信息,并为指定信息的表头名取别名
ps -e -o pid,etime // 显示进程运行的总时间
ps -aux --sort=-pcpu // 按cpu占用率的排序显示所有进程
ps -aux --sort=-pcpu,+pmen | head -6 // 首先按cpu使用率排序,如果cpu占用率相同则按内存占用率排序,并只显示前5个进程,因为表头还占一行,所以为6
watch -n 1 'ps -e -o pid,uname,cmd,pmem,pcpu --sort=-pcpu | head -6' // 每隔 1 秒实时显示进程信息
ps -p 2472 -o user,pid,pcpu,pmem,vsz,rss,tty,stat,start,time,cmd,etime=运行时间,ni,flags=FLAGS,pri,wchan,session // 展示指定进程所有信息
grep
grep 命令用于查找文件里或管道的输出中符合条件的字符串。一般搭配管道 |
使用
参数
参数 | 说明 |
---|---|
-a , --text | 不要忽略二进制的数据。 |
-A [n] , --after-context=[n] | 除了显示符合条件的那一行之外,还显示该行之后n行的内容 |
-B [n] ,–before-context=[n] | 除了显示符合条件的那一行之外,还显示该行之前n行的内容 |
-C [n] , --context=[n]或-[n] | 除了显示符合条件的那一行之外,还显示该行之前后n行的内容 |
-E [正则表达式] , --extended-regexp [正则表达式] | 匹配正则表达式 |
-l , --file-with-matches | 列出文件内容符合指定的条件的文件名称 |
-L , --files-without-match | 列出文件内容不符合指定的条件的文件名称 |
-h , --no-filename | 在显示符合条件的那一行之前,不标出该行所属的文件名称 |
-H , --with-filename | 在显示符合条件的那一行之前,标出该行所属的文件名称 |
-b , --byte-offset | 在显示符合条件的那一行之前,标出该行第一个字符在文件中的位置 |
-c , --count | 计算符合条件的行数 |
-i , --ignore-case | 忽略字符大小写匹配 |
-n , --line-number | 在显示符合条件的那一行之前,标出该行的行号 |
-o , --only-matching | 只显示匹配的字符串的那一部分 |
-r , --recursive | 递归处理,如果是目录必须加这个参数 |
-s , --no-messages | 不显示错误信息 |
-v , --invert-match | 显示不符合条件的所有行 |
-x , --line-regexp | 只显示全行匹配的行 |
-w , --word-regexp | 只显示全字符匹配的行 |
实例
grep "hello" *.txt // 查找当前目录中后缀为 txt 的文件中包含 hello 字符串的文件,打印该行,并显示文件名
grep "hello" *.txt // 查找当前目录中后缀为 txt 的文件中包含 hello 字符串的文件,打印该行,但不打印文件名
grep "hello world" 1.txt -A 2 // 查宅 1.txt 中包含 hello world 字符串的行,并打印该行以及该行之后2行
grep "hello world" 1.txt -B 2 // 查宅 1.txt 中包含 hello world 字符串的行,并打印该行以及该行之前2行
grep "hello world" 1.txt -C 2 // 查宅 1.txt 中包含 hello world 字符串的行,并打印该行以及该行之前后2行
grep -E "^[0-9]" 1.txt -n // 查找 1.txt 中以数字开头的行,并标出每一行的行号
grep -E "^[0-9]" 1.txt -c // 计算符合条件的行数
grep hello *.txt -l // 列出当前文件中后缀为 txt 的文件中包含 hello 字符串的文件名
grep hello *.txt -L // 列出当前文件中后缀为 txt 的文件中不包含 hello 字符串的文件名
grep HELLO 1.txt -bi // 忽略大小写查宅 1.txt 中包含 hello 字符串的行,标出该行第一个字符在文件中的位置
grep hello 1.txt -o // 查找 1.txt 中的 hello,并且只打印 hello,而不是打印那一行
grep hello 1.txt -v // 列出 1.txt 不包含 hello 字符串的所有行
grep hello 1.txt -x // 查找 1.txt 中含有 hello 字符串的行,精准匹配这个单词,即使一个字符串中包含了hello也不行,比如helloworld
grep "hello world" 1.txt -x // 查找 1.txt 中只包含 hello world 的这一行
grep hello Linux/ -r // 递归查找Linux这个目录中所有文件中包含hello这个字符串的文件
ps -aux | grep a.out // 利用管道,查宅 a.out的进程
cat 1.txt | grep hello // 也可以利用 cat 来查看文件,再利用管道输出给 grep
find
find 命令用来在指定目录下查找文件。
语法
find [目录][参数]
参数
参数 | 含义 |
---|---|
-amin [n | -n | +n] | 在[过去第n分钟 | n分钟内 | 超过n分钟]被访问过的文件 |
-anewer [file] | 比文件 file 更晚被访问过的文件 |
-atime [n | -n | +n] | 在[过去第n天 | n天内 | 超过n天] 被访问过的文件 |
-cmin [n | -n | +n] | 在[过去第n分钟 | n分钟内 | 超过n分钟] 被改动过的文件 |
-cnewer [file] | 比文件 file 更晚被改动过的文件 |
-ctime [n | -n | +n] | 在[过去第n天 | n天内 | 超过n天]被改动过的文件 |
-mmin [n | -n | +n] | 在[过去第n分钟 | n分钟内 | 超过n分钟]被更改过的文件 |
-mtime [n | -n | +n] | 在[过去第n天 | n天内 | 超过n天]被更改过的文件 |
-empty | 查找空文件 |
-path [p] | 查找路径名称符合 p 的文件 |
-ipath [p] | 忽略大小写,查找路径名称符合 p 的文件 |
-name [name] | 查找文件名为 name 的文件 |
-iname [name] | 忽略大小写,查找文件名为 name 的文件 |
-size [n(b、c、w、k、M、G)] | 查找文件大小 为 n 的文件。单位: b: 512字节块(默认)| c:单字节 | w: 双字节 | k: KB | M: MB | G: GB |
-type [类型] | 查找指定文件类型的文件。类型有: d: 目录 | c: 字符设备类型 | b: 块设备文件类型 | p: 管道文件类型 | f: 一般文件 | l: 链接文件类型 | s: 套接字文件类型 |
-perm [mode] | 查找指定权限文件 |
-user [username | uid] | 查找指定拥有者的文件 |
-group [groupname | gid] | 查找指定用户组的文件 |
-exec [命令] | 查找后执行指定命令 |
-ok [命令] | 查找后执行指定命令,并在询问是否执行 |
实例
find ./ -name "1.txt" // 在当前目录下查找名为 1.txt 的文件
find /home -name "*.txt" // 在家目录下查找后缀为 txt 的文件
find ./ -type d // 在当前目录下查找目录
find ./ -type p // 在当前目录下查找管道文件
find ./ -amin 2 // 在当前目录下查找在过去第2分钟被访问的文件
find ./ -atime +2 -atime -10 // 在当前目录下查找 2~10 天之间被访问过的文件
find ./ -mmin 2 // 在当前目录下查找过去第2分钟被更改过的文件
find ./ -mtime +2 -mtime -10 -type f // 在当前目录下查找 2~10 天之间被更改过的普通文件
find ./ -size 4c -f // 在当前目录下查找文件大小为4字节的普通文件
find ./ -size +500M -szie -1G // 在当前目录下查找文件大小大于500M,且小于1G的文件
find ./ -perm 777 // 在当前目录下查找权限为777的文件
find ./ -user aaa // 在当前目录下查找拥有者为 aaa 用户的文件
find ./ -group bbb // 在当前目录下查找用户组为 bbb 用户的文件
find ./ -perm 777 -exec rm {} \; // 查找当前目录下权限为777的文件,并删除
find ./ -perm 777 -ok rm {} \; // 查找当前目录下权限为777的文件,删除前询问是否删除
find / -size 0 -type f -exec ls -l {} \; // 查找根目录下文件大小为0的普通文件,并打印文件的详细信息
注意:-exec
和 ok
选项后面的命令必须以分号 ;
结束。转义字符\
用于转义分号;
。括号{}
是占位符,用于替换查找的文件。
tar
tar(tape archive)命令用于压缩解压文件。
参数
参数 | 含义 |
---|---|
-c 或 --create | 建立新的压缩文件 |
-f [压缩文件] 或 --file=[压缩文件] | 指定压缩文件 |
-t 或 --list | 列出压缩文件中的内容 |
-v 或 --verbose | 显示详细信息 |
-x 或 --extract 或–get | 从压缩文件中还原文件 |
-k或–keep-old-files | 解开压缩文件时,不覆盖已有的文件 |
-K [文件] 或 --starting-file=[文件] | 从指定的文件开始解压 |
-C [指定目录] 或 --directory=[指定目录] | 解压到指定目录,指定目录必须存在 |
-m 或 --modification-time | 解压文件时,更新文件的时间记录 |
-N [日期] 或 --newer=[日期] | 压缩文件时,只压缩比指定日期新的文件 |
-P 或 --absolute-names | 文件名使用绝对名称,不移除文件名称前的"/"号 |
-r 或 --append | 新增文件到已存在的压缩文件的结尾部分 |
-u 或 --update | 只置换较压缩文件内的文件更新的文件 |
-z 或 --gzip 或 --ungzip | 通过gzip指令处理压缩文件 |
-h 或 --dereference | 不建立软链接,存档并转储它们指向的文件 |
–hard-dereference | 不建立硬链接,存档并转储它们引用的文件 |
–exclude [指定文件或目录] | 压缩时排除指定文件或目录 |
–delete | 从压缩文件中删除指定的文件 |
–group=[群组名称] | 压缩时把所属群组设成指定的群组 |
–numeric-owner | 压缩时用UID及GID取代用户名称和群组名称 |
–owner=[用户名称] | 压缩时把文件的拥有者设成指定的用户 |
–remove-files | 文件加入压缩文件后,就将其删除 |
–same-owner | 尝试以相同的文件拥有者解压文件 |
–suffix=[备份字尾字符串] | 移除文件前先行备份 |
–totals | 压缩文件建立后,列出文件大小 |
实例
tar -cvf test.tar ./* // 压缩当前目录下所有文件为 test.tar
tar -vf test.tar -r 1.txt // 将文件 1.txt 加入到压缩文件 test.tar中
tar -tvf test.tar // 查看压缩文件 test.tar 中的内容
tar -vf test.tar --delete 1.txt // 删除压缩文件中的 1.txt 文件
tar -xvf test.tar // 解压 test.tar 到当前目录
tar -xvf test.tar -k // 解压时,不覆盖已有的文件
tar -xvf test.tar -K 2.txt // 解压时,从2.txt开始解压文件,2.txt之前的文件不解压出来
tar -xvf test.tar -C ./aaa // 将 test.tar 解压到当前目录下aaa目录下,aaa目录必须存在
tar -xvf test.tar -m // 解压时更新解压出来的文件的时间记录
tar -cvf test.tar ./* -N 20230220 // 只压缩时间比 2023-02-20 新的文件
tar -cvf test.tar /home/aaa/bbb/* -P // 压缩时带上绝对路径前的 / 符号
tar -xvf test.tar -P // 解压时将所有文件的绝对路径带上 / 符号
tar -vf test.tar -u 1.txt // 如果 1.txt 的比 test.tar 中的 1.txt 更新,则置换
tar -vf test.tar --delete 1.txt // 删除 test.tar 中的 1.txt
tar -cvf test.tar ./* --group root // 压缩时,将所有文件的所属组设置为root
tar -cvf test.tar ./* --numeric-owner // 压缩时,将所有文件的用户名称用UID替换,用户组名称用GID替换
tar -cvf test.tar ./* --owner root // 压缩时,将所有文件的拥有者替换为root
tar -cvf test.tar ./* --remove-files // 压缩时,将被压缩的文件删除
tar -xvf test.tar --suffix bak // 解压时,如果遇到重名文件则先将文件备份为以bak结尾的文件
tar -cvf test.tar --toals // 解压完成后显示压缩文件大小
tar -cvf test.tar ./* --exclude a --exclude b // 压缩当前目录中除a目录和b目录之外的所有文件
tar -czvf test.tar.gz ./* // 将当前目录下所有文件压缩为后缀为 .tar.gz 的压缩文件
tar -tvf test.tar.gz // 查看后缀为 tar.gz 的压缩文件中的内容
tar -xvf test.tar.gz // 解压后缀为 tar.gz 的压缩文件
tar -cjvf test.tar.bz2 // 将当前目录下所有文件压缩为后缀为 .tar.bz2 的压缩文件
tar -tvf test.tar.bz2 // 查看后缀为 tar.bz2 的压缩文件中的内容
tar -xvf test.tar.bz2 // 解压后缀为 tar.bz2 的压缩文件
zip
zip 命令用于压缩文件,文件后缀为 .zip
参数
参数 | 含义 |
---|---|
-d | 从压缩文件内删除指定的文件 |
-f | 更新现有的文件到压缩文件中 |
-u | 与参数 -f 相似,但是除了更新现有的文件外,如果要更新的文件在压缩文件中不存在,则加入到压缩文件中 |
-g | 将文件压缩后附加在已有的压缩文件之后,而非另行建立新的压缩文件 |
-i [范本样式] | 只压缩符合条件的文件 |
-x [范本样式] | 压缩时排除符合条件的文件 |
-m | 将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中 |
-n [后缀] | 不压缩具有特定后缀的文件,而是直接将源文件加入到压缩文件中 |
-o | 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同 |
-q | 不显示指令执行过程 |
-e | 压缩后设置密码,解压时需要输入密码才能解压 |
-r | 递归处理,将指定目录下的所有文件和子目录一并处理 |
-t [日期] | 只压缩时间比指定日期更新的文件,日期格式为 “yyyy-mm-dd” |
-T | 检查压缩文件内的每个文件是否正确无误 |
-v | 显示指令执行过程或显示版本信息 |
-y | 直接保存软链接,而非该链接所指向的文件,本参数仅在UNIX之类的系统下有效 |
-c | 替每个被压缩的文件加上注释,利用unzip -l 可以查看注释 |
-z | 替压缩文件加上注释,利用unzip -z 可以查看注释 |
实例
zip test ./* -r // 压缩当前目录下的所有文件和目录,压缩文件为test.zip
zip test ./* -rq // 压缩当前目录下的所有文件和目录,不展示压缩过程
zip test ./* -rv // 压缩当前目录下的所有文件和目录,展示详细过程
zip test.zip -f 1.txt // 如果 1.txt 已经更新则替换压缩文件中的 1.txt
zip test.zip -u 2.txt // 如果 2.txt 已经更新则替换压缩文件中的 2.txt,如果压缩文件中没有 2.txt,则将2.txt加入到压缩文件中
zip test.zip -d 1.txt // 将 1.txt 从压缩文件中移除
zip test.zip -g 3.txt // 将 3.txt 加入到压缩文件中
zip test ./* -ri *.txt // 只压缩后缀为 .txt 的文件
zip test ./* -rx *.txt // 压缩时,排除后缀为 .txt 的文件
zip test ./* -rm // 将文件压缩并加入压缩文件后,删除原始文件
zip test ./* -rn .txt:.link // 压缩文件时,不压缩后缀为 .txt 和 .link的文件,而是直接把原文件加入到压缩文件中
zip test ./* -ro // 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同
zip test ./* -rt 2023-02-18 // 只压缩改动时间在2023-02-18之后的文件
zip test.zip -T // 检查压缩文件内的每个文件是否正确无误
zip test.zip ./* -ry // 压缩软连接时,直接保存软链接,而非该链接所指向的文件
zip test ./* -re // 压缩时设置解压密码
unzip命令
unzip命令用于解压 .zip 文件
参数
参数 | 含义 |
---|---|
-c | 将解压的文件的内容显示到屏幕上,并对字符做适当的转换 |
-p | 与 -c 类似,将解压的文件的内容显示到屏幕上,但不会执行任何的转换 |
-l | 显示压缩文件内所包含的文件 |
-t | 检查压缩文件是否正确 |
-v | 执行时显示详细的信息 |
-z | 仅显示压缩文件的备注文字 |
-a | 对文本文件进行必要的字符转换 |
-b | 不对文本文件进行字符转换 |
-j | 不处理压缩文件中原有的目录路径 |
-LL | 解压时,将压缩文件中的全部文件名改为小写 |
-n | 解压缩时不要覆盖原有的文件 |
-o | 不必先询问用户,unzip执行后覆盖原有文件 |
-P [密码] | 使用zip的密码选项 |
-q | 执行时不显示任何信息 |
-d [目录] | 指定文件解压缩后所要存储的目录 |
-x [文件] | 指定不要处理.zip压缩文件中的哪些文件 |
-Z | unzip -Z等于执行zipinfo指令 |
实例
unzip test.zip // 解压 test.zip 文件
unzip -c test.zip 1.txt | more // 查看压缩文件中 1.txt 的内容,并对字符做适当的转换,再利用more命令进行查看
unzip -l test.zip // 显示压缩文件内所包含的文件
unzip -v test.zip // 显示详细的信息
unzip -z test.zip // 仅显示压缩文件的备注文字
unzip -LL test.zip // 解压时,将压缩文件的文件名称中的大写转换成小写
unzip -n test.zip // 解压缩时不要覆盖原有的文件
unzip -o test.zip // 不必先询问用户,直接覆盖原有文件
unzip -P 123456 test.zip // 解压时输入密码
unzip -d ./a test.zip // 解压到a目录
unzip test.zip -x 1.txt 2.txt // 不将 1.txt和2.txt 解压出来
unzip -Z test.zip // 相当于执行 zipinfo 命令查看 test.zip
zipinfo命令
zipinfo命令用于列出压缩文件详细信息
参数
参数 | 含义 |
---|---|
-1 | 只列出压缩文件中所有文件名称 |
-2 | 此参数的效果和指定"-1"参数类似,但可搭配-h、-t和-z参数使用 |
-h | 列出压缩文件的文件名称,压缩文件的大小,和压缩文件中文件的数量 |
-s | 列出压缩文件中每一个文件的信息 |
-m | 此参数的效果和指定"-s"参数类似,但多会列出每个文件的压缩率 |
-l | 此参数的效果和指定"-m"参数类似,但会列出原始文件的大小而非每个文件的压缩率 |
-M | 若信息内容超过一个画面,则采用类似more指令的方式列出信息 |
-t | 只列出压缩文件内所包含的文件数目,压缩前后的文件大小及压缩率 |
-T | 将压缩文件内每个文件的日期时间用年,月,日,时,分,秒的顺序列出 |
-v | 详细显示压缩文件内每一个文件的信息 |
-x [范本样式] | 不列出符合条件的文件的信息 |
-z | 如果压缩文件内含有注释,就将注释显示出来 |
实例
zipinfo test.zip // 查看压缩文件 test.zip 中的文件信息
zipinfo -1 test.zip // 只列出压缩文件中所有文件名称
zipinfo -h test.zip // 列出压缩文件的文件名称,压缩文件的大小,和压缩文件中文件的数量
zipinfo -M test.zip // 如果文件太多则类似more指令来查看文件信息,等价于 zipinfo test.zip | more
zipinfo -v test.zip // 列出压缩文件及其每个文件的详细信息
zipinfo test.zip -x a.txt b.txt // 排除a.txt b.txt
apt
apt(Advanced Packing Tool)命令用于再Debian和Ubuntu中的软件包管理器。
语法
apt [操作] [安装包]
操作
操作 | 说明 |
---|---|
sudo apt update | 列出所有可更新的软件清单命令 |
sudo apt upgrade | 升级软件包 |
apt list --upgradeable | 列出可更新的软件包及版本信息 |
sudo apt full-upgrade | 升级软件包,升级前先删除需要更新软件包 |
sudo apt install package_name | 安装指定的软件命令(可多个安装) |
sudo apt update package_name | 更新指定的软件命令 |
sudo apt show package_name | 显示软件包具体信息,例如版本号,安装大小,依赖关系等 |
sudo apt remove package_name | 删除软件包 |
sudo apt autoremove | 清理不再使用的依赖和库文件 |
sudo apt purge package_name | 移除软件包及配置文件 |
sudo apt search | 查找软件包命令 |
apt list --installed | 列出所有已经安装的包 |
apt list --all-versions | 列出所有已安装的包的版本信息 |
sudo apt install package_name --no-upgrade | 安装软件包,如果已经存在则不升级 |
sudo apt install package_name --only-upgrade | 只升级,如果不存在也不安装 |
sudo apt install package_name=version | 安装指定版本的软件包 |
实例
sudo apt update && sudo apt upgrade -y // 升级所有软件包,交互时自动输入yes
sudo apt install evince -y // 安装 evince,交互是自动输入yes
apt list --upgradeable // 列出所有可升级的软件包
sudo apt full-upgrade // 升级所有软件包
sudo apt update evince // 升级指定软件 envice
apt show evince // 显示软件包具体信息
sudo apt remove evince // 卸载软件
sudo apt autoremove // 清理不再使用的依赖和库文件
sudo apt purge evince // 卸载软件包及其配置文件
apt search evince // 查找evince相关的软件包
apt list --installed // 列出所有已经安装的软件包
apt list --all-versions // 列出所有已安装的包的版本信息
sudo apt install evince --no-upgrade // 安装软件包,如果已经存在则不升级
sudo apt install evince --only-upgrade // 只升级,如果不存在也不安装
sudo apt install evince=1.1 // 安装指定版本的安装包
在Fedora和RedHat中则使用 yum
来作为软件包管理器,基本操作和 apt
类似,只是用 yum
替换 apt
。例如
yum install <package_name> // 安装软件包
yum remove <package_name> // 卸载软件包
systemctl
systemctl 命令是一个systemd工具,主要负责控制systemd系统和服务管理器。
主要服务功能类型
- .service:一般服务类型(service unit);主要是系统服务,包括服务器本身所需要的本机服务以及网络服务,经常被使用到的服务大多是这种类型。
- .socket:内部程序数据交换的插槽服务(socketunit);主要是IPC(Inter-processcommunication)的传输信息插槽(socketfile)功能。这种类型的服务通常在监控信息传递的插槽档,当有通过此插槽传递信息请求链接服务的时候,就依据当时的状态将该用户的请求传送到对应的daemon,若daemon尚未启动,则启动该daemon后再传送用户的请求。使用socket类型的服务一般是比较不会被用到的服务,因此在开机时通常会稍微延迟启动的时间。一般用于本机服务比较多,例如我们的图形界面很多的软件都是通过socket来进行本机程序数据交换的行为。
- .target:执行环境类型(target unit);其实是一群unit的集合,例如multi-user.target其实就是一堆服务的集合。
- .mount:文件系统挂载相关的服务(automount unit/mount unit);例如来自网络的自动挂载、NFS文件系统挂载等与文件系统相关性较高的程序管理。
- .path:监测特定文件或目录类型(path unit);某些服务需要检测某些特定的目录来提供序列服务,例如最常见的打印服务,就是通过检测打印序列目录来启动打印功能。这时就得要.path的服务类型支持。
- .timer;循环执行的服务(timer unit);这个东西有点类型anacrontab,不过是由systemd主动提供的,比anacrontab更加有弹性。
服务状态
- active(running):正有一只或多只程序正在系统中执行。
- active(exited):仅执行一次就正常结束的服务,目前并没有程序正在系统中执行。
- active(waiting):正在执行当中,不过需要等待其他的事件才能继续处理。
- inactive:这个服务目前没有运行。
- dead:程序已经清除。
服务启动类型
- enabled:这个服务将在开机时被执行。
- disabled:这个服务在开机时不会被执行。
- static:这个服务不可以自己启动,可能被其它的enabled的服务来唤醒(关联属性的服务)。
- mask:这个服务无论如何都无法被启动,因为已经被强制注销(非删除),可以通过 systemctl unmask 方式改回原本状态。
systemctl命令的用法
操作 | 说明 |
---|---|
systemctl list-unit-files | 列出所有可用单元(服务名加启动类型) |
systemctl list-unit-files --type= | 列出系统的各项服务,挂载,设备等。选项包括: automount、device、swap、timer、mount、service、socket、target |
systemctl list-units | 列出所有可用单元(服务名、运行状态和描述) |
systemctl --failed | 列出所有失败单元 |
systemctl get-default | 获得系统默认启动级别 |
systemctl set-default [运行级别] | 设置默认启动级别 |
systemctl reboot | 重启系统 |
systemctl list-sockets | 查看当前的socket服务 |
systemctl is-enabled | 检查某个单元的启动类型 |
systemctl status | 检查某个服务的运行状态 |
systemctl start | 启动某个服务 |
systemctl stop | 停止某个服务 |
systemctl restart | 重启某个服务 |
systemctl is-active | 查询某个服务是否启动 |
systemctl kill | 杀死某个服务 |
systemctl show | 查看某个服务的详细配置 |
systemctl mask | 禁用某个服务 |
systemctl unmask | 解除禁用某个服务 |
systemctl enable | 将某个服务设置为每次开机启动 |
systemctl disabled | 将某个服务设置为每次开机不启动 |
systemctl enable --now | 将某个服务设置开机启动且立即启动 |
systemctl disable --now | 将某个服务设置开机不启动且立即停止 |
systemctl daemon-reload | 重新加载服务的配置文件 |
systemctl isolate multi-user.target | 将目前的操作环境改为纯文本模式,关掉图形界面 |
systemctl isolate graphical.target | 将目前的操作环境改为图形界面 |
systemctl list-dependencies graphical.target | 查询图形界面模式的target关联了啥 |
systemctl list-dependencies --reverse | 查询当前默认的target关联了啥 |
systemctl --user enable/disable/start/stop | 对普通用户定义的服务进行操作,加上 --user 即可 |
实例
systemctl status snmpd.service // 检查 snmpd.service 的运行状态
systemctl stop snmpd.service // 停止 snmpd.service 服务
systemctl restart snmpd.service // 重启 snmpd.service 服务
systemctl enable snmpd.service // 将 snmpd.service 设置为每次开机启动
systemctl disabled snmpd.service // 将 snmpd.service 设置为每次开机不启动
systemctl enable --now snmpd.service // 将 snmpd.service 设置为每次开机启动,并立即启动该服务
systemctl disable --now snmpd.service // 将 snmpd.service 设置为每次开机不启动,并立即暂停该服务
systemctl list-unit-files --type=service // 列出所有服务(服务名加启动类型)
systemctl is-active snmpd.service // 查看 snmpd.service 是否启动
systemctl kill snmpd.service // 杀死 snmpd.service 服务
systemctl show snmpd.service // 查看 snmpd.service 服务的详细配置情况
systemctl mask snmpd.service // 禁用 snmpd.service 服务
systemctl unmask snmpd.service // 解除禁用
systemctl --user start xxx.service // 启动用户定义的某一个服务
systemctl set-default multi-user.target // 设置默认运行级别为多用户模式
systemctl set-default graphical.target // 设置默认运行级别为图形化界面
systemctl set-default rescue.target // 设置默认运行级别为救援模式
file
file 命令用于辨识文件类型。
参数
参数 | 说明 |
---|---|
-b | 列出辨识结果时,不显示文件名称 |
-c | 详细显示指令执行过程,便于排错或分析程序执行的情形 |
-f [名称文件] | 指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称 |
-L | 直接显示软链接所指向的文件的类别 |
实例
file /bin/ls // 显示文件类型
file a.txt // 只显示文件类型,不显示文件名称
cat a.txt // 查看 a.txt 中的内容
b.txt
C.txt
D.txt
test.zip
file -f a.txt // 依次标识 1.txt 中的文件名称的文件类型
ln /bin/ls ls.link // 为 ls 创建软链
file ls.link // 显示ls.link这个软链接的文件类型
file -L ls.link // 直接显示软链接所指向的文件的类别,也就是 /bin/ls 的文件类型
kill
kill 命令用于向进程发送信号。
参数
参数 | 说明 |
---|---|
-l | 显示所有型号 |
-[sig num] [PID] | 给指定PID的进程发送信号,可以指定为信号编号 |
-[sig name] [PID] | 给指定PID的进程发送信号,可以指定w为信号名 |
实例
kill -l // 查看所有信号
kill -KILL 46498 // 杀死指定进程,KILL 是信号名,表示使进程强制退出
kill -9 46498 // 杀死指定进程,9 为 KILL 信号的编号
kill -HUP 46498 // 挂起指定进程,HUP 是信号名,表示使进程挂起
kill -1 46498 // 挂起指定进程,1 为 HUP 信号的编号
kill -TERM 46550 // 正常终止一个进程,TERM 是信号名,表示终止一个进程
kill -15 46498 // 正常终止一个进程,15 为 TERM 的信号编号
pkill
pkill 命令用于向进程发送信号,与kill命令不同的是,kill 需要指定PID,而 pkill 可以直接对进程对名字进行操作,更加方便。
参数
参数 | 说明 |
---|---|
-o | 仅向找到的最小的进程号发送信号 |
-n | 仅向找到的最大的进程号发送信号 |
-P [PPID] | 指定父进程号发送信号 |
-g [PGID] | 向指定的进程组发送信号 |
-i | 忽略大小写 |
实例
pkill -9 test // 结束所有的 test 进程
pkill -9 -o test // 结束所找到的PID最小的进程
pkill -9 -n test // 结束所找到的PID最大的进程
pkill -9 -i TEST // 结束所有的 test 进程,忽略大小写
pkill -9 -P 20408 // 结束指定的的父进程,其子进程也将会被结束
pkill -9 -g 20356 // 结束指定的进程组,其进程组中的所有进程将会被结束
ssh
ssh 是一个用于登录到远程机器并在远程机器上执行命令的程序。
ssh操作
sudo apt-get install openssh-server // 安装ssh服务
sudo systemctl start ssh // 启动ssh服务
sudo systemctl enable ssh // 开机自动ssh服务
ssh username:ipaddr // 连接远程机器
ssh aaa:10.19.xx.xx // 连接远程机器的aaa用户
uname命令
uname(unix name)命令用于显示操作系统相关信息。
参数
参数 | 含义 |
---|---|
-a 或 --all | 显示全部信息 |
-m 或 --machine | 显示电脑类型 |
-n 或 --nodename | 显示在网络上的主机名称 |
-r 或 --release | 显示操作系统的发行编号 |
-s 或 --sysname | 显示操作系统名称 |
-v | 显示操作系统的版本 |
–help | 帮助信息 |
–version | 版本号 |
实例
uname -a // 显示全部信息
uname -n // 显示在网络上的主机名称
uname -r // 显示操作系统的发行编号
who
who 命令用于显示正在哪些用户正在操作系统上登录。
参数
参数 | 说明 |
---|---|
-H 或 --heading | 显示标题栏 |
-a 或 --all | 显示所有信息 |
-q 或–count | 只显示登录系统的帐号名称和总人数 |
-T 或 -w | 用户的信息状态。+ 表示对任何人可写;- 表示仅对root用户或所有者可写;? 表示遇到线路故障 |
-r | 显示当前系统的运行级别 |
-u | 显示当前每个用户的用户名、线路、登录时间、空闲时间、进程标识名称和备注 |
-b | 列出系统最近启动的日期时间 |
空闲时间:空闲时间表示用户一直没有操作的累计时间,如果用户已累计超过24小时没有任何操作,则标识为 “old” 字符串
实例
who // 列出当前操作系统上所登录的用户
who -q // 统计在当前操作系统上所登录的用户名称和总人数
who -a // 显示详细信息
who -b // 列出系统最近启动的时间
df
df(disk free)命令用于统计目前在Linux系统上的文件系统磁盘使用情况。
参数
参数 | 说明 |
---|---|
-a 或 --all | 列出所有文件系统 |
-B 或 --block-size=[SIZE] | 使用 SIZE 大小的Blocks,默认为1K |
-h 或 --human-readable | 加上单位显示 |
-H | 类似于-h,但以1000为换算单位,默认是以1024为换算单位 |
-i 或 --inodes | 列出inode数量,而不是空间大小 |
-k | 等价于 --block-size=1024 |
-m | 以 1M 为单位 |
-t [TYPE] | 只列出指定文件类型 |
-T | 显示文件系统的类型 |
-x [TYPE] | 排除指定文件系统类型 |
实例
df // 列出文件系统磁盘使用情况
df -h // 列出文件系统并加上单位
df -i // 列出inode数量
df -B 500 // 使用块大小为500 来统计文件系统大小
df -m // 以 1M 为单位列出文件系统磁盘使用情况
df -t tmpfs // 只列出指定文件系统类型的磁盘
df -T // 列出文件系统是加上文件系统类型
df -x tmpfs // 排除指定文件系统类型的磁盘
df /dev/sda1 // 只列出指定磁盘的磁盘使用情况
du
du(disk usage)命令用于显示目录或文件的大小。
参数
参数 | 说明 |
---|---|
-a 或 --all | 显示目录所有文件的大小,不只是目录,默认只是显示目录的大小 |
-b 或 --bytes | 显示目录或文件大小时,以字节为单位,默认也是以字节为单位 |
-c 或 --total | 除了显示每个目录的大小,还会显示文件和目录的大小的总和 |
-h 或 --human-readable | 在大小后面加上单位 |
-H | 与 -h 参数类似,但不加上单位 |
-k | 以1024字节为单位 |
-l | 显示硬链接所链接的源文件的大小,默认只会显示硬链接文件的大小 |
-L [软连接] | 显示指定软连接所指向的源文件大小 |
-m | 以 1MB 为换算单位 |
-s | 只显示总计大小 |
-S | 显示指定目录大小时,并不包含其子目录的大小 |
-x 或 --one-file-system | 只处理一开始的文件系统的文件,如果遇上其他文件系统的文件则忽略 |
-X [文件] | 只计算匹配上的文件的大小 |
–exclude [文件或目录] | 排除指定文件或目录 |
-d 或 --max-depth [目录层数] | 超过指定层数的目录后,则忽略 |
–version | 版本信息 |
–help | 显示帮助 |
实例
du ./ // 查看当前目录下所有目录的大小
du -a ./ // 查看当前目录下所有目录和以及子目录和文件的大小
du -h aaa // 查看 aaa 目录的大小,并给出单位
du -c ./ // 查看当前目录下所有目录和以及子目录和文件的大小,并指出总用量
du -la ./ // 会显示硬链接所链接的源文件的大小
du -L test.link // 显示软连接所指向的源文件的大小
du -m ./ // 以 1MB 为换算单位显示目录的大小
du -s ./ // 只显示当前目录大小的总和
du -S ./ // 忽略子目录的大小
du -X *.txt ./ // 只计算以 .txt 为后缀的文件的大小
du --exclude aaa ./ // 忽略指定目录的大小
du -a ./ -d 1 // 只显示一层目录的文件的大小