Linux 常用命令简介

关键词:命令行 / 终端 / Shell

Linux 是一种开源的操作系统,广泛应用于服务器、嵌入式系统和个人电脑。Linux 的强大之处在于其命令行界面(CLI),用户可以通过输入命令来执行各种任务。以下是一些常用的 Linux 命令,帮助你更好地使用和管理 Linux 系统。

1. 重启系统

  • reboot:重启计算机。
  • shutdown -r now:立即重启系统。

2. 关闭系统

  • shutdown -h now:立即关闭系统。
  • poweroff:关闭计算机电源。

3. 查看内核

  • uname:显示系统信息。
  • 参数 -r:显示内核版本。
  • 参数 -a:显示所有系统信息。
  • 参数 -m:显示机器硬件名称。
  • 参数 -p:显示处理器类型。
  • 参数 -o:显示操作系统名称。
  • 参数 -v:显示内核版本信息。

4. 查看当前用户

  • whoami:显示当前登录的用户名。

5. 查看主机名

  • hostname:显示或设置系统的主机名。
  • hostname xxx:将主机名设置为 xxx。
  • hostname -i:显示主机的 IP 地址。
  • hostname -d:显示主机的域名。

6. 查看历史命令

  • history:显示命令历史记录。
  • history n:显示最近的 n 条命令。

7. 查看网络配置

  • ifconfig:显示或配置网络接口。
  • ip addr:显示网络接口的 IP 地址信息。

8. 查看文件列表

  • ls:列出当前目录下的文件和目录。
  • 参数 -l:以长格式显示文件信息。 等于 ll
  • 参数 -a:显示所有文件,包括隐藏文件。
  • 参数 -h:以人类可读的格式显示文件大小。
  • 参数 -R:递归显示子目录内容。
  • 参数 -d:显示目录本身而不是其内容。

9. 查看命令路径

  • which command:显示指定命令的完整路径。

10. 查看 cpu 信息

  • lscpu:显示 CPU 的详细信息。

11. 帮助 命令

  • man command:显示指定命令的手册页。
  • command --help:显示指定命令的帮助信息。

12. 创建 目录

  • mkdir directory_name:创建一个名为 directory_name 的新目录。
  • 参数 -p:创建多级目录。(递归创建父目录)
  • 隐藏目录:以 . 开头的目录为隐藏目录。
  • 示例:mkdir .hidden_dir 创建一个隐藏目录。
  • 带有空格的目录名:使用引号括起来或使用反斜杠转义空格。
  • 示例:mkdir "my folder"mkdir my\ folder

13. 删除命令

  • rm file_name:删除指定的文件。
  • 参数 -r:递归删除目录及其内容。
  • 参数 -f:强制删除文件或目录,不提示确认。
  • 示例:rm -rf directory_name 删除目录及其所有内容。
  • 参数 -d:删除空目录。

14. 通配符

  • *:匹配任意数量的字符。 比如 *.txt 可以匹配所有以 .txt 结尾的文件。
  • ?:匹配单个字符。比如 file?.txt 可以匹配 file1.txt、fileA.txt,但不能匹配 file10.txt。
  • [ ]:匹配括号内的任意一个字符。比如 [abc] 匹配 a、b 或 c。[a-z] 匹配任意小写字母。[0-9] 匹配任意数字。

15. 复制命令

  • cp source_file destination_file:将 source_file 复制到 destination_file。
  • 参数 -r:递归复制目录及其内容。
  • 覆盖复制 \cp -f source_file destination_file:强制覆盖目标文件而不提示确认。

16. 移动命令

  • mv source_file destination_file:将 source_file 移动到 destination_file,或重命名文件。

17. 链接命令

  • 软链接
    • ln -s target_file link_name:创建一个指向 target_file 的软链接,名为 link_name。
  • 硬链接
    • ln target_file link_name:创建一个指向 target_file 的硬链接,名为 link_name。

软连接类似于 Windows 系统中的快捷方式,而硬链接则是文件的另一个名称,指向相同的数据块。

18. 查看文件内容

  • cat file_name:显示文件的全部内容。
  • 参数 -n:显示行号。
  • less file_name:分页显示文件内容,支持向前和向后翻页。
  • more file_name:分页显示文件内容,只能向前翻页。
  • head -n number file_name:显示文件的前 number 行。
  • tail -n number file_name:显示文件的后 number 行。
  • tail -f file_name:实时查看文件内容的新增部分,常用于查看日志文件。

19. 统计文件

  • wc file_name:统计文件的行数、字数和字节数。
  • 参数 -l:只统计行数。
  • 参数 -w:只统计字数。
  • 参数 -c:只统计字节数。

20. 查找文件

  • find /path/to/search -options:在指定路径下查找文件或目录。
  • 参数 -name "filename":按名称查找文件,支持通配符。
  • 参数 -iname "filename":按名称查找文件,忽略大小写,支持通配符。
  • 参数 -type:指定查找的文件类型(如 f 表示文件,d 表示目录 ,l 表示快捷方式)。
  • 参数 -size:按文件大小查找文件。
  • 参数 -mtime:按修改时间查找文件。
  • 参数 -user:按文件所有者查找文件。

21. 归档命令

四种常见归档格式:tar、gzip、bzip2、xz
tar 仅归档,不压缩
gzip 压缩率较低,但速度快
bzip2 压缩率较高,但速度较慢
xz 压缩率最高,但速度最慢

一般就用 gzip 就行了,兼顾速度和压缩率

  • 创建 tar 包:tar -cvf archive_name.tar /path/to/directory_or_file

  • 解压 tar 包:tar -xvf archive_name.tar

  • 创建 gzip 压缩包:tar -czvf archive_name.tar.gz /path/to/directory_or_file

  • 解压 gzip 压缩包:tar -xzvf archive_name.tar.gz

  • 创建 bzip2 压缩包:tar -cjvf archive_name.tar.bz2 /path/to/directory_or_file

  • 解压 bzip2 压缩包:tar -xjvf archive_name.tar.bz2

  • 创建 xz 压缩包:tar -cJvf archive_name.tar.xz /path/to/directory_or_file

  • 解压 xz 压缩包:tar -xJvf archive_name.tar.xz

  • 查看压缩包内容:tar -tvf archive_name.tar(适用于所有格式)

  • 解压到指定目录:tar -xvf archive_name.tar -C /path/to/destination

22. 创建用户

  • useradd username:创建一个新用户。
  • 参数 -d /home/username:指定用户的主目录。
  • 参数 -u uid:指定用户的 UID。
  • 参数 -s /bin/bash:指定用户的默认 shell。
  • 参数 -G group1,group2:将用户添加到指定的附加组。

关键文件位置

  • 用户信息文件:/etc/passwd
  • 用户密码文件:/etc/shadow

23. 修改用户

  • usermod options username:修改现有用户的信息。
  • 参数 -d /new/home/username:更改用户的主目录。
  • 参数 -u new_uid:更改用户的 UID。
  • 参数 -s /bin/zsh:更改用户的默认 shell。
  • 参数 -G group1,group2:更改用户的附加组

24. 删除用户

  • userdel username:删除指定用户。
  • 参数 -r:删除用户的主目录和邮件目录。

25. 修改密码

  • 交互式 修改密码:passwd username,系统会提示输入新密码。
  • 非交互式 修改密码:echo "username:new_password" | chpasswd 或者 echo "new_password" | passwd --stdin username(某些系统不支持 --stdin 选项)。

26. 切换用户

  • su - username:切换到指定用户的环境。
  • su -:切换到 root 用户的环境。
  • sudo command:以超级用户权限执行指定命令。

27. 创建用户组

  • groupadd groupname:创建一个新用户组。

28. 将用户添加到用户组

gpasswd -a tom groupname # 添加用户至组
gpasswd -d tom groupname # 从组中删除
gpasswd -A bob groupname # 设置 bob 为组管理员
gpasswd -M "tom,alice" groupname # 批量设置组成员
gpasswd -M "" groupname # 清空组成员

或者用 usermod -aG groupname username 29. 删除用户组

关键文件位置

  • 组信息文件:/etc/group
  • 组的管理文件:/etc/gshadow

29. 修改权限

  • chmod options file_name:修改文件或目录的权限。
  • 参数 +r:添加读权限。
  • 参数 +w:添加写权限。
  • 参数 +x:添加执行权限。
  • 参数 -r:移除读权限。
  • 参数 -w:移除写权限。
  • 参数 -x:移除执行权限。
  • 数字表示法:使用数字表示权限,如 chmod 755 file_name

递归修改权限:chmod -R options directory_name

30. 修改所有者

  • chown owner:group file_name:修改文件或目录的所有者和 所属组。

31. 设置 ACL 权限

  • setfacl -m u:username:rwx file_name:为指定用户设置读、写、执行权限。
  • setfacl -m g:groupname:rwx file_name:为指定用户组设置读、写、执行权限。
  • getfacl file_name:查看文件或目录的 ACL 权限。
  • setfacl -x u:username file_name:移除指定用户的 ACL 权限。
  • setfacl -b file_name:移除文件或目录的所有 ACL 权限。
  • setfacl -R -m u:username:rwx directory_name:递归为目录及其内容设置 ACL 权限。

32. 粘滞位权限

  • 设置粘滞位:chmod o+t directory_name,通常用于公共目录,只有文件所有者或 root 用户可以删除或重命名文件。o 是其他用户的意思,+t 是添加粘滞位权限。

33. SGID 权限

  • 设置 SGID 位:chmod g+s directory_name,新创建的文件将继承目录的组所有权。

34. SUID 权限

  • 设置 SUID 位:chmod u+s file_name,允许用户以文件所有者的权限运行该文件。

35. visudo 命令

  • visudo:安全地编辑 sudoers 文件,防止语法错误导致系统无法使用 sudo 命令。

36. 硬盘相关

  • lsblk:列出系统中的块设备信息。

  • MBR 分区表:支持最多四个主分区或三个主分区加一个扩展分区。

  • fdisk /dev/nvme0n2:用于创建和管理 MBR 分区表。

  • 进去之后是交互式界面,可以输入命令进行分区操作。

  • menu 列出帮助菜单。print 列出当前分区表信息。n 新建分区。d 删除分区。w 保存并退出。q 退出不保存。

  • GPT 分区表:支持最多 128 个主分区,适用于大容量硬盘。

  • parted /dev/nvme0n3:用于创建和管理 GPT 分区表。

  • 进去之后是交互式界面,可以输入命令进行分区操作。

  • mklabel gpt:创建 GPT 分区表。

  • mkpart primary ext4 0% 100%:创建一个从开始到结束的主分区,文件系统类型为 ext4。

  • rm partition_number:删除指定分区。

  • print:列出当前分区表信息。

  • quit:退出 parted 工具。

  • 格式化分区 mkfs.ext4 /dev/nvme0n2p1:将分区格式化为 ext4 文件系统。

  • 查看分区类型 blkid /dev/nvme0n2p1:查看分区的文件系统类型。

  • 临时挂载分区 mount /dev/nvme0n2p1 /mnt:将分区挂载到 /mnt 目录下。

  • 取消挂载分区 umount /mnt:卸载已挂载的分区。

  • 查看已挂载分区 df -h:显示已挂载的文件系统及其使用情况。

  • 开机自动挂载 修改 /etc/fstab 文件,添加类似以下内容:
    /dev/nvme0n2p1 /mnt ext4 defaults 0 0

  • 卸载分区 umount /mnt:卸载已挂载的分区。

  • swap 分区 创建 swap 分区 mkswap /dev/nvme0n2p3:将分区格式化为 swap 类型。

  • 启用 swap 分区 swapon /dev/nvme0n2p3:启用 swap 分区。

  • 查看 swap 使用情况 swapon -s:显示当前启用的 swap 分区信息。

  • 关闭 swap 分区 swapoff /dev/nvme0n2p3:禁用 swap 分区。

  • free -h:显示内存和 swap 的使用情况。

  • 开机自动启用 swap 修改 /etc/fstab 文件,添加类似以下内容:
    /dev/nvme0n2p3 none swap sw 0 0

37. 物理卷相关(PV)

  • 创建物理卷 pvcreate /dev/nvme0n2p4:将分区初始化为物理卷。
  • 查看物理卷信息 pvs:显示系统中的物理卷信息。
  • 删除物理卷 pvremove /dev/nvme0n2p4:删除指定的物理卷。!不能删除正在使用的物理卷

38. 卷组相关(VG)

  • 创建卷组 vgcreate vg_name /dev/nvme0n2p4:创建一个名为 vg_name 的卷组,包含指定的物理卷。
  • vgcreate vg02 /dev/nvme0n3p[2-3]:创建一个名为 vg02 的卷组,包含 /dev/nvme0n3p2 和 /dev/nvme0n3p3 两个物理卷。
  • 查看卷组信息 vgs:显示系统中的卷组信息。
  • 扩展卷组 vgextend vg_name /dev/nvme0n2p5:将新的物理卷添加到已有的卷组中。
  • 示例:vgextend vg01 /dev/nvme0n2p5:将 /dev/nvme0n2p5 添加到 vg01 卷组中
  • 删除卷组 vgremove vg_name:删除指定的卷组。!不能删除正在使用的卷组

39. 逻辑卷相关(LV)

  • 创建逻辑卷 lvcreate -L size -n lv_name vg_name:在指定的卷组中创建一个逻辑卷。
  • 示例:lvcreate -L 10G -n lv01 vg01:在 vg01 卷组中创建一个名为 lv01 的 10GB 逻辑卷。
  • 查看逻辑卷信息 lvs:显示系统中的逻辑卷信息
  • mkfs.xfs /dev/vg01/lv01 :将逻辑卷格式化为 xfs 文件系统。
  • 挂载逻辑卷 mount /dev/vg01/lv01 /mnt:将逻辑卷挂载到 /mnt 目录下。
  • 扩展逻辑卷 lvextend -L +size /dev/vg_name/lv_name:扩展逻辑卷的大小。
  • 示例:lvextend -L +5G /dev/vg01/lv01:将 lv01 逻辑卷扩展 5GB。
  • 移除逻辑卷 lvremove /dev/vg_name/lv_name:删除指定的逻辑卷。!不能删除正在挂载使用的逻辑卷

40. 扩容根目录

  • 查看根目录所在的逻辑卷 df -h /:显示根目录的挂载信息。
  • 扩展根目录所在的逻辑卷 lvextend -L +size /dev/vg_name/lv_name:扩展根目录所在的逻辑卷。

41. 软件包(RPM)

  • rpm -qa:列出所有已安装的软件包。
  • rpm -q package_name:查询指定软件包是否已安装。
  • rpm -qi package_name:显示指定软件包的详细信息。
  • rpm -qf /path/to/file:查询文件所属的软件包。
  • rpm -ivh package_file.rpm:安装指定的软件包。
  • rpm -e package_name:卸载指定的软件包。
  • rpm -Uvh package_file.rpm:升级指定的软件包。

42. 软件包(YUM)

  • /etc/yum.repos.d/ 目录下存放 YUM 仓库配置文件。
  • yum list:列出所有可用的软件包。
  • yum list nginx:查询 nginx 软件包的信息。
  • yum search keyword:搜索包含关键字的软件包。
  • yum install package_name:安装指定的软件包。
  • yum remove package_name:卸载指定的软件包。
  • yum update package_name:升级指定的软件包。
  • yum update:升级所有已安装的软件包。
  • yum clean all:清理 YUM 缓存。
  • yum repoinfo:显示已配置的 YUM 仓库信息。

43. 修改 ip 地址

  • nmcli connection show:显示所有网络连接。
  • nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.90.10/24 ipv4.gateway 192.168.90.2 autoconnect yes :修改指定连接的 IP 地址、子网掩码和网关,并设置为自动连接。
  • nmcli connection up ens160:启用指定的网络连接。
  • nmcli connection down ens160:禁用指定的网络连接。
  • 改完记得改 /etc/resolv.conf 文件,添加 DNS 服务器地址,比如 nameserver 192.168.90.2
  • 或者直接去 vim /etc/NetworkManager/system-connections/ens160.nmconnection 文件里改,改完重启 NetworkManager 服务 systemctl restart NetworkManager

44. 修改网关

  • route -n:查看当前路由表。
  • ip route:查看当前路由信息。
  • route add default gw 192.168.90.2:添加默认网关。
  • route del default gw 192.168.90.2:删除默认网关。

45. ssh 服务

  • 安装 ssh 服务 yum install -y openssh-server:安装 OpenSSH 服务器。
  • 启动 ssh 服务 systemctl start sshd:启动 SSH 服务。
  • 设置开机自启 systemctl enable sshd:设置 SSH 服务为开机自启。
  • 查看 ssh 服务状态 systemctl status sshd:查看 SSH 服务的运行状态。
  • 修改 ssh 配置文件 vim /etc/ssh/sshd_config:编辑 SSH 服务的配置文件。
  • 重启 ssh 服务 systemctl restart sshd:重启 SSH 服务以应用配置更改。
  • 使用 ssh 连接远程主机 ssh username@hostname_or_ip:通过 SSH 连接到远程主机。

46. scp 命令

  • 从本地复制文件到远程主机 scp /path/to/local/file username@remote_host:/path/to/remote/directory
  • 从远程主机复制文件到本地 scp username@remote_host:/path/to/remote/file /path/to/local/directory
  • 递归复制目录 scp -r /path/to/local/directory username@remote_host:/path/to/remote/directory

47. 私钥公钥

  • 生成密钥对 ssh-keygen -t rsa -b 2048:生成 RSA 密钥对,密钥长度为 2048 位。
  • 将公钥复制到远程主机 ssh-copy-id username@remote_host:将本地公钥复制到远程主机的授权密钥列表中,实现免密钥登录。
  • 手动复制公钥:将生成的公钥内容(通常位于 ~/.ssh/id_rsa.pub)添加到远程主机的 ~/.ssh/authorized_keys 文件中。

48. 远程同步

  • 使用 rsync 同步本地目录到远程主机 rsync -avz /path/to/local/directory/ username@remote_host:/path/to/remote/directory/
  • 使用 rsync 同步远程主机目录到本地 rsync -avz username@remote_host:/path/to/remote/directory/ /path/to/local/directory/