A. 基本命令参考
A. 基本命令参考
更新日期:2020-07-24
1. 命令帮助
下面这条命令可以打开命令的帮助手册,里面会列出命令的详细用法。虽然是英文的。
1 | |
2. 查看系统信息
linux有一个概念叫做一切皆文件。很多系统的信息通过读文件来查看,设定系统则通过修改相应的文件来实现。
2.1 操作系统信息
查看linux内核版本
1 | |
查询结果示例
发行版 |
结果 |
|---|---|
| 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 | |
| 发行版 | 结果 |
|---|---|
| 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 | |
这个命令会显示出内存的总大小、使用量、剩余空间、缓存等信息。
2.5 当前系统中的进程
1 | |
可以查看此命令的帮助手册来了解更详细的用法。常见的用法如下:
| 功能 | 命令 |
|---|---|
| 查看所有进程 | ps -aux |
| 查看进程时显示命令行 | ps -f |
2.6 查看MAC地址
使用上面介绍的查看网卡信息的命令就可以查看。
1 | |
2.7 查看IP地址
同样使用查看网卡信息的命令就可以查看。
1 | |
3. 用户与权限
3.1 修改用户密码
1 | |
3.2 列举当前系统中的用户、组
1 2 | |
3.3 添加/删除/修改组、用户
1 2 3 4 5 6 | |
更详细的用法可以参考这些命令的帮助手册。
3.4 修改文件/文件夹的用户/组
1 | |
通过指定-R选项可以一次性修改文件夹下面所有文件和文件夹的用户/组。
3.5 修改文件/文件夹的权限
1 | |
指定权限的格式有很多,使用数字是比较简便的一个方法。
1 2 | |
读和执行权限就是r-x,也就时4加1等于5。所有权限就是rwx,也就是4加2加1等于7。
常见的文件权限示例
1 2 | |
上面的权限数字为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 | |
7.2 列举所有正在被监听的端口
使用如下两条命令,他们的选项很多。通常我们希望看到被监听的TCP端口。
1 2 | |
更多信息可以参考命令的帮助手册。
7.3 开放/关闭端口
以Tomcat常用的8080为例。
打开
1 | |
关闭
1 | |
注意需要让防火墙重新加载来使修改生效。
1 | |
7.4 列举所有开放的服务
所谓服务,就是我们的应用程序,比如tomcat,NginX等等。或者是一组程序,这组应用程序也许会使用多个端口。 这种情况下,定义成一个服务是比较好的做法。这样就能很方便的管理这个应用程序使用的所有端口。
1 | |
7.5 开放/关闭服务
要想开放服务,稍微有点复杂。这需要我们把这个服务注册到防火墙的名单中去好让它认识我们的服务。
以注册我的WebServer服务为例,我的WebServer由NginX和Frp组成。
在下面的路径创建webserver.xml文件。
1 | |
webserver.xml
1 2 3 4 5 6 7 8 | |
然后使用如下命令完成注册:
1 | |
注意需要让防火墙重新加载来使修改生效。
1 | |
在配置生效后,端口443和7000都会被防火墙允许访问。
要删除注册的服务,则需要删除webserver.xml文件并执行如下命令:
1 | |
7.6 列举所有开放的端口
1 | |
7.7 端口重定向
以配置Tomcat时,80端口重定向到8080端口为例。
1 | |
注意需要让防火墙重新加载来使修改生效。
1 | |
7.8 一次列举各种常用的防护墙配置信息
一次看个够,非常实用的命令,结果中包含上面所说的各种端口和服务的配置信息。
1 | |
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 | |
在添加新的软件安装源,就需要在这个位置创建一个新的repo文件。
MyRepo.repo
1 2 3 | |
最简单的情况只需要这三个信息就够了。
9. 进程管理
9.1 列举当前所有进程
使用前面提到的ps命令就可以。具体用法比较复杂,可以参考帮助手册。
例如,列举所有进程并显示CMD:
1 | |
9.2 强制杀死指定进程
1 | |
9.3 列举进程树
1 | |
这个命令可以清楚的看到各个进程之间的关系,它也有很多的选项可以配置。
10. 网络相关操作
10.1 下载文件
通常有两个命令可以使用:
1 2 | |
它们都有非常多的选项可以指定。可以参考帮助手册来了解详细用法。
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 | |
11. 命令结果格式化
11.1 取得结果中的指定行
可以通过组合使用head和tail命令来实现。
例如要输出文本中的第四行:
1 | |
11.2 将结果行按指定的字符进行分割
可以使用awk命令来实现,它默认使用空格来分割文本。它的用法非常复杂,可以参考帮助手册。
例如要分割文本内容,并输出第3列的内容:
1 | |
11.3 输出时指定颜色
可以使用如下命令,数字代表颜色。颜色种类还是挺多的。
1 2 | |
12. 本地化
以控制台界面为例。控制台输出与图形界面用的并不是一套设置。
12.1 列举当前系统中安装的字符集
1 2 | |
12.2 查看字符集
1 | |
12.3 安装并设定字符集
首先通过如下命令查询字符集关联的包:(假设在红帽系Linux中)
1 | |
从结果中我们可以找到对应语言的包来进行安装。
比如中文为langpacks-zh_CN.noarch,日文为langpacks-ja.noarch。
安装完成后再次执行locale -a来查看,就能看到我们安装的字符集。
然后执行如下命令来修改字符集:(以中文为例)
1 2 | |
12.4 列举当前系统中安装的键盘布局
1 | |
12.5 查看键盘布局
1 | |
12.6 设定键盘布局
以日语键盘布局为例:
1 | |
同样是日语键盘,也分好几种。如果这里执行失败,则可以执行如下命令来查看当前系统支持的键盘布局,然后选择合适的日语键盘布局。
1 | |