目录
- 哲学与核心概念 (Philosophy & Core Concepts)
- 一切皆文件 (Everything is a File)
- 管道 (
|
)、重定向 (>
,>>
,<
) - 命令链 (
&&
,||
) - 通配符 (
*
,?
,[]
)
- 文件与目录管理 (File & Directory Management)
ls
,cd
,pwd
,mkdir
,rm
,cp
,mv
,touch
,find
,ln
- 文本处理与查看 (Text Processing & Viewing)
cat
,less
,more
,head
,tail
,grep
,sed
,awk
,wc
,diff
- 系统信息与监控 (System Information & Monitoring)
uname
,df
,du
,free
,top
,htop
,ps
,uptime
,lscpu
,lsblk
- 进程管理 (Process Management)
ps
,kill
,pkill
,killall
,nice
,renice
,jobs
,fg
,bg
- 用户与权限管理 (User & Permission Management)
whoami
,who
,w
,id
,sudo
,su
,useradd
,usermod
,userdel
,passwd
,chmod
,chown
- 网络工具 (Networking Tools)
ping
,ip
,ifconfig
(旧),ss
,netstat
(旧),ssh
,scp
,rsync
,curl
,wget
,dig
,host
- 软件包管理 (Software Package Management)
apt
(Debian/Ubuntu),dnf
/yum
(RHEL/CentOS/Fedora),pacman
(Arch)
- 归档与压缩 (Archiving & Compression)
tar
,gzip
,gunzip
,zip
,unzip
- 系统管理与服务 (System Administration & Services)
systemctl
,journalctl
,cron
,crontab
,dmesg
,lsof
- Shell 高级技巧 (Advanced Shell Skills)
history
,alias
,xargs
,man
,tldr
,apropos
1. 哲学与核心概念 (Philosophy & Core Concepts)
理解这些概念比记住一百个孤立的命令更重要。
- 一切皆文件 (Everything is a File): 在 Linux 中,硬件设备(如硬盘、键盘)、网络连接(套接字)、甚至进程信息都被抽象为文件,存放在文件系统中。这使得你可以用同样一套工具(如
cat
,echo
)来与它们交互。 - 管道 (
|
): 将一个命令的 标准输出 (stdout) 连接到另一个命令的 标准输入 (stdin)。这是 Linux 命令行强大的组合能力的基石。- 示例:
ps aux | grep nginx
(列出所有进程,然后从中筛选出包含 “nginx” 的行)
- 示例:
- 重定向 (
>
,>>
,<
):>
: 将命令的输出 覆盖写入 到一个文件。ls -l > file_list.txt
>>
: 将命令的输出 追加 到一个文件的末尾。echo "New log entry" >> app.log
<
: 将文件的内容作为命令的输入。sort < names.txt
2>
: 重定向 标准错误 (stderr)。find / -name "secret" 2> /dev/null
(查找文件,并将所有 “Permission denied” 等错误信息丢弃)
- 命令链 (
&&
,||
):&&
: 逻辑与。只有前一个命令成功执行 (返回码为 0),后一个命令才会执行。- 示例:
mkdir -p new_dir && cd new_dir
(成功创建目录后,再进入该目录)
- 示例:
||
: 逻辑或。只有前一个命令执行失败 (返回码非 0),后一个命令才会执行。- 示例:
ping -c 1 google.com || echo "Network is down"
(如果 ping 不通,则提示网络故障)
- 示例:
- 通配符 (Wildcards):
*
: 匹配零个或多个任意字符。rm *.tmp
(删除所有以.tmp
结尾的文件)?
: 匹配一个任意字符。ls ?.log
(匹配a.log
,b.log
但不匹配ab.log
)[]
: 匹配括号内的任意一个字符。ls [abc].txt
(匹配a.txt
,b.txt
,c.txt
)
2. 文件与目录管理 (File & Directory Management)
命令 | 功能描述 | 核心选项 | 实用示例 |
---|---|---|---|
ls |
列出目录内容 | -l (长格式), -a (所有文件), -h (人类可读大小), -t (按时间排序), -R (递归) |
ls -alh : 以易读方式列出包括隐藏文件在内的所有文件的详细信息。 |
cd |
切换目录 | ~ (家目录), . (当前目录), .. (上级目录), - (上一个工作目录) |
cd ~/Documents/work : 切换到家目录下的 Documents/work 。 |
pwd |
显示当前工作目录 | 无 | pwd : 显示 /home/user/project 。 |
mkdir |
创建目录 | -p : 递归创建父目录 |
mkdir -p project/src/main : 即使 project 和 src 不存在,也会一并创建。 |
rm |
删除文件或目录 | -r (递归删除), -f (强制删除,无提示), -i (交互式) |
rm -rf old_project : 极其危险! 强制递归删除整个目录。 |
cp |
复制文件或目录 | -r (递归复制目录), -p (保留属性) |
cp -r source_dir/ target_dir/ : 将 source_dir 整个复制到 target_dir 下。 |
mv |
移动或重命名文件/目录 | 无 | mv old_name.txt new_name.txt : 重命名。mv file.txt ../backup/ : 移动文件。 |
touch |
创建空文件或更新时间戳 | -a (只改访问时间), -m (只改修改时间) |
touch new_file.log : 创建一个空文件。 |
find |
在目录中查找文件 | -name , -type , -size , -mtime , -user , -exec |
find /var/log -name "*.log" -mtime -7 : 查找 /var/log 下 7 天内修改过的 .log 文件。find . -type f -name "*.py" -exec wc -l {} \; : 查找所有 .py 文件并计算行数。 |
ln |
创建链接 | -s : 创建符号链接(软链接) |
ln -s /var/log/app.log ~/app.log : 创建一个软链接,方便快速访问日志文件。 |
3. 文本处理与查看 (Text Processing & Viewing)
命令 | 功能描述 | 核心选项 | 实用示例 |
---|---|---|---|
cat |
查看、合并文件内容 | -n : 显示行号 |
cat file1.txt file2.txt > merged.txt : 合并两个文件。 |
less |
分页查看文件内容 | (交互式) : g (到头), G (到尾), / (搜索), q (退出) |
less /var/log/syslog : 交互式查看系统日志。 |
head |
查看文件头部 | -n [num] : 查看前 num 行 |
head -n 20 large_file.csv : 查看 CSV 文件的前 20 行。 |
tail |
查看文件尾部 | -n [num] : 查看后 num 行, -f : 实时跟踪文件更新 |
tail -f /var/log/nginx/access.log : 实时监控 Nginx 访问日志。 |
grep |
文本搜索 | -i (忽略大小写), -r (递归), -v (反向匹配), -n (显示行号), -C [num] (上下文) |
grep -rin "error" /var/log/ : 在 /var/log 目录中递归、不区分大小写地搜索 “error” 并显示行号。 |
sed |
流编辑器,用于文本替换 | s/old/new/g |
sed 's/localhost/127.0.0.1/g' config.txt : 将 config.txt 中的所有 “localhost” 替换为 “127.0.0.1”。 |
awk |
强大的文本分析工具 | -F (指定分隔符), print |
ps aux | awk '{print 2,11}' : 打印出所有进程的 PID (第2列) 和命令名 (第11列)。 |
wc |
统计字数、行数、字符数 | -l (行数), -w (单词数), -c (字节数) |
wc -l file.txt : 统计文件行数。 |
diff |
比较文件差异 | -u (统一格式), -r (递归) |
diff -u old_config.conf new_config.conf : 以统一格式比较两个配置文件的差异。 |
4. 系统信息与监控 (System Information & Monitoring)
命令 | 功能描述 | 核心选项 | 实用示例 |
---|---|---|---|
uname |
显示系统信息 | -a : 显示所有信息 |
uname -a : 显示内核名称、主机名、内核版本等。 |
df |
显示磁盘空间使用情况 | -h : 人类可读格式, -i : 显示 inode 信息 |
df -h : 查看各挂载点的空间使用情况。 |
du |
显示目录或文件大小 | -h : 人类可读格式, -s : 只显示总大小, --max-depth=N |
du -sh /var/log : 查看 /var/log 目录的总大小。 |
free |
显示内存使用情况 | -h : 人类可读格式, -g : 以 GB 为单位 |
free -h : 查看总内存、已用、可用内存等。 |
top |
实时动态显示进程活动 | (交互式) : P (CPU排序), M (内存排序), k (杀进程) |
top : 打开一个实时监控系统状态的仪表盘。 |
htop |
top 的增强版,更友好 |
(交互式,功能更强) | htop : 如果安装了,强烈推荐使用它代替 top 。 |
ps |
显示当前进程的快照 | aux (BSD风格), -ef (System V风格) |
ps aux | grep sshd : 查看所有 sshd 相关的进程。 |
uptime |
显示系统运行时间及负载 | uptime : 查看系统已运行多久,以及 1、5、15 分钟的平均负载。 |
|
lscpu |
显示 CPU 架构信息 | lscpu : 查看 CPU 型号、核心数、线程数、缓存等。 |
|
lsblk |
列出块设备信息 | lsblk : 查看硬盘及其分区信息,比 df 更底层。 |
5. 进程管理 (Process Management)
命令 | 功能描述 | 核心选项 | 实用示例 |
---|---|---|---|
kill |
向进程发送信号 | -9 (SIGKILL, 强制), -15 (SIGTERM, 正常终止) |
kill 1234 : 正常终止 PID 为 1234 的进程。kill -9 1234 : 强制杀死 PID 为 1234 的进程。 |
pkill |
按名称或其他属性杀进程 | -f : 匹配完整命令行 |
pkill -9 -f "python my_app.py" : 强制杀死所有运行 “python my_app.py” 的进程。 |
killall |
按进程名杀死所有同名进程 | killall firefox : 杀死所有名为 firefox 的进程。 |
|
jobs |
列出在后台运行的作业 | jobs : 查看通过 Ctrl+Z 或 & 放到后台的任务。 |
|
bg |
将暂停的作业转到后台运行 | bg %1 : 将第一个作业(见jobs )放到后台继续运行。 |
|
fg |
将后台作业转到前台运行 | fg %1 : 将第一个作业(见jobs )调回到前台。 |
6. 用户与权限管理 (User & Permission Management)
命令 | 功能描述 | 核心选项 | 实用示例 |
---|---|---|---|
id |
显示用户 ID 和组 ID | id nginx : 查看 nginx 用户的 uid, gid 及所属用户组。 |
|
sudo |
以其他用户(默认root)身份执行命令 | -i (切换到root的shell), -u [user] |
sudo apt update : 以 root 权限更新软件包列表。 |
su |
切换用户 | - 或 -l : 切换用户并加载其环境 |
su - postgres : 切换到 postgres 用户并获得其完整的登录环境。 |
chmod |
修改文件/目录权限 | u (user), g (group), o (other), a (all), + (加), - (减), xwr (权限), -R (递归) |
chmod 755 script.sh : 设置脚本权限为 rwxr-xr-x 。chmod u+x script.sh : 为文件所有者添加执行权限。chmod -R 644 /var/www/html : 递归设置网站目录文件权限。 |
chown |
修改文件/目录的所有者和组 | -R (递归) |
chown www-data:www-data config.php : 将文件所有者和组都改为 www-data 。chown -R user:group /data/project : 递归修改整个目录的所有权。 |
7. 网络工具 (Networking Tools)
命令 | 功能描述 | 核心选项 | 实用示例 |
---|---|---|---|
ping |
测试网络连通性 | -c [count] : 发送次数 |
ping -c 4 8.8.8.8 : 向谷歌 DNS 发送 4 个 ICMP 包。 |
ip |
现代网络配置工具 | addr , route , link |
ip addr show : 查看所有网络接口的 IP 地址。ip route : 查看路由表。 |
ss |
现代套接字统计工具 | -t (TCP), -u (UDP), -l (监听), -n (数字地址), -p (进程) |
ss -tulnp : 显示所有正在监听的 TCP/UDP 端口及其对应的进程。 |
ssh |
安全远程登录 | -p [port] , -i [keyfile] |
ssh user@remote_host : 登录到远程主机。ssh -i ~/.ssh/id_rsa -p 2222 user@host : 使用指定密钥和端口登录。 |
scp |
安全远程复制 | -r (递归), -P [port] |
scp file.txt user@host:/remote/path/ : 将本地文件复制到远程。scp -r user@host:/remote/dir ./local/dir : 将远程目录复制到本地。 |
rsync |
增量文件同步,更强大 | -a (归档), -v (详细), -z (压缩), --delete |
rsync -avz --delete local_dir/ user@host:/remote/dir/ : 将本地目录高效、增量同步到远程,并删除远程多余的文件。 |
curl |
URL 传输工具,功能强大 | -I (头信息), -L (跟随重定向), -o (输出到文件) |
curl -L https://example.com : 获取网页内容。curl -s 'http://api.service/user?id=123' : 静默模式请求 API。 |
wget |
网络下载器 | -c (断点续传), -O (指定输出文件名) |
wget -c https://releases.ubuntu.com/22.04/ubuntu-22.04.1-desktop-amd64.iso : 下载大文件,支持续传。 |
dig |
DNS 查询工具 | ANY , MX , A |
dig google.com : 查询 google.com 的 A 记录。dig MX google.com : 查询谷歌的邮件交换记录。 |
8. 软件包管理 (Software Package Management)
系统 | 命令 | 常用操作 |
---|---|---|
Debian/Ubuntu | apt |
sudo apt update (更新列表)sudo apt upgrade (升级已安装的包)sudo apt install [pkg] (安装)sudo apt remove [pkg] (卸载)apt search [keyword] (搜索) |
RHEL/CentOS/Fedora | dnf (新) / yum (旧) |
sudo dnf check-update sudo dnf upgrade sudo dnf install [pkg] sudo dnf remove [pkg] dnf search [keyword] |
Arch Linux | pacman |
sudo pacman -Syu (更新系统)sudo pacman -S [pkg] (安装)sudo pacman -Rns [pkg] (卸载)pacman -Ss [keyword] (搜索) |
9. 归档与压缩 (Archiving & Compression)
命令 | 功能描述 | 核心选项 | 实用示例 |
---|---|---|---|
tar |
打包/解包 .tar 文件 | c (创建), x (解压), v (详细), f (文件), z (gzip), j (bzip2) |
打包: tar -czvf archive.tar.gz /path/to/dir 解包: tar -xzvf archive.tar.gz |
gzip |
压缩/解压 .gz 文件 | -d : 解压 |
gzip file.txt : 压缩成 file.txt.gz 。gunzip file.txt.gz : 解压。 |
zip |
创建 .zip 压缩包 | -r : 递归 |
zip -r archive.zip directory/ |
unzip |
解压 .zip 压缩包 | -d [dir] : 指定解压目录 |
unzip archive.zip -d /path/to/extract |
10. 系统管理与服务 (System Administration & Services)
命令 | 功能描述 | 核心选项 | 实用示例 |
---|---|---|---|
systemctl |
管理 systemd 服务 | start , stop , restart , status , enable , disable |
sudo systemctl status nginx : 查看 nginx 服务状态。sudo systemctl enable --now sshd : 立即启动 sshd 并设置开机自启。 |
journalctl |
查看 systemd 日志 | -u [service] , -f (跟踪), --since , --until |
journalctl -u nginx.service --since "1 hour ago" : 查看 nginx 服务过去一小时的日志。 |
cron / crontab |
定时任务 | crontab -e (编辑), crontab -l (列表) |
crontab -e 然后添加 0 2 * * * /path/to/backup.sh (每天凌晨2点执行备份脚本)。 |
dmesg |
显示内核环形缓冲区信息 | -H (人类可读格式) |
dmesg -H | grep -i error : 查看内核启动信息中的错误。 |
lsof |
列出打开的文件 | -i (网络连接), -p [pid] |
sudo lsof -i :80 : 查看哪个进程占用了 80 端口。 |
11. Shell 高级技巧 (Advanced Shell Skills)
history
: 显示命令历史。!N
: 执行历史中第 N 条命令。!!
: 执行上一条命令 (sudo !!
非常常用)。Ctrl+R
: 反向搜索历史命令。
alias
: 创建命令别名。- 示例:
alias ll='ls -alh'
(在.bashrc
或.zshrc
中设置以永久生效)。
- 示例:
xargs
: 从标准输入构建和执行命令行。- 示例:
find . -name "*.log" | xargs rm
: 查找所有.log
文件并删除它们(比-exec
更高效)。
- 示例:
man
: 查看命令的详细手册页。man ls
tldr
: “Too Long; Didn’t Read.” 社区维护的、简化的 man pages,提供实用范例。tldr tar
apropos
或man -k
: 根据关键词搜索 man pages。apropos "copy files"
最终建议 (Final Advice)
- 多用
Tab
键: 自动补全命令、文件名和路径,是效率的源泉。 - 不要害怕
man
:man
手册是第一手、最权威的文档。 - 实践出真知: 在虚拟机或安全的测试环境中大胆尝试,尤其是
rm
,chmod
,chown
等命令。 - 组合命令: Linux 命令行的真正威力在于通过管道和重定向将简单的工具组合起来,完成复杂的任务。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)