Linux|Bash常用命令整理
整理了一下Bash、linux中常用的操作命令
一、Bash常用命令
Bash(Bourne Again Shell)是 Linux 和 macOS 等操作系统中常用的命令行解释器。它功能强大且灵活,掌握一些使用技巧可以显著提高你的工作效率。以下是一些 Bash 使用技巧:
基础技巧:
- Tab 键自动补全: 这是 Bash 最常用的功能之一。输入命令或文件名的一部分后按下 Tab 键,Bash 会尝试自动补全。如果存在多个匹配项,按两次 Tab 键会显示所有可能的选项。
- 历史命令:
- 使用
history
命令查看之前执行过的命令。 - 使用
Ctrl + R
搜索历史命令。 - 使用
!!
执行上一条命令。 - 使用
!n
执行历史中第 n 条命令 (n 为数字)。 - 使用
!string
执行最近一条以string
开头的命令。
- 使用
- 通配符:
*
匹配任意数量的任意字符。?
匹配单个任意字符。[characters]
匹配括号中任意一个字符。[!characters]
或[^characters]
匹配不在括号中的任意一个字符。{string1,string2,...}
匹配括号中任意一个字符串。- 例如:
ls *.txt
列出所有以.txt
结尾的文件,rm file?.txt
删除类似file1.txt
或fileA.txt
的文件。
- 重定向:
>
将命令输出重定向到文件(覆盖原有内容)。>>
将命令输出追加到文件。<
将文件内容作为命令输入。2>
将错误输出重定向到文件。&>
将标准输出和错误输出都重定向到文件。- 例如:
ls > filelist.txt
将ls
命令的输出保存到filelist.txt
文件中。
- 管道:
|
将一个命令的输出作为另一个命令的输入。- 例如:
ls -l | grep "txt"
列出包含 "txt" 的文件详细信息。
- Ctrl 快捷键:
Ctrl + C
终止当前正在运行的命令。Ctrl + D
发送 EOF (End-Of-File) 信号,通常用于退出当前 shell 或程序。Ctrl + Z
暂停当前正在运行的命令,并将其放到后台。可以使用fg
命令恢复到前台,或者使用bg
命令让其在后台继续运行。Ctrl + A
将光标移动到行首。Ctrl + E
将光标移动到行尾。Ctrl + K
删除从光标位置到行尾的内容。Ctrl + U
删除从光标位置到行首的内容。Ctrl + W
删除光标前一个单词。Ctrl + Y
粘贴使用Ctrl + K
、Ctrl + U
或Ctrl + W
删除的内容。Ctrl + L
清屏,类似于clear
命令。Ctrl + S
暂停屏幕输出 (XOFF)。Ctrl + Q
恢复屏幕输出 (XON)。
- 引号的使用:
- 双引号 (" "): 允许变量扩展和命令替换。
- 单引号 (' '): 禁止变量扩展和命令替换,原样输出字符串。
- 反引号 (``) 或 $( ): 用于命令替换,将命令的输出结果嵌入到当前命令中。
- 例如:
echo "Today is $(date)"
会输出当前日期,而echo 'Today is $(date)'
会原样输出Today is $(date)
。
进阶技巧:
变量:
- 定义变量:
variable_name=value
(注意等号两边不能有空格)。 - 使用变量:
$variable_name
或${variable_name}
(推荐后者,更清晰)。 - 常见的环境变量:
HOME
,USER
,PATH
,PWD
等。 - 例如:
name="John"
定义一个名为name
的变量,echo "Hello, $name"
使用该变量。
- 定义变量:
条件判断:
if [ condition ]; then command; fi
if [ condition ]; then command1; else command2; fi
if [ condition1 ]; then command1; elif [ condition2 ]; then command2; else command3; fi
常用的条件测试运算符:
-eq
等于-ne
不等于-gt
大于-lt
小于-ge
大于等于-le
小于等于-z
字符串为空-n
字符串不为空-f
文件存在且为普通文件-d
目录存在-e
文件或目录存在-r
文件可读-w
文件可写-x
文件可执行
逻辑运算符:
-a
逻辑与 (AND)-o
逻辑或 (OR)!
逻辑非 (NOT)&&
逻辑与 (AND)||
逻辑或 (OR)
例如:
1
2
3
4
5if [ -f myfile.txt ]; then
echo "File exists"
else
echo "File does not exist"
fi
循环:
for 循环:
1
2
3for variable in list; do
command
done例如:
1
2
3for file in *.txt; do
echo "Processing $file"
donewhile 循环:
1
2
3while [ condition ]; do
command
done例如:
1
2
3
4
5count=1
while [ $count -le 5 ]; do
echo "Count: $count"
count=$((count + 1))
doneuntil 循环:
1
2
3until [ condition ]; do
command
done
函数:
1
2
3
4
5function_name () {
command1
command2
...
}调用函数:
function_name arguments
例如:1
2
3
4
5greet () {
echo "Hello, $1!"
}
greet John命令替换: 将命令的输出结果作为另一个命令的参数或变量。
- 使用反引号
command
或$(command)
- 例如:
files=$(ls)
将ls
命令的输出结果赋值给files
变量。
- 使用反引号
算术运算:
- 使用
$((expression))
进行算术运算。 - 例如:
sum=$((1 + 2))
将 1 加 2 的结果赋值给sum
变量。
- 使用
数组:
定义数组:
array_name=(value1 value2 value3 ...)
访问数组元素:
${array_name[index]}
获取数组长度:
${#array_name[@]}
遍历数组:
1
2
3for element in "${array_name[@]}"; do
echo "$element"
done
别名 (alias): 为常用的命令或命令组合创建简短的别名。
- 定义别名:
alias alias_name='command'
- 例如:
alias la='ls -la'
创建一个名为la
的别名,相当于执行ls -la
。 - 取消别名:
unalias alias_name
- 定义别名:
进程管理:
&
在后台运行命令。jobs
查看当前后台运行的进程。fg %job_number
将后台进程调到前台。bg %job_number
让后台暂停的进程继续运行。kill %job_number
或kill pid
终止进程。ps aux
或top
查看系统进程信息。nohup command &
让命令在退出终端后继续运行。
二、其他Linux常用命令
基本格式
1 |
|
文件目录操作
2.ls命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18# ls命令, 来源于: list(列表) 即: 查看指定目录下所有的子级(不包括子级的子级)
# 格式
ls [-a -l -h] [Linux的路径]
# 参数解释
-a 显示所有(包括隐藏的) all
-l 以行的形式展示详细信息 line
-h 以人性化的方式展示. human
# 例如:
ls # 查看当前目录的子级, 不包括隐藏.
ls / # 查看根目录(/)下的内容.
ls -a # 查看当前目录的子级, 包括隐藏.
ls -l # 以行的方式, 查看当前目录的子级. 简写形式: ll
ls -h # 以人性化的方式展示当前目录的内容, 但是: 无效果.
ls -lh # 行的方式, 人性化展示当前目录下的内容. 简写形式: ll -h
ls -al # 以行的形式, 展示当前目录下所有子级(包括 隐藏)
ls -alh # 以行, 人性化的方式展示当前目录下所有子级(包括 隐藏)
3.cd命令
1
2
3
4# cd命令, 来源于: change directory, 改变目录
# 格式
cd 要切换到的目录的路径
4.pwd命令
1
2
3
4# 来源于 Print Work Directory
# 格式
pwd # 查看当前所在的工作目录, 即: 当前在Linux的哪个路径下.
5.Linux中的路径写法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20# 路径介绍
就是用来描述文件 或者 文件夹(目录)的路径的, 有: 绝对路径 和 相对路径两种写法.
# 绝对路径
以 / 根目录开头.
# 相对路径
默认是相对于当前路径来写的.
# 例如: 当前目录是在 /aa/bb 如果相切换到 /aa/bb/cc目录, 有如下两种写法.
绝对路径: cd /aa/bb/cc
相对路径: cd cc
# 几个特殊的路径写法
./ # 代表当前路径, 例如: 上述的 cd cc 还可以写成 cd ./cc
.. # 代表上级路径
../.. # 代表上上级路径
~ # 代表: 回到家目录, root账号的家 /root, 其它账号的家 /home/账号名
# 语法糖, 可以直接写 cd 也是回家命令.
- # 代表: 在最近的两个目录之间做切换.
6.mkdir命令
1
2
3
4
5
6
7
8# 来源于 make directory, 创建目录(文件夹)的.
# 格式
mkdir [-p] 文件夹路径 # -p表示parent, 即: 父目录不存在, 也会自动创建.
# 简单理解, 假设: 目前只有 /root/aa 文件夹
mkdir /root/aa/bb/cc # 报错, 因为不写-p, 只能创建单级文件夹.
mkdir -p /root/aa/bb/cc # 不报错, 加上-p可以创建多级目录.
7.文件相关
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# touch 创建文件的.
# 格式
touch 文件路径1 文件路径2... # 可以同时创建多个文件.
# cat 查看文件内容的
# 格式
cat 文件路径 # 一次性查看文件所有内容, 如果内容较多, 会翻页, 只留最后一页.
# more 查看文件内容的, 可以分页查看.
more 文件路径 # 以分页的形式查看文件内容.
# 空格 向下翻一页
# d down的意思, 向下翻半页
# enter 向下翻一行
# b back, 向上翻一页.
# q quit, 表示退出. 也可以按下 ctrl + 字母C
文件和文件夹相关命令
8.cp命令, 来源于 copy单词, 可以拷贝 文件, 文件夹
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 # 格式
cp [-r] 数据源 目的地 # -r表示recursive(递归), 即: 拷贝文件夹时, 要写.
cp -r /root/aa /root/test
[root@linxkon ~]# cd /root/
[root@linxkon ~]# ls
2.avi 3.jpg 4.mp3 aa anaconda-ks.cfg a.txt
[root@linxkon ~]# mkdir lk
[root@linxkon ~]#
[root@linxkon ~]# cp a.txt lk # 拷贝
[root@linxkon ~]# ls
2.avi 3.jpg 4.mp3 aa anaconda-ks.cfg a.txt lk
[root@linxkon ~]# ls lk/
a.txt
[root@linxkon ~]#
[root@linxkon ~]# cp 2.avi lk/abc.avi # 拷贝, 并改名
[root@linxkon ~]# ls lk/
abc.avi a.txt
[root@linxkon ~]# cp aa lk # 报错, 拷贝文件夹必须夹-r, 递归拷贝.
cp: 略过目录"aa"
[root@linxkon ~]# cp -r aa lk # 拷贝文件夹
[root@linxkon ~]# ls lk/
aa abc.avi a.txt
9.mv(move)剪切移动/重命名
1 |
|
10.rm命令, 来源于 remove单词, 可以删除 文件, 文件夹
1 |
|
11.一个坐牢命令
1 |
|
查找命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#### 12.which命令, 查找Linux可执行命令 的路径的.
which ls # /usr/bin/ls
which pwd # /usr/bin/pwd
which ifconfig # /usr/sbin/ifconfig
#### 13.find命令, 根据文件名, 或者 文件大小查找指定文件.
# 格式
find 要被检索的目录路径 -name '要检索的文件名'
find / -name 'abc*' # 查找Linux中, 以abc开头的内容.
# 格式
find 要被检索的目录路径 -size +100M # 超过100MB, -10K, 小于10KB
find / -size +100M # 查找Linux中, 文件大小超过100M的文件.
—————————————————华丽的分割线—————————————————