Shell操作命令是Linux和Unix系统中用户与操作系统交互的核心工具,通过命令行界面(CLI)执行文件管理、进程控制、系统配置等任务,Shell脚本则能将多条命令组合,实现自动化操作,极大提升工作效率,以下从基础命令、高级技巧及脚本实践三方面展开详细说明。

基础Shell命令
文件与目录操作
文件管理是Shell最常用的功能之一。ls
命令列出目录内容,配合-l
(长格式)、-a
(显示隐藏文件)等选项可获取详细信息,例如ls -la /home
显示/home
目录下所有文件及权限。cd
用于切换目录,如cd ..
返回上级目录,cd ~
进入用户主目录。mkdir
创建目录,mkdir -p parent/child
可递归创建多级目录;rmdir
仅删除空目录,rm -r
则递归删除非空目录(需谨慎使用),文件复制通过cp
实现,cp -r source_dir target_dir
复制整个目录;mv
用于移动或重命名文件,如mv old_name new_name
,查看文件内容时,cat
适合小文件,less
支持分页浏览,head -n 10 file
和tail -n 10 file
分别查看文件前10行和后10行。
文本处理
文本处理命令是Shell的强大功能。grep
用于文本搜索,如grep "error" log.txt
匹配包含"error"的行;-i
选项忽略大小写,-r
递归搜索目录。sed
流编辑器可进行文本替换,例如sed 's/old/new/g' file
将文件中所有"old"替换为"new"。awk
适合结构化文本处理,awk -F: '{print $1}' /etc/passwd
以冒号为分隔符输出/etc/passwd
的第一列(用户名)。sort
对文本行排序,uniq
去除重复行,二者结合sort file | uniq
可获取唯一行。
权限与用户管理
Linux通过r
(读)、w
(写)、x
(执行)权限位控制文件访问。chmod
修改权限,chmod 755 script.sh
设置所有者可读写执行,其他用户可读执行;chmod u+x file
则为所有者添加执行权限。chown
更改文件所有者,如chown user:group file
,用户管理中,useradd
创建用户,passwd
设置密码,su
切换用户,sudo
以管理员权限执行命令。
高级Shell技巧
输入输出重定向
默认情况下,命令输入来自键盘,输出显示到终端,重定向可改变这一行为:>
将命令输出覆盖写入文件,>>
追加到文件;<
从文件读取输入,如sort < input.txt
,标准错误输出(stderr)可通过2>
单独捕获,例如command 2> error.log
,而&>
则同时捕获标准输出和错误输出到同一文件。

管道与命令组合
管道将前一个命令的输出作为后一个命令的输入,如ls -l | grep ".txt"
列出目录后筛选文本文件。&&
和实现逻辑控制:command1 && command2
表示command1
成功后才执行command2
;command1 || command2
则仅在command1
失败时执行command2
,命令替换通过`command`
或$(command)
实现,如echo "Today is $(date)"
。
变量与环境变量
Shell变量用于存储数据,如name="Alice"
定义变量,echo $name
或${name}
引用,环境变量通过export
设置,如export PATH=$PATH:/new/path
,使系统可在新路径中查找命令,预定义变量如$0
(脚本名)、(参数个数)、(上一条命令的退出状态)也常用于脚本控制。
Shell脚本实践
Shell脚本以#!/bin/bash
开头,指明解释器,通过条件语句实现逻辑判断:if [ $age -ge 18 ]; then echo "Adult"; fi
,循环结构如for file in *.txt; do echo $file; done
遍历所有文本文件,函数封装可复用代码,例如function greet() { echo "Hello, $1"; }; greet "Bob"
,调试时,使用set -x
打印执行的命令,或echo
输出关键变量值。
常用Shell命令速查表
功能分类 | 命令 | 示例 |
---|---|---|
文件列表 | ls |
ls -la |
目录切换 | cd |
cd /var/log |
创建目录 | mkdir |
mkdir -p test/dir |
复制文件 | cp |
cp -r source target |
移动文件 | mv |
mv old_name new_name |
删除文件 | rm |
rm -rf dir |
查看文件 | cat /less |
less file.txt |
文本搜索 | grep |
grep "error" log |
文本替换 | sed |
sed 's/old/new/g' file |
文本排序 | sort |
sort file | uniq |
权限修改 | chmod |
chmod 644 file |
所有者变更 | chown |
chown user:group file |
输出重定向 | > />> |
echo "text" >> file |
管道操作 | ls | grep txt |
|
命令替换 | echo $(date) |
相关问答FAQs
Q1: 如何在Shell中批量重命名文件?
A1: 可结合for
循环和mv
命令实现,将当前目录下所有.txt
文件扩展名改为.log
:
for file in *.txt; do mv "$file" "${file%.txt}.log" done
${file%.txt}
移除文件名中的.txt
后缀,再拼接.log
,注意为变量加双引号避免文件名含空格时出错。
Q2: 如何查看当前系统运行的进程并终止特定进程?
A2: 使用ps
命令查看进程,如ps aux
显示所有进程的详细信息,通过grep
筛选目标进程,例如ps aux | grep "nginx"
,找到进程的PID(第二列)后,用kill
命令终止,如kill 1234
;若进程未响应,可强制终止kill -9 1234
。