46 KiB
Linux 常用命令详解
目录
文件和目录操作
ls - 列出目录内容
基本语法: ls [选项] [目录]
常用选项:
-l详细信息(长格式)-a显示隐藏文件-h人类可读的文件大小-t按修改时间排序-r反向排序-R递归显示子目录
实例:
# 基本用法
ls
# 输出:Documents Downloads Music Pictures Videos
# 详细信息显示
ls -l
# 输出:
# drwxr-xr-x 2 user user 4096 Dec 24 10:30 Documents
# drwxr-xr-x 2 user user 4096 Dec 24 09:15 Downloads
# -rw-r--r-- 1 user user 1024 Dec 24 08:45 readme.txt
# 显示所有文件(包括隐藏文件)
ls -la
# 输出:
# total 24
# drwxr-xr-x 3 user user 4096 Dec 24 10:30 .
# drwxr-xr-x 3 root root 4096 Dec 23 15:20 ..
# -rw------- 1 user user 220 Dec 23 15:20 .bash_logout
# -rw------- 1 user user 3771 Dec 23 15:20 .bashrc
# 按大小排序,人类可读格式
ls -lhS
# 输出:
# -rw-r--r-- 1 user user 2.1M Dec 24 10:30 large_file.zip
# -rw-r--r-- 1 user user 512K Dec 24 09:15 medium_file.pdf
# -rw-r--r-- 1 user user 1.0K Dec 24 08:45 small_file.txt
cd - 切换目录
基本语法: cd [目录路径]
特殊符号:
~用户主目录-上一个目录..父目录.当前目录
实例:
# 切换到用户主目录
cd ~
pwd
# 输出:/home/username
# 切换到根目录
cd /
pwd
# 输出:/
# 切换到上级目录
cd ..
pwd
# 输出:/
# 切换到上一个目录
cd /home/username/Documents
cd /tmp
cd -
pwd
# 输出:/home/username/Documents
# 使用相对路径
cd ./subfolder/another_folder
mkdir - 创建目录
基本语法: mkdir [选项] 目录名
常用选项:
-p创建多级目录-m设置权限模式
实例:
# 创建单个目录
mkdir new_folder
# 创建多级目录
mkdir -p project/src/components/ui
# 创建了:project/src/components/ui 整个路径
# 创建多个目录
mkdir folder1 folder2 folder3
# 创建目录并设置权限
mkdir -m 755 public_folder
mkdir -m 700 private_folder
# 验证创建结果
ls -la
# 输出:
# drwxr-xr-x 2 user user 4096 Dec 24 11:00 public_folder
# drwx------ 2 user user 4096 Dec 24 11:00 private_folder
cp - 复制文件和目录
基本语法: cp [选项] 源文件 目标文件
常用选项:
-r递归复制目录-i交互式复制(覆盖前询问)-v显示详细过程-a保持所有属性
实例:
# 复制文件
cp file1.txt file2.txt
# 复制文件到目录
cp file1.txt /home/user/backup/
# 递归复制目录
cp -r source_folder/ destination_folder/
# 交互式复制(防止意外覆盖)
cp -i important.txt backup_important.txt
# 输出:cp: overwrite 'backup_important.txt'? y
# 保持所有属性复制
cp -a original_folder/ backup_folder/
# 复制多个文件到目录
cp file1.txt file2.txt file3.txt /backup/
mv - 移动/重命名文件和目录
基本语法: mv [选项] 源文件 目标文件
常用选项:
-i交互式移动-v显示详细过程-u只在源文件更新时移动
实例:
# 重命名文件
mv oldname.txt newname.txt
# 移动文件到目录
mv file.txt /home/user/documents/
# 移动并重命名
mv old_file.txt /new/location/new_name.txt
# 移动目录
mv old_folder/ /new/location/
# 批量移动文件
mv *.txt /text_files/
# 交互式移动
mv -i file.txt existing_file.txt
# 输出:mv: overwrite 'existing_file.txt'? n
rm - 删除文件和目录
基本语法: rm [选项] 文件名
常用选项:
-r递归删除目录-f强制删除,不询问-i交互式删除-v显示详细过程
实例:
# 删除文件
rm file.txt
# 交互式删除
rm -i important.txt
# 输出:rm: remove regular file 'important.txt'? y
# 删除目录及其内容
rm -r folder/
# 强制删除(危险操作)
rm -rf unwanted_folder/
# 删除特定类型文件
rm *.tmp
rm -f *.log
# 显示删除过程
rm -v file1.txt file2.txt
# 输出:
# removed 'file1.txt'
# removed 'file2.txt'
文本处理命令
cat - 显示文件内容
基本语法: cat [选项] 文件名
常用选项:
-n显示行号-b显示非空行行号-s压缩空行-A显示所有字符
实例:
# 创建示例文件
echo -e "第一行\n\n第三行\n第四行" > sample.txt
# 基本显示
cat sample.txt
# 输出:
# 第一行
#
# 第三行
# 第四行
# 显示行号
cat -n sample.txt
# 输出:
# 1 第一行
# 2
# 3 第三行
# 4 第四行
# 只显示非空行号
cat -b sample.txt
# 输出:
# 1 第一行
#
# 2 第三行
# 3 第四行
# 连接多个文件
cat file1.txt file2.txt > combined.txt
# 创建文件(Ctrl+D结束输入)
cat > newfile.txt
# 输入内容后按Ctrl+D保存
grep - 文本搜索
基本语法: grep [选项] 模式 文件名
常用选项:
-i忽略大小写-v反向匹配(不包含)-n显示行号-r递归搜索-c只显示匹配行数
实例:
# 创建示例文件
cat > employees.txt << EOF
John Smith, Manager, 50000
Jane Doe, Developer, 45000
Bob Johnson, Manager, 55000
Alice Brown, Designer, 40000
Mike Wilson, Developer, 48000
EOF
# 基本搜索
grep "Manager" employees.txt
# 输出:
# John Smith, Manager, 50000
# Bob Johnson, Manager, 55000
# 忽略大小写搜索
grep -i "manager" employees.txt
# 同上输出
# 显示行号
grep -n "Developer" employees.txt
# 输出:
# 2:Jane Doe, Developer, 45000
# 5:Mike Wilson, Developer, 48000
# 反向匹配
grep -v "Manager" employees.txt
# 输出:
# Jane Doe, Developer, 45000
# Alice Brown, Designer, 40000
# Mike Wilson, Developer, 48000
# 计算匹配行数
grep -c "Developer" employees.txt
# 输出:2
# 使用正则表达式
grep "^[JM]" employees.txt # 以J或M开头的行
# 输出:
# John Smith, Manager, 50000
# Mike Wilson, Developer, 48000
# 递归搜索目录
grep -r "function" /path/to/code/
sed - 流编辑器
基本语法: sed [选项] '命令' 文件名
常用命令:
s/old/new/替换d删除行p打印行a追加行
实例:
# 创建示例文件
cat > data.txt << EOF
Hello World
This is line 2
Hello Universe
This is line 4
EOF
# 基本替换(只替换每行第一个)
sed 's/Hello/Hi/' data.txt
# 输出:
# Hi World
# This is line 2
# Hi Universe
# This is line 4
# 全局替换
sed 's/is/was/g' data.txt
# 输出:
# Hello World
# Thwas was line 2
# Hello Universe
# Thwas was line 4
# 删除包含特定文本的行
sed '/line 2/d' data.txt
# 输出:
# Hello World
# Hello Universe
# This is line 4
# 打印特定行
sed -n '2,3p' data.txt
# 输出:
# This is line 2
# Hello Universe
# 在特定行后添加内容
sed '2a\This is an added line' data.txt
# 输出:
# Hello World
# This is line 2
# This is an added line
# Hello Universe
# This is line 4
# 直接修改文件
sed -i 's/Hello/Hi/g' data.txt
awk - 文本处理工具
基本语法: awk 'pattern { action }' 文件名
内置变量:
NR当前行号NF当前行字段数$0整行内容$1,$2,...各字段内容
实例:
# 创建示例数据
cat > sales.txt << EOF
Product Price Quantity
Apple 1.20 100
Banana 0.80 150
Orange 1.50 80
Grape 2.00 60
EOF
# 打印所有行
awk '{print}' sales.txt
# 或
awk '{print $0}' sales.txt
# 打印特定字段
awk '{print $1, $2}' sales.txt
# 输出:
# Product Price
# Apple 1.20
# Banana 0.80
# Orange 1.50
# Grape 2.00
# 计算总价
awk 'NR>1 {total += $2 * $3} END {print "Total:", total}' sales.txt
# 输出:Total: 440
# 添加条件
awk 'NR>1 && $2 > 1.00 {print $1, "is expensive"}' sales.txt
# 输出:
# Apple is expensive
# Orange is expensive
# Grape is expensive
# 格式化输出
awk 'NR>1 {printf "%-10s $%.2f\n", $1, $2}' sales.txt
# 输出:
# Apple $1.20
# Banana $0.80
# Orange $1.50
# Grape $2.00
# 统计行数和字段数
awk 'END {print "Lines:", NR, "Max fields:", NF}' sales.txt
# 输出:Lines: 5 Max fields: 3
sort - 排序文本
基本语法: sort [选项] 文件名
常用选项:
-n数字排序-r反向排序-k指定字段排序-u去重排序-t指定分隔符
实例:
# 创建示例数据
cat > students.txt << EOF
Alice,85,Math
Bob,92,Physics
Charlie,78,Math
David,95,Physics
Eve,88,Chemistry
EOF
# 基本排序(按字母顺序)
sort students.txt
# 输出:
# Alice,85,Math
# Bob,92,Physics
# Charlie,78,Math
# David,95,Physics
# Eve,88,Chemistry
# 按第二字段(分数)数字排序
sort -t',' -k2 -n students.txt
# 输出:
# Charlie,78,Math
# Alice,85,Math
# Eve,88,Chemistry
# Bob,92,Physics
# David,95,Physics
# 反向排序(分数从高到低)
sort -t',' -k2 -nr students.txt
# 输出:
# David,95,Physics
# Bob,92,Physics
# Eve,88,Chemistry
# Alice,85,Math
# Charlie,78,Math
# 按学科排序,再按分数排序
sort -t',' -k3,3 -k2,2n students.txt
# 输出:
# Eve,88,Chemistry
# Alice,85,Math
# Charlie,78,Math
# Bob,92,Physics
# David,95,Physics
系统信息和进程管理
ps - 显示进程信息
基本语法: ps [选项]
常用选项:
aux显示所有进程详细信息-ef显示所有进程完整信息-u按用户显示--forest树形显示
实例:
# 显示当前用户进程
ps
# 输出:
# PID TTY TIME CMD
# 1234 pts/0 00:00:01 bash
# 5678 pts/0 00:00:00 ps
# 显示所有进程详细信息
ps aux | head -10
# 输出:
# USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
# root 1 0.0 0.1 77616 8968 ? Ss Dec23 0:02 /sbin/init
# root 2 0.0 0.0 0 0 ? S Dec23 0:00 [kthreadd]
# root 3 0.0 0.0 0 0 ? I< Dec23 0:00 [rcu_gp]
# 查找特定进程
ps aux | grep firefox
# 输出:
# user 12345 2.1 5.4 2547696 437184 ? Sl 10:30 1:23 /usr/bin/firefox
# 按CPU使用率排序
ps aux --sort=-%cpu | head -5
# 输出:显示CPU使用率最高的5个进程
# 按内存使用排序
ps aux --sort=-%mem | head -5
# 输出:显示内存使用最高的5个进程
# 显示进程树
ps --forest
# 输出:
# PID TTY TIME CMD
# 1234 pts/0 00:00:01 bash
# 5678 pts/0 00:00:00 \_ ps
top - 动态显示进程
基本语法: top [选项]
交互命令:
q退出k终止进程M按内存排序P按CPU排序1显示所有CPU核心
实例:
# 基本使用
top
# 输出示例:
# top - 14:30:25 up 1 day, 3:45, 2 users, load average: 0.15, 0.10, 0.05
# Tasks: 234 total, 1 running, 233 sleeping, 0 stopped, 0 zombie
# %Cpu(s): 2.3 us, 1.0 sy, 0.0 ni, 96.4 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st
# MiB Mem : 7936.2 total, 2148.5 free, 3421.8 used, 2365.9 buff/cache
# MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 4102.5 avail Mem
# PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
# 1234 user 20 0 2547696 437184 123456 S 5.3 5.4 1:23.45 firefox
# 5678 user 20 0 987654 234567 98765 S 2.1 2.9 0:45.12 chrome
# 只显示特定用户的进程
top -u username
# 设置刷新间隔(秒)
top -d 2
# 显示指定进程
top -p 1234,5678
htop - 改进的top命令
基本语法: htop [选项]
交互键:
F1帮助F2设置F3搜索F4过滤F5树形视图F6排序F9终止进程F10退出
实例:
# 基本使用(需要先安装:sudo apt install htop)
htop
# htop界面显示:
# - CPU使用率条形图
# - 内存和交换空间使用率
# - 进程列表,支持颜色和交互操作
# - 可以用鼠标操作
# 命令行选项
htop -u username # 只显示指定用户进程
htop -d 10 # 设置刷新间隔
kill - 终止进程
基本语法: kill [选项] PID
常用信号:
-9SIGKILL(强制终止)-15SIGTERM(正常终止,默认)-1SIGHUP(重新加载配置)-2SIGINT(中断,Ctrl+C)
实例:
# 查找要终止的进程
ps aux | grep firefox
# 输出:user 12345 2.1 5.4 2547696 437184 ? Sl 10:30 1:23 firefox
# 正常终止进程
kill 12345
# 强制终止进程
kill -9 12345
# 按进程名终止
killall firefox
# 终止多个进程
kill 12345 67890 13579
# 发送特定信号
kill -HUP 12345 # 重新加载配置
# 显示所有可用信号
kill -l
# 输出:
# 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
# 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
# 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
jobs - 作业控制
基本语法: jobs [选项]
相关命令:
bg将作业放到后台fg将作业调到前台nohup不挂断运行
实例:
# 启动后台作业
sleep 300 &
# 输出:[1] 12345
# 查看作业状态
jobs
# 输出:[1]+ Running sleep 300 &
# 暂停当前作业(Ctrl+Z)
vim large_file.txt
# 按Ctrl+Z暂停
# 输出:[2]+ Stopped vim large_file.txt
# 查看所有作业
jobs
# 输出:
# [1]- Running sleep 300 &
# [2]+ Stopped vim large_file.txt
# 将作业调到前台
fg %2
# vim回到前台
# 将停止的作业放到后台运行
bg %2
# 使用nohup运行不挂断命令
nohup long_running_script.sh &
# 输出:nohup: ignoring input and appending output to 'nohup.out'
网络命令
ping - 测试网络连通性
基本语法: ping [选项] 目标主机
常用选项:
-c指定ping次数-i指定间隔时间-s指定数据包大小-t设置TTL值
实例:
# 基本ping测试
ping google.com
# 输出:
# PING google.com (172.217.160.142) 56(84) bytes of data.
# 64 bytes from lga25s62-in-f14.1e100.net (172.217.160.142): icmp_seq=1 ttl=117 time=12.3 ms
# 64 bytes from lga25s62-in-f14.1e100.net (172.217.160.142): icmp_seq=2 ttl=117 time=11.8 ms
# 指定ping次数
ping -c 3 google.com
# 输出:发送3个包后停止
# 设置包大小
ping -s 1000 google.com
# 输出:发送1000字节的数据包
# 设置间隔时间
ping -i 2 google.com
# 输出:每2秒发送一个包
# ping本地回环
ping localhost
# 或
ping 127.0.0.1
# 输出:
# PING localhost (127.0.0.1) 56(84) bytes of data.
# 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.045 ms
# 统计信息
ping -c 5 google.com
# 最终输出统计:
# --- google.com ping statistics ---
# 5 packets transmitted, 5 received, 0% packet loss, time 4006ms
# rtt min/avg/max/mdev = 11.234/12.567/13.890/0.892 ms
wget - 下载文件
基本语法: wget [选项] URL
常用选项:
-O指定输出文件名-c断点续传-r递归下载-P指定下载目录--limit-rate限制下载速度
实例:
# 基本下载
wget https://example.com/file.zip
# 输出:
# --2023-12-24 14:30:25-- https://example.com/file.zip
# Resolving example.com (example.com)... 93.184.216.34
# Connecting to example.com (example.com)|93.184.216.34|:443... connected.
# HTTP request sent, awaiting response... 200 OK
# Length: 1048576 (1.0M) [application/zip]
# Saving to: 'file.zip'
# file.zip 100%[==============>] 1.00M 2.34MB/s in 0.4s
# 指定输出文件名
wget -O myfile.zip https://example.com/file.zip
# 断点续传
wget -c https://example.com/largefile.iso
# 后台下载
wget -b https://example.com/largefile.iso
# 输出:Continuing in background, pid 12345.
# 限制下载速度
wget --limit-rate=200k https://example.com/file.zip
# 下载整个网站(谨慎使用)
wget -r -np -k https://example.com/
# 设置用户代理
wget --user-agent="Mozilla/5.0" https://example.com/file.zip
# 设置重试次数
wget --tries=3 https://example.com/file.zip
curl - 数据传输工具
基本语法: curl [选项] URL
常用选项:
-o输出到文件-O使用远程文件名-L跟随重定向-H添加请求头-d发送POST数据
实例:
# 基本GET请求
curl https://api.github.com/users/octocat
# 输出:JSON格式的用户信息
# 保存到文件
curl -o user.json https://api.github.com/users/octocat
# 使用原文件名保存
curl -O https://example.com/file.zip
# 跟随重定向
curl -L https://github.com
# 显示详细信息
curl -v https://httpbin.org/get
# 输出:
# * Trying 54.175.219.8:443...
# * Connected to httpbin.org (54.175.219.8) port 443 (#0)
# * ALPN, offering h2
# * ALPN, offering http/1.1
# > GET /get HTTP/1.1
# > Host: httpbin.org
# > User-Agent: curl/7.68.0
# > Accept: */*
# POST请求发送JSON数据
curl -X POST -H "Content-Type: application/json" \
-d '{"name":"John","age":30}' \
https://httpbin.org/post
# 上传文件
curl -X POST -F "file=@/path/to/file.txt" https://httpbin.org/post
# 设置请求头
curl -H "Authorization: Bearer token123" \
-H "Accept: application/json" \
https://api.example.com/data
# 测试网站响应时间
curl -w "Total time: %{time_total}s\n" -o /dev/null -s https://google.com
# 输出:Total time: 0.123456s
netstat - 显示网络连接
基本语法: netstat [选项]
常用选项:
-a显示所有连接-t显示TCP连接-u显示UDP连接-l只显示监听端口-n显示数字地址-p显示进程信息
实例:
# 显示所有网络连接
netstat -a | head -10
# 输出:
# Active Internet connections (servers and established)
# Proto Recv-Q Send-Q Local Address Foreign Address State
# tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
# tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
# 显示监听端口
netstat -tlnp
# 输出:
# Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
# tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd
# tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 5678/mysqld
# 显示TCP连接状态统计
netstat -st
# 输出:
# Tcp:
# 12345 active connections openings
# 67890 passive connection openings
# 123 failed connection attempts
# 查看特定端口
netstat -tlnp | grep :80
# 输出:tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 9876/apache2
# 显示路由表
netstat -rn
# 输出:
# Kernel IP routing table
# Destination Gateway Genmask Flags MSS Window irtt Iface
# 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
# 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
ss - Socket Statistics
基本语法: ss [选项]
常用选项:
-a显示所有socket-t显示TCP socket-u显示UDP socket-l显示监听状态-n不解析服务名-p显示进程信息
实例:
# 显示所有TCP连接
ss -t
# 输出:
# State Recv-Q Send-Q Local Address:Port Peer Address:Port
# ESTAB 0 0 192.168.1.100:22 192.168.1.10:12345
# 显示监听端口
ss -tlnp
# 输出:
# State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
# LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
# LISTEN 0 80 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=5678,fd=10))
# 显示特定端口的连接
ss -tlnp sport = :80
# 或
ss -tlnp | grep :80
# 显示连接统计
ss -s
# 输出:
# Total: 234 (kernel 456)
# TCP: 12 (estab 3, closed 5, orphaned 0, synrecv 0, timewait 4/0), ports 0
# Transport Total IP IPv6
# * 456 - -
# RAW 0 0 0
# UDP 8 5 3
# TCP 7 4 3
# 按状态过滤
ss -t state established
ss -t state listening
权限和用户管理
chmod - 修改文件权限
基本语法: chmod [选项] 权限 文件名
权限表示方法:
- 数字方式:读(4) + 写(2) + 执行(1)
- 字符方式:r(读) w(写) x(执行)
- 用户类别:u(所有者) g(组) o(其他) a(所有)
实例:
# 创建测试文件
echo "Hello World" > test.txt
ls -l test.txt
# 输出:-rw-r--r-- 1 user user 12 Dec 24 15:00 test.txt
# 数字方式设置权限
chmod 755 test.txt
ls -l test.txt
# 输出:-rwxr-xr-x 1 user user 12 Dec 24 15:00 test.txt
# 字符方式添加执行权限
chmod +x test.txt
ls -l test.txt
# 输出:-rwxr-xr-x 1 user user 12 Dec 24 15:00 test.txt
# 为所有者添加写权限
chmod u+w test.txt
# 为组和其他用户移除写权限
chmod go-w test.txt
# 设置精确权限
chmod u=rwx,g=rx,o=r test.txt
ls -l test.txt
# 输出:-rwxr-xr-- 1 user user 12 Dec 24 15:00 test.txt
# 递归修改目录权限
mkdir -p test_dir/subdir
chmod -R 755 test_dir/
ls -la test_dir/
# 输出:
# total 8
# drwxr-xr-x 3 user user 4096 Dec 24 15:01 .
# drwxr-xr-x 3 user user 4096 Dec 24 15:01 ..
# drwxr-xr-x 2 user user 4096 Dec 24 15:01 subdir
# 常用权限组合
chmod 644 document.txt # 文件:所有者读写,其他只读
chmod 755 script.sh # 脚本:所有者全权限,其他读执行
chmod 700 private_dir/ # 目录:只有所有者可访问
chmod 666 shared.txt # 文件:所有人读写
chown - 修改文件所有者
基本语法: chown [选项] 所有者[:组] 文件名
常用选项:
-R递归修改-v显示详细过程--reference参考其他文件
实例:
# 创建测试文件
echo "test" > ownership_test.txt
ls -l ownership_test.txt
# 输出:-rw-r--r-- 1 user user 5 Dec 24 15:05 ownership_test.txt
# 修改所有者(需要sudo权限)
sudo chown root ownership_test.txt
ls -l ownership_test.txt
# 输出:-rw-r--r-- 1 root user 5 Dec 24 15:05 ownership_test.txt
# 同时修改所有者和组
sudo chown root:root ownership_test.txt
ls -l ownership_test.txt
# 输出:-rw-r--r-- 1 root root 5 Dec 24 15:05 ownership_test.txt
# 只修改组
sudo chown :user ownership_test.txt
ls -l ownership_test.txt
# 输出:-rw-r--r-- 1 root user 5 Dec 24 15:05 ownership_test.txt
# 递归修改目录
sudo mkdir -p /tmp/test_ownership/subdir
sudo chown -R user:user /tmp/test_ownership/
ls -la /tmp/test_ownership/
# 输出:所有文件和子目录的所有者都变为user
# 参考其他文件的所有权
sudo chown --reference=/home/user/reference.txt target.txt
# 显示详细过程
sudo chown -v user:group file.txt
# 输出:changed ownership of 'file.txt' from root:root to user:group
su - 切换用户
基本语法: su [选项] [用户名]
常用选项:
-或-l完全切换用户环境-c执行单个命令-s指定shell
实例:
# 切换到root用户
su -
# 输入root密码后:
# root@hostname:~#
# 切换到指定用户
su username
# 输入username的密码
# 完全切换用户环境
su - username
# 这会加载用户的环境变量和工作目录
# 以其他用户身份执行命令
su -c "ls -la /root/" root
# 输入root密码后执行ls命令
# 查看当前用户
whoami
# 输出:current_username
# 查看用户ID信息
id
# 输出:uid=1000(user) gid=1000(user) groups=1000(user),4(adm),24(cdrom),27(sudo)
# 查看登录用户
who
# 输出:
# user pts/0 2023-12-24 14:30 (192.168.1.10)
# admin pts/1 2023-12-24 15:00 (192.168.1.20)
# 查看系统登录历史
last | head -5
# 输出:
# user pts/0 192.168.1.10 Sun Dec 24 14:30 still logged in
# user pts/0 192.168.1.10 Sun Dec 24 10:15 - 14:25 (04:10)
sudo - 以超级用户执行命令
基本语法: sudo [选项] 命令
常用选项:
-u指定用户-i模拟登录-s启动shell-l列出权限
实例:
# 基本使用
sudo ls /root/
# 输入当前用户密码(不是root密码)
# 以指定用户执行命令
sudo -u www-data ls /var/www/
# 启动root shell
sudo -i
# 或
sudo -s
# 列出当前用户的sudo权限
sudo -l
# 输出:
# User user may run the following commands on hostname:
# (ALL : ALL) ALL
# 编辑sudo配置(危险操作)
sudo visudo
# 不输入密码执行命令(需要配置NOPASSWD)
# 在/etc/sudoers中添加:user ALL=(ALL) NOPASSWD: /bin/ls
sudo ls /root/ # 不需要密码
# 以root身份编辑文件
sudo vim /etc/hosts
# 切换到root环境
sudo su -
# 查看sudo日志
sudo tail /var/log/auth.log | grep sudo
# 输出:sudo命令的执行记录
压缩和归档
tar - 归档文件
基本语法: tar [选项] 归档文件 文件列表
常用选项:
-c创建归档-x解压归档-t列出内容-v显示详细过程-f指定归档文件名-zgzip压缩-jbzip2压缩
实例:
# 创建测试文件和目录
mkdir -p test_archive/dir1/dir2
echo "File 1 content" > test_archive/file1.txt
echo "File 2 content" > test_archive/dir1/file2.txt
echo "File 3 content" > test_archive/dir1/dir2/file3.txt
# 创建tar归档
tar -cvf archive.tar test_archive/
# 输出:
# test_archive/
# test_archive/file1.txt
# test_archive/dir1/
# test_archive/dir1/file2.txt
# test_archive/dir1/dir2/
# test_archive/dir1/dir2/file3.txt
# 查看归档内容
tar -tvf archive.tar
# 输出:
# drwxr-xr-x user/user 0 2023-12-24 15:10 test_archive/
# -rw-r--r-- user/user 15 2023-12-24 15:10 test_archive/file1.txt
# 解压归档
mkdir extract_test
cd extract_test
tar -xvf ../archive.tar
# 创建gzip压缩归档
tar -czvf archive.tar.gz test_archive/
# 输出:归档并压缩过程
# 解压gzip归档
tar -xzvf archive.tar.gz
# 创建bzip2压缩归档
tar -cjvf archive.tar.bz2 test_archive/
# 只提取特定文件
tar -xvf archive.tar test_archive/file1.txt
# 追加文件到已存在的归档
echo "New file" > newfile.txt
tar -rvf archive.tar newfile.txt
# 查看压缩比
ls -lh archive.tar*
# 输出:
# -rw-r--r-- 1 user user 10K Dec 24 15:15 archive.tar
# -rw-r--r-- 1 user user 2.1K Dec 24 15:16 archive.tar.gz
# -rw-r--r-- 1 user user 2.0K Dec 24 15:17 archive.tar.bz2
gzip/gunzip - 压缩/解压文件
基本语法: gzip [选项] 文件名
常用选项:
-d解压(等同于gunzip)-r递归压缩目录-t测试压缩文件-v显示详细信息-1到-9压缩级别
实例:
# 创建测试文件
echo "This is a test file for compression demonstration. It contains some text that can be compressed to show the effectiveness of gzip compression." > test_compression.txt
ls -l test_compression.txt
# 输出:-rw-r--r-- 1 user user 138 Dec 24 15:20 test_compression.txt
# 基本压缩
gzip test_compression.txt
ls -l test_compression.txt.gz
# 输出:-rw-r--r-- 1 user user 95 Dec 24 15:20 test_compression.txt.gz
# 注意:原文件已被替换为压缩文件
# 保留原文件进行压缩
cp test_compression.txt.gz temp.gz
gunzip temp.gz
gzip -c test_compression.txt > test_compression_copy.txt.gz
ls -l test_compression*
# 输出:显示原文件和压缩文件都存在
# 解压文件
gunzip test_compression.txt.gz
# 或
gzip -d test_compression_copy.txt.gz
# 不同压缩级别对比
echo "Testing different compression levels" > compression_test.txt
cp compression_test.txt test1.txt
cp compression_test.txt test9.txt
gzip -1 test1.txt # 最快压缩
gzip -9 test9.txt # 最大压缩
ls -l test*.txt.gz
# 输出:比较不同压缩级别的文件大小
# 测试压缩文件完整性
gzip -t test1.txt.gz
echo $?
# 输出:0(成功)
# 显示压缩信息
gzip -l test1.txt.gz
# 输出:
# compressed uncompressed ratio uncompressed_name
# 45 34 -8.8% test1.txt
# 递归压缩目录中的文件
mkdir -p compress_dir
echo "file1" > compress_dir/file1.txt
echo "file2" > compress_dir/file2.txt
gzip -r compress_dir/
ls -la compress_dir/
# 输出:目录中的所有文件都被压缩
zip/unzip - 创建和解压ZIP文件
基本语法: zip [选项] 压缩文件.zip 文件列表
常用选项:
-r递归压缩目录-v显示详细过程-u更新压缩文件-d从压缩文件中删除-x排除特定文件
实例:
# 创建测试文件结构
mkdir -p zip_test/{docs,images,scripts}
echo "Document 1" > zip_test/docs/doc1.txt
echo "Document 2" > zip_test/docs/doc2.txt
echo "Image placeholder" > zip_test/images/image1.jpg
echo "#!/bin/bash\necho 'Hello World'" > zip_test/scripts/script1.sh
# 创建ZIP文件
zip -r project.zip zip_test/
# 输出:
# adding: zip_test/ (stored 0%)
# adding: zip_test/docs/ (stored 0%)
# adding: zip_test/docs/doc1.txt (stored 0%)
# adding: zip_test/docs/doc2.txt (stored 0%)
# 查看ZIP文件内容
unzip -l project.zip
# 输出:
# Archive: project.zip
# Length Date Time Name
# --------- ---------- ----- ----
# 0 12-24-2023 15:25 zip_test/
# 0 12-24-2023 15:25 zip_test/docs/
# 12 12-24-2023 15:25 zip_test/docs/doc1.txt
# 解压ZIP文件
mkdir extract_zip
cd extract_zip
unzip ../project.zip
# 输出:解压过程详情
# 只解压特定文件
unzip project.zip zip_test/docs/doc1.txt
# 解压时不覆盖已存在文件
unzip -n project.zip
# 静默解压(不显示输出)
unzip -q project.zip
# 测试ZIP文件完整性
unzip -t project.zip
# 输出:testing: zip_test/docs/doc1.txt OK
# 排除特定文件类型
zip -r project_no_images.zip zip_test/ -x "*.jpg"
# 添加文件到现有ZIP
echo "New document" > newdoc.txt
zip project.zip newdoc.txt
# 从ZIP中删除文件
zip -d project.zip newdoc.txt
# 更新ZIP中的文件
echo "Updated document" > zip_test/docs/doc1.txt
zip -u project.zip zip_test/docs/doc1.txt
# 创建密码保护的ZIP文件
zip -r -P mypassword secure.zip zip_test/
# 解压时需要密码:
# unzip secure.zip
查找和搜索
find - 查找文件和目录
基本语法: find [路径] [条件] [动作]
常用条件:
-name按名称查找-type按类型查找-size按大小查找-mtime按修改时间查找-perm按权限查找
实例:
# 创建测试文件结构
mkdir -p find_test/{level1/{level2,level3},old_files}
echo "content" > find_test/test.txt
echo "content" > find_test/level1/data.log
echo "content" > find_test/level1/level2/config.ini
echo "old content" > find_test/old_files/archive.bak
chmod 755 find_test/test.txt
chmod 644 find_test/level1/data.log
# 按名称查找文件
find find_test/ -name "*.txt"
# 输出:find_test/test.txt
# 按名称查找(不区分大小写)
find find_test/ -iname "*.LOG"
# 输出:find_test/level1/data.log
# 按类型查找
find find_test/ -type f # 查找文件
# 输出:所有文件
find find_test/ -type d # 查找目录
# 输出:所有目录
# 按大小查找
find find_test/ -size +0c # 大于0字节的文件
find find_test/ -size -1k # 小于1KB的文件
# 按权限查找
find find_test/ -perm 755
# 输出:find_test/test.txt
# 按修改时间查找
find find_test/ -mtime -1 # 最近1天修改的文件
find find_test/ -mtime +7 # 7天前修改的文件
# 组合条件查找
find find_test/ -name "*.txt" -o -name "*.log"
# 输出:查找.txt或.log文件
find find_test/ -type f -name "*.txt" -size +0c
# 输出:同时满足多个条件的文件
# 执行动作
find find_test/ -name "*.bak" -delete # 删除.bak文件
find find_test/ -type f -exec ls -l {} \;
# 输出:对找到的每个文件执行ls -l
find find_test/ -name "*.log" -exec grep "content" {} \;
# 输出:在找到的.log文件中搜索"content"
# 查找并统计
find find_test/ -type f | wc -l
# 输出:文件总数
# 查找最大的文件
find find_test/ -type f -exec ls -s {} \; | sort -n -r | head -5
# 输出:前5个最大的文件
# 查找空文件和空目录
find find_test/ -empty
# 输出:空文件和空目录
# 按用户查找
find /home -user $USER -name "*.txt" 2>/dev/null
# 输出:当前用户的.txt文件
# 查找并复制
find find_test/ -name "*.txt" -exec cp {} /tmp/ \;
# 将找到的.txt文件复制到/tmp/
locate - 快速查找文件
基本语法: locate [选项] 模式
常用选项:
-i忽略大小写-l限制输出数量-r使用正则表达式-c只显示计数
实例:
# 更新locate数据库(需要sudo权限)
sudo updatedb
# 基本查找
locate test.txt
# 输出:系统中所有名为test.txt的文件路径
# 忽略大小写查找
locate -i TEST.TXT
# 输出:不区分大小写的结果
# 限制结果数量
locate -l 5 "*.log"
# 输出:最多5个.log文件
# 只显示计数
locate -c "*.txt"
# 输出:系统中.txt文件的总数,如:1234
# 使用正则表达式
locate -r "test.*\.txt$"
# 输出:匹配正则表达式的文件
# 查找目录
locate -d bin
# 输出:包含bin的目录路径
# 查找特定路径下的文件
locate "/home/user/*.txt"
# 输出:用户主目录下的.txt文件
# 组合使用
locate "*.log" | grep apache
# 输出:包含apache的.log文件
# 查看locate数据库信息
locate -S
# 输出:
# Database /var/lib/mlocate/mlocate.db:
# 21,100 directories
# 136,371 files
# 7,251,611 bytes in file names
# 3,264,341 bytes used to store database
which - 查找可执行文件路径
基本语法: which [选项] 命令名
常用选项:
-a显示所有匹配项
实例:
# 查找命令位置
which ls
# 输出:/bin/ls
which python3
# 输出:/usr/bin/python3
which git
# 输出:/usr/bin/git
# 显示所有匹配项
which -a python
# 输出:
# /usr/bin/python
# /usr/local/bin/python
# 查找多个命令
which ls grep awk
# 输出:
# /bin/ls
# /bin/grep
# /usr/bin/awk
# 检查命令是否存在
which nonexistent_command
echo $?
# 输出:1(表示未找到)
which ls
echo $?
# 输出:0(表示找到)
# 在脚本中使用
if which docker >/dev/null 2>&1; then
echo "Docker is installed"
else
echo "Docker is not installed"
fi
whereis - 查找命令、源码和手册页
基本语法: whereis [选项] 文件名
常用选项:
-b只查找可执行文件-m只查找手册页-s只查找源码
实例:
# 查找命令的所有相关文件
whereis ls
# 输出:ls: /bin/ls /usr/share/man/man1/ls.1.gz
# 只查找可执行文件
whereis -b ls
# 输出:ls: /bin/ls
# 只查找手册页
whereis -m ls
# 输出:ls: /usr/share/man/man1/ls.1.gz
# 查找多个命令
whereis python3 pip3
# 输出:
# python3: /usr/bin/python3 /usr/lib/python3 /etc/python3 /usr/share/man/man1/python3.1.gz
# pip3: /usr/bin/pip3
# 查找系统工具
whereis gcc
# 输出:gcc: /usr/bin/gcc /usr/lib/gcc /usr/share/man/man1/gcc.1.gz
whereis make
# 输出:make: /usr/bin/make /usr/share/man/man1/make.1.gz
系统监控
df - 显示磁盘空间使用情况
基本语法: df [选项] [文件系统]
常用选项:
-h人类可读格式-T显示文件系统类型-i显示inode使用情况-a显示所有文件系统
实例:
# 基本磁盘使用情况
df
# 输出:
# Filesystem 1K-blocks Used Available Use% Mounted on
# /dev/sda1 20971520 8388608 11534336 43% /
# /dev/sda2 10485760 2097152 7864320 22% /home
# 人类可读格式
df -h
# 输出:
# Filesystem Size Used Avail Use% Mounted on
# /dev/sda1 20G 8.0G 11G 43% /
# /dev/sda2 10G 2.0G 7.5G 22% /home
# tmpfs 2.0G 0 2.0G 0% /dev/shm
# 显示文件系统类型
df -hT
# 输出:
# Filesystem Type Size Used Avail Use% Mounted on
# /dev/sda1 ext4 20G 8.0G 11G 43% /
# /dev/sda2 ext4 10G 2.0G 7.5G 22% /home
# tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm
# 显示inode使用情况
df -i
# 输出:
# Filesystem Inodes IUsed IFree IUse% Mounted on
# /dev/sda1 1310720 131072 1179648 10% /
# /dev/sda2 655360 65536 589824 10% /home
# 显示特定目录的磁盘使用
df -h /home
# 输出:/home目录所在文件系统的使用情况
# 显示所有文件系统
df -a
# 输出:包括虚拟文件系统在内的所有挂载点
# 按使用率排序
df -h | sort -k5 -r
# 输出:按使用率从高到低排序的结果
du - 显示目录空间使用情况
基本语法: du [选项] [目录]
常用选项:
-h人类可读格式-s只显示总计-a显示所有文件-d指定深度--max-depth最大深度
实例:
# 创建测试目录结构
mkdir -p du_test/{dir1,dir2,dir3}
echo "Small file content" > du_test/small.txt
dd if=/dev/zero of=du_test/dir1/large.dat bs=1M count=10 2>/dev/null
echo "Another file" > du_test/dir2/file.txt
dd if=/dev/zero of=du_test/dir3/medium.dat bs=1K count=500 2>/dev/null
# 显示当前目录使用情况
du -h du_test/
# 输出:
# 500K du_test/dir3
# 19M du_test/dir1
# 4.0K du_test/dir2
# 19M du_test
# 只显示总计
du -sh du_test/
# 输出:19M du_test
# 显示所有文件和目录
du -ah du_test/
# 输出:
# 4.0K du_test/small.txt
# 10M du_test/dir1/large.dat
# 10M du_test/dir1
# 4.0K du_test/dir2/file.txt
# 限制显示深度
du -h --max-depth=1 du_test/
# 输出:只显示第一层目录
# 按大小排序
du -ah du_test/ | sort -hr
# 输出:
# 19M du_test
# 10M du_test/dir1/large.dat
# 10M du_test/dir1
# 500K du_test/dir3/medium.dat
# 500K du_test/dir3
# 查找最大的目录
du -h du_test/*/ | sort -hr | head -3
# 输出:前3个最大的子目录
# 显示当前目录下所有子目录大小
du -sh */ 2>/dev/null | sort -hr
# 输出:当前目录下所有子目录按大小排序
# 查找大文件
find du_test/ -type f -exec du -h {} \; | sort -hr | head -5
# 输出:前5个最大的文件
# 排除特定文件类型
du -ah du_test/ --exclude="*.dat"
# 输出:排除.dat文件的大小统计
free - 显示内存使用情况
基本语法: free [选项]
常用选项:
-h人类可读格式-m以MB显示-g以GB显示-s持续监控-t显示总计
实例:
# 基本内存信息
free
# 输出:
# total used free shared buff/cache available
# Mem: 8165536 2048000 3584000 512000 2533536 5324000
# Swap: 2097152 0 2097152
# 人类可读格式
free -h
# 输出:
# total used free shared buff/cache available
# Mem: 7.8G 2.0G 3.4G 500M 2.4G 5.1G
# Swap: 2.0G 0B 2.0G
# 以MB显示
free -m
# 输出:
# total used free shared buff/cache available
# Mem: 7972 2000 3500 500 2472 5200
# Swap: 2048 0 2048
# 显示总计
free -ht
# 输出:
# total used free shared buff/cache available
# Mem: 7.8G 2.0G 3.4G 500M 2.4G 5.1G
# Swap: 2.0G 0B 2.0G
# Total: 9.8G 2.0G 5.4G
# 持续监控(每2秒更新)
free -h -s 2
# 输出:每2秒更新一次的内存使用情况
# 只显示一次更新
free -h -c 1
# 输出:显示一次后退出
# 计算内存使用率
free | awk 'NR==2{printf "Memory Usage: %.2f%%\n", $3*100/$2}'
# 输出:Memory Usage: 25.12%
# 监控内存变化
watch -n 1 'free -h'
# 输出:每秒更新一次的内存监控界面
iostat - I/O统计信息
基本语法: iostat [选项] [间隔] [次数]
常用选项:
-x显示扩展统计-d只显示磁盘统计-c只显示CPU统计-h人类可读格式
实例:
# 安装sysstat包(如果未安装)
# sudo apt install sysstat # Ubuntu/Debian
# sudo yum install sysstat # CentOS/RHEL
# 基本I/O统计
iostat
# 输出:
# Linux 5.4.0 (hostname) 12/24/2023 _x86_64_ (4 CPU)
#
# avg-cpu: %user %nice %system %iowait %steal %idle
# 2.34 0.00 1.23 0.45 0.00 95.98
#
# Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
# sda 12.34 123.45 67.89 1234567 678901
# 显示扩展统计信息
iostat -x
# 输出:
# Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
# sda 5.67 6.78 123.45 67.89 0.12 1.34 2.07 16.50 2.34 4.56 0.03 21.78 10.01 1.23 0.85
# 只显示磁盘统计
iostat -d 2 3
# 输出:每2秒更新一次,共3次
# 显示特定设备
iostat -x sda 1
# 输出:每秒更新sda设备的详细统计
# 人类可读格式
iostat -h
# 输出:以更易读的格式显示大小
# 持续监控高I/O负载
iostat -x 1 | grep -E "Device|sda"
# 输出:持续监控sda设备的I/O情况
# 分析I/O等待时间
iostat -x 1 | awk '/sda/ && $10 > 10 {print strftime("%Y-%m-%d %H:%M:%S"), "High await:", $10}'
# 输出:当I/O等待时间超过10ms时的警告
vmstat - 虚拟内存统计
基本语法: vmstat [选项] [间隔] [次数]
常用选项:
-a显示活跃和非活跃内存-d显示磁盘统计-s显示内存统计摘要-t显示时间戳
实例:
# 基本虚拟内存统计
vmstat
# 输出:
# procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
# r b swpd free buff cache si so bi bo in cs us sy id wa st
# 1 0 0 3584000 123456 2345678 0 0 10 20 100 200 2 1 97 0 0
# 每2秒更新一次,共5次
vmstat 2 5
# 输出:显示5次统计,每次间隔2秒
# 显示活跃和非活跃内存
vmstat -a
# 输出:
# procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
# r b swpd free inact active si so bi bo in cs us sy id wa st
# 0 0 0 3584000 1234567 5678901 0 0 10 20 100 200 2 1 97 0 0
# 显示磁盘统计
vmstat -d
# 输出:
# disk- ------------reads------------ ------------writes----------- -----IO------
# total merged sectors ms total merged sectors ms cur sec
# sda 12345 123 1234567 12345 67890 678 678901 6789 0 12
# 显示内存统计摘要
vmstat -s
# 输出:
# 8165536 K total memory
# 2048000 K used memory
# 5678901 K active memory
# 1234567 K inactive memory
# 显示时间戳
vmstat -t 1
# 输出:每行都带有时间戳的统计信息
# 监控系统负载
vmstat 1 | awk '{if(NR>2 && ($1+$2)>2) print strftime("%H:%M:%S"), "High load:", $1+$2}'
# 输出:当系统负载过高时的警告
# 监控内存使用
vmstat 1 | awk 'NR>2 {if($4<1000000) print strftime("%H:%M:%S"), "Low memory:", $4"K"}'
# 输出:当可用内存低于1GB时的警告
sar - 系统活动报告
基本语法: sar [选项] [间隔] [次数]
常用选项:
-uCPU使用率-r内存使用率-d磁盘活动-n网络统计-q队列长度和负载
实例:
# CPU使用率统计
sar -u 1 3
# 输出:
# 15:30:01 CPU %user %nice %system %iowait %steal %idle
# 15:30:02 all 2.50 0.00 1.25 0.25 0.00 96.00
# 15:30:03 all 3.00 0.00 1.50 0.00 0.00 95.50
# 内存使用率统计
sar -r 1 3
# 输出:
# 15:30:01 kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit
# 15:30:02 3584000 4581536 56.07 123456 2345678 2048000 25.06
# 磁盘活动统计
sar -d 1 3
# 输出:
# 15:30:01 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
# 15:30:02 sda 12.00 123.45 67.89 15.92 0.03 2.50 1.25 1.50
# 网络统计
sar -n DEV 1 3
# 输出:
# 15:30:01 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
# 15:30:02 eth0 123.45 98.76 567.89 432.10 0.00 0.00 0.00
# 系统负载和队列长度
sar -q 1 3
# 输出:
# 15:30:01 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
# 15:30:02 1 234 0.15 0.10 0.05 0
# 查看历史数据(从日志文件)
sar -u -f /var/log/sysstat/sa$(date +%d)
# 输出:当天的CPU使用历史
# 生成报告
sar -A -f /var/log/sysstat/sa$(date +%d) > system_report.txt
# 生成完整的系统活动报告
# 实时监控关键指标
sar -u -r -d 2 | grep -E "Average|%idle|%memused|%util"
# 输出:关键性能指标的实时监控
总结
本文档详细介绍了Linux系统中最常用的命令,包括:
- 文件操作:ls, cd, mkdir, cp, mv, rm等基础文件管理命令
- 文本处理:cat, grep, sed, awk, sort等强大的文本处理工具
- 系统管理:ps, top, kill, jobs等进程和作业控制命令
- 网络工具:ping, wget, curl, netstat等网络诊断和数据传输工具
- 权限管理:chmod, chown, su, sudo等权限和用户管理命令
- 压缩归档:tar, gzip, zip等文件压缩和归档工具
- 查找搜索:find, locate, which, whereis等文件查找命令
- 系统监控:df, du, free, iostat, vmstat, sar等系统性能监控工具
每个命令都提供了详细的语法说明、常用选项、实际示例和输出结果,便于学习和参考。这些命令是Linux系统管理和日常操作的基础,熟练掌握它们将大大提高工作效率。
建议读者:
- 在安全的环境中实际操作这些命令
- 结合man手册页面深入学习每个命令的高级功能
- 根据实际工作需要,重点掌握相关领域的命令
- 定期练习,形成肌肉记忆
记住:实践是掌握Linux命令的最佳方式!