Linux命令
文件系统
- 文件名存储在文件系统的目录结构中。每个目录都是一个特殊类型的文件,包含文件名和指向对应inode的指针。
- 文件系统使用一种树状结构来组织文件和目录,这使得文件名的查找和访问变得高效。
1. inode
- 每个文件和目录在文件系统中都有一个对应的inode,inode存储了文件的元数据(如文件的权限、所有者、大小、时间戳等),但不直接存储文件名。
- 文件名与inode的映射关系存储在目录项中,每个目录项包含一个文件名和对应的inode号码。
2. 目录项
- 目录项(Directory Entry)是指向inode的结构,其中包含文件名和inode号。
- 当你在目录中创建一个文件时,文件名和其对应的inode号会被添加到目录项中。
3. 符号链接
- 对于软连接(符号链接),文件名存储在一个特殊的文件中,这个文件包含指向目标文件的路径。
- 符号链接的内容是目标文件的路径名,因此可以跨文件系统和目录。
硬连接和软连接
- ln old new 新增加new文件名指向old的inode
- ln -s old new 新增inode、block,block存储old的inode
在文件中移动
| 命令 | 英文 | 意义 | ||
|---|---|---|---|---|
ls | list | 列出当前目录内容 | ||
pwd | print working directory | 显示当前工作目录的绝对路径。 | ||
cd | change directory | 回到家目录 | ||
find[范围][条件] | find | 查找文件 | ||
-exec | execute | find结果用代替然后执行后面的命令, | find . -name "dir" -exec mv -v /newdir \ ; | |
| whereis | ||||
| echo | ||||
| time | -p:以 POSIX 格式输出时间,通常用于脚本中。-o FILE:将输出写入指定的文件。-a:将时间附加到输出文件中(如果使用了 -o)。 | time 命令的输出通常包含三部分:1. real:从命令开始到结束所经历的墙钟时间(实际时间)。2. user:命令在用户空间中消耗的 CPU 时间。3. sys:命令在内核空间中消耗的 CPU 时间。 | ||
| sleep | 秒 | |||
| nohup | ||||
| tee | echo "Another line" | tee -a output.txt | |||
| dd | dd if=/dev/zero of=zero_file bs=1M count=1 | |||
| cat也能读取写入 | cat /dev/zero > output_file | |||
| date |
| man [命令] | 手册 |
|---|---|
| [命令] --help | 简化手册 |
| find范围 | 英文 | 意义 | find条件 | 英文 | 意义 |
|---|---|---|---|---|---|
| . | 当前目录 | -name | 指定文件名 | ||
| /path/to | 指定目录 | -type | 指定文件类型 | ||
| / | 整个文件系统 | -size | 指定文件大小 | ||
| ~ | 用户主目录 | -mtime | 指定文件修改时间 |
| 命令/选项 | 单位 | 意义 |
|---|---|---|
| -size | c/k/M/G | 指定大小 |
| + | +100k | 大于100KB |
| - | -100K | 小于100KB |
| -mtime | 天 | 指定修改时间 |
| 5 | 5天前 | |
| + | +10 | 10天之前 |
| - | -5 | 最近5天内 |
| 0 | 24小时内 |
| 快捷建 | 意义 | |
|---|---|---|
| Tab | 在ls命令里可以显示补全 | ls ja 此时按tab会显示ja开头的文件 |
| 查找命令 | l (小写L)此时会按tab会显示l开头的命令 | |
| Ctrl C | 取消、退出 | 取消输入、进入某个界面后退出 |
| Ctrl Z | 暂停 | 暂停当前进程并挂起放入后台 |
| Ctrl R | 查找最近用过的命令 | 输入命令模糊查找 |
| 上下箭头 | 查找最近用过的命令 | 上下选命令 |
- jobs
- fg
| cd选项 | 英文 | 意义 |
|---|---|---|
cd \[目录] | change directory | 进入指定目录 |
cd .. | 返回上一级目录 | |
cd ~ | 返回用户主目录(/home/yourname) | |
| ls选项 | 英文 | 意义 |
|---|---|---|
-l | long format listing | 显示详细信息(权限、硬连接数、所有者、属组、大小、最后修改、文件名) |
-a | show all files, including hidden ones. | 显示所有文件,包括隐藏的(以.开头的文件) |
-h | human-readable sizes. | 以更已读的格式显示文件大小(比较一下ls-l和ls-h)的区别 |
-t | sort by modification time. | 按文件修改时间排序,最新的在前面 |
-S | sort by file size. | 按文件大小排序,最大的文件排在最前面 |
-R | recursive listing of subdirectories. | 递归列出所有子目录的内容 |
--color | use colored output for different file types. | 以不同颜色显示文件类型(目录、文件、链接等)。 |
-d | directory | 查看单个文件夹 |
| -i | inode | 显示inode信息 |
使用扩展语法注意事项
- 选项之间没有顺序要求,==除了有些需要带参数的以外==
- 多个简写的(如
-l -h)选项可以写在一起,只保留一个---后接全称,例如上面的--color
-l- 硬连接数
- 所有者
- 权限列
- b硬盘
- d目录
- -a
- . 当前目录
- ..上一级目录
创建删除文件
| 命令 | 英文 | 意义 | 举例 |
|---|---|---|---|
mkdir | make directory | 创建单级目录 | mkdir dir1/ |
-p | parents | 创建多级目录 | mkdir -p dir1/dir2/dir3 |
rm | remove | 删除文件或目录 | rm dir1 |
-r | recursive | 删除目录内的所有内容 | rm -r dir1 |
mv | move | 移动文件、改名 | mv dir1 dir2 dir1移动到dir2(如果dir2存在则为移动,不存在为改名) |
cp | copy | 复制文件 | cp file.txt dir2复制dir1.txt文件到dir2,默认不会覆盖 |
-r | recursive | 复制目录内的所有内容 | cp -r dir1 dir2复制dir1目录到dir2 cp -r dir1/* dir2复制dir1的内容到dir2 |
-i | interactive | 覆盖前询问 | |
-f | force | 强制 | |
-v | verbose | 显示详细信息 | |
touch | touch | 创建文件 | touch text.txt 创建text.txt(若文件已存在则会更新最后访问和修改时间而不会改变文件内容) |
- alias 文件别称
文件内容
- cat [文件] 查看文件所有内容
-n显示行号
- head [文件] 查看文件头10行内容
-n[数字] 查看指定行数
- tail [文件] 查看文件末尾10行内容
-n[数字] 查看指定行数-f实时查看文件末尾新增内容
- less [文件] 查看文件内容(支持翻页)
-F实时查看
Vim
| Shift ^ | 行首 |
|---|---|
| Shift ¥ | 行尾 |
| Shift E | 往后大跳 |
| Shift B | 往前大跳 |
| E | 往后小跳 |
| B | 往前小跳 |
| gg | 文本开头 |
| Shift G | 文本末尾 |
| Ctrl F | 往后翻页 |
| Ctrl B | 往前翻页 |
- set number显示行号
- dd删除行
- n dd但前行开始删除n行
- D删除
- yy 复制
- p粘贴
- / 查找
- n
- shift n
- %是/a/b/g
- u 撤回(旧)
- ctrl r撤回撤回(新)
- ctrl g 显示文档信息
用户和登录
- whoami 查看自己身份
- id 查看组信息
- su - [用户名] 切换用户
自动创建用户后,该用户的主组和附属组和用户同名 系统用户,供某些软件自己使用
/etc/passwd用户的配置文件- 用户名:密码:用户uid:属组gid:注释:主目录:登录shell
- uid
- 0:root
- 1-99 :系统保留,管理帐号
- 100 - :用户
- 用户登录后在电脑上启动一共进程,用户通过shell与linux内核交互,shell有很多种,例如sh、bash
- 用户登录的Shell也可以是某个特定的程序,比如说vim、vi。改程序退出后用户就自动退出了系统
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
systemd-timesync:x:996:996:systemd Time
dhcpcd:x:100:65534:DHCP Client Daemon,,,:/usr/lib/dhcpcd:/bin/false
/etc/group组的配置文件- 组名:口令:gid:组内用户
/etc/shadow用户的密码- 登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
visudosudo权限设置- sudo用来临时切换用户
伪用户含义 bin 拥有可执行的用户命令文件 sys 拥有系统文件 adm 拥有帐户文件 uucp UUCP使用 lp lp或lpd子系统使用 nobody NFS使用
创建用户
- useradd [选项][用户名]
| useradd选项 | 英文 | 意义 |
|---|---|---|
-c | comment | 注释 |
-d | directory | 指定用户目录 |
-m | make directory | 若-d指定的目录不存在则创建目录 |
-g | group | 用户主组 |
-G | Group | 用户附属组 |
-s | shell | 用户登录的shell |
-u | user id | 用户号 |
-o | Duplicate | 可重复用户id |
一般情况下它与用户名是一一对应的。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等。
删除帐号
- userdel [选项][用户名]
| userdel选项 | 英文 | 意义 |
|---|---|---|
| -r | recursive | 递归删除目录 |
此命令会删除用户的主目录以及
/etc/passwd,/etc/shadow,/etc/group中的关于该用户的记录
修改帐号
- usermod [选项][用户名]
| usermod选项 | 英文 | 意义 |
|---|---|---|
-c | comment | 注释 |
-d | directory | 指定用户目录 |
-m | make directory | 若-d指定的目录不存在则创建目录 |
-g | group | 用户属组 |
-G | Group | 用户附属组 |
-s | shell | 用户登录的shell |
-u | user id | 用户号 |
-o | duplicate | 可重复用户id |
-l | login | 更改用户名 |
| -a | append | 将用户添加到一个或多个附属组中 |
密码管理
passwd[用户名]- 第一次为设置密码
- 第二次为修改密码
| passwd选项 | 英文 | 意义 |
|---|---|---|
| -l | lock | 锁定用户 |
| -u | unlock | 解锁被锁定的用户 |
| -d | delete | 删除用户的密码,使用户可以无密码登录。 |
| -f | force | 强制用户在下次登录时更改密码(本次登录要用密码的地方还能用) |
| -e | expire | 使用户的密码立即过期。(本次登录要用密码的地方都用不了) |
用户组的管理
增加用户组
- groupadd [选项] [用户组]
| groupadd选项 | 英文 | 意义 |
|---|---|---|
| -g | gid | 指定新用户组的id |
| -o | duplicate | 新用户组的id可以和系统已有的gid相同 |
删除用户组
- groupdel [用户]
修改用户组
- groupmod [选项] [用户组]
| groupmod选项 | 英文 | 意义 |
|---|---|---|
| -g | gid | 指定用户组新的gid |
| -o | duplicate | 用户组的新gid可以和系统已有的gid相同 |
| -n | new username | 更改用户组名字 |
切换组
- 一个用户有多个附属组,那么这个用户可以在这些组之间切换,获取这些用户组之一的权限
newgrp \[组]new group
ACL(Access Control List,访问控制列表)
ACL 的特点
- 灵活性:ACL 允许为每个文件或目录指定特定用户或组的权限,而不仅仅是拥有者、组和其他用户的三种权限。
- 多个权限条目:可以为一个文件或目录定义多个 ACL 条目,每个条目可以指定一个用户或组以及其对应的权限(读、写、执行等)。
- 默认 ACL:在目录中,可以设置默认 ACL,这样在该目录中创建的文件或子目录将自动继承这些权限。
使用 ACL
在 Linux 系统中,可以使用以下命令管理 ACL:
- 查看 ACL:
getfacl filename - 设置 ACL:
setfacl -m u:username:permission filename(例如,setfacl -m u:john:rw myfile.txt) - 删除 ACL:
setfacl -x u:username filename
文件和文件夹的权限
- drwxrwxr-x 2 user1 developers 4096 Oct 10 14:22 project
- 假设一个项目文件夹
project由用户user1创建,user1是该文件夹的属主。为了让项目团队的其他成员也能访问该文件夹,user1将文件夹的属组设置为developers组。所有属于developers组的成员都可以访问或修改该项目文件夹。
- 假设一个项目文件夹
-rwxrwxrwx- 第一个-代表不是文件夹,如果是则为
d- 其他可能的字符:
d: 目录l: 符号链接c: 字符设备文件b: 块设备文件
- 其他可能的字符:
- 后面每三位表示属主、属组、其他组拥有的权限分别是
rwx,(read、write、execute),若缺少对应的权限则用-代替,比如r-x代表对应的组没有write权限
- 第一个-代表不是文件夹,如果是则为
- 文件
- r 读权限如
cat、head、tail - w 写权限 如
vim - x 执行权限 如执行
sh脚本的权限
- r 读权限如
- 文件夹
- r 读权限 如ls
- w 写权限 如touch、rm、mv、mkdir
- x 执行权限 如 cd
修改权限
- chgrp [-R] 属组名 文件名
- chown 修改文件或者文件夹的属主和属组
- chown [–R] 所有者 文件名
- chown [-R] 所有者:属组名 文件名
- -R:递归更改文件夹内的文件的属组,该目录下的所有文件的属组都会更改。
- chmod 修改权限位
- 用数字修改(r=4,w=2,x=1)
- chmod [-R] xyz [文件或文件夹]
- 把代表权限的数字加累加起来就代表xyz其中之一的权限
- chmod 760
- 属主权限为rwx
- 属组权限为rx
- 其他组无权限
- 用符号修改(u=属主、g=属组、o=其他、a=前面三个)
- 操作
-
- 加上权限
-
- 去掉权限
- = 设定权限
-
- 权限
- r
- w
- x
- chmod u=rwx,g=rw,o=r [文件或文件夹]
- 操作
- 用数字修改(r=4,w=2,x=1)
默认权限
- umask
- 文件夹的初始最大权限:777
- 777-umask的值得到文件夹的默认权限
- 文件的初始最大权限:666
- 666-umask的值后
- 如果都是数字都是偶数那么结果就是默认权限
- 如果存在奇数,将奇数位加1得到结果
- 666-umask的值后
- 文件夹的初始最大权限:777
特殊权限位
1. Setuid (SUID) – 设置用户 ID
- 作用: 当文件设置了 SUID 位并被执行时,进程将使用文件所有者的权限,而不是执行者的权限。
- 应用场景: 一些系统级命令(如
passwd)需要普通用户执行时获得管理员权限。 - 符号表示: 在
ls -l输出中,文件权限中用户执行位 (x) 被替换为s,表示启用了 SUID。如果文件没有执行权限则会显示S。 - 八进制表示: SUID 位对应的数字是 4。
2. Setgid (SGID) – 设置组 ID
- 作用: 当文件设置了 SGID 位并被执行时,进程会使用文件属组的权限,而不是执行者的组权限。对于目录,SGID 位的作用是新创建的文件会继承目录的组。
- 应用场景: 常用于共享目录中,确保所有新文件都归于同一个组。
- 符号表示: 在
ls -l输出中,组执行位 (x) 被替换为s(如果有执行权限)或S(如果没有执行权限)。 - 八进制表示: SGID 位对应的数字是 2。
3. Sticky Bit – 粘滞位
- 作用: 通常用于目录,表示只有文件的所有者或者管理员才能删除或修改该目录中的文件,即使其他用户对该目录具有写权限。
- 应用场景: 最常见于
/tmp目录,确保其他用户无法删除不属于自己的文件。 - 符号表示: 在
ls -l输出中,其他用户执行位 (x) 被替换为t(如果有执行权限)或T(如果没有执行权限)。 - 八进制表示: Sticky 位对应的数字是 1。
系统性能指标
查看硬盘
df
| df选项 | 英文 | 意义 |
|---|---|---|
| -h | Human-readable | 以人类可读的格式显示磁盘空间使用情况 |
| -T | Type | 显示文件系统的类型 |
| -i | Inodes | 显示 inode 的使用情况 |
| -a | All | 显示所有文件系统的磁盘使用情况,包括虚拟文件系统(如 /proc 等)。 |
| -k | Kilobytes | 强制使用千字节为单位显示结果(每个块为 1024 字节)。 |
(base) kris@kris-Lenovo-Legion-Y70002021:~$ df
(base) kris@kris-Lenovo-Legion-Y70002021:~$ df -h
文件系统 大小 已用 可用 已用% 挂载点
tmpfs 1.6G 2.6M 1.6G 1% /run
/dev/nvme0n1p5 256G 28G 216G 12% /
tmpfs 7.8G 67M 7.7G 1% /dev/shm
tmpfs 5.0M 12K 5.0M 1% /run/lock
efivarfs 184K 139K 41K 78% /sys/firmware/efi/efivars
/dev/nvme0n1p4 944M 203M 676M 24% /boot
/dev/nvme0n1p7 231G 18G 202G 9% /home
/dev/nvme0n1p3 1.1G 6.2M 1.1G 1% /boot/efi
tmpfs 1.6G 2.5M 1.6G 1% /run/user/1000
分区分析
-
tmpfs
- 大小: 1.6G
- 挂载点:
/run - 说明:
tmpfs是一个临时文件系统,存储在内存中。它不会在物理硬盘上占用空间。
-
/dev/nvme0n1p5
- 大小: 256G
- 已用: 28G
- 挂载点:
/ - 说明: 这是主分区,通常包含操作系统和用户数据。
-
tmpfs
- 大小: 7.8G
- 挂载点:
/dev/shm - 说明: 另一个内存文件系统,通常用于共享内存。
-
tmpfs
- 大小: 5.0M
- 挂载点:
/run/lock - 说明: 也是内存中的临时文件系统,用于存放锁文件。
-
efivarfs
- 大小: 184K
- 挂载点:
/sys/firmware/efi/efivars - 说明: 这是一个特殊的文件系统,用于访问 EFI 变量。
-
/dev/nvme0n1p4
- 大小: 944M
- 已用: 203M
- 挂载点:
/boot - 说明: 该分区通常用于存放引导加载器和内核。
-
/dev/nvme0n1p7
- 大小: 231G
- 已用: 18G
- 挂载点:
/home - 说明: 此分区通常用于存储用户的个人文件和设置。
-
/dev/nvme0n1p3
- 大小: 1.1G
- 已用: 6.2M
- 挂载点:
/boot/efi - 说明: 该分区用于 EFI 启动,适用于 UEFI 系统。
-
tmpfs
- 大小: 1.6G
- 挂载点:
/run/user/1000 - 说明: 这是为特定用户创建的临时文件系统。
- 总结
- 所有以
/dev/nvme0n1开头的分区都位于同一物理 NVMe SSD 上,分区nvme0n1代表的是硬盘,后面的pX表示该硬盘上的各个分区(p3、p4、p5、p7)。 tmpfs和efivarfs等临时文件系统不占用物理硬盘空间,它们存储在内存中。
- 所有以
fdisk
| fdisk选项 | 英文 | 意义 |
|---|---|---|
| -l | List | 列出系统中所有磁盘的分区表。这是一个常用选项,可以快速查看磁盘的分区情况以及各个分区的大小、类型等信息。 |
Disk /dev/loop0:4 KiB,4096 字节,8 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
........
Disk /dev/nvme1n1:476.94 GiB,512110190592 字节,1000215216 个扇区
Disk model: SAMSUNG MZVL2512HCJQ-00BL2
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
磁盘标识符:1428DEC7-5E5C-45E4-90DF-B753A9E54EF8
设备 起点 末尾 扇区 大小 类型
/dev/nvme1n1p1 2048 534527 532480 260M EFI 系统
/dev/nvme1n1p2 534528 567295 32768 16M Microsoft 保留
/dev/nvme1n1p3 567296 419999743 419432448 200G Microsoft 基本数据
/dev/nvme1n1p4 419999744 996118527 576118784 274.7G Microsoft 基本数据
/dev/nvme1n1p5 996118528 1000214527 4096000 2G Windows 恢复环境
Disk /dev/nvme0n1:931.51 GiB,1000204886016 字节,1953525168 个扇区
Disk model: ZHITAI Ti600 1TB
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
磁盘标识符:82D76970-1611-43ED-A2DD-E9B905F82AE6
设备 起点 末尾 扇区 大小 类型
/dev/nvme0n1p1 34 32767 32734 16M Microsoft 保留
/dev/nvme0n1p2 32768 843808767 843776000 402.3G Microsoft 基本数据
/dev/nvme0n1p3 843808768 846010367 2201600 1G EFI 系统
/dev/nvme0n1p4 846010368 848011263 2000896 977M Linux 文件系统
/dev/nvme0n1p5 848011264 1394886655 546875392 260.8G Linux 文件系统
/dev/nvme0n1p6 1394886656 1459341311 64454656 30.7G Linux swap
/dev/nvme0n1p7 1459341312 1953521663 494180352 235.6G Linux 文件系统
..........
Disk /dev/loop20:564 KiB,577536 字节,1128 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
- 上面的硬盘有三种类型
- 一、
/dev/loop,loopback 设备,并不是真实的物理磁盘分区。它们是虚拟设备,通常用于将文件当作一个块设备来挂载。这意味着你可以将一个文件(如 ISO 镜像、压缩文件系统等)当作磁盘分区来处理,方便挂载和访问其中的内容。- 在 Linux 中,设备文件(如
/dev/loop12和/dev/tty)通常由操作系统自动创建和管理,它们是==内核用来访问硬件设备和虚拟设备的接口。==因此,不建议手动创建或删除这些设备文件,因为它们通常由操作系统或设备管理工具(如udev)动态生成和删除。 - 查看设备被谁使用
lsof /dev/tty8 - 查看USB
lsusb
- 在 Linux 中,设备文件(如
- 二、
/dev/nvme1n1p1,由于我装的是双系统,这里显示的是windows的相关分区 - 三、
/dev/nvme0n1p1-2块1T的物理硬盘一半给windows用,一半给Linux用(/dev/nvme0n1p3-7)
- 一、
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 002: ID 258a:002a SINO WEALTH Gaming Keyboard
Bus 003 Device 003: ID 048d:c101 Integrated Technology Express, Inc. ITE Device(8910)
Bus 003 Device 004: ID 18f8:1286 [Maxxter] USB GAMING MOUSE
Bus 003 Device 005: ID 8087:0026 Intel Corp. AX201 Bluetooth
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
内存
- free -h
(base) kris@kris-Lenovo-Legion-Y70002021:~$ free -h
total used free shared buff/cache available
内存: 15Gi 4.6Gi 4.7Gi 981Mi 7.3Gi 10Gi
交换: 30Gi 0B 30Gi
cache缓存,临时存储数据的高速存储区域,其目的是加快数据访问速度。 buffer缓冲区,用于一次性写入硬盘,提高效率。因为频繁的访问硬盘效率不高。
- echo 3 > /proc/sys/vm/drop_caches 清理cache缓存
CPU
进程
| 命令 | 英文 | 意义 |
|---|---|---|
| > >> | 覆盖和追加 重定向(会自动创建) | |
| 2> | 错误重定向,若报错写到日志里 | |
| & | 将进程放入后台 | |
| jobs | jobs | 查看以&运行的进程 |
| fg %[进程号] | foreground | 让一共后台进程回到前台 |
| ps | process status | 显示当前正在运行的进程信息 |
(base) kris@kris-Lenovo-Legion-Y70002021:~$ ps -a
PID TTY TIME CMD
2286 tty2 00:03:48 Xorg
2404 tty2 00:00:00 gnome-session-b
21369 pts/0 00:00:00 ps
- TTY表示每个进程所关联的终端设备Teletypewriter、
1. 物理终端(Physical Terminal)
- 定义:物理终端是指实际存在的硬件设备,通常是计算机的显示器和键盘组合。
- 功能:用户可以直接通过物理终端输入命令,系统通过该终端输出结果。传统的电传打字机也是一种物理终端。
- 示例:控制台(如直接连接到计算机的显示器和键盘)或使用串行端口连接的终端。
2. 虚拟终端(Virtual Terminal)
- 定义:虚拟终端是一种软件实现的终端,允许用户在同一物理终端上创建多个独立的会话。
- 功能:用户可以在不同的虚拟终端之间切换,通常通过特定的键盘快捷键(如
Ctrl + Alt + F1到F7)。 - 示例:Linux 系统中的
tty1、tty2等,用户可以通过这些虚拟终端访问系统。
3. 伪终端(Pseudo-Terminal)
- 定义:伪终端是一个软件接口,允许进程模拟一个终端设备。伪终端通常用于图形终端模拟器或网络连接(如 SSH)。
- 功能:伪终端由两部分组成:主设备(master)和从设备(slave)。主设备与应用程序交互,从设备则充当实际终端,接收用户输入并提供输出。
- 示例:在图形环境下打开的终端窗口(如 GNOME Terminal、xterm)或通过 SSH 连接到远程服务器时创建的终端会话,通常表示为
pts/0、pts/1等。
| ps选项 | 英文 | 意义 |
|---|---|---|
a | All | 显示那些与当前终端关联的进程,不包括其他终端(top) |
u | User | 以用户友好的格式显示进程信息,包括用户、CPU 和内存使用情况。 |
x | extra | 列出所有进程,无论它们是否与终端相关。包括系统进程和后台进程。(在后台运行的进程) |
-ef | -ef | 显示所有进程的详细信息,包括命令行参数。 |
-aux | -aux | 显示所有用户的进程,并以用户友好的格式显示。 |
(base) kris@kris-Lenovo-Legion-Y70002021:~$ ps -a
PID TTY TIME CMD
2286 tty2 00:05:26 Xorg
2404 tty2 00:00:00 gnome-session-b
25402 pts/0 00:00:00 ps
| 列名 | 含义 |
|---|---|
| PID | 进程 ID(Process ID),每个进程在系统中都有一个唯一的标识符。 |
| TTY | 进程关联的终端(Terminal),显示该进程是在哪个终端下运行的。tty2 表示物理终端 2,pts/0 表示伪终端(Pseudo Terminal 0)。 |
| TIME | 该进程使用的 CPU 时间,显示该进程总共占用的 CPU 时间。格式为小时:分钟:秒。 |
| CMD | 启动该进程的命令及其参数,显示实际运行的命令名和命令行。 |
(base) kris@kris-Lenovo-Legion-Y70002021:~$ ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 23860 14376 ? Ss 10月12 0:03 /sbin/init
root 2 0.0 0.0 0 0 ? S 10月12 0:00 [kthreadd]
| 列名 | 含义 |
|---|---|
| USER | 进程所有者的用户名,显示哪个用户在运行该进程。 |
| PID | 进程 ID(Process ID),每个进程在系统中都有一个唯一的标识符。 |
| %CPU | 进程使用的 CPU 占用率,表示该进程使用 CPU 的百分比。 |
| %MEM | 进程使用的物理内存占用率,表示该进程使用的内存百分比。 |
| VSZ | 进程使用的虚拟内存大小(Virtual Size),以 KB 为单位。 |
| RSS | 进程使用的常驻内存大小(Resident Set Size),以 KB 为单位,表示实际使用的物理内存。 |
| TTY | 进程关联的终端(Terminal),显示该进程是在哪个终端下运行的。 ? 表示该进程没有关联的终端。 |
| STAT | 进程状态,表示进程的当前状态(如 S:休眠, R:运行, Z:僵尸等)。 |
| START | 进程启动的时间。 |
| TIME | 进程使用的总 CPU 时间(用户模式 + 内核模式),显示为小时:分钟:秒。 |
| COMMAND | 启动该进程的命令及其参数,显示实际运行的命令名和命令行。 |
(base) kris@kris-Lenovo-Legion-Y70002021:~$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 10月12 ? 00:00:03 /sbin/init splash
root 2 0 0 10月12 ? 00:00:00 [kthreadd]
| 列名 | 含义 |
|---|---|
| UID | 进程所有者的用户 ID |
| PID | 进程 ID |
| PPID | 父进程 ID(即该进程是哪个进程创建的) |
| C | CPU 使用率(使用的 CPU 时间占总时间的比例) |
| STIME | 进程启动的时间 |
| TTY | 进程关联的终端(如果有的话) |
| TIME | 进程使用的总 CPU 时间(用户模式 + 内核模式) |
| CMD | 启动该进程的命令及其参数 |
top命令
- idle 空闲的
命令行中的管道符号
- 管道符
|用于将一个命令的输出作为另一个命令的输入
过滤
grep
| ps选项 | 英文 | 意义 |
|---|---|---|
-i | Ignore case | 忽略大小写,进行不区分大小写的匹配 |
-v | Invert match | 反向匹配,显示不匹配的行 |
-r | Recursive | 递归地搜索目录中的所有文件 |
-n | Line number | 显示匹配行的行号 |
-c | Count | 只显示匹配的行数 |
-l | Files with matches | 显示包含匹配内容的文件名,不输出匹配的行内容 |
-w | Match whole word | 只匹配整个单词 |
-e | Multiple search patterns | 指定多个搜索模式 |
| 搜索模式 | 解释 | 示例 | 描述 |
|---|---|---|---|
pattern | 简单字符串匹配 | grep "pattern" file.txt | 匹配包含 "pattern" 的行 |
-e | 多个模式匹配 | grep -e "pattern1" -e "pattern2" file.txt | 匹配 "pattern1" 或 "pattern2" 的行 |
^ | 匹配行首 | grep "^pattern" file.txt | 匹配以 "pattern" 开头的行 |
$ | 匹配行尾 | grep "pattern$" file.txt | 匹配以 "pattern" 结尾的行 |
. | 匹配任意单个字符 | grep "a.b" file.txt | 匹配 "a" 和 "b" 之间有一个任意字符的行 |
[] | 字符类 | grep "[abc]" file.txt | 匹配包含 "a"、"b" 或 "c" 的行 |
- | 字符范围 | grep "[a-z]" file.txt | 匹配范围内的字符,如 a 到 z |
[^] | 排除字符类 | grep "[^0-9]" file.txt | 匹配不包含数字的行 |
* | 匹配前一个字符任意次数 | grep "go*" file.txt | 匹配 "g" 后面跟零个或多个 "o" 的行 |
+ | 匹配前一个字符至少一次 | grep -E "go+" file.txt | 匹配 "g" 后面至少一个 "o" 的行 |
? | 匹配前一个字符零次或一次 | grep -E "colou?r" file.txt | 匹配 "color" 或 "colour" |
{} | 匹配前一个字符的重复次数范围 | grep -E "o{2,3}" file.txt | 匹配 2 到 3 个连续的 "o" |
\b | 匹配单词边界 | grep "\bword\b" file.txt | 匹配完整的单词 "word" |
() | 分组 | `grep -E "(cat | dog)" file.txt` |
| | | 或 | 或操作符 | grep -E "apple|orange" |
扩展正则表达式
- 使用
grep -E或egrep来启用扩展正则表达式,如+、?、|。
awk
- cat /var/log/messages | tail -n 20
- cat /var/log/messages | head
- awk
- 以下是
awk常见用法的汇总表格:
- 以下是
| 用法描述 | 示例命令 | 解释 |
|---|---|---|
| 打印文件所有行 | awk '{print}' filename | 逐行读取并打印文件内容。 |
| 按字段打印 | awk '{print $1, $3}' filename | 打印每行的第 1 和第 3 个字段。 |
| 指定分隔符 | awk -F',' '{print $1, $2}' filename | 使用逗号作为字段分隔符,打印第 1 和第 2 个字段。 |
| 条件匹配行并打印 | awk '$3 > 100 {print $1, $3}' filename | 打印第三个字段大于 100 的行的第 1 和第 3 个字段。 |
| 打印指定行 | awk 'NR==5' filename | 只打印文件中的第 5 行。 |
| 计算列的总和 | awk '{sum += $2} END {print sum}' filename | 计算第二列的总和并在文件处理完后输出结果。 |
| 打印行号和内容 | awk '{print NR, $0}' filename | 打印行号和对应的行内容。 |
| 使用变量 | awk -v var=10 '$2 > var {print $1}' file | 使用外部变量 var,打印第二列大于 10 的第一列内容。 |
| 匹配正则表达式 | awk '/pattern/ {print $0}' filename | 匹配包含 "pattern" 的行,并打印该行。 |
| 条件判断 | awk '{if ($3 > 100) print $1, $3}' file | 使用 if 语句判断第三列是否大于 100,并打印符合条件的行。 |
说明
-F:指定字段的分隔符(默认是空白字符,如空格、制表符)。$0:表示整行内容。NR:表示当前行号。sum += $2:累加第二列的值。END:awk在处理完所有行后执行END块中的代码。
这些用法可以根据需要灵活组合,处理不同格式的文本文件。
统计
wc
常见选项
| 选项 | 描述 | 示例命令 | 示例输出 |
|---|---|---|---|
-l | 统计行数 | wc -l filename | 20(文件中有 20 行) |
-w | 统计单词数 | wc -w filename | 150(文件中有 150 个单词) |
-c | 统计字节数 | wc -c filename | 1024(文件大小为 1024 字节) |
-m | 统计字符数(适用于多字节字符) | wc -m filename | 1100(文件中有 1100 个字符) |
-L | 输出最长行的长度 | wc -L filename | 80(文件中最长行的字符数) |
-l | 统计行数(与 -l 相同,大小写不敏感) | wc -l filename | 20(文件中有 20 行) |
sort
| 选项 | 描述 | 示例命令 | 示例输出 |
|---|---|---|---|
-n | 按数值排序 | sort -n filename | 按数字顺序排序 |
-r | 反向排序 | sort -r filename | 按降序排序 |
-k | 指定排序的字段 | sort -k 2 filename | 按第二个字段排序 |
-t | 指定字段分隔符 | sort -t, -k 1 filename | 按逗号分隔的第一个字段排序 |
-u | 输出唯一的行 | sort -u filename | 去除重复行,输出唯一行 |
-o | 将结果输出到指定文件 | sort filename -o sorted.txt | 将排序结果写入 sorted.txt 文件 |
-M | 按月份排序 | sort -M filename | 按月份顺序排序(如 Jan, Feb 等) |
-d | 排序时仅考虑字母和数字(忽略其他字符) | sort -d filename | 仅对字母和数字排序 |
uniq
| 选项 | 描述 | 示例命令 | 示例输出 |
|---|---|---|---|
-c | 统计每行的出现次数,并在输出前面显示计数 | uniq -c filename | 3 Apple(表示 "Apple" 出现了 3 次) |
-d | 仅显示重复出现的行 | uniq -d filename | Apple(只显示重复的行) |
-u | 仅显示唯一的行(未重复的行) | uniq -u filename | Cherry(只显示未重复的行) |
-i | 忽略大小写进行比较 | uniq -i filename | apple 和 Apple 会被视为相同 |
-w N | 只比较每行的前 N 个字符 | uniq -w 3 filename | 只考虑每行的前 3 个字符进行比较 |
-s N | 跳过每行的前 N 个字符进行比较 | uniq -s 2 filename | 从每行的第 3 个字符开始进行比较 |
--help | 显示帮助信息 | uniq --help | 显示所有可用选项和用法 |
--version | 显示版本信息 | uniq --version | 显示当前 uniq 的版本 |
软件管理
apt
以下是一些常用的 apt 命令及其功能,适用于在 Ubuntu 和其他 Debian-based 系统中进行软件包管理:
常用 apt 命令
- 下载的软件的存放位置:/var/cache/apt/archives
- 安装后软件的默认位置:/usr/share
- 可执行文件位置:/usr/bin
- 配置文件位置:/etc
- lib文件位置:/usr/lib
| 命令 | 功能说明 |
|---|---|
sudo apt update | 更新软件包索引,获取可用软件包和版本的最新信息。 |
sudo apt upgrade | 升级所有已安装的软件包到可用的最新版本。 |
sudo apt install <package_name> | 安装指定的软件包。 |
sudo apt remove <package_name> | 删除指定的软件包,但保留配置文件。 |
sudo apt purge <package_name> | 删除指定的软件包及其配置文件。 |
sudo apt search <package_name> | 搜索可用软件包。 |
sudo apt show <package_name> | 显示指定软件包的详细信息,包括描述和版本等。 |
sudo apt list --installed | 列出所有已安装的软件包。 |
sudo apt autoremove | 自动删除不再需要的依赖软件包。 |
sudo apt full-upgrade | 升级系统,处理包的依赖关系,并可能删除不再需要的包。 |
sudo apt edit-sources | 编辑软件源列表,以便添加或删除软件源。 |
sudo apt clean | 清理本地缓存的安装包文件。 |
sudo apt autoclean | 清理已下载的软件包缓存,只保留可以再安装的包。 |
计划任务
crontab 基本用法
| 命令 | 功能 |
|---|---|
crontab -l | 查看当前用户的 crontab |
crontab -e | 编辑当前用户的 crontab |
crontab -r | 删除当前用户的 crontab |
crontab 文件格式
| 字段 | 值范围 | 含义 |
|---|---|---|
| * | 0-59 | 分钟 |
| * | 0-23 | 小时 |
| * | 1-31 | 日 |
| * | 1-12 | 月 |
| * | 0-7 (或 Sun-Sat) | 星期(0表示星期日) |
特殊符号说明
*:任意值。例如,*在小时字段中表示每小时执行。,:多个值的分隔符。例如,1,15表示在第 1 分钟和第 15 分钟执行任务。-:表示范围。例如,1-5表示从第 1 到第 5 分钟。/:表示步长。例如,*/5表示每 5 分钟执行一次。
特殊字符串
| 字符串 | 含义 |
|---|---|
@reboot | 系统启动时执行 |
@yearly | 每年执行(等同于 0 1 1 1 *) |
@monthly | 每月执行(等同于 0 1 1 * *) |
@weekly | 每周执行(等同于 0 0 * * 0) |
@daily | 每天执行(等同于 0 0 * * *) |
@hourly | 每小时执行(等同于 0 * * * *) |
示例
| 示例 | 含义 |
|---|---|
0 * * * * /path/to/script.sh | 每小时执行一个脚本 |
0 2 * * * /path/to/script.sh | 每天凌晨 2 点执行 |
0 12 * * 1 /path/to/script.sh | 每周一的中午 12 点执行 |
* * * * * /path/to/script.sh | 每分钟执行一次 |
*/5 * * * * /path/to/script.sh | 每 5 分钟执行一次 |
时间同步
- timedatectl set-timezone Asia/Shanghai设置时区
- ntpdate 0.asia.pool.ntp.org
运行级别
在使用 systemd 的 Linux 系统(如 Ubuntu 15.04 及之后的版本)中,运行级别 的概念已被 targets(目标) 取代。虽然传统的运行级别仍然存在(作为兼容性),但在 systemctl 中,targets 提供了更加灵活的方式来管理系统的运行状态和服务。
下面是 systemctl 中与传统运行级别对应的目标(targets)及其含义。
systemd 目标(Target)与传统运行级别的对应关系
| 运行级别(传统) | systemd 目标 | 说明 |
|---|---|---|
| 0 | poweroff.target | 关机,系统关闭。 |
| 1 | rescue.target | 单用户模式(类似于传统运行级别 1,用于系统维护)。 |
| 2、3、4 | multi-user.target | 多用户模式,不启动图形界面。支持网络和服务。 |
| 5 | graphical.target | 多用户模式并启用图形界面(桌面环境)。 |
| 6 | reboot.target | 重启,系统重新启动。 |
常用 systemd 目标
poweroff.target:关机模式,系统将关闭所有服务并关机。rescue.target:单用户模式,仅允许 root 用户登录,常用于修复和维护。multi-user.target:多用户模式,不包含图形界面,适用于服务器环境。graphical.target:多用户模式并启动图形界面,适用于桌面环境。reboot.target:重启模式,系统将重新启动。- systemctl get-default查看但前运行级别
- init 切换运行级别
脚本
#!/bin/bash是一个称为 shebang 的特殊注释,位于脚本文件的第一行,指定了该脚本应该使用的解释器。在这个例子中,/bin/bash指的是 Bash(Bourne Again SHell)解释器。