红联Linux门户
Linux协助

体系办理员应该知道的20条Linux指令

发布时刻:2017-09-01 09:37:49来历:oschina作者:编辑部的故事
在这个全新的东西和多样化的开发环境井喷的大环境下,任何开发者和工程师都有必要学习一些根本的体系办理指令。特定的指令和东西包可协助开发者安排、排查毛病并优化他们的运用程序,并且当呈现过错时,也可认为运维人员和体系办理员供给有价值的分类信息。
不管你是新手开发者仍是期望办理自己的运用程序,下面 20 条根本的体系办理指令都能够协助您更好地了解您的运用程序。它们还能够协助处理为什么运用程序可在本地正常作业但不能在长途主机上作业这类的体系毛病。这些指令适用于 Linux 开发环境、容器和虚拟机。
 
1.curl
curl 用于传输一个 URL。能够运用这条指令用于测验运用程序的端点或与上游服务端点的衔接。curl 还可用于查看你的运用程序是否能衔接到其他服务,例如数据库,或查看您的服务是否处于健康的状况。
举个比如,假定你的运用程序抛出一个 HTTP 500 过错,标明无法拜访 MongoDB 数据库:
$ curl -I -s myapplication:5000
HTTP/1.0 500 INTERNAL SERVER ERROR
-I 选项用于显现头信息,-s 选项标明运用静默形式,不显现过错和奇怪。查看数据库的端点是否正确:
$ curl -I -s database:27017
HTTP/1.0 200 OK
那么或许是什么问题呢? 查看您的运用程序是否能够拜访数据库以外的其他方位:
$ curl -I -s https://opensource.com
HTTP/1.1 200 OK
看起来这没问题,现在测验拜访数据库。您的运用程序正在运用数据库的主机名,因而请先测验:
$ curl database:27017
curl: (6) Couldn't resolve host 'database'
这标明您的运用程序无法解析数据库,由于数据库的 URL 不可用或主机(容器或VM)没有可用于解析主机名的域名服务器。
 
2.python -m json.tool / jq
运用 curl 后,API 调用的输出可读性或许较差。有时候,你期望将生成的 JSON 数据格式化输出以查找特定的条目。Python 有一个内置的库可协助您完成这个需求。能够运用 python -m json.tool 来缩进和安排 JSON。要运用 Python 的 JSON 模块,需求运用管道机制,将 JSON 文件的输出作为输入,写入到 python -m json.tool 指令行。
$ cat test.json
{"title":"Person","type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"age":{"description":"Age in years","type":"integer","minimum":0}},"required":["firstName","lastName"]}
要运用 Python 库,运用 -m (module) 选项将输出内容和 Python 库组合成管道。
$ cat test.json | python -m json.tool
{
"properties": {
"age": {
"description": "Age in years",
"minimum": 0,
"type": "integer"
},
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
}
},
"required": [
"firstName",
"lastName"
],
"title": "Person",
"type": "object"
}
关于更高档的 JSON 解析,能够装置 jq。jq 供给了一些从 JSON 输入中提取特定值的选项。要像上面的 Python 模块相同将 JSON 输出格式化,只需将 jq 运用到输出即可。
$ cat test.json | jq
{
"title": "Person",
"type": "object",
"properties": {
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"age": {
"description": "Age in years",
"type": "integer",
"minimum": 0
}
},
"required": [
"firstName",
"lastName"
]
}
 
3.ls
ls 用于列出目录中的文件,体系办理员和开发者会常常运用这个指令。在容器空间中,这条指令能够协助承认容器镜像中的目录和文件。除了查找文件,ls 还能够用于查看权限。下面的示例中,由于权限问题,你不能运转 myapp。当你运用 ls -l 查看权限时,你会发现它的权限在 -rw-r--r-- 中没有"x",只要读写的权限。
$ ./myapp
bash: ./myapp: Permission denied
$ ls -l myapp
-rw-r--r--. 1 root root 33 Jul 21 18:36 myapp
 
4.tail
tail 显现文件的终究一部分内容。一般状况下,你不需求阅读每行日志以进行毛病扫除。而是需求查看日志中对运用程序的最新恳求的阐明。例如,当你向 Apache HTTP 服务器建议恳求时,能够运用 tail 来查看日志中发作的状况。
体系办理员应该知道的20条Linux指令
运用 tail -f 来盯梢日志文件并在建议恳求时查看它们。
-f 选项标明跟从的意思,它可在日志被写入文件时输出它们。下面的示例具有每隔几秒拜访端点的后台脚本,日志会记载恳求。除了实时盯梢日志,还能够运用 tail 带上 -n 选项来查看文件的终究 100 行。
$ tail -n 100 /var/log/httpd/access_log
 
5.cat
cat 首要用于查看文件内容和兼并文件。你或许会运用 cat 来查看依靠项文件的内容,或承认已在本地构建的运用程序的版别。
$ cat requirements.txt
flask
flask_pymongo
上面的示例查看您的 Python Flask 运用程序是否已将 Flask 列为依靠项。
 
6.grep
grep 能运用特定形式匹配(包含正则表达式)查找文本。假定你在另一条指令的输出中寻觅特定的形式,grep 会高亮显现相关的行。可运用这条指令来查找日志文件以及特定的进程等。假定想查看 Apache Tomcat 是否发动,你或许会指令行的数量给吞没。但讲输出的内容和 grep 指令组合成管道,能够将标明服务器已发动的行独立出来。
$ cat tomcat.log | grep org.apache.catalina.startup.Catalina.start
01-Jul-2017 18:03:47.542 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 681 ms
 
7.ps
ps 用于查看进程的各种状况信息。运用该指令可承认正在运转的运用程序或承认预期的进程。例如,假定要查看正在运转的 Tomcat Web 服务器,可运用带有选项的 ps 来获取 Tomcat 的进程 ID。
体系办理员应该知道的20条Linux指令
为了更好的易读性,可运用 grep 和 ps 组合成管道。
$ ps -ef | grep tomcat
root         1     0  1 18:55 ?        00:00:02 /docker-java-home/jre/bi
 
8.env
env 用于列出一切环境变量及为其赋值。在毛病扫除期间,你或许会发现需求查看是否有过错的环境变量来阻挠运用程序发动。鄙人面的示例中,该指令用于查看程序主机上设置的环境变量。
$ env
PYTHON_PIP_VERSION=9.0.1
HOME=/root
DB_NAME=test
PATH=/usr/local/bin:/usr/local/sbin
LANG=C.UTF-8
PYTHON_VERSION=3.4.6
PWD=/
DB_URI=mongodb://database:27017/test
请注意,该运用程序正在运用 Python 3,并具有衔接到 MongoDB 数据库的环境变量。
 
9.top
top 用于显现体系中各个进程的信息和资源占用状况,相似于 Windows 的使命办理器。运用该指令可承认哪些进程正在运转,以及它们耗费了多少的内存和 CPU。一种常见的状况是当你运转一个运用程序时,它在一分钟后挂掉。这时,你首要查看运用程序的回来过错,发现是一个内存过错。
$ tail myapp.log
Traceback (most recent call last):
MemoryError
你的运用是否真的内存不足?要承认这个问题,可运用 top 来查看运用程序耗费多少 CPU 和内存。当运用 top 指令后,您注意到一个 Python 运用程序运用了大部分的 CPU,其内存运用量也敏捷攀升。当它运转时,假定进程是你的运用程序,则按"C"键来查看完好指令并进行逆向工程。发现原来是你的内存密集型运用程序(memeater.py)。当你的运用程序现已竭尽内存,体系会杀掉它并回来一个内存不足(OOM)的过错。
体系办理员应该知道的20条Linux指令
运用程序的内存和 CPU 运用量增加,终究由于内存不足而被杀掉。
体系办理员应该知道的20条Linux指令
经过按下"C"键,能够看到发动该运用程序的完好指令
除了查看运用程序,还能够运用 top 来调试其他运用 CPU 或内存的进程。
 
10.netstat
netstat 用于显现网络状况信息。该指令可显现正在运用的网络端口及其传入衔接。可是,netstat 在 Linux 中不能开箱即用。假定需求装置它,需求在 net-tools 包中找到它。作为在本地进行实验或将运用程序推送到主机的开发者,或许会收到端口已被分配或地址已被运用的过错。运用 netstat 得到协议、进程和端口这些信息,下图标明 Apache HTTP 服务器现已鄙人面的主机上运用了 80 端口。
体系办理员应该知道的20条Linux指令
运用 netstat -tulpn 标明 Apache 现已在这台机器上运用了 80 端口。
 
11.ip address
假定 ip address 在你的主机上不能运用,有必要运用 iproute2 包进行装置。ip address 用于显现运用程序的主机接口和 IP 地址。可运用 ip address 来验证你的容器或主机的 IP 地址。例如,当你的容器衔接到两个网络时,ip address 可显现哪个接口衔接到了哪个网络。关于简略的查看,能够随时运用 ip address 指令获取主机的 IP 地址。下面的示例展现了在接口 eth0 上的 Web 层容器的 IP 地址为 172.17.0.2
体系办理员应该知道的20条Linux指令
运用 ip address 显现 eth0 接口的 IP 地址为 172.17.0.2
 
12.lsof
lsof 用于列出当时体系翻开的文件(list open files)。在某些 Linux 体系中,或许需求运用 lsof 包来装置lsof。在 Linux 中,简直任何和体系的交互都被视为一个文件。因而,假定你的运用程序写入文件或代开网络衔接,lsof 将会把这个交互映射为一个文件。与 netstat 相似,可运用 lsof 来查看侦听端口。例如,假定要查看 80 端口是否正在被运用,可运用 lsof 来查看哪个进程正在运用它。下面的示例中,能够看到 httpd (Apache) 在 80 端口上侦听。还能够运用 lsof 来查看 httpd 的进程ID,查看 Web 服务器的二进制文件所在方位(/usr/sbin/httpd)。
体系办理员应该知道的20条Linux指令
Lsof 标明晰 httpd 在 80 端口上侦听。查看 httpd 的进程ID还能够显现一切需求运转的文件httpd。
翻开文件列表中的翻开文件的称号有助于承认进程的来历,特别是 Apache。
 
13.df
能够运用 df 显现闲暇的磁盘空间(display free disk space)以排查磁盘空间问题。挡在容器办理器上运转运用程序时,或许会收到一条过错信息,提示容器主机上短少可用空间。尽管磁盘空间应该由体系办理程序来办理和优化,你仍能够运用 df 找出目录中的现有空间并承认是否没有空间。
体系办理员应该知道的20条Linux指令
Df 显现每个文件体系的磁盘空间、绝对空间以及其可用性。
-h 选项标明以可读性较高的方法来显现信息,上面的比如标明这个主机具有很多的磁盘空间。
 
14.du
du 指令也是用于查看运用空间的,可是与 df 指令不同的是 du 指令是对文件和目录磁盘运用的空间的查看,要获取有关哪些文件在目录中运用磁盘空间的更多详细信息,能够运用 du 指令,和 df 指令仍是有一些差异的。例如,你想了解那个日志文件占用 /var/log 目录最多的空间,能够运用 du 指令加上 -h 选项和用于获取总巨细的 -s 选项。
$ du -sh /var/log/*
1.8M  /var/log/anaconda
384K  /var/log/audit
4.0K  /var/log/boot.log
0 /var/log/chrony
4.0K  /var/log/cron
4.0K  /var/log/maillog
64K /var/log/messages
上面的示例中显现了 /var/log 下的的最大目录为 /var/log/audit。能够将 du 和 df 调配运用,以承认在运用程序的主机上运用的磁盘空间。
 
15.id
要查看运转运用程序的用户,可运用 id 指令来回来用户身份。id 指令能够显现真实有效的用户ID(UID)和组ID(GID)。下面的示例运用 Vagrant 来测验运用程序并阻隔其开发环境。登录进 Vagrant 盒子后,假定测验装置 Apache HTTP Server(依靠联络),体系会提示你需求以 root 身份履行该指令。要查看你的用户ID和组ID,运用 id 指令,会发现你正在"vagrant"组中以"vagrant"用户身份运转。
$ yum -y install httpd
Loaded plugins: fastestmirror
You need to be root to perform this command.
$ id
uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
要处理此问题,有必要以超级用户的身份运转该指令,这将供给提高的权限。
 
16.chmod
chmod 指令用来改变文件或目录的权限。当你在主机上初次运转运用程序的二进制文件时,或许会收到过错提示信息“回绝拜访”。如 ls 的示例所示,能够用于查看运用程序二进制文件的权限。
$ ls -l
total 4
-rw-rw-r--. 1 vagrant vagrant 34 Jul 11 02:17 test.sh
这标明您没有权限(没有“x”)来运转二进制文件。chmod 能够修正权限,使的用户能够运转二进制文件。
$ chmod +x test.sh
[vagrant@localhost ~]$ ls -l
total 4
-rwxrwxr-x. 1 vagrant vagrant 34 Jul 11 02:17 test.sh
如比如所示,这将更新权限,使其具有可履行的权限。现在当你测验履行二进制文件时,运用程序不会抛出回绝拜访的过错。当将二进制文件加载到容器时,Chmod 或许很有用。它能确保容器具有适宜的权限以履行二进制文件。
 
17.dig / nslookup
dig 指令是常用的域名查询东西,能够用来测验域名体系作业是否正常。域名服务器(DNS)有助于将 URL 解析为一组运用程序服务器。但是,你会发现有些 URL 不能被解析,这会导致运用程序的衔接问题。例如,假定你测验从运用程序的主机拜访你的数据库。你收到一个"不能解析"的过错。要进行毛病排查,你测验运用 dig(DNS 查询东西)或 nslookup(查询 Internet 域名服务器)来承认运用程序好像无法解析数据的原因。
$ nslookup mydatabase
Server: 10.0.2.3
Address: 10.0.2.3#53
** server can't find mydatabase: NXDOMAIN
运用 nslookup 显现无法解析 mydatabase。测验运用 dig 处理,但仍是相同的成果。
$ dig mydatabase
; <<>> DiG 9.9.4-RedHat-9.9.4-50.el7_3.1 <<>> mydatabase
;; global options: +cmd
;; connection timed out; no servers could be reached
这些过错或许是由许多不同的问题引起的。假定无法调试出根本原因,与体系办理员联络以进行更多的查询。关于本地测验,这些问题或许标明你的主机的域名服务器未正确装备。要运用这些指令,需求装置 BIND Utilities 包。
 
18.iptables
iptables 用于阻挠或答应 Linux 主机上的流量,用于 IP 包过滤器办理,相似于网络防火墙。此东西可阻挠某些运用程序接纳或发送恳求。更具体地说,假定您的运用程序难以拜访另一个端点,或许已被 iptables 回绝流量拜访该端点。例如,假定您的运用程序的主机无法拜访 Opensource.com,您运用 curl 来测验衔接。
$ curl -vvv opensource.com
* About to connect() to opensource.com port 80 (#0)
*   Trying 54.204.39.132...
* Connection timed out
* Failed connect to opensource.com:80; Connection timed out
* Closing connection 0
curl: (7) Failed connect to opensource.com:80; Connection timed out
衔接超时。您置疑某些东西或许会堵塞流量,因而您运用 -S 选项显现 iptables 规矩。
$ iptables -S
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT DROP
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i eth0 -p udp -m udp --sport 53 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m udp --dport 53 -j ACCEPT
前三个规矩显现,默许状况下流量已被丢掉。剩余的规矩标明答应 SSH 和 DNS 流量。在这种状况下,假定需求答应流量到外部端点的规矩,请跟上 sysadmin。假定这是用于本地开发或测验的主机,可运用 iptables 指令来答应适宜的流量。增加答应到主机的流量的规矩时一定要慎重。
 
19.sestatus
一般会在企业办理的运用程序主机上运用 SELinux(一个 Linux 安全模块)。SELinux 对主机上运转的进程供给最低权限的拜访,避免潜在的歹意进程拜访体系上的重要文件。某些状况下,运用程序需求拜访特定文件,但或许会发作过错。要查看 SELinux 是否阻挠了运用程序,运用 tail 和 grep 在 /var/log/audit 日志记载中查找"denied"(被回绝)的信息。不然,运用 sestatus 来查看是否发动了 SELinux。
体系办理员应该知道的20条Linux指令
上面的输出标明运用程序的主机已启用 SELinux。在本地开发环境中,能够更新 SELinux 使得权限更宽松。
 
20.history
当你运用很多的指令进行测验和调试时,或许会忘掉有用的指令。每个 shell 都有一个 history 指令的变体。它可显现自会话开端以来运用的指令的前史记载。能够运用 history 来记载用来扫除运用程序毛病的指令。history 指令用于显现指定数目的指令指令,读取前史指令文件中的目录到前史指令缓冲区和将前史指令缓冲区中的目录写入指令文件。
$ history
1  clear
2  df -h
3  du
假定期望履行之前前史记载中的指令,但又不想从头输入,该怎么办?运用符号 ! 即可,能够运用符号 ! 履行指定序号的前史指令。例如,要履行第 2 个前史指令,则输入!2,
体系办理员应该知道的20条Linux指令
在需求从头履行的指令的指定编号前增加 ! 即可从头履行
 
这些根本指令能增强排查毛病的专业技能,可查看为什么运用程序能够在一个开发环境中作业,而在另一个开发环境中则不能够。许多体系办理员运用这些指令来调试体系问题。了解一些有用的毛病排查指令可协助处理运用程序的问题。
 
本文永久更新地址:http://www.138comgov138.com/linux/32473.html