跳转至

A. 基本命令参考

A. 基本命令参考

更新日期:2020-07-24


1. 命令帮助

下面这条命令可以打开命令的帮助手册,里面会列出命令的详细用法。虽然是英文的。

1
cmd --help

2. 查看系统信息

linux有一个概念叫做一切皆文件。很多系统的信息通过读文件来查看,设定系统则通过修改相应的文件来实现。

2.1 操作系统信息

查看linux内核版本

1
cat /proc/version

查询结果示例

发行版
结果
Debian系列 Linux version 4.14.129 (root@vultr.guest) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1)) #1 SMP Mon Jun 24 16:51:05 UTC 2019
Red Hat系列 Linux version 4.18.0-147.5.1.el8_1.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 8.3.1 20190507 (Red Hat 8.3.1-4) (GCC)) #1 SMP Wed Feb 5 02:00:39 UTC 2020
Arch系列 Linux version 5.5.4-arch1-1 (linux@archlinux) (gcc version 9.2.1 20200130 (Arch Linux 9.2.1+20200130-2)) #1 SMP PREEMPT Sat, 15 Feb 2020 00:36:29 +0000

要查看发行版的版本可以利用/etc/os-release这个文件。也就是执行如下命令:

1
cat /etc/os-release
发行版 结果
Debian系列 PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
Arch系列 NAME="Arch Linux"
PRETTY_NAME="Arch Linux"
ID=arch
BUILD_ID=rolling
ANSI_COLOR="38;2;23;147;209"
HOME_URL="https://archlinux.org/"
DOCUMENTATION_URL="https://wiki.archlinux.org/"
SUPPORT_URL="https://bbs.archlinux.org/"
BUG_REPORT_URL="https://bugs.archlinux.org/"
PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/"
LOGO=archlinux-logo

2.2 硬件信息

硬件 命令 说明
概览 dmidecode
lshw
列举出所有硬件的信息。因为输出内容较多,可以通过参数指定输出的样式。
cpu lscpu
lshw -c cpu
内存 dmidecode -t memory
lshw -c memory
硬盘 lshw -c disk
网卡 ip link show 例如查看无线网卡的信息。
PCI lspci 查看主板上的各种硬件设备的信息。如显卡、USB接口等。

lshw命令找不到?

有的系统并不自带这个包,此时就需要自己先安装lshw

2.3 磁盘使用信息

功能 命令 说明
查看分区表 cat /etc/fstab 列出各分区的UUID、文件系统等信息。
查看磁盘列表 lsblk 列出所有物理磁盘的分区划分信息。
查看各分区使用情况 df -h 列举出所有分区的大小、使用量、挂载点等信息。

2.4 内存使用信息

1
free

这个命令会显示出内存的总大小、使用量、剩余空间、缓存等信息。

2.5 当前系统中的进程

1
ps

可以查看此命令的帮助手册来了解更详细的用法。常见的用法如下:

功能 命令
查看所有进程 ps -aux
查看进程时显示命令行 ps -f

2.6 查看MAC地址

使用上面介绍的查看网卡信息的命令就可以查看。

1
ip link show

2.7 查看IP地址

同样使用查看网卡信息的命令就可以查看。

1
ip addr show

3. 用户与权限

3.1 修改用户密码

1
passwd yourAccountName

3.2 列举当前系统中的用户、组

1
2
getent passwd
getent group

3.3 添加/删除/修改组、用户

1
2
3
4
5
6
groupadd
groupdel
groupmod
useradd
userdel
usermod

更详细的用法可以参考这些命令的帮助手册。

3.4 修改文件/文件夹的用户/组

1
chown [OPTION]... [OWNER][:[GROUP]] FILE…

通过指定-R选项可以一次性修改文件夹下面所有文件和文件夹的用户/组。

3.5 修改文件/文件夹的权限

1
chmod

指定权限的格式有很多,使用数字是比较简便的一个方法。

1
2
r   w   x
4   2   1

读和执行权限就是r-x,也就时4加1等于5。所有权限就是rwx,也就是4加2加1等于7。

常见的文件权限示例

1
2
-               rwx                 r-x                 r-x
目录?文件?       文件拥有者权限         拥有者所在组的权限     其他用户权限

上面的权限数字为755。

4. 文件操作

操作 命令 说明
新建文件 touch test.txt 创建文件的方法有很多。比如echo xxxx > test.txt等。
新建文件夹 mkdir -p /tmp/test_tmp 指定-p可以创建多层目录结构。
删除文件 rm test.txt
删除文件夹 rm -rf /tmp/test_tmp 指定-r可以递归删除所有子目录。-f为强制删除,以免删除里面的每个文件都要依次询问。这个命令很危险,执行的时候要小心一些。
复制文件 cp srcFile dstFile
复制文件夹 cp -r srcFold dstFold -r为递归复制文件夹下面的所有文件和子文件夹。
移动文件 mv srcFile dstFile
移动文件夹 mv srcFold dstFold
重命名文件 用移动文件完成 在同一个位置移动并换一个新的名字。
重命名文件夹 用移动文件夹完成 在同一个位置移动并换一个新的名字。
列举指定目录下的文件 ls path ls的选项非常多。可以选择显示各种目录和文件的信息。
查看文件内容 cat/tail/head file 可以指定看多少行。
根据指定条件检索文件 find 可以指定的条件非常多。比如文件名匹配、时间、大小、用户等。
根据文件内容检索文件 grep "pattern" -rHn /path 选项非常多。-r为递归检索,-H为打印出文件名,-n为打印出行号。
编辑文件 vim fileName
sed
vim是一个经典命令行界面文本编辑工具。 sed是一个纯命令的操作文本的命令,它也很复杂的用法,可以参考帮助手册。
修改文件的时间戳 touch [OPTION]... FILE… 可以通过选项来使用指定的时间来修改ATime或者Mtime。
列举目录的多层结构 tree 可以指定打印的层数、筛选文件夹等。功能选项非常的多。 如tree -L 3 -h命令显示三层目录结构并打印出文件大小。
压缩/解压缩文件 tar 帮助手册里的例子就很好
Examples:
tar -cf archive.tar foo bar # Create archive.tar from files foo and bar.
tar -tvf archive.tar # List all files in archive.tar verbosely.
tar -xf archive.tar # Extract all files from archive.tar. 添加选项-z可以处理.tar.gz文件。

5. 环境变量

操作 命令 说明
列举所有的环境变量 env printenv export
打印指定的环境变量 echo $VAR
设定环境变量 export VAR=XXXX 通常用于软件的自动执行脚本文件中。
删除环境变量 export -n VAR

6. 系统服务

操作
命令
说明
注册服务 请查看服务管理相关章节
取消注册的服务 请查看服务管理相关章节
列举当前系统中的服务 systemctl -a systemctl的选项很多很复杂。可以通过各种条件来筛选出想要打印出来的服务。
启动服务 systemctl start serviceName
关闭服务 systemctl stop serviceName
重启服务 systemctl restart serviceName
设置为开机启动 systemctl enable serviceName
取消开机启动 systemctl disable serviceName

7. 防火墙与端口

7.1 打开/关闭防火墙

在linux中防火墙就是一个普通的服务。可以使用systemctl系列的命令来控制。

1
systemctl start/stop/restart/status firewalld

7.2 列举所有正在被监听的端口

使用如下两条命令,他们的选项很多。通常我们希望看到被监听的TCP端口。

1
2
ss -ntlp
netstat -ntlp

更多信息可以参考命令的帮助手册。

7.3 开放/关闭端口

以Tomcat常用的8080为例。

打开

1
firewall-cmd --zone=public --add-port=8080/tcp --permanent

关闭

1
firewall-cmd --zone=public --remove-port=8080/tcp --permanent

注意需要让防火墙重新加载来使修改生效。

1
firewall-cmd --reload

7.4 列举所有开放的服务

所谓服务,就是我们的应用程序,比如tomcat,NginX等等。或者是一组程序,这组应用程序也许会使用多个端口。 这种情况下,定义成一个服务是比较好的做法。这样就能很方便的管理这个应用程序使用的所有端口。

1
firewall-cmd --list-services --zone=public --permanent

7.5 开放/关闭服务

要想开放服务,稍微有点复杂。这需要我们把这个服务注册到防火墙的名单中去好让它认识我们的服务。

以注册我的WebServer服务为例,我的WebServer由NginX和Frp组成。

在下面的路径创建webserver.xml文件。

1
cd /etc/firewalld/services/

webserver.xml

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<service>
    <short>My web server</short>
    <description>NginX</description>
    <port protocol="tcp" port="443"/>
    <description>Frps</description>
    <port protocol="tcp" port="7000"/>
</service>

然后使用如下命令完成注册:

1
firewall-cmd --add-service=webserver --zone=public --permanent

注意需要让防火墙重新加载来使修改生效。

1
firewall-cmd --reload

在配置生效后,端口443和7000都会被防火墙允许访问。

要删除注册的服务,则需要删除webserver.xml文件并执行如下命令:

1
firewall-cmd --remove-service=webserver --zone=public --permanent

7.6 列举所有开放的端口

1
firewall-cmd --zone=public --list-ports

7.7 端口重定向

以配置Tomcat时,80端口重定向到8080端口为例。

1
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 --permanent

注意需要让防火墙重新加载来使修改生效。

1
firewall-cmd --reload

7.8 一次列举各种常用的防护墙配置信息

一次看个够,非常实用的命令,结果中包含上面所说的各种端口和服务的配置信息。

1
firewall-cmd --info-zone public

8. 软件管理

8.1 基本命令

操作 Debian系列 Red Hat系列 Arch系列
列举已安装的软件 apt list --installed [包名] yum list installed pacman -Q
安装软件 apt install 包名 yum install 包名 pacman -S 包名
卸载软件 apt remove/purge 包名 yum remove 包名 pacman -Rs 包名
更新系统 apt update && apt upgrade -y yum -y upgrade pacman -Syu
列举软件安装源 cat /etc/apt/sources.list yum repolist cat /etc/pacman.conf
添加软件安装源 查看Debian WiKi 参照8.2 查看Arch WiKi
列举可安装软件 apt list yum list pacman -Ss [包名]
查看安装后的文件 dpkg -L 包名 pacman -Ql 包名
查看软件包的信息 apt show 包名 pacman -Qi 包名

要注意的是更新和卸载都需要使用sudo来提升权限。

8.2 在CentOS中添加软件安装源

在CentOS中软件安装源的信息都保存在repo文件中,放在如下位置:

1
cd /etc/yum.repos.d

在添加新的软件安装源,就需要在这个位置创建一个新的repo文件。

MyRepo.repo

1
2
3
[MyRepo]
name=名字
baseurl=url

最简单的情况只需要这三个信息就够了。

9. 进程管理

9.1 列举当前所有进程

使用前面提到的ps命令就可以。具体用法比较复杂,可以参考帮助手册。

例如,列举所有进程并显示CMD:

1
ps -ef

9.2 强制杀死指定进程

1
kill processPID

9.3 列举进程树

1
pstree

这个命令可以清楚的看到各个进程之间的关系,它也有很多的选项可以配置。

10. 网络相关操作

10.1 下载文件

通常有两个命令可以使用:

1
2
wget url
curl url

它们都有非常多的选项可以指定。可以参考帮助手册来了解详细用法。

10.2 通过get方式请求指定URL

同样是wget和curl这两个命令,默认情况下它们都是用get方式来请求URL的。

10.3 通过post方式请求指定URL

仍然是wget和curl这两个命令,通过调查它们的帮助手册,并按照关键字post来筛选,就可以找到它们的用法。

例如wget加上--post-data=STRING就可以使用STRING作为post数据来请求URL。

10.4 测试网络

1
ping url

11. 命令结果格式化

11.1 取得结果中的指定行

可以通过组合使用head和tail命令来实现。

例如要输出文本中的第四行:

1
txt | head -n 4 | tail -n 1

11.2 将结果行按指定的字符进行分割

可以使用awk命令来实现,它默认使用空格来分割文本。它的用法非常复杂,可以参考帮助手册。

例如要分割文本内容,并输出第3列的内容:

1
awk -e '{print$3}'

11.3 输出时指定颜色

可以使用如下命令,数字代表颜色。颜色种类还是挺多的。

1
2
# 使用黄色输出文字,然后恢复输出为白色
tput setaf 11; echo "Hello world!"; tput setaf 7;

12. 本地化

以控制台界面为例。控制台输出与图形界面用的并不是一套设置。

12.1 列举当前系统中安装的字符集

1
2
locale -a
localectl list-locales

12.2 查看字符集

1
echo $LANG

12.3 安装并设定字符集

首先通过如下命令查询字符集关联的包:(假设在红帽系Linux中)

1
yum list | grep langpacks

从结果中我们可以找到对应语言的包来进行安装。

比如中文为langpacks-zh_CN.noarch,日文为langpacks-ja.noarch。

安装完成后再次执行locale -a来查看,就能看到我们安装的字符集。

然后执行如下命令来修改字符集:(以中文为例)

1
2
localectl set-locale LANG=zh_CN.utf8
source /etc/locale.conf

12.4 列举当前系统中安装的键盘布局

1
localectl list-keymaps

12.5 查看键盘布局

1
localectl

12.6 设定键盘布局

以日语键盘布局为例:

1
localectl set-keymap jp106  

同样是日语键盘,也分好几种。如果这里执行失败,则可以执行如下命令来查看当前系统支持的键盘布局,然后选择合适的日语键盘布局。

1
localectl list-keymaps