Linux 内核常用 Shell 命令详解
目录
1. 文件系统操作
1.1 ls - 列出目录内容
# 列出当前目录的所有文件和目录(包括隐藏文件)
ls -la
# 按修改时间排序,最新的在前面
ls -lt
# 递归列出子目录内容
ls -R /home
# 显示文件类型标识符(/表示目录,*表示可执行文件等)
ls -F
1.2 cd - 切换目录
# 切换到用户主目录
cd
# 切换到指定目录
cd /var/log
# 返回上一级目录
cd ..
# 返回上次所在的目录
cd -
1.3 pwd - 显示当前工作目录
# 显示当前完整路径
pwd
# 显示物理路径(不包含符号链接)
pwd -P
1.4 mkdir - 创建目录
# 创建单个目录
mkdir new_folder
# 递归创建多级目录
mkdir -p parent/child/grandchild
# 创建目录并设置权限(755 = rwxr-xr-x)
mkdir -m 755 secure_dir
1.5 touch - 创建空文件或更新文件时间戳
# 创建新文件
touch newfile.txt
# 同时创建多个文件
touch file1.txt file2.txt file3.txt
# 更新文件的访问和修改时间到指定时间
touch -t 202312011200 logfile.log
1.6 cp - 复制文件或目录
# 复制单个文件
cp source.txt destination.txt
# 递归复制整个目录
cp -r /source/directory /destination/directory
# 保留文件属性(权限、时间戳等)进行复制
cp -p important_file.txt backup_file.txt
# 交互式复制(覆盖前询问)
cp -i file.txt existing_file.txt
1.7 mv - 移动或重命名文件
# 重命名文件
mv old_name.txt new_name.txt
# 移动文件到其他目录
mv document.pdf /home/user/documents/
# 交互式移动(覆盖前询问)
mv -i file.txt /target/directory/
1.8 rm - 删除文件或目录
# 删除单个文件
rm unwanted_file.txt
# 强制删除文件(不提示确认)
rm -f force_delete.txt
# 递归删除目录及其内容
rm -r old_directory
# 交互式删除(每个文件都询问确认)
rm -i *.tmp
1.9 find - 查找文件
# 在当前目录及子目录中查找所有 .txt 文件
find . -name "*.txt"
# 查找最近7天内修改过的文件
find /home -mtime -7
# 查找大于100MB的文件
find / -size +100M
# 查找并删除所有临时文件
find /tmp -name "*.tmp" -delete
1.10 chmod - 修改文件权限
# 给文件所有者添加执行权限
chmod u+x script.sh
# 设置文件权限为755(rwxr-xr-x)
chmod 755 program
# 递归修改目录及其内容的权限
chmod -R 644 /var/www/html/
# 给组用户和其他用户添加读权限
chmod go+r document.pdf
1.11 chown - 修改文件所有者
# 将文件所有者改为 user1
chown user1 file.txt
# 同时修改所有者和组
chown user1:group1 file.txt
# 递归修改目录及其内容的所有者
chown -R user1:group1 /home/user1/
2. 进程管理
2.1 ps - 显示进程状态
# 显示当前终端的所有进程
ps
# 显示所有进程的详细信息
ps aux
# 显示进程树结构
ps axjf
# 显示特定用户的进程
ps -u username
2.2 top - 实时显示系统进程
# 启动top并按CPU使用率排序
top
# 启动top并按内存使用率排序
top -o %MEM
# 显示特定用户的进程
top -u username
2.3 htop - 增强版进程查看器
# 启动htop(需要先安装)
htop
# 显示所有进程树
htop --tree
2.4 kill - 终止进程
# 正常终止进程(发送SIGTERM信号)
kill 1234
# 强制终止进程(发送SIGKILL信号)
kill -9 1234
# 终止进程组
kill -- -1234
2.5 pkill - 根据进程名终止进程
# 终止所有名为firefox的进程
pkill firefox
# 终止特定用户的进程
pkill -u username
# 发送SIGUSR1信号给进程
pkill -USR1 process_name
2.6 pgrep - 根据条件查找进程ID
# 查找名为nginx的进程ID
pgrep nginx
# 查找特定用户的进程ID
pgrep -u username
# 显示进程的完整命令行
pgrep -lf nginx
2.7 nice - 设置进程优先级
# 以较低优先级运行命令(优先级值10)
nice -n 10 ./cpu_intensive_program
# 以较高优先级运行命令(优先级值-10,需要root权限)
sudo nice -n -10 ./important_program
2.8 renice - 修改运行中进程的优先级
# 修改进程ID为1234的优先级为5
renice 5 -p 1234
# 修改特定用户所有进程的优先级
renice 10 -u username
2.9 nohup - 忽略挂起信号运行命令
# 在后台运行程序,即使终端关闭也不会终止
nohup ./long_running_script.sh &
# 将输出重定向到指定文件
nohup ./server.sh > server.log 2>&1 &
3. 网络操作
3.1 ping - 测试网络连通性
# 向指定主机发送4个ICMP包
ping -c 4 www.google.com
# 设置包间隔时间为2秒
ping -i 2 192.168.1.1
# 限制ping包大小为100字节
ping -s 100 www.example.com
3.2 ifconfig - 配置网络接口(已逐渐被ip命令替代)
# 显示所有网络接口信息
ifconfig
# 显示特定接口信息
ifconfig eth0
# 启用网络接口
sudo ifconfig eth0 up
# 禁用网络接口
sudo ifconfig eth0 down
3.3 ip - 现代网络配置工具
# 显示所有网络接口
ip addr show
# 显示路由表
ip route show
# 启用网络接口
sudo ip link set eth0 up
# 为接口分配IP地址
sudo ip addr add 192.168.1.100/24 dev eth0
# 添加默认网关
sudo ip route add default via 192.168.1.1
3.4 netstat - 网络统计信息
# 显示所有监听的端口
netstat -tuln
# 显示网络连接状态
netstat -an
# 显示路由表
netstat -r
# 显示网络接口统计信息
netstat -i
3.5 ss - socket统计信息(netstat的现代替代品)
# 显示所有监听的TCP端口
ss -tuln
# 显示建立的连接
ss -tn
# 显示进程和端口对应关系
ss -tunlp
3.6 curl - 传输数据工具
# 下载网页内容
curl https://www.example.com
# 下载文件并保存为指定名称
curl -o filename.html https://www.example.com
# 发送POST请求
curl -X POST -d "param1=value1¶m2=value2" https://api.example.com
# 跟随重定向
curl -L https://short.url
3.7 wget - 非交互式网络下载器
# 下载单个文件
wget https://example.com/file.zip
# 递归下载整个网站
wget -r https://example.com
# 继续未完成的下载
wget -c https://example.com/largefile.iso
# 从文件中读取URL列表进行下载
wget -i urls.txt
3.8 traceroute - 跟踪数据包路由路径
# 跟踪到目标主机的路由路径
traceroute www.google.com
# 使用ICMP协议进行跟踪
traceroute -I www.example.com
# 限制最大跳数为10
traceroute -m 10 www.example.com
3.9 nslookup - DNS查询工具
# 查询域名的A记录
nslookup www.example.com
# 查询MX记录(邮件服务器)
nslookup -type=mx example.com
# 使用指定DNS服务器查询
nslookup www.example.com 8.8.8.8
3.10 dig - DNS查询工具(更详细的信息)
# 查询域名的A记录
dig www.example.com
# 查询所有DNS记录类型
dig www.example.com ANY
# 使用简短输出格式
dig +short www.example.com
# 查询特定DNS服务器
dig @8.8.8.8 www.example.com
4. 系统信息与管理
4.1 uname - 显示系统信息
# 显示内核名称
uname -s
# 显示内核版本
uname -r
# 显示所有系统信息
uname -a
# 显示机器硬件架构
uname -m
4.2 hostname - 显示或设置主机名
# 显示当前主机名
hostname
# 临时设置主机名
sudo hostname new-hostname
# 显示FQDN(完全限定域名)
hostname -f
4.3 df - 显示磁盘空间使用情况
# 以人类可读格式显示磁盘使用情况
df -h
# 显示inode使用情况
df -i
# 显示特定文件系统的使用情况
df /home
4.4 du - 显示目录空间使用情况
# 显示当前目录各子目录的大小
du -h
# 显示目录总大小
du -sh /var/log
# 显示深度为1的目录大小
du -h --max-depth=1 /home
# 排除特定文件类型
du -h --exclude="*.log" /var
4.5 free - 显示内存使用情况
# 以人类可读格式显示内存信息
free -h
# 显示内存信息并每2秒刷新一次
free -h -s 2
# 显示详细内存统计信息
free -w
4.6 uptime - 显示系统运行时间和负载
# 显示系统运行时间、用户数和负载平均值
uptime
# 显示自上次启动以来的秒数
uptime -s
4.7 who - 显示当前登录用户
# 显示所有登录用户信息
who
# 显示上次系统启动时间
who -b
# 显示当前终端用户
who am i
4.8 w - 显示登录用户及其活动
# 显示详细用户活动信息
w
# 不显示标题行
w -h
# 显示特定用户的活动
w username
4.9 dmesg - 显示内核环缓冲区消息
# 显示所有内核消息
dmesg
# 显示最近10条内核消息
dmesg | tail -10
# 清除内核环缓冲区(需要root权限)
sudo dmesg -C
# 只显示错误和警告消息
dmesg -l err,warn
4.10 lsb_release - 显示Linux发行版信息
# 显示完整的发行版信息
lsb_release -a
# 只显示发行版描述
lsb_release -d
# 只显示发行版代号
lsb_release -c
5. 用户与权限管理
5.1 whoami - 显示当前用户名
# 显示当前登录的用户名
whoami
5.2 id - 显示用户和组信息
# 显示当前用户的UID、GID和所属组
id
# 显示特定用户的信息
id username
# 只显示用户ID
id -u
# 只显示组ID
id -g
5.3 useradd - 创建新用户
# 创建新用户
sudo useradd newuser
# 创建用户并指定主目录
sudo useradd -d /home/newuser newuser
# 创建用户并指定shell
sudo useradd -s /bin/bash newuser
# 创建用户并同时创建同名组
sudo useradd -m -U newuser
5.4 userdel - 删除用户
# 删除用户但保留主目录
sudo userdel username
# 删除用户并删除主目录
sudo userdel -r username
5.5 passwd - 修改用户密码
# 修改当前用户的密码
passwd
# 修改指定用户的密码(需要root权限)
sudo passwd username
# 锁定用户账户
sudo passwd -l username
# 解锁用户账户
sudo passwd -u username
5.6 groupadd - 创建新组
# 创建新组
sudo groupadd newgroup
# 创建组并指定GID
sudo groupadd -g 1001 newgroup
5.7 groupdel - 删除组
# 删除组(组必须为空)
sudo groupdel groupname
5.8 usermod - 修改用户属性
# 将用户添加到指定组
sudo usermod -aG groupname username
# 修改用户的主目录
sudo usermod -d /new/home/dir username
# 修改用户的登录shell
sudo usermod -s /bin/zsh username
# 锁定用户账户
sudo usermod -L username
# 解锁用户账户
sudo usermod -U username
5.9 su - 切换用户身份
# 切换到root用户
su
# 切换到指定用户
su username
# 切换用户并加载完整的环境变量
su - username
5.10 sudo - 以超级用户权限执行命令
# 以root权限执行单个命令
sudo apt update
# 以其他用户身份执行命令
sudo -u username command
# 编辑文件时自动使用合适的编辑器
sudo -e /etc/hosts
# 保持环境变量
sudo -E command
6. 磁盘与存储管理
6.1 fdisk - 磁盘分区工具
# 列出所有磁盘和分区
sudo fdisk -l
# 对指定磁盘进行分区操作
sudo fdisk /dev/sdb
# 显示磁盘的分区表类型
sudo fdisk -l /dev/sda
6.2 mkfs - 创建文件系统
# 在分区上创建ext4文件系统
sudo mkfs.ext4 /dev/sdb1
# 创建带有标签的文件系统
sudo mkfs.ext4 -L "MyData" /dev/sdb1
# 创建xfs文件系统
sudo mkfs.xfs /dev/sdb1
6.3 mount - 挂载文件系统
# 挂载分区到指定目录
sudo mount /dev/sdb1 /mnt/data
# 挂载ISO镜像文件
sudo mount -o loop image.iso /mnt/iso
# 以只读方式挂载
sudo mount -o ro /dev/sdb1 /mnt/data
# 挂载所有/etc/fstab中定义的文件系统
sudo mount -a
6.4 umount - 卸载文件系统
# 卸载挂载点
sudo umount /mnt/data
# 强制卸载(即使设备正忙)
sudo umount -f /mnt/data
# 懒卸载(立即卸载,稍后清理)
sudo umount -l /mnt/data
6.5 blkid - 显示块设备属性
# 显示所有块设备的UUID和文件系统类型
sudo blkid
# 显示特定设备的信息
sudo blkid /dev/sda1
6.6 lsblk - 列出块设备
# 以树状结构显示所有块设备
lsblk
# 显示设备的文件系统类型
lsblk -f
# 显示设备的UUID
lsblk -o NAME,UUID,FSTYPE,MOUNTPOINT
6.7 df - 磁盘空间使用情况(已在系统信息部分介绍)
6.8 du - 目录空间使用情况(已在系统信息部分介绍)
6.9 badblocks - 检查磁盘坏块
# 只读检查磁盘坏块
sudo badblocks -v /dev/sdb
# 读写测试(会破坏数据,谨慎使用)
sudo badblocks -w -v /dev/sdb
6.10 fsck - 文件系统检查和修复
# 检查并修复文件系统(设备必须未挂载)
sudo fsck /dev/sdb1
# 自动修复所有错误
sudo fsck -y /dev/sdb1
# 只检查不修复
sudo fsck -n /dev/sdb1
7. 文本处理与搜索
7.1 cat - 连接并显示文件内容
# 显示文件内容
cat file.txt
# 合并多个文件
cat file1.txt file2.txt > combined.txt
# 显示行号
cat -n script.sh
# 显示非打印字符
cat -A hidden_chars.txt
7.2 less - 分页查看文件
# 分页查看大文件
less large_file.log
# 在查看时搜索关键词
less +/search_term file.txt
# 显示行号
less -N file.txt
7.3 head - 显示文件开头部分
# 显示文件前10行
head file.txt
# 显示文件前20行
head -n 20 file.txt
# 显示多个文件的开头
head file1.txt file2.txt
7.4 tail - 显示文件末尾部分
# 显示文件最后10行
tail file.log
# 显示文件最后20行
tail -n 20 file.log
# 实时监控文件变化(常用于日志监控)
tail -f /var/log/syslog
# 从第100行开始显示到文件末尾
tail -n +100 file.txt
7.5 grep - 文本搜索
# 在文件中搜索包含"error"的行
grep "error" logfile.txt
# 忽略大小写搜索
grep -i "ERROR" logfile.txt
# 显示匹配行的行号
grep -n "warning" config.conf
# 递归搜索目录中的所有文件
grep -r "function_name" /path/to/code/
# 显示不匹配的行
grep -v "success" logfile.txt
# 统计匹配行的数量
grep -c "error" logfile.txt
7.6 sed - 流编辑器
# 替换文件中的文本(不修改原文件)
sed 's/old/new/g' file.txt
# 直接修改原文件
sed -i 's/old/new/g' file.txt
# 删除包含特定模式的行
sed '/pattern/d' file.txt
# 在匹配行后添加新行
sed '/pattern/a\new line content' file.txt
# 打印特定行范围
sed -n '10,20p' file.txt
7.7 awk - 文本处理语言
# 打印文件的第一列
awk '{print $1}' data.txt
# 打印满足条件的行
awk '$3 > 100 {print $0}' sales.csv
# 计算数值列的总和
awk '{sum += $1} END {print sum}' numbers.txt
# 使用自定义分隔符
awk -F',' '{print $2}' data.csv
7.8 sort - 排序文本
# 按字母顺序排序
sort names.txt
# 按数值大小排序
sort -n numbers.txt
# 逆序排序
sort -r file.txt
# 去除重复行后排序
sort -u duplicates.txt
# 按指定列排序(以冒号分隔)
sort -t: -k3 /etc/passwd
7.9 uniq - 报告或忽略重复行
# 显示唯一行(相邻重复行只显示一次)
uniq file.txt
# 显示重复的行
uniq -d file.txt
# 显示不重复的行
uniq -u file.txt
# 统计每行出现次数
uniq -c file.txt
7.10 wc - 统计文件内容
# 统计文件的行数、单词数和字符数
wc document.txt
# 只统计行数
wc -l file.txt
# 只统计单词数
wc -w file.txt
# 只统计字符数
wc -c file.txt
8. 压缩与归档
8.1 tar - 归档工具
# 创建tar归档文件
tar -cf archive.tar file1 file2 directory/
# 创建gzip压缩的tar文件
tar -czf archive.tar.gz file1 file2
# 创建bzip2压缩的tar文件
tar -cjf archive.tar.bz2 file1 file2
# 解压tar文件
tar -xf archive.tar
# 解压gzip压缩的tar文件
tar -xzf archive.tar.gz
# 列出tar文件内容
tar -tf archive.tar
# 解压到指定目录
tar -xzf archive.tar.gz -C /target/directory/
8.2 gzip - gzip压缩工具
# 压缩文件(原文件会被替换为.gz文件)
gzip file.txt
# 解压gzip文件
gunzip file.txt.gz
# 压缩但保留原文件
gzip -c file.txt > file.txt.gz
# 显示压缩文件信息
gzip -l file.txt.gz
8.3 bzip2 - bzip2压缩工具
# 压缩文件
bzip2 file.txt
# 解压bzip2文件
bunzip2 file.txt.bz2
# 压缩但保留原文件
bzip2 -c file.txt > file.txt.bz2
8.4 zip - zip压缩工具
# 创建zip压缩文件
zip archive.zip file1 file2 directory/
# 递归压缩目录
zip -r archive.zip directory/
# 解压zip文件
unzip archive.zip
# 列出zip文件内容
unzip -l archive.zip
# 解压到指定目录
unzip archive.zip -d /target/directory/
8.5 unzip - zip解压工具(已在上面介绍)
9. 时间与日志管理
9.1 date - 显示和设置系统日期时间
# 显示当前日期和时间
date
# 以特定格式显示日期
date "+%Y-%m-%d %H:%M:%S"
# 设置系统日期时间(需要root权限)
sudo date -s "2023-12-01 14:30:00"
# 显示UTC时间
date -u
9.2 cal - 显示日历
# 显示当前月份的日历
cal
# 显示指定年份的日历
cal 2023
# 显示指定月份和年份的日历
cal 12 2023
9.3 timedatectl - 系统时间和日期控制
# 显示当前时间和时区信息
timedatectl
# 列出所有可用时区
timedatectl list-timezones
# 设置时区
sudo timedatectl set-timezone Asia/Shanghai
# 启用网络时间同步
sudo timedatectl set-ntp true
9.4 journalctl - systemd日志查看器
# 查看所有系统日志
sudo journalctl
# 查看特定服务的日志
sudo journalctl -u nginx
# 查看最近的日志(最后100行)
sudo journalctl -n 100
# 实时监控日志
sudo journalctl -f
# 查看今天的日志
sudo journalctl --since today
# 查看特定时间段的日志
sudo journalctl --since "2023-12-01" --until "2023-12-02"
9.5 logrotate - 日志轮转工具
# 手动执行日志轮转(通常由cron自动执行)
sudo logrotate /etc/logrotate.conf
# 测试logrotate配置文件
sudo logrotate -d /etc/logrotate.conf
# 强制执行日志轮转
sudo logrotate -f /etc/logrotate.conf
9.6 last - 显示最近登录信息
# 显示所有用户的最近登录记录
last
# 显示特定用户的登录记录
last username
# 显示最近10次登录
last -10
# 显示系统重启记录
last reboot
9.7 lastlog - 显示所有用户的最后登录信息
# 显示所有用户的最后登录信息
lastlog
# 显示特定用户的最后登录信息
lastlog -u username
# 显示最近登录的用户
lastlog -t 7 # 最近7天
9.8 history - 显示命令历史
# 显示命令历史
history
# 显示最近10条命令
history 10
# 清除命令历史
history -c
# 将历史写入文件
history -w ~/.bash_history
总结
以上命令涵盖了 Linux 系统管理的各个方面,从基本的文件操作到复杂的系统监控。掌握这些命令将帮助您有效地管理和维护 Linux 系统。建议在实际环境中多加练习,并结合 man 命令查看每个命令的详细手册:
# 查看命令手册
man ls
man grep
man systemctl
记住,Linux 命令的强大之处在于它们可以组合使用,通过管道(|)和重定向(>、>>)来完成复杂的任务。
2458

被折叠的 条评论
为什么被折叠?



