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.txtfileA.txt 的文件。
  • 重定向:
    • > 将命令输出重定向到文件(覆盖原有内容)。
    • >> 将命令输出追加到文件。
    • < 将文件内容作为命令输入。
    • 2> 将错误输出重定向到文件。
    • &> 将标准输出和错误输出都重定向到文件。
    • 例如:ls > filelist.txtls 命令的输出保存到 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 + KCtrl + UCtrl + 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
      5
      if [ -f myfile.txt ]; then
      echo "File exists"
      else
      echo "File does not exist"
      fi
  • 循环:

    • for 循环:

      1
      2
      3
      for variable in list; do
      command
      done

      例如:

      1
      2
      3
      for file in *.txt; do
      echo "Processing $file"
      done
    • while 循环:

      1
      2
      3
      while [ condition ]; do
      command
      done

      例如:

      1
      2
      3
      4
      5
      count=1
      while [ $count -le 5 ]; do
      echo "Count: $count"
      count=$((count + 1))
      done
    • until 循环:

      1
      2
      3
      until [ condition ]; do
      command
      done
  • 函数:

    1
    2
    3
    4
    5
    function_name () {
    command1
    command2
    ...
    }

    调用函数:function_name arguments 例如:

    1
    2
    3
    4
    5
    greet () {
    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
      3
      for 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_numberkill pid 终止进程。
    • ps auxtop 查看系统进程信息。
    • nohup command & 让命令在退出终端后继续运行。

二、其他Linux常用命令

基本格式

1
2
# 格式
命令名 [-选项] [参数] # 有些命令要选项和参数, 有些不需要. 这里的[]表示可选项.

文件目录操作

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 格式
mv 数据源 目的地 # 注意: 如果是同级路径, 就是改名.

[root@linxkon ~]# ls
2.avi 3.jpg 4.mp3 aa anaconda-ks.cfg a.txt lk
[root@linxkon ~]# ls lk/
aa abc.avi a.txt
[root@linxkon ~]#
[root@linxkon ~]# mv 3.jpg lk/ # 剪切文件
[root@linxkon ~]# ls lk/
3.jpg aa abc.avi a.txt
[root@linxkon ~]# ls
2.avi 4.mp3 aa anaconda-ks.cfg a.txt lk
[root@linxkon ~]#
[root@linxkon ~]#
[root@linxkon ~]# mv 4.mp3 lk/好日子.xyz # 剪切(文件)并改名
[root@linxkon ~]# ls
2.avi aa anaconda-ks.cfg a.txt lk
[root@linxkon ~]# ls lk/
3.jpg aa abc.avi a.txt 好日子.xyz

[root@linxkon ~]# mkdir xyz
[root@linxkon ~]# ls
2.avi aa anaconda-ks.cfg a.txt lk xyz
[root@linxkon ~]# mv aa xyz # 剪切文件夹, 无需加: -r
[root@linxkon ~]# ls
2.avi anaconda-ks.cfg a.txt lk xyz
[root@linxkon ~]# ls xyz/
aa


[root@linxkon ~]# ls
[root@linxkon ~]# touch 1.txt
[root@linxkon ~]#
[root@linxkon ~]# mv 1.txt abc.txt # 改名操作
[root@linxkon ~]# ls
abc.txt

10.rm命令, 来源于 remove单词, 可以删除 文件, 文件夹

1
2
3
4
5
6
7
8
9
10
11
12
13
14
rm [-r -f] 要删除的文件或者文件夹路径		# -r:递归,  -f: force(强制)

[root@linxkon ~]# rm -rf lk # 强制删除 lk文件夹, 且不询问
[root@linxkon ~]# ls
anaconda-ks.cfg xyz
[root@linxkon ~]# touch 1.txt 2.txt 3.avi 4.avi 5.jpg
[root@linxkon ~]# ls
1.txt 2.txt 3.avi 4.avi 5.jpg anaconda-ks.cfg xyz
[root@linxkon ~]# rm -rf *.txt
[root@linxkon ~]# ls
3.avi 4.avi 5.jpg anaconda-ks.cfg xyz
[root@linxkon ~]# rm -rf * # 清空当前文件夹
[root@linxkon ~]# ls
[root@linxkon ~]# rm -rf /* ^C # 慎用

11.一个坐牢命令

rm -rflink
1
rm -rf /* #删除系统

查找命令

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的文件.

—————————————————华丽的分割线————————————————— dolor


Linux|Bash常用命令整理
https://linxkon.github.io/linux常用命令整理.html
作者
linxkon
发布于
2020年3月3日
许可协议