干开发和运维没有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 16、查看占用空间大小和清理空间
# 查看某个目录的使用空间大小
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就是切换到rootpasswd:修改密码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.8vi /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)
复制
cpcp -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 $变量名:输出变量的值如$PATHecho $?:输出上一条命令执行返回的状态值,正确为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.gztar 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:清理缓存,通常用于根据需要清除磁盘空间,一般作为定期计划维护的一部分。