Linux常用命令汇总

Soul Lv2

今天再新开一个 Tag ,专门用来记录一些常用但比较容易忘的东西,话不多说,我们直接不如正题。
首先警告:请千万不要在确保无害前直接在自己的设备上执行下面的命令

查看命令的功能

授人以鱼不如授人以渔,linux 大部分的命令都有自己的操作手册,我们可以通过,man 命令来查看他们具体的作用

1
man ls

例如我们如果不知道 ls 命令的作用,我们可以通过上面的命令来直接获得 ls 命令的操作手册(当然是全英文的,不过作为程序员,想必这不是什么大的问题)

目录操作

目录操作时最为基础的操作了,
我们首先看一下一些常用的别名

1
2
3
4
. # 表示当前目录
.. # 表示当前目录的父目录
~ #当前用户的根目录
/ # 系统的根目录

首先我们看一看如何在不同的目录之间移动

1
2
3
cd /dir/test #转移到/dir/test目录
cd test #转移到当前目录的子目录test
cd .. # 转移到当前目录的父目录

此外 cd ~ 表示转移到当前用户的根目录,而 cd / 是转移到系统的根目录。
然后是查看当前目录下的文件

1
2
3
ls # 查看当前目录下的所有文件
ls /dir #查看/dir目录下的所有文件
ls -a # 查看当前目录下的所有文件(包括隐藏文件)

在默认状态下,linux 中以 . 开头的文件是会被隐藏的,只有添加了 -a 参数才会被显示(ls 命令的其余参数可通过 man 命令得到,我这里不再详述)
然后是剪切与复制

1
2
mv /dir/test1.txt /temp/test2.txt #将/dir下的test1.txt剪切到/temp下并命名为test2.txt
cp /dir/test1.txt /temp/test2.txt #将/dir下的test1.txt复制到/temp下并命名为test2.txt

但注意,如果想要操作目录,需要这么做

1
2
mv -r /dir /temp # 将/dir的内容复制到/temp
cp -r /dir /temp # 将/dir的内容粘贴到/temp

-r 表示 recursion, 即递归操作,因为一个目录本质上也是一个文件, 在不加-r 参数时我们相当于只操作了目录文件而没有操作目录下的文件,通常 mv 还被用来对一个文件进行重命名
然后是删除

1
2
3
rm test.txt # 删除当前目录下的test.txt文件
rm -r /dir #删除当前目录与目录下的所有文件(会依次询问每个文件是否删除)
rm -rf /dir # 强制删除/dir目录下所有文件(不会询问,直接删除对应的目录)

互联网热梗 rm -rf / 将会直接删除整个系统,且在没有备份的情况下无法回复。
最后还有两个小命令

1
2
find /dir -name 'a*' # find命令用于查找满足特定条件的文件,例如这个命令就是查找/dir目录下所有名称以a开头的文件并打印其名称,单引号中的内容被称为正则表达式,这个我们会在下一篇中专门讲到
pwd # 打印当前所在的目录

find 命令的功能其实极为强大,值得专门写一篇来讲,不过对于初学者,我给出一个更为简单的使用模板

1
find 你想要查找的文件目录 -name '*target*'

这个命令会查找对应目录下名称中包含 target 的所有文件,比如我想要查找一下我博客的配置文件,我记得这个文件叫
_congfig.xml, 且一定在~/myblog 下,那么我就写

1
find ~/myblog -name '_config.xml' # *表示任意数量的字符,我这里已经确切的知道名字了,就不加了

最后是创建目录命令

1
mkdir mydir # 创建一个名为mydir的目录

文件操作

看完了文件操作,我们来聊一聊文件操作,先从创建文件开始

1
touch test.txt # 在当前目录下创建名为test.txt的文件

虽然 touch 的实际作用是修改某个文件的时间戳,但实践上更多的被用于创建文件
然后是修改文件,通常使用 vim 实现,不过这就又值得单开一章了,所以我们暂时跳过,如果有兴趣可以自己找一些教程去学习 vim 的操作
接下来我们了解一些常用的文件处理操作

1
2
3
4
5
cat test.txt # 将test.txt的内容打印到控制台,-n参数可用来显示行号
less test.txt # 按页显示内容,空格翻页
more test.txt # 按页显示内容,Page UP与Page Down翻页
tail -n 10 test.txt # 显示文件最后10行(没有-n 10 时为默认值5行)
head -n 10 test.txt # 显示文件开头10行(没有-n 10时为默认值5行)head与tail可以实时查看文件的变化,通常被用来看日志

那么我如果希望直接通过控制台向某个文件写入内容呢,这里我们首先引入一个概念:标准输出与标准输出。我们在学习 C 语言一定会学到一个头文件 stdio.h 这个文件实际上是指 standard input and output,即标准输入与输出。一般我们称控制台上的输入与输出为标准输入与标准输出。例如上面我们使用命令来获得某个文件的内容,就是将内容定向到标准输出,我们可以通过将这一过程重定向来实现

1
cat text.txt >> text2.txt # 将test.txt的内容追加到text2.txt末尾

此处的 >> 就表示追加重定向,将标准输出重定向为 text2.txt,此外还有覆写重定向 >, 此时的输出会直接覆盖原来的内容。
当然,也有一个专门的命令来实现这件事

1
echo ‘Hello World’ >> text.txt # 将引号中的内容直接写入

关于这些奇奇怪怪的符号,我们等会儿再介绍,先看下一个命令

1
grep 'test' test.txt #匹配test.txt中包含test的所有行,并打印到标准输出(支持同时查找多个文件)

注意,这里的行不是我们所看到的行, 而是以 /r 标示的才算行,所以更多的实际上是匹配我们所认为的段的内容
grep 同样支持通过正则表达式进行匹配,同时还有极为丰富的选项,我随便写几个常用的

1
2
3
4
5
-i #忽略大小写差异
-v #翻转,输出不符合条件的
-n #输出匹配的行号
-c #只输出匹配的行号,忽略内容
-F #将查找的内容视为字符串而不是正则表达式

不过如果我们希望具体的对文件的某一行进行编辑呢,直接用文本编辑器如 vim 打开编辑显然是可以的,但如果要在命令行中完成呢,我们可以通过 sed 命令来实现,
sed 是 Linux 中的一款强大的流编辑器,它可以对文本进行各种操作,如替换、删除、插入等。以下是 sed 命令的详细用法:

基本语法

  • sed [选项]... {script} [输入文件]...

  • sed [选项]... -f 脚本文件 [输入文件]...

常见选项

  • -n :安静模式(quiet mode),默认情况下 sed 会将模式空间中的内容输出到屏幕,使用该选项后,只有经过处理的行才会被输出,常用于与打印命令配合使用。

  • -i :直接修改文件内容,而不是仅仅输出到屏幕。

  • -f :指定 sed 脚本文件,可以从文件中读取编辑脚本。

基本用法

  • 替换文本

    • s/pattern/replacement/flags :这是 sed 最常用的替换命令格式,表示将匹配到的 pattern 替换为 replacement。flags 是可选参数,用于控制替换行为。

    • 示例 1 :将文件中的 “Linux” 替换为 “linux”,且只替换每行的第一个匹配项。

      • 命令:sed 's/Linux/linux/' input.txt

      • 解释:s 表示替换,Linux 是要匹配的模式,linux 是要替换成的内容,/ 是分隔符。

    • 示例 2 :全局替换,将文件中的每个 “Linux” 都替换为 “linux”。

      • 命令:sed 's/Linux/linux/g' input.txt

      • 解释:g 表示全局替换,即替换每行中所有匹配到的模式。

    • 示例 3 :只替换每行的第 2 个匹配项。

      • 命令:sed 's/Linux/linux/2' input.txt

      • 解释:2 表示只替换每行的第 2 个匹配项。

    • 示例 4 :忽略大小写替换,将文件中的 “linux”、“Linux”、“LINUX” 等多种大小写形式都替换成 “linux”。

      • 命令:sed 's/[Ll]inux/linux/g' input.txtsed 's/linux/linux/gi' input.txt

      • 解释:第一种方法是使用正则表达式中的字符类 [Ll] 来匹配大小写不同的 “L”,第二种方法中 i 表示忽略大小写。

  • 删除文本

    • d :删除匹配的行。

    • 示例 1 :删除文件中包含 “error” 的行。

      • 命令:sed '/error/d' input.txt

      • 解释:/error/ 是地址模式,用于指定要删除的行,d 是删除命令。

    • 示例 2 :删除文件中的空白行。

      • 命令:sed '/^$/d' input.txt

      • 解释:^ 表示行首,$ 表示行尾,^$ 匹配空白行。

    • 示例 3 :删除文件中的第 3 到第 5 行。

      • 命令:sed '3,5d' input.txt

      • 解释:3,5 表示行号范围,d 是删除命令。

  • 打印文本

    • p :打印模式空间中的内容,默认情况下 sed 会自动打印模式空间,但在安静模式下需要用 p 来指定要打印的行。

    • 示例 1 :在安静模式下打印文件中包含 “success” 的行。

      • 命令:sed -n '/success/p' input.txt

      • 解释:-n 禁止自动打印,/success/ 是匹配模式,p 表示打印。

    • 示例 2 :打印文件的第 1 到第 3 行。

      • 命令:sed -n '1,3p' input.txt

      • 解释:-n 禁止自动打印,1,3 表示行号范围,p 表示打印。

  • 插入和追加文本

    • i :在匹配行之前插入文本。

    • a :在匹配行之后追加文本。

    • 示例 1 :在文件中包含 “note” 的行之前插入一行 “This is a new line”。

      • 命令:sed '/note/i This is a new line' input.txt

      • 解释:/note/ 是匹配模式,i 表示插入,后面跟着要插入的文本,需用空格分隔。

    • 示例 2 :在文件的第 2 行之后追加一行 “Appended line”。

      • 命令:sed '2a Appended line' input.txt

      • 解释:2 表示行号,a 表示追加,后面跟着要追加的文本。

  • 替换整个行

    • c :将匹配的行替换为指定的文本。

    • 示例:将文件中包含 “warning” 的行替换为 “This line has been changed”。

      • 命令:sed '/warning/c This line has been changed' input.txt

      • 解释:/warning/ 是匹配模式,c 表示替换整个行,后面跟着替换后的新文本。

高级用法

  • 使用正则表达式

    • sed 支持丰富的正则表达式语法,可以实现复杂的文本匹配和操作。例如,匹配以某个字符串开头或结尾的行、匹配包含特定模式的行等。

    • 示例 1 :匹配以 “#” 开头的行并删除。

      • 命令:sed '/^#/d' input.txt

      • 解释:^# 表示行首的 “#”,d 是删除命令。

    • 示例 2 :匹配以数字开头的行并打印。

      • 命令:sed -n '/^[0-9]/p' input.txt

      • 解释:^[0-9] 表示行首的数字,-n 禁止自动打印,p 表示打印。

  • 使用脚本文件

    • 可以将多个 sed 命令写入一个脚本文件中,然后使用 -f 选项执行该脚本文件,方便对复杂的文本处理任务进行管理和复用。

    • 示例:创建一个名为 script.sed 的文件,内容如下:

      • s/error/ERROR/g

      • /SUCCESS/d

      • s/warning/Warning/g

      • 然后使用命令 sed -f script.sed input.txt 来执行该脚本文件,对 input.txt 文件进行一系列的文本替换和删除操作。

文件的打包与压缩

接下来讲一讲文件的打包与压缩,在 Windows 上,打包与压缩通常同时发生,但在 linux 上这是两个完全独立的过程,举个简单的例子,例如有一个目录叫 /mydir,我希望将这个目录下的文件都转发给别人,但挨个发既麻烦又不能很好的保存文件的目录结构等信息,此时我们可以通过将这个目录打包为一个文件来解决,也就是我们所看到的 .tar 文件,命令如下

1
tar -cf mydir.tar ./mydir # -c表示打包,-f是重命名

此时我们得到了一个叫做 mydir.tar 的文件,这就是目录的打包文件,然后我又觉得文件体积太大,为了方便传输,所以再将这个文件压缩, 我们就用 gzip 来压缩吧

1
gzip -c mydir.tar >> mydir.tar.gz #使用>>来讲输出重定向到对应的文件(这个文件可以不存在)

上面的流程也可以简化为

1
tar -zcvf mydir.tar.gz ./mydir #-z表示调用gzip压缩,-v是显示压缩过程

然后是解压操作,如果分步走时这样的

1
2
3
gunzip mydir.tar.gz # 先解压
tar -xvf mydir.tar #再解包,-x表示解包
tar -zxvf mydir.tar.gz -C ./temp # -z调用gzip解压然后-x解包 -C将输出定向到./temp 目录下

或许你会问直接压缩不是能实现同样的效果吗,这个问题下面可以解答

文件权限管理

接下来我们来讲一讲 linux 的权限管理,上面的内容一直在讲文件,那么我们就先从文件的权限管理说起吧,首先,我们随便用 ls -l 一个目录, 下面是结果

1
2
3
drwxrwxr-x 2 soul soul 7月  6 05:00 img
drwxrwxr-x 2 soul soul 7月 6 00:48 _posts
drwxrwxr-x 2 soul soul 4月 1 21:20 tags

我们看到开头是一行奇怪的字符串 drwxrwxr-x,这串字符表示的就是该文件的类型与权限,开头的 d 表示这是一个目录,之后的九位分为三组,分别代表所有者,同用户组,其余所有人对该文件的权限,开头三个是 rwx,即 read write execute 权限,对应读,写,执行。说明文件的所有者可以对这个文件进行读,写,执行。接着的 rwx 表示和所有者同用户组的成员可以读,写,执行这个文件。最后的 r-x 则表示可以读与执行,但不能写,即非同用户组成员只能读或执行,不可修改。
权限的变更可以通过 chmod 命令实现, 首先,u 代表所有者,g 代表用户组,o 代表其他人,a 代表所有人,然后+是添加,-时删去,=是设置为,例如

1
chmod o+rw test.txt

就表示对非用户组内的用户添加读写权限

1
chmod g-x test.txt 

表示删去同组用户的执行权限
有两点需要注意,首先,一个目录必须同时可被读与执行才能正常访问,其次如果要对目录操控需要使用 —R 参数表示递归。
此外,或许你还见过另一种格式的权限修改,例如这样

1
chmod 777 ./mydir

上面的命令相当于赋予所有人全部权限。在 linux 中,read=4,write=2,excute=1;7=4+2+1,即全部权限,三位数分别代表用户,用户组,其余人。
再例如

1
chmod 755 ./mydir

就表示将拥有者的权限修改为 7(读,写,执行),其余人的权限为读与执行(4+1)。
上面我们反复提及用户与用户组,我们接下来看看什么是用户与用户组。

用户与用户组

首先,我们从用户说起,linux 是一个多用户的操作系统,不同的用户除了可以用于区分不同的现实使用者,也可以用于负责不同的功能,不同的功能对应不同的用户不同的权限,这样可以最大程度的保护我们设备的安全。
我们先看一些基础的命令。(下面的所有命令如果权限不足请在开头添加 sudo)
我们可以首先来看看自己的设备上现在有哪些用户,用户列表通常存储在 /eec/passwd 文件中,所以我们可以直接通过上面提到的 cat 命令查看

1
sudo cat /etc/passwd

我们会得到类似下面的信息

1
2
3
root:x:0:0:root:/root:/usr/bin/zsh
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin

上面的信息中展示了三个用户的信息,每个用户占一行,不同的信息之间通过冒号分割
例如第一行,从左到右分别说明用户名为 root,密码已被隐藏(x),用户 id 为 0,所属的主组 id 为 0,用户描述为 root,用户的根目录为/root(或者叫家目录),默认的 shell 是/usr/bin/zsh
然后我们来看一些关于用户管理的基本命令

1
2
3
4
useradd testuser #添加一个名为testuser 的用户
adduser testuser #部分发行版中存在的命令,添加一个名为testuser的用户并引导完成用户相关设置
userdel testuser #删除名为testuser的用户
passwd testuser #为用户testuser设置密码

然后是用户相关的设置,统一使用 usermod 命令完成,不同的参数含义如下

1
2
3
4
5
6
7
8
usermod -d /home/test testuser #将用户的家目录修改为/home/test(默认为/home/username)
usermod -c ‘something’ testuser #将testuser的用户描述设置为something
usermod -e 2030-01-01 testuser #设置testuser用户将在2030年1月1日失效
usermod -s /bin/bash testuser #设置用户的默认shell
usernod -u 666 testuser #设置用户的id为666
usermod -g group1 testuser #设置用户的主组为group1
usermod -G group2 testuser #将用户的附属组设置为group2
usermod -aG group2 testuser #将用户添加到group2中

我们上面反复提及用户组,那么什么是用户组呢?每个用户都有不同的权限,而如果在某一刻我们希望对某个权限进行批量操作时我们该怎么办?如果一个一个操作,那么这岂不是太过浪费时间?所以为了方便,我们选择将不同的用户聚集起来构成一个个用户组,用户组的信息存储在/etc/group 中,可以按照上面的方式自己产看一下现在有哪些用户组。然后来看一些基本的操作

1
2
groupadd group1 #创建一个叫做group1的用户组
groupdel group1 #删除该用户组(需要确保此时组中无用户)

然后是用户组的相关设置

1
2
3
4
groupmod -n group group1 #将group1的名称修改为group
groupmod -U a,b,c group1 #将group1的成员设置为a,b,c三人
groupmod -aU a,b,c group1 #添加三人到用户组中
gpasswd -d user group1 #将用户user从group1中移除

我们再上面了解到,我们所有的命令实际上都是在执行某些文件,我们通过控制这些文件只能被特定用户组的用户执行就可以实现不同的用户只能执行特定的命令。
此外还有一点值得补充,在默认情况下,当一个用户被创建时,如果没有手动规定,他的主组是一个与他同名的组,组中只有他一人,而由特定的用户创建的文件则属于该用户的主组,不过我们也可以手动制定

语法

chown [选项] 所有者[:组] 文件…
chown [选项] –reference=参考文件 文件…

选项 :

  • -R, –recursive: 递归更改目录及其子目录中所有文件的所有者
  • -v, –verbose: 显示详细操作信息
  • -c, –changes: 只显示实际发生更改的文件
  • -f, –silent, –quiet: 抑制错误信息
  • –reference=文件: 使用参考文件的所有者和组设置
  • -h, –no-dereference: 影响符号链接本身,而不是链接指向的文件
  • –from=当前所有者: 只有当前所有者匹配时才更改

基本使用格式

1. 只更改所有者

1
2
hown username filename
chown john file.txt`

2. 同时更改所有者和组

1
2
chown username:groupname filename
chown john:developers script.sh

3. 只更改组(所有者前留空)

1
2
chown :groupname filename
chown :staff document.txt

4. 使用数字ID

1
2
chown 1000:1000 filename    # 用户ID 1000,组ID 1000
chown 1001 filename # 只更改用户ID

特殊符号

为了方便后面的解释,我觉得有必要先解释一下几个比较重要的有特定含义的符号

  1. 重定向输出符号:

    • > 标准输出重定向。我们上面提到了所有的命令默认将信息通过标准输出输出到控制台上,我们可以通过标准输出重定向来将输出内容指向其他地方,例如下面这样

      1
      echo 'hello' > text.txt

      上面的命令会用hello取代text.txt中的原内容

    • >>标准输出追加重定向,也就是我们上面提到的,将内容追加到文件的末尾而不是直接覆盖

      1
      echo 'hello' >> text.txt
    • 2>标准错误输出重定向,当执行命令出现报错时将报错的内容输出到指定位置

      1
      ls err 2> error.log
    • &>或者>&,会同时重定向标准输出与标准错误

  2. 重定向输入符号

    • <,从特定的文件而不是键盘获取输入

      1
      find ~/mydir -name <file.txt

      例如此处的find命令我们通过file.txt来获取我们想要查找的文件名称而不是手动输入

    • << 多行输入重定向,可以将复杂的多行输入作为输入,例如我可以这样来方便的向文件中写入内容

1
2
3
4
cat > test.txt <<EOF
hello linux!
this is a test.
EOF

两个EOF是约定的表示文件的起始与结尾,无实际的含义
3. 管道符

  • |管道符,可以将上一条命令的输出作为下一条命令的输入,举个例子,我们知道用户的信息存在/etc/passwd,如果我希望查看特定用户的信息,可以

    1
    cat /etc/passwd | grep user
  • |&包含标准错误的管道符

  1. 其他相关符号

    • ;命令之间的分隔符,不必多说
    • &&逻辑与,前一条命令执行成功才会执行后一条命令
    • ||逻辑或,前一条命令执行失败才会执行后一条命令

网络相关

接下来介绍一些和网络有关的内容,这是一个很大的内容,很难一次性讲完,我尽可能的把一些常用的命令讲一讲,但具体的操作还是需要自己去了解,我们先从最简单的 ping 讲起吧
如果我希望确定自己当前的网络是否存在问题,最简单的测试方法就是 ping 命令,例如

1
ping www.baidu.com

如果网络正常,我们通常会看到类似下面的信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
❯ ping www.baidu.com
PING www.baidu.com (2408:871a:2100:186c:0:ff:b07e:3fbc) 56 data bytes
64 bytes from 2408:871a:2100:186c:0:ff:b07e:3fbc: icmp_seq=1 ttl=53 time=182 ms
64 bytes from 2408:871a:2100:186c:0:ff:b07e:3fbc: icmp_seq=2 ttl=53 time=41.9 ms
64 bytes from 2408:871a:2100:186c:0:ff:b07e:3fbc: icmp_seq=3 ttl=53 time=82.1 ms
64 bytes from 2408:871a:2100:186c:0:ff:b07e:3fbc: icmp_seq=4 ttl=53 time=42.0 ms
64 bytes from 2408:871a:2100:186c:0:ff:b07e:3fbc: icmp_seq=5 ttl=53 time=198 ms
64 bytes from 2408:871a:2100:186c:0:ff:b07e:3fbc: icmp_seq=6 ttl=53 time=49.5 ms
64 bytes from 2408:871a:2100:186c:0:ff:b07e:3fbc: icmp_seq=7 ttl=53 time=27.8 ms
64 bytes from 2408:871a:2100:186c:0:ff:b07e:3fbc: icmp_seq=8 ttl=53 time=30.5 ms
^C
--- www.baidu.com ping statistics ---
9 packets transmitted, 8 received, 11.1111% packet loss, time 7994ms
rtt min/avg/max/mdev = 27.766/81.830/198.480/64.731 ms

Ping 命令会通过 ICMP 协议向对应的服务器发送数据包,支持 ICMP 协议的服务器将会返回对应的应答,我们可以通过这些信息知道延迟,丢包率等详细信息。
然后是查看一些本地的网络信息

1
ip addr

输出的信息类似于

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: enp12s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
link/ether fc:5c:ee:27:08:af brd ff:ff:ff:ff:ff:ff
3: wlp0s20f3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether f0:20:ff:25:06:2f brd ff:ff:ff:ff:ff:ff
inet 192.168.127.105/24 brd 192.168.127.255 scope global dynamic noprefixroute wlp0s20f3
valid_lft 3066sec preferred_lft 3066sec
inet6 2408:8427:8c01:6d9:1330:1453:194b:b795/64 scope global temporary dynamic
valid_lft 7061sec preferred_lft 7061sec
inet6 2408:8427:8c01:6d9:9789:e6be:dcc9:62e0/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 7061sec preferred_lft 7061sec
inet6 fe80::5dd6:c7ca:ff9:7dc0/64 scope link noprefixroute
valid_lft forever preferred_lft forever
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 2e:9f:2f:66:21:65 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever

上面的信息体现了我有 4 个网络接口, 第一个是 lo 即本地环路,第二个 e 开头表示的是有线连接,第三个 wl 开头是无线连接,最后是 docker 创建的虚拟网络接口。
至于其中具体的信息,受篇幅所限,我们暂时跳过,ip 命令可选的取值如下

  • link:网络设备
  • address:设备上的协议(IP或IPv6)地址
  • addrlabel:协议地址选择的标签配置
  • route:路由表条目
  • rule:路由策略数据库中的规则
    顺带一提,ip 命令在部分发行版上不是自带的,需要手动安装。
    然后是端口的开放与关闭,比较通用的是 iptables
1
2
iptables -A INPUT -p 协议 -dport 端口 -j ACCEPT #开放端口
iptables -D INPUT -p 协议 -dport 端口 -j ACCEPT #关闭端口

当然,现在的比较新的发行版上会有不同的工具,例如 ubuntu

1
2
ufw allow 端口号/协议
ufw delete 端口号/协议

或者红帽系

1
2
3
4
firewall-cmd --permanent --add-port=端口号/协议
firewall-cmd --reload #开启
firewall-cmd --permanent --remove-port=端口号/协议
firewall-cmd --reload #关闭

远程连接

本来这部分该放在网络相关中讲的,但是这部分还是比较重要的,所以单独放一部分来讲,我们最常使用的就是 ssh 了,假设我有一台服务器,现在希望远程进行连接,那么我可以使用

1
ssh 用户名@主机名 

来远程连接,之后按照引导输入密码即可远程连接,有一些可能用到的参数

  • -p,指定端口(默认为 22)
  • -i,使用身份验证文件,例如
1
ssh -i /pass/private_key 用户名@主机名

此外也可以在

1
ssh 用户名@主机 command

来执行特定的命令
如果我们希望将本地的文件上传到服务器或者从服务器下载文件,可以使用 scp,就像下面这样

1
scp /path/test.txt usernam@hostname:/path/target

如果想要下载,就

1
scp username@hostname:/path/test.txt /path/target

有以下比较常用的参数

  • -P 指定端口
  • -r 递归复制目录
  • -C 启用压缩模式,将文件压缩后再传输
  • -i 使用身份验证文件
    当然,还有一个工具值得一提:rsync
    常规的使用和 scp 一致,讲几个比较常用的参数
  • -a, 归档模式,保留用户组,权限等文件信息
  • -z,压缩模式
  • –exclude=‘pattern’, 排除满足特定模式的文件
  • –include=‘pattern’,只包含满足特定模式的文件
  • –partial ,启用断点续传,可以在上一次传输失败的情况下继承上一次的进度

硬盘管理

接下来我们聊一聊硬盘管理,首先我们来看一看 df 命令

1
df 选项 目录或文件名

可以用来查看具体的目录或文件的硬盘占用,当然如果不填文件名的话默认使用根目录,可用的参数如下

  • -h, 以更可读的格式输出
  • -T, 显示文件系统类型
  • -i, 显示 inode 使用情况
    然后是 fdisk 命令,首先我们需要查看我们现有的存储设备
1
fdisk -l

其输出一般如下

设备 起点 末尾 扇区 大小 类型
/dev/sda1 34 32767 32734 16M Microsoft 保留
/dev/sda2 32768 10552868863 10552836096 4.9T Microsoft 基本数据
/dev/sda3 10552868864 23437768703 12884899840 6T Linux 文件系统

我们进一步可以通过 fdisk 工具来管理文件系统分区等操作,但这里我们就不做详细的介绍了,我们直接讲讲如何自动挂载存储设备,在 window 上我们插上一个 U 盘,通常可以做到自动识别,但在 linux 上特别是在一些比较老的发行版上这一点却很难做到,我们可以选择手动挂载,例如我希望挂载上面的/dev/sda 2, 就可以选择这样做:

1
2
mount /dev/sda2 #挂载
umount /dev/sda2 # 卸载

如果这是一个经常被使用的

  • 标题: Linux常用命令汇总
  • 作者: Soul
  • 创建于 : 2025-07-06 00:48:57
  • 更新于 : 2025-07-13 18:24:23
  • 链接: https://soulmate.org.cn/posts/319acda5/
  • 版权声明: 本文章采用 CC BY-NC 4.0 进行许可。