Skip to main content

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

在文件中移动

命令英文意义
lslist列出当前目录内容
pwdprint working directory显示当前工作目录的绝对路径。
cdchange directory回到家目录
find[范围][条件]find查找文件
-execexecutefind结果用代替然后执行后面的命令,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
teeecho "Another line" | tee -a output.txt
dddd 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指定文件修改时间
命令/选项单位意义
-sizec/k/M/G指定大小
++100k大于100KB
--100K小于100KB
-mtime指定修改时间
55天前
++1010天之前
--5最近5天内
024小时内
快捷建意义
Tabls命令里可以显示补全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选项英文意义
-llong format listing显示详细信息(权限、硬连接数、所有者、属组、大小、最后修改、文件名)
-ashow all files, including hidden ones.显示所有文件,包括隐藏的(以.开头的文件)
-hhuman-readable sizes.以更已读的格式显示文件大小(比较一下ls-l和ls-h)的区别
-tsort by modification time.按文件修改时间排序,最新的在前面
-Ssort by file size.按文件大小排序,最大的文件排在最前面
-Rrecursive listing of subdirectories.递归列出所有子目录的内容
--coloruse colored output for different file types.以不同颜色显示文件类型(目录、文件、链接等)。
-ddirectory查看单个文件夹
-iinode显示inode信息

使用扩展语法注意事项

  1. 选项之间没有顺序要求,==除了有些需要带参数的以外==
  2. 多个简写的(如-l -h)选项可以写在一起,只保留一个-
  3. --后接全称,例如上面的--color
  • -l
    • 硬连接数
    • 所有者
    • 权限列
      • b硬盘
      • d目录
  • -a
    • . 当前目录
    • ..上一级目录

创建删除文件

命令英文意义举例
mkdirmake directory创建单级目录mkdir dir1/
-pparents创建多级目录mkdir -p dir1/dir2/dir3
rmremove删除文件或目录rm dir1
-rrecursive删除目录内的所有内容rm -r dir1
mvmove移动文件、改名mv dir1 dir2 dir1移动到dir2(如果dir2存在则为移动,不存在为改名)
cpcopy复制文件cp file.txt dir2复制dir1.txt文件到dir2,默认不会覆盖
-rrecursive复制目录内的所有内容cp -r dir1 dir2复制dir1目录到dir2 cp -r dir1/* dir2复制dir1的内容到dir2
-iinteractive覆盖前询问
-fforce强制
-vverbose显示详细信息
touchtouch创建文件touch text.txt 创建text.txt(若文件已存在则会更新最后访问和修改时间而不会改变文件内容)
  1. 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选项英文意义
-ccomment注释
-ddirectory指定用户目录
-mmake directory若-d指定的目录不存在则创建目录
-ggroup用户主组
-GGroup用户附属组
-sshell用户登录的shell
-uuser id用户号
-oDuplicate可重复用户id

一般情况下它与用户名是一一对应的。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等。

删除帐号

  • userdel [选项][用户名]
userdel选项英文意义
-rrecursive递归删除目录

此命令会删除用户的主目录以及/etc/passwd, /etc/shadow, /etc/group中的关于该用户的记录

修改帐号

  • usermod [选项][用户名]
usermod选项英文意义
-ccomment注释
-ddirectory指定用户目录
-mmake directory若-d指定的目录不存在则创建目录
-ggroup用户属组
-GGroup用户附属组
-sshell用户登录的shell
-uuser id用户号
-oduplicate可重复用户id
-llogin更改用户名
-aappend将用户添加到一个或多个附属组中

密码管理

  • passwd [用户名]
    • 第一次为设置密码
    • 第二次为修改密码
passwd选项英文意义
-llock锁定用户
-uunlock解锁被锁定的用户
-ddelete删除用户的密码,使用户可以无密码登录。
-fforce强制用户在下次登录时更改密码(本次登录要用密码的地方还能用)
-eexpire使用户的密码立即过期。(本次登录要用密码的地方都用不了)

用户组的管理

增加用户组

  • groupadd [选项] [用户组]
groupadd选项英文意义
-ggid指定新用户组的id
-oduplicate新用户组的id可以和系统已有的gid相同

删除用户组

  • groupdel [用户]

修改用户组

  • groupmod [选项] [用户组]
groupmod选项英文意义
-ggid指定用户组新的gid
-oduplicate用户组的新gid可以和系统已有的gid相同
-nnew username更改用户组名字

切换组

  • 一个用户有多个附属组,那么这个用户可以在这些组之间切换,获取这些用户组之一的权限
  • newgrp \[组] new group

ACL(Access Control List,访问控制列表)

ACL 的特点

  1. 灵活性:ACL 允许为每个文件或目录指定特定用户或组的权限,而不仅仅是拥有者、组和其他用户的三种权限。
  2. 多个权限条目:可以为一个文件或目录定义多个 ACL 条目,每个条目可以指定一个用户或组以及其对应的权限(读、写、执行等)。
  3. 默认 ACL:在目录中,可以设置默认 ACL,这样在该目录中创建的文件或子目录将自动继承这些权限。

使用 ACL

在 Linux 系统中,可以使用以下命令管理 ACL:

  • 查看 ACLgetfacl filename
  • 设置 ACLsetfacl -m u:username:permission filename(例如,setfacl -m u:john:rw myfile.txt
  • 删除 ACLsetfacl -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,(readwriteexecute),若缺少对应的权限则用-代替,比如r-x代表对应的组没有write权限
  • 文件
    • r 读权限如catheadtail
    • w 写权限 如vim
    • x 执行权限 如执行sh脚本的权限
  • 文件夹
    • 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 [文件或文件夹]

默认权限

  • umask
    • 文件夹的初始最大权限:777
      • 777-umask的值得到文件夹的默认权限
    • 文件的初始最大权限:666
      • 666-umask的值后
        • 如果都是数字都是偶数那么结果就是默认权限
        • 如果存在奇数,将奇数位加1得到结果

特殊权限位

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选项英文意义
-hHuman-readable人类可读的格式显示磁盘空间使用情况
-TType显示文件系统的类型
-iInodes显示 inode 的使用情况
-aAll显示所有文件系统的磁盘使用情况,包括虚拟文件系统(如 /proc 等)。
-kKilobytes强制使用千字节为单位显示结果(每个块为 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

分区分析

  1. tmpfs

    • 大小: 1.6G
    • 挂载点: /run
    • 说明: tmpfs 是一个临时文件系统,存储在内存中。它不会在物理硬盘上占用空间。
  2. /dev/nvme0n1p5

    • 大小: 256G
    • 已用: 28G
    • 挂载点: /
    • 说明: 这是主分区,通常包含操作系统和用户数据。
  3. tmpfs

    • 大小: 7.8G
    • 挂载点: /dev/shm
    • 说明: 另一个内存文件系统,通常用于共享内存。
  4. tmpfs

    • 大小: 5.0M
    • 挂载点: /run/lock
    • 说明: 也是内存中的临时文件系统,用于存放锁文件。
  5. efivarfs

    • 大小: 184K
    • 挂载点: /sys/firmware/efi/efivars
    • 说明: 这是一个特殊的文件系统,用于访问 EFI 变量。
  6. /dev/nvme0n1p4

    • 大小: 944M
    • 已用: 203M
    • 挂载点: /boot
    • 说明: 该分区通常用于存放引导加载器和内核。
  7. /dev/nvme0n1p7

    • 大小: 231G
    • 已用: 18G
    • 挂载点: /home
    • 说明: 此分区通常用于存储用户的个人文件和设置。
  8. /dev/nvme0n1p3

    • 大小: 1.1G
    • 已用: 6.2M
    • 挂载点: /boot/efi
    • 说明: 该分区用于 EFI 启动,适用于 UEFI 系统。
  9. tmpfs

    • 大小: 1.6G
    • 挂载点: /run/user/1000
    • 说明: 这是为特定用户创建的临时文件系统。
  • 总结
    • 所有以 /dev/nvme0n1 开头的分区都位于同一物理 NVMe SSD 上,分区 nvme0n1 代表的是硬盘,后面的 pX 表示该硬盘上的各个分区(p3p4p5p7)。
    • tmpfsefivarfs 等临时文件系统不占用物理硬盘空间,它们存储在内存中。

fdisk

fdisk选项英文意义
-lList列出系统中所有磁盘的分区表。这是一个常用选项,可以快速查看磁盘的分区情况以及各个分区的大小、类型等信息。
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/looploopback 设备,并不是真实的物理磁盘分区。它们是虚拟设备,通常用于将文件当作一个块设备来挂载。这意味着你可以将一个文件(如 ISO 镜像、压缩文件系统等)当作磁盘分区来处理,方便挂载和访问其中的内容。
      • 在 Linux 中,设备文件(如 /dev/loop12/dev/tty)通常由操作系统自动创建和管理,它们是==内核用来访问硬件设备和虚拟设备的接口。==因此,不建议手动创建或删除这些设备文件,因为它们通常由操作系统或设备管理工具(如 udev)动态生成和删除。
      • 查看设备被谁使用lsof /dev/tty8
      • 查看USB lsusb
    • 二、/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>错误重定向,若报错写到日志里
&将进程放入后台
jobsjobs查看以&运行的进程
fg %[进程号]foreground让一共后台进程回到前台
psprocess 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 + F1F7)。
  • 示例:Linux 系统中的 tty1tty2 等,用户可以通过这些虚拟终端访问系统。

3. 伪终端(Pseudo-Terminal)

  • 定义:伪终端是一个软件接口,允许进程模拟一个终端设备。伪终端通常用于图形终端模拟器或网络连接(如 SSH)。
  • 功能:伪终端由两部分组成:主设备(master)和从设备(slave)。主设备与应用程序交互,从设备则充当实际终端,接收用户输入并提供输出。
  • 示例:在图形环境下打开的终端窗口(如 GNOME Terminal、xterm)或通过 SSH 连接到远程服务器时创建的终端会话,通常表示为 pts/0pts/1 等。
ps选项英文意义
aAll显示那些与当前终端关联的进程,不包括其他终端(top)
uUser以用户友好的格式显示进程信息,包括用户、CPU 和内存使用情况。
xextra列出所有进程,无论它们是否与终端相关。包括系统进程和后台进程。(在后台运行的进程)
-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(即该进程是哪个进程创建的)
CCPU 使用率(使用的 CPU 时间占总时间的比例)
STIME进程启动的时间
TTY进程关联的终端(如果有的话)
TIME进程使用的总 CPU 时间(用户模式 + 内核模式)
CMD启动该进程的命令及其参数

top命令

  • idle 空闲的

命令行中的管道符号

  • 管道符 | 用于将一个命令的输出作为另一个命令的输入

过滤

grep

ps选项英文意义
-iIgnore case忽略大小写,进行不区分大小写的匹配
-vInvert match反向匹配,显示不匹配的行
-rRecursive递归地搜索目录中的所有文件
-nLine number显示匹配行的行号
-cCount只显示匹配的行数
-lFiles with matches显示包含匹配内容的文件名,不输出匹配的行内容
-wMatch whole word只匹配整个单词
-eMultiple 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 "(catdog)" file.txt`
|或操作符grep -E "apple|orange"

扩展正则表达式

  • 使用 grep -Eegrep 来启用扩展正则表达式,如 +?|

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:累加第二列的值。
  • ENDawk 在处理完所有行后执行 END 块中的代码。

这些用法可以根据需要灵活组合,处理不同格式的文本文件。

统计

wc

常见选项

选项描述示例命令示例输出
-l统计行数wc -l filename20(文件中有 20 行)
-w统计单词数wc -w filename150(文件中有 150 个单词)
-c统计字节数wc -c filename1024(文件大小为 1024 字节)
-m统计字符数(适用于多字节字符)wc -m filename1100(文件中有 1100 个字符)
-L输出最长行的长度wc -L filename80(文件中最长行的字符数)
-l统计行数(与 -l 相同,大小写不敏感)wc -l filename20(文件中有 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 filename3 Apple(表示 "Apple" 出现了 3 次)
-d仅显示重复出现的行uniq -d filenameApple(只显示重复的行)
-u仅显示唯一的行(未重复的行)uniq -u filenameCherry(只显示未重复的行)
-i忽略大小写进行比较uniq -i filenameappleApple 会被视为相同
-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 目标说明
0poweroff.target关机,系统关闭。
1rescue.target单用户模式(类似于传统运行级别 1,用于系统维护)。
2、3、4multi-user.target多用户模式,不启动图形界面。支持网络和服务。
5graphical.target多用户模式并启用图形界面(桌面环境)。
6reboot.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)解释器。

SSH