干开发和运维没有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
:查看当前IPifconfig 网卡名
:查看某网卡的配置cat /proc/net/dev
:查看当前正在使用的网卡dhclient 网卡名
:以dhcp模式启⽤网卡ifup 网卡名
:启⽤网卡ifdown 网卡名
:禁用网卡route -n
:查看路由表ifconfig 网卡名 IP netmask 子网掩码
:配置IP地址resolvectl status
:查看当前的DNSvi /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
:列出所有加载失败的 Unitsystemctl list-units --type=service
:列出所有正在运行的、类型为 service 的 Unitsystemctl 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
:清理缓存,通常用于根据需要清除磁盘空间,一般作为定期计划维护的一部分。