Linux高频实用命令

干开发和运维没有Linux,就好像奈雪的茶没有葡萄,喜茶没有杨梅,毫无灵魂。

但命令太多记肯定是记不全的,冷门的随时可以去查嘛,不过高频实用的还是有必要多记一下,可以显著提高工作效率。


一、系统信息和硬件信息

1、显示系统信息及环境

  • uname -a:显示系统所有相关信息(含内核名称、主机名、版本号及处理器架构)
  • cat /proc/version:查看Linux版本信息
  • cat /proc/loadavg:查看系统负载
  • uptime:查看系统运⾏时间、⽤户数、负载
  • env:查看系统的环境变量
  • lsmod:查看已加载的系统模块
  • top:动态显示cpu/内存/进程等运行情况
  • date:显示系统⽇期时间
  • cal 2023:显示2023年的日历

2、显示硬件信息

  • arch:查看处理器架构
  • cat /proc/cpuinfo:查看CPU信息
  • cat /proc/meminfo:查看内存信息和使用情况
  • lsusb -tv:查看系统USB设备信息
  • lspci -tv:查看系统PCI设备信息
  • sar -u 1 10:查询cpu使⽤情况(1秒⼀次,共10次)
  • sar -d 1 10:查询磁盘性能(1秒⼀次,共10次)

二、磁盘和分区管理

1、查看系统中的磁盘使用情况df/lsblk

  • df -h:显示系统全部磁盘使用量及分区挂载情况
  • lsblk -a:显示系统中所有磁盘设备的使用情况信息
  • lsblk -m:显示系统中磁盘设备的归属及权限信息
  • parted 磁盘名 print:列出磁盘(如/dev/vda)的分区表类型与具体分区数据

2、磁盘分区新增与删除具体步骤

(1)gdisk(针对GPT分区表)

# 通过 lsblk 先找到磁盘,如这里找到的是/dev/vda
lsblk -a
# 再用 parted 来找出内部的分区表类型
parted /dev/vda print
# 最后用 gdisk 来操作分区
root@VM-4-5-ubuntu:~# gdisk /dev/vda
GPT fdisk (gdisk) version 0.8.6

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.            # 找到了 GPT 的分区表!

Command (? for help):    # 这里可以让你输入指令动作,可以按问号 (?) 来查看可用指令
Command (? for help): ?
b       back up GPT data to a file
c       change a partition's name
d       delete a partition           # 删除一个分区
i       show detailed information on a partition
l       list known partition types                # 列出不同操作系统的文件系统类型ID
n       add a new partition          # 增加一个分区
o       create a new empty GUID partition table (GPT)
p       print the partition table    # 打印分区表 (常用)
q       quit without saving changes  # 不储存分区就直接离开 gdisk
r       recovery and transformation options (experts only)
s       sort partitions
t       change a partition's type code
v       verify disk
w       write table to disk and exit # 储存分区操作后离开 gdisk
x       extra functionality (experts only)
?       print this menu
Command (? for help):

# 所有命令都直接打印出来了,直接按照需求操作即可,不用背,最后记得按w储存即可,不确定的操作直接按q退出。


# 新增分区的例子
root@VM-4-5-ubuntu:~# gdisk /dev/vda
Command (? for help): p
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048            6143   2.0 MiB     EF02
   2            6144         2103295   1024.0 MiB  0700
   3         2103296        65026047   30.0 GiB    8E00
# 找出 End(sector) 的号码是很重要的!

Command (? for help): ?  # 查一下增加分区的指令
Command (? for help): n  # 增加一个分区
Partition number (4-128, default 4): 4  # 默认就是 4 号,所以也能 enter 即可!
First sector (34-83886046, default = 65026048) or {+-}size{KMGTP}: 65026048  # 也能 enter
Last sector (65026048-83886046, default = 83886046) or {+-}size{KMGTP}: +1G  # 一定不要 enter,绝对不要使用默认值!
# 因为默认值会将所有的容量用光!
# 这个地方我们不需要自己去计算扇区号码,通过 +容量 的这个方式,
# 就可以让 gdisk 主动去帮你算出最接近你需要的容量的扇区号码喔!

Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): # 使用默认值即可
# 这里在让你选择未来这个分区预计使用的文件系统!默认都是 Linux 文件系统的 8300 
# 文件系统可以通过 l指令 来查询

# 每次新增完毕后,要立即重新查看一下当前分区表
Command (? for help): p
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048            6143   2.0 MiB     EF02
   2            6144         2103295   1024.0 MiB  0700
   3         2103296        65026047   30.0 GiB    8E00
 4        65026048        67123199   1024.0 MiB  8300  Linux filesystem
 
# 最后按 w 写入磁盘分区表,不过磁盘目前正在使用当中,因此系统无法立即载入新的分区表
cat /proc/partitions  # 显示系统核心的分区记录
 
# 最后一步,用 partprobe 更新 Linux 核心的分区表信息
partprobe -s
# 重新查看磁盘分区状态
lsblk /dev/vda


# 删除分区的例子(比如删新增的4号分区)
## 先卸载分区
umount /dev/vda4
## 再删除分区
gdisk /dev/vda
Command (? for help): d
Partition number (1-6): 4
Command (? for help): p
Command (? for help): w
partprobe -s
lsblk /dev/vda

(2)fdisk(针对MBR分区表)

fdisk与gdisk大同小异,只不过一个使用 ? 作为指令提示数据,一个使用 m 作为提示。
命令:fdisk /dev/sda

3、磁盘格式化/创建文件系统(mkfs

  • mkfs.xfs /dev/vda4:在分区创建 xfs 文件系统
  • mkfs.ext4 /dev/vda5:在分区创建 ext4 文件系统
  • mkfs -t vfat /dev/vda5:将已经格式化的分区重新格式化为 vfat 文件系统

4、文件系统挂载与卸载(mount/umount

  • mount -a:依照配置文件/etc/fstab的数据将所有未挂载的磁盘都挂载上来。
  • mount /dev/vda2 挂载目标:把vda2盘挂载到目标文件夹,目标文件夹必须为空
  • mount -t ntfs /dev/sdc1 /mnt/usbhd1:指定⽂件系统类型(如ntfs)挂载
  • mount -o loop xxx.iso /mnt/cdrom:挂载iso⽂件
  • mount /dev/sda1 /mnt/usbdisk:挂载U盘/闪存设备
  • umount -v /dev/sda1:通过设备路径卸载U盘
  • umount -v /mnt/usbdisk:通过挂载点卸载U盘

5、设置开机挂载(/etc/fstab

每次服务器或者电脑重启都让系统能自动把文件系统挂载好,需要在这里设置。

# 每一行为一个挂载配置,共包含六项
# [设备/UUID等]  [挂载点/目录]  [文件系统]  [文件系统参数]  [能否被 dump 备份指令作用]  [是否以 fsck 检验扇区]
# 例子:
vi /etc/fstab
/dev/vda2 / ext4 defaults 0 1

6、查看占用空间大小和清理空间

# 查看某个目录的使用空间大小
du -sh /目录绝对路径

# 查看某目录下占用空间最多的文件或目录。取前10个。需要先进入该目录下。
du -cks * | sort -rn | head -n 10

# 查看某目录所有的文件占用大小
du -h --max-depth=2 /目录绝对路径

# 查看某目录下各文件夹的占用空间大小
sudo du -sh /目录绝对路径/* --exclude proc

# 当空间用完以后,清理空间方法
sudo ls -al /var/log | grep .gz

三、用户和用户组

1、用户管理

  • useradd 用户名:创建用户
  • userdel -r 用户名:删除用户
  • id 用户名:查看用户信息(uid、gid、用户组)
  • usermod -g 组名 用户名:修改用户的用户组
  • usermod -s 登录shell路径 -d 用户主目录 用户名:修改用户的登录shell和主目录
  • su - 用户:切换用户,直接su就是切换到root
  • passwd:修改密码
  • w:查看活动用户
  • crontab -l:查看当前用户的计划任务
  • cut -d: -f1 /etc/passwd:查看系统所有用户

2、用户组管理

  • groupadd 用户组名:创建用户组
  • groupdel 用户组名:删除用户组
  • groupmod -n 新组名 旧组名:用户组改名
  • cut -d: -f1 /etc/group:查看系统所有组

四、网络管理

1、网络配置

  • ip addr show:查看当前IP
  • ifconfig 网卡名:查看某网卡的配置
  • cat /proc/net/dev:查看当前正在使用的网卡
  • dhclient 网卡名:以dhcp模式启⽤网卡
  • ifup 网卡名:启⽤网卡
  • ifdown 网卡名:禁用网卡
  • route -n:查看路由表
  • ifconfig 网卡名 IP netmask 子网掩码:配置IP地址
  • resolvectl status:查看当前的DNS
  • vi /etc/resolv.conf:修改DNS,写入内容如:nameserver 8.8.8.8
  • vi /etc/netplan/00-installer-config.yaml:配置IP、网关、DNS(debian系)

    eno1:
    dhcp4: false #注意冒号后有空格
    addresses:
      - 192.168.21.250/24 
    routes:
      - to: default
        via: 192.168.21.254 #默认路由,填默认网关
    nameservers:    #DNS
        addresses: [8.8.8.8,223.5.5.5]
        
    # 编辑完后运行
    netplan apply

2、联网程序查看(netstat

  • netstat -lnutp:查看所有监听端口、未用域名解析的、UDP、TCP的状态信息
  • netstat -anutp:查看所有监听和未监听的、未用域名解析的、UDP、TCP的状态信息
  • netstat -lnutp | grep 端口号:查看正在占用指定端口号的程序的信息

五、进程管理(ps/kill

  • ps -ef:显示全部用户的所有进程
  • ps aux:跟上面一样,不过信息上多显示了CPU和内存的使用率。但是aux会截断command列,所以结合grep使用时可能会漏显示进程,而-ef不会。不过一般用了也问题不大。
  • ps -ef | grep mysql:显示全部用户的处于运行状态的mysql进程
  • ps -u 用户名:显示某用户下的全部进程
  • ps aux | sort -rnk 3:显示全部用户的所有进程,依据CPU占用率(第三列)情况降序排序(这个不能换成-ef)
  • ps aux | sort -rnk 4:显示全部用户的所有进程,依据内存使用率(第四列)情况降序排序(这个不能换成-ef)
  • kill -s 进程名:kill指定名称的进程
  • kill -s pid:kill指定pid的进程

六、系统服务(systemctl

  • systemctl list-units --failed:列出所有加载失败的 Unit
  • systemctl list-units --type=service:列出所有正在运行的、类型为 service 的 Unit
  • systemctl daemon-reload:重新加载配置文件

七、文件和目录管理

1、目录跳转(cd/pwd

  • cd ..:回上级目录
  • cd:跳转个人主目录
  • cd -:回上⼀步操作时所在⽬录
  • pwd:显示当前所在目录

2、显示文件(ls

  • ls:显示所有非隐藏文件
  • ls -a:显示所有文件及目录 (包括以“.”开头的隐藏文件)
  • ls -F:查看⽬录中内容(显示是⽂件还是⽬录)
  • ls -tl:按长格式显示并根据最后的修改时间排序
  • ls -itl:按长格式显示并根据最后的修改时间排序,同时在第一列多显示一项文件inode号码。
  • 注:还有常见的ll命令其实就是ls -l的别称

3、创建目录(mkdir

  • mkdir dir1 dir2 dir3:同时创建多个目录
  • mkdir -m 777 dir4:创建目录并赋全部读写权限

4、删除文件或目录(rm/rmdir

  • rm -rf /目录:递归强制删除某个目录下的子文件和子目录,目录为/*时就是删库跑路离职小妙招了
  • rmdir -pv /父/子:删除空的子目录(子目录非空会报错),如果子目录删除后父目录为空,则一并删除父目录。-v作用是显示删除过程。

5、复制/移动 文件或目录(cp/mv

  • 复制cp

    • cp -a old.file new.file:复制某个文件时,保留其原始权限及用户归属信息
    • cp 1.file 2.file /绝对路径:将多个文件一同复制到指定目录中,如已有目标文件名称则默认询问是否覆盖
    • cp -f 1.file /绝对路径:复制到指定目录,如有重复项强制覆盖
  • 移动/剪切mv

    • 基本操作跟上面cp一样
    • mv -u 1.file /绝对路径:当源文件比目标文件新,或者目标文件不存在时,才执行移动操作

6、文件链接(ln

硬链接:每个文件都会占用一个inode,硬链接就是让多个文件名对应到同一个inode号码,这些文件除了名字不一样别的信息一模一样。但也有限制,不能跨文件系统,不能链接目录。
符号链接(软链接):就是快捷方式,建立一个独立文件指向链接的文件,它们有不同的inode号,源文件被删除这个符号链接文件也就打不开了。而对符号链接文件的所有修改,其实就是对源文件的修改。
  • ln 原文件绝对路径 目标文件绝对路径:建立硬链接
  • ln -s 原文件绝对路径 目标文件绝对路径:建立文件符号链接
  • ln -s 原目录绝对路径 目标目录绝对路径:建立目录符号链接

7、搜索指定文件(find

  • find /绝对路径 -name "*.conf":搜索绝对路径目录下所有.conf格式的文件
  • find /绝对路径 -user 用户名:在绝对路径目录中搜索所有属于指定用户的文件
  • find /绝对路径 -name "*.mp4" -exec rm -rf {} \;:搜索绝对路径目录下所有.mp4格式的文件并删除,注意,这是个shell语句后面一定要加分号。

8、文件权限设置(chmod

  • chmod ugo+rwx 文件/目录路径:设置文件/⽬录所有者(u)、群组(g)及其他⼈(o)的读(r)写(w)执⾏(x)权限。
  • chmod go-rwx 文件/目录路径:移除群组(g)与其他⼈(o)对文件/⽬录的读写执⾏权限
  • chmod 777 文件/目录路径:设置文件/目录的读写权限(777为开放全部权限)
  • chown 用户名 文件路径:改变⽂件的所有者属性
  • chown -R 用户名 目录路径:改变目录的所有者属性
  • chgrp 组名 文件路径:改变文件群组

9、查看文档内容和输出到控制台(cat/tail/echo

  • cat -n 文件名.txt:查看某个文件的内容,并显示行号
  • tail -n 15 文件的绝对路径:一般看日志时候用,显示文件尾部的后15行内容(不设定数字则默认显示后10行)
  • tail -f 文件的绝对路径:持续刷新显示某个文件尾部的后10行内容
  • echo $变量名:输出变量的值如$PATH
  • echo $?:输出上一条命令执行返回的状态值,正确为0,有问题为非0

10、文本搜索工具(grep

  • grep 关键词 文件1的绝对路径 文件2的绝对路径:搜索多个文件,输出包含关键词的内容
  • grep -n 正则表达式 文件的绝对路径:搜索文件,输出满足正则表达式的内容,并输出位置的行号及内容
  • grep -v 关键词 文件的绝对路径:搜索文件,输出不包含关键词的内容
  • grep -srl 关键词 /目录:在目录及子目录下递归搜索,不提示未找到的目录,只列出匹配的文件名,不输出具体的行
  • grep -x 关键词 文件的绝对路径:精确匹配文件,与关键词一模一样的内容才输出
  • grep -q 关键词 文件的绝对路径:搜索文件,包含关键词返回状态值0,不包含返回状态值1

11、文本比对工具(comm

  • comm -1 file1 file2:⽐较两个⽂件的内容(去除'file1'所含内容)
  • comm -2 file1 file2:⽐较两个⽂件的内容(去除'file2'所含内容)
  • comm -3 file1 file2:⽐较两个⽂件的内容(去除两⽂件共有部分)

八、打包和解压

1、.zip

  • zip xxx.zip 文件/目录:将文件/目录压缩⾄zip包
  • zip -r xxx.zip file1 file2 dir1:将多个⽂件+⽬录压成zip包
  • unzip xxx.zip:解压zip包

2、.tar/.tar.gz

Linux的压缩过程为先打包(c),再压缩。打包就是将一大堆文件或目录变成一个总的文件(.tar)。

  • tar -cvf 打包后的名字.tar 文件/目录:把文件/目录打包成.tar,显示执行过程,不进行压缩
  • tar -cvf 打包后的名字.tar file1 file2 dir1:把多个文件和目录打包成.tar,显示执行过程,不进行压缩
  • tar tvf 压缩包名.tar.gz:查看某个压缩包(.tar.gz和.tar都可以)的文件信息(无需解压)
  • tar czvf 压缩包名.tar.gz /要打包目录的绝对路径:使用gzip压缩格式将某个目录打包成.tar.gz
  • tar xvf 压缩包名.tar.gz -C /绝对路径:解压某个压缩包(.tar.gz和.tar都可以)到指定目录,没有-C就是解压到当前目录

3、.tar.bz2/.bz2

  • tar -cvfj xxx.tar.bz2 dir:创建tar.bz2压缩包
  • tar -jxvf xxx.tar.bz2:解压tar.bz2压缩包
  • bzip2 filename:创建.bz2压缩包
  • bunzip2 xxx.bz2:解压.bz2压缩包

4、.tar.gz/.gz

  • tar -cvfz xxx.tar.gz dir:创建gzip压缩包
  • tar -zxvf xxx.tar.gz:解压gzip压缩包
  • gzip filename:创建.gz压缩包
  • gunzip xxx.gz:解压gzip压缩包

九、程序包管理

1、RPM(RedHat

  • rpm -qa:查看已安装的rpm包
  • rpm -ivh xxx.rpm:安装rpm包
  • rpm -ivh --nodeps xxx.rpm:安装rpm包时忽略依赖关系
  • rpm -e xxx:卸载程序包
  • rpm -Uvh pkg_name:升级rpm包(若未安装则会安装)

2、YUM(Fedora、RedHat、CentOS

  • yum repolist enabled:显示可⽤的源仓库
  • yum list installed:查看当前系统已安装包
  • yum check-update:查看可升级的软件包
  • yum update pkg_name:升级指定软件包
  • yum remove pkg_name:删除软件包
  • yum clean all:清除缓存,通常用于根据需要清除磁盘空间,一般作为定期计划维护的一部分。

3、DPKG(Debian

  • dpkg -i xxx.deb:安装/更新deb包
  • dpkg -r pkg_name:移除deb包(保留配置)
  • dpkg -P pkg_name:移除deb包(不保留配置)
  • dpkg -l:查看系统中已安装deb包

4、APT(Debian、Ubuntu、deepin

  • apt-get install pkg_name:安装/升级软件包
  • apt-get remove pkg_name:卸载软件(保留配置)
  • apt-get purge pkg_name:卸载软件(不保留配置)
  • apt-get upgrade:更新已安装软件包
  • apt-get clean:清理缓存,通常用于根据需要清除磁盘空间,一般作为定期计划维护的一部分。
无标签