命令合集
1. 基础命令
echo
: 用于打印消息或输出变量的值。1
2echo "Hello, World!"
echo "Current user: $USER"cd
: 更改当前目录。1
cd /path/to/directory
pwd
: 显示当前工作目录。1
pwd
ls
: 列出目录中的文件和子目录。1
2ls -l # 详细信息
ls -a # 包括隐藏文件touch
: 创建空文件。1
touch newfile.txt
cp
: 复制文件或目录。1
cp source.txt destination.txt
mv
: 移动或重命名文件/目录。1
2mv oldname.txt newname.txt
mv /path/to/source /path/to/destinationrm
: 删除文件或目录。1
2rm file.txt
rm -r directory/ # 递归删除目录
2. 条件语句
条件语句在 Linux 脚本编程中用于根据特定条件执行不同的操作。条件语句通常用于检查文件、变量值或其他条件,并基于这些条件控制程序的流程。主要的条件语句包括 if-else
、case
和 test
。以下是详细的解释和示例:
if-else
语句
if-else
语句是最常用的条件语句,用于根据条件执行不同的代码块。
基本语法:
1 |
|
示例:
检查文件是否存在:
1 |
|
- **
-f "$file"
**:检查指定的路径是否存在且是一个文件。 - **
"$file"
**:变量引用,双引号防止路径中有空格导致的问题。
示例:检查目录是否存在且是否为空:
1 |
|
- **
-d "$dir"
**:检查指定路径是否是一个目录。 - **
ls -A $dir
**:列出目录中的所有文件(包括隐藏文件),如果结果不为空则表示目录不为空。
case
语句
case
语句用于多重条件判断,适合于选择不同的代码块来处理不同的情况。
基本语法:
1 |
|
示例:
根据用户输入执行不同操作:
1 |
|
Monday
和 **Friday
**:匹配具体的字符串。- **
Saturday | Sunday
**:匹配多个模式。 - **
*
**:默认情况,如果没有匹配到任何模式则执行。
test
命令
test
命令用于评估文件属性和字符串比较,是 [
命令的底层实现。
基本语法:
1 |
|
或
1 |
|
常用选项:
文件测试:
- **
-e
**:检查文件是否存在。 - **
-f
**:检查是否为普通文件。 - **
-d
**:检查是否为目录。 - **
-r
**:检查是否可读。 - **
-w
**:检查是否可写。 - **
-x
**:检查是否可执行。
- **
字符串比较:
- **
=
**:比较两个字符串是否相等。 - **
!=
**:比较两个字符串是否不相等。 - **
-z
**:检查字符串是否为空。 - **
-n
**:检查字符串是否非空。
- **
数字比较:
- **
-eq
**:等于。 - **
-ne
**:不等于。 - **
-lt
**:小于。 - **
-le
**:小于或等于。 - **
-gt
**:大于。 - **
-ge
**:大于或等于。
- **
示例:检查文件是否存在且是否为可执行文件:
1 |
|
- **
-x "$file"
**:检查文件是否具有可执行权限。
示例:字符串比较:
1 |
|
- **
"$str1" = "$str2"
**:比较两个字符串是否相等。
3. 循环
for
: 遍历列表中的每个元素。1
2
3for file in *.txt; do
echo "Processing $file"
donewhile
: 基于条件的循环。1
2
3
4
5counter=1
while [ $counter -le 5 ]; do
echo "Counter: $counter"
((counter++))
done
4. 函数
定义和调用函数。
1
2
3
4
5my_function() {
echo "Hello from function!"
}
my_function函数带参数。
1
2
3
4
5greet() {
echo "Hello, $1"
}
greet "Alice"
5. 输入输出和重定向
输入重定向:从文件或命令中读取输入。
1
cat < inputfile.txt
输出重定向:将输出写入文件。
1
2echo "Some text" > outputfile.txt # 覆盖输出文件
echo "More text" >> outputfile.txt # 追加输出**管道 (
|
)**:将一个命令的输出作为另一个命令的输入。1
ls | grep ".txt"
6. 变量
定义和使用变量。
1
2name="Alice"
echo "Hello, $name"读取用户输入。
1
2read -p "Enter your name: " username
echo "Welcome, $username"
7. 参数传递
脚本可以接受命令行参数。
1
2
3#!/bin/bash
echo "First argument: $1"
echo "Second argument: $2"获取所有参数。
1
echo "All arguments: $@"
8. 文件处理
创建文件
**
touch
**:创建一个空文件或更新现有文件的时间戳。1
touch filename.txt
- 如果
filename.txt
已存在,touch
会更新文件的最后修改时间。 - 如果
filename.txt
不存在,则会创建一个空文件。
- 如果
**
echo
**:创建一个文件并写入内容。1
echo "Hello, World!" > hello.txt
- 使用
>
重定向符将文本"Hello, World!"
写入hello.txt
文件。如果文件已存在,会被覆盖。
- 使用
读取文件
**
cat
**:显示文件内容。1
cat filename.txt
cat
命令会将整个文件的内容输出到标准输出(通常是终端)。
more
和 **less
**:分页显示文件内容。1
2more filename.txt
less filename.txt- **
more
**:逐页显示文件内容,按空格键翻页,按q
退出。 - **
less
**:比more
更强大,支持前后翻页,按q
退出。
- **
**
head
**:显示文件的开头部分。1
head -n 10 filename.txt
-n
选项指定显示的行数,默认显示前10行。
**
tail
**:显示文件的结尾部分。1
tail -n 10 filename.txt
-n
选项指定显示的行数,默认显示最后10行。- **
tail -f filename.txt
**:实时显示文件新增的内容,用于监控日志文件。
写入文件
**
>
**:将输出重定向到文件,覆盖文件内容。1
echo "New content" > filename.txt
**
>>
**:将输出追加到文件末尾。1
echo "Additional content" >> filename.txt
**
tee
**:将输出写入文件并显示在终端。1
echo "Content" | tee filename.txt
tee
命令会将输出内容写入filename.txt
文件,并同时输出到标准输出。
查找和处理文件
**
find
**:查找符合条件的文件。1
find /path/to/dir -name "*.txt"
- 查找
/path/to/dir
目录下所有.txt
文件。
- 查找
**
grep
**:在文件中查找匹配的文本。1
grep "search_term" filename.txt
- 查找
filename.txt
中包含"search_term"
的行。
- 查找
**
sed
**:流编辑器,用于查找和替换文本。1
sed 's/old/new/g' filename.txt
- 将
filename.txt
中的所有old
替换为new
。
- 将
**
awk
**:文本处理工具,用于格式化和处理数据。1
awk '{print $1}' filename.txt
- 打印
filename.txt
中每一行的第一个字段。
- 打印
修改文件
**
mv
**:移动或重命名文件。1
mv oldname.txt newname.txt
- 将
oldname.txt
重命名为newname.txt
。 - 也可以将文件移动到不同目录。
- 将
**
cp
**:复制文件。1
cp source.txt destination.txt
- 复制
source.txt
文件到destination.txt
。
- 复制
**
rm
**:删除文件。1
rm filename.txt
- 删除
filename.txt
文件。
- 删除
**
chmod
**:修改文件权限。1
chmod 755 filename.txt
- 修改
filename.txt
的权限为rwxr-xr-x
。
- 修改
处理文本文件
**
sort
**:对文件内容进行排序。1
sort filename.txt
- 对
filename.txt
的内容进行升序排序。
- 对
**
uniq
**:去除重复行。1
sort filename.txt | uniq
uniq
通常与sort
命令结合使用,用于去除重复行。
**
cut
**:从文件中提取特定字段。1
cut -d',' -f1 filename.txt
- 提取
filename.txt
中以逗号分隔的第一列数据。
- 提取
文件权限
**
chmod
**:修改文件权限。1
chmod 644 filename.txt
- 将
filename.txt
的权限设置为rw-r--r--
(用户可读写,组用户和其他用户可读)。
- 将
**
chown
**:修改文件的所有者和组。1
chown user:group filename.txt
- 将
filename.txt
的所有者更改为user
,组更改为group
。
- 将
文件比较
**
diff
**:比较两个文件的差异。1
diff file1.txt file2.txt
- 显示
file1.txt
和file2.txt
之间的差异。
- 显示
**
cmp
**:逐字节比较两个文件。1
cmp file1.txt file2.txt
- 比较两个文件的内容,显示第一个不同的字节位置。
归档和压缩
**
tar
**:创建和解压归档文件。1
tar -cvf archive.tar file1.txt file2.txt
- 创建一个名为
archive.tar
的归档文件,包含file1.txt
和file2.txt
。
1
tar -xvf archive.tar
- 解压
archive.tar
归档文件。
- 创建一个名为
gzip
和 **gunzip
**:压缩和解压文件。1
gzip filename.txt
- 压缩
filename.txt
文件,生成filename.txt.gz
。
1
gunzip filename.txt.gz
- 解压
filename.txt.gz
文件,恢复为filename.txt
。
- 压缩
9. 退出状态
**
exit
**:返回脚本的退出状态。1
2exit 0 # 成功退出
exit 1 # 失败退出检查上一条命令的退出状态。
1
2
3
4
5if [ $? -eq 0 ]; then
echo "Previous command succeeded"
else
echo "Previous command failed"
fi
10. 日志与调试
**
set -x
**:用于调试,显示执行的每一行命令。1
set -x
**
set +x
**:关闭调试模式。1
set +x
日志输出:将信息输出到日志文件。
1
echo "Script started" >> script.log
11. 权限
在 Linux 系统中,文件和目录的权限决定了哪些用户或用户组可以对文件进行读、写、执行操作。每个文件和目录的权限由三组表示:
- 用户权限(owner):文件的所有者。
- 用户组权限(group):文件所属的用户组。
- 其他用户权限(others):系统中其他用户的权限。
查看权限:
使用 ls -l
命令可以查看文件的权限:
1 |
|
输出示例:
1 |
|
- 第一个字符表示文件类型(
-
表示普通文件,d
表示目录)。 - 后面九个字符分别表示用户、组和其他人的权限。
- r:可读(read)。
- w:可写(write)。
- x:可执行(execute)。
- 没有权限时用
-
表示。
如上面的例子:
rwx
:用户(owner)可以读、写、执行。r-x
:组用户可以读和执行,但不能写。r--
:其他用户只能读。
修改权限:
使用 chmod
命令修改文件或目录的权限。
- 数字模式:
权限用三个数字表示,每个数字为权限组合值的总和:
- 读(r):4
- 写(w):2
- 执行(x):1
组合值:
- 7 = 读 + 写 + 执行
- 6 = 读 + 写
- 5 = 读 + 执行
- 4 = 读
例如,给文件赋予 rwxr-xr--
权限(用户:读写执行,组:读执行,其他用户:只读):
1 |
|
- 符号模式:
使用符号来设置权限:
- u:用户(owner)
- g:组用户
- o:其他用户
- **+**:添加权限
- **-**:移除权限
- **=**:设置权限
示例:
1 |
|
12. 进程控制
Linux 是一个多任务操作系统,进程控制是管理和操作系统中运行的程序或任务的重要功能。通过管理进程,用户可以查看、终止、暂停和恢复程序的执行。
查看进程:
使用 ps
命令查看系统中当前运行的进程。常用选项包括:
1 |
|
- **
ps
**:显示当前进程信息。 - **
aux
**:显示所有用户的所有进程以及详细信息。
示例输出:
1 |
|
- PID:进程 ID。
- %CPU:CPU 使用率。
- %MEM:内存使用率。
- COMMAND:正在执行的命令。
后台运行进程
使用 &
将进程放在后台执行:
1 |
|
- **
&
**:将脚本放入后台执行,终端不会等待脚本执行完毕。
停止和恢复进程
- **
Ctrl + Z
**:暂停前台运行的进程。 - **
bg
**:将暂停的进程放入后台继续运行。 - **
fg
**:将后台进程恢复到前台。
终止进程
使用 kill
命令可以终止进程。
1 |
|
- **
<PID>
**:进程的 ID,通过ps
命令获得。
强制终止进程
如果一个进程无法正常终止,可以使用 -9
强制终止:
1 |
|
常用进程控制命令
**
top
**:实时显示系统中正在运行的进程以及资源使用情况。1
top
**
htop
**:功能更强大的进程监控工具,需要单独安装。1
htop
**
jobs
**:查看当前会话中的后台作业。1
jobs
使用示例:
grep
- 文本搜索工具
查找文件中的文本
1
grep "search_term" filename.txt
- 功能:在
filename.txt
中查找包含search_term
的行,并显示这些行。 - 常用选项:
-i
:忽略大小写。-v
:显示不包含search_term
的行。-r
或-R
:递归地在目录中查找文件。-n
:显示匹配行的行号。-H
:显示匹配的文件名。
1
grep -i "error" /var/log/syslog
- 功能:在
/var/log/syslog
文件中查找包含error
(忽略大小写)的行。
- 功能:在
查找进程相关信息
1
ps aux | grep "process_name"
- 功能:列出所有进程,然后通过
grep
过滤出包含process_name
的进程信息。 - 常用选项:
-e
:显示所有进程。-f
:显示详细信息。aux
:结合a
(所有用户的进程)、u
(以用户格式显示)和x
(显示没有控制终端的进程)。
1
ps aux | grep "apache"
- 功能:列出所有进程,并显示包含
apache
的行,用于查找与 Apache 相关的进程。
- 功能:列出所有进程,然后通过
显示指定目录下所有文件中包含特定内容的行
1
grep -r "search_term" /path/to/dir
- 功能:递归搜索
/path/to/dir
目录及其子目录中的所有文件,查找包含search_term
的行。
- 功能:递归搜索
top
- 实时系统监控工具
基本使用
1
top
- 功能:显示系统上当前运行的进程及其资源使用情况,实时更新。
- 常用功能:
- **
P
**:按 CPU 使用率排序。 - **
M
**:按内存使用情况排序。 - **
q
**:退出top
。
- **
指定更新间隔
1
top -d 5
- 功能:每隔 5 秒更新一次显示。
显示指定用户的进程
1
top -u username
- 功能:仅显示
username
用户的进程。
- 功能:仅显示
自定义显示
1
top -b -n 1
- 功能:以批处理模式运行
top
,输出一次快照并退出(适合将输出重定向到文件)。
- 功能:以批处理模式运行
ps
- 显示进程状态
显示所有进程
1
ps aux
- 功能:显示所有用户的所有进程,提供详细信息,包括 CPU 和内存使用情况。
- 常用选项:
a
:显示所有用户的进程。u
:以用户格式显示。x
:显示没有控制终端的进程。
显示特定用户的进程
1
ps -u username
- 功能:仅显示
username
用户的进程。
- 功能:仅显示
显示特定进程的信息
1
ps -p PID
- 功能:显示进程 ID 为
PID
的进程信息。
- 功能:显示进程 ID 为
显示树状进程结构
1
ps -ejH
- 功能:以树状结构显示进程及其子进程。
结合使用
查找占用高 CPU 的进程
1
top -b -n 1 | grep "Cpu(s)"
- 功能:运行
top
命令并筛选出 CPU 使用情况的行。
- 功能:运行
检查特定进程的资源使用情况
1
ps aux | grep "process_name" | awk '{print $1, $2, $3, $4, $11}'
- 功能:查找
process_name
相关的进程,并使用awk
提取用户、PID、CPU 使用率、内存使用率和命令名。
- 功能:查找
实时监控进程状态
1
top -p $(pgrep -d',' -f process_name)
- 功能:实时监控与
process_name
相关的进程,pgrep
用于查找进程 ID,并将其传递给top
命令。
- 功能:实时监控与