linux管理员权限命令
在一个充满新工具和多样化开发环境的世界中,几乎所有开发人员或工程师都必须学习一些基本的sysadmin命令。 特定的命令和程序包可以帮助开发人员组织,排除故障和优化其应用程序,并在出现问题时为操作员和系统管理员提供有价值的分类信息。
无论您是新开发人员还是要管理自己的应用程序,以下20个基本sysadmin命令都可以帮助您更好地了解您的应用程序。 它们还可以帮助您向系统管理员描述问题,以排除应用程序可能在本地运行但不能在远程主机上运行的原因。 这些命令适用于Linux开发环境,容器,虚拟机(VM)和裸机。
1.卷曲
curl传输URL。 使用此命令可以测试应用程序的端点或与上游服务端点的连接。 该 URL对确定您的应用程序是否可以访问另一服务(例如数据库)或检查您的服务是否运行正常很有用。
例如,假设您的应用程序抛出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具有内置的JSON库,可以帮助您解决此问题。 您可以使用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 (模块)选项将输出通过管道传递给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 。 j q提供了一些从JSON输入中提取特定值的选项 。 要像上面的Python模块一样进行漂亮的打印,只需将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显示文件的最后一部分。 通常,您不需要每个日志行都可以进行故障排除。 相反,您想查看日志中有关对应用程序的最新请求的内容。 例如,当您向Apache HTTP服务器发出请求时,可以使用tail来检查日志中发生了什么。
-f选项指示“跟随”选项,该选项在将日志行写入文件时输出。 该示例具有一个后台脚本,该脚本每隔几秒钟访问一次端点,并且日志记录请求。 除了实时跟踪日志外,还可以使用-n选项使用tail来查看文件的最后100行。
$ tail -n 100 / var / log / httpd / access_log
5.猫
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。
$
ps
-ef
UID PID PPID C STIME TTY TIME CMD
root
1
0
2
18 :
55 ? 00:00:02
/ docker-java-home
/ jre
/ bi
root
59
0
0
18 :
55 pts
/
0 00:00:00
/ bin
/
sh
root
75
59
0
18 :
57 pts
/
0 00:00:00
ps
-ef
为了获得更高的可读性,请使用ps并将其通过管道传递给grep 。
$
ps
-ef
|
grep tomcat
root
1
0
1
18 :
55 ? 00:00:02
/ docker-java-home
/ jre
/ bi
8.环境
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
请注意,该应用程序正在使用Python3,并且具有环境变量以连接到MongoDB数据库。
9.顶部
顶部显示并更新排序的过程信息。 使用此工具来确定正在运行的进程以及它们消耗多少内存和CPU。 当您运行应用程序时,通常会发生这种情况,一分钟后它就会死掉。 首先,您检查应用程序的返回错误,这是内存错误。
$
tail myapp.log
Traceback
( most recent call
last
) :
MemoryError
您的应用程序真的内存不足吗? 要确认,请使用top确定应用程序消耗了多少CPU和内存。 在发出top时 ,您会注意到一个Python应用程序使用了大多数CPU,并且内存使用率不断攀升,并怀疑它是您的应用程序。 在运行时,您可以按“ C”键查看完整的命令,如果该过程是您的应用程序,则可以对其进行反向工程。 原来这是您的内存密集型应用程序( memeater.py )。 当您的应用程序内存不足时,系统会用内存不足(OOM)错误将其杀死。
除了检查自己的应用程序之外,您还可以使用top调试使用CPU或内存的其他进程。
10. netstat
netstat显示网络状态。 此命令显示正在使用的网络端口及其传入连接。 但是, netstat在Linux上不是开箱即用的。 如果需要安装,可以在net-tools软件包中找到它。 作为在本地进行实验或将应用程序推送到主机的开发人员,您可能会收到以下错误消息:端口已分配或地址已被使用。 将netstat与协议,进程和端口选项结合使用,演示Apache HTTP服务器已在以下主机上使用端口80。
11. IP地址
如果ip地址在您的主机上不起作用,则必须将其与iproute2软件包一起安装。 I P地址显示应用程序的主机的接口和IP地址。 您使用ip地址验证您的容器或主机的IP地址。 例如,当您的容器连接到两个网络时, ip地址可以显示哪个接口连接到哪个网络。 为了简单检查,您始终可以使用ip address命令来获取主机的IP地址。 下面的示例显示Web层容器在接口eth0上的IP地址为172.17.0.2。
12. lsof
lsof列出与您的应用程序关联的打开文件。 在某些Linux机器映像上,您需要使用lsof软件包安装lsof 。 在Linux中,几乎所有与系统的交互都被视为文件。 结果,如果您的应用程序写入文件或打开网络连接, lsof会将交互反映为文件。 与netstat相似,您可以使用lsof检查监听端口。 例如,如果要检查端口80是否正在使用,则可以使用lsof检查正在使用哪个端口。 在下面,您可以看到httpd(Apache)在端口80上进行侦听。您还可以使用lsof检查httpd的进程ID,检查Web服务器二进制文件所在的位置( / usr / sbin / httpd )。
打开文件列表中打开文件的名称有助于查明进程的起源,特别是Apache。
13. df
您可以使用df (显示可用磁盘空间)来解决磁盘空间问题。 当您在容器协调程序上运行应用程序时,您可能会收到一条错误消息,指出容器主机上的可用空间不足。 尽管磁盘空间应由系统管理员管理和优化,但您可以使用df找出目录中的现有空间,并确认是否确实空间不足。
-h选项以人类可读的格式输出信息。 上面的示例显示了此主机上的大量磁盘空间。
14.杜
要检索有关哪些文件使用目录中磁盘空间的更多详细信息,可以使用du命令。 例如,如果要查找哪个日志占用了/ 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命令返回用户身份。 下面的示例使用Vagrant测试应用程序并隔离其开发环境。 登录到Vagrant框后,如果尝试安装Apache HTTP Server(依赖项),系统会指出您无法以root用户身份执行命令。 要检查您的用户和组,请发出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
当您第一次在主机上运行应用程序二进制文件时,您可能会收到错误消息“权限被拒绝”。 如ls的示例所示,您可以检查应用程序二进制文件的权限。
$
ls
-l
total
4
-rw-rw-r--.
1 vagrant vagrant
34 Jul
11 02:
17 test.sh
这表明您没有执行权限(没有“ x”)来运行二进制文件。 c hmod可以更正权限,以使您的用户可以运行二进制文件。
$
chmod +x test.sh
[ vagrant
@ localhost ~
] $
ls
-l
total
4
-rwxrwxr-x.
1 vagrant vagrant
34 Jul
11 02:
17 test.sh
如示例所示,此操作将使用执行权限更新权限。 现在,当您尝试执行二进制文件时,应用程序不会引发权限被拒绝的错误。 将二进制文件也加载到容器中时, Chmod可能很有用。 它确保您的容器具有执行二进制文件的正确权限。
17.挖/ nslookup
域名服务器(DNS)有助于将URL解析为一组应用程序服务器。 但是,您可能会发现URL无法解析,这会导致您的应用程序出现连接问题。 例如,假设您尝试从应用程序的主机通过mydatabase 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 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主机上的流量,类似于网络防火墙。 此工具可能会阻止某些应用程序接收或传输请求。 更具体地说,如果您的应用程序难以到达另一个端点,则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通信。 在这种情况下,如果您需要规则以允许流量流向外部端点,请与系统管理员联系。 如果这是用于本地开发或测试的主机,则可以使用iptables命令允许正确的流量。 添加允许主机访问流量的规则时,请务必谨慎。
19.固定状态
通常,您会发现SELinux(Linux安全模块)在企业管理的应用程序主机上强制执行。 SELinux提供对主机上运行的进程的最小特权访问,从而防止潜在的恶意进程访问系统上的重要文件。 在某些情况下,应用程序需要访问特定文件,但可能会引发错误。 要检查SELinux是否阻止了该应用程序,请使用tail和grep在/ var / log / audit日志中查找“拒绝”消息。 否则,您可以使用sestatus检查该包装盒是否启用了SELinux。
$ sestatus
SELinux status: enabled
SELinuxfs mount:
/ sys
/ fs
/ selinux
SELinux root directory:
/ etc
/ selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version:
28
上面的输出表明应用程序的主机已启用SELinux。 在您的本地开发环境中,可以更新SELinux以使其更宽松。 如果您需要有关远程主机的帮助,您的系统管理员可以帮助您确定允许应用程序访问所需文件的最佳实践。
20.历史
当发出这么多用于测试和调试的命令时,您可能会忘记有用的命令! 每个外壳程序都有一个history命令的变体。 它显示了自会话开始以来您发出的命令的历史记录。 您可以使用历史记录来记录用于对应用程序进行故障排除的命令。 例如,当您在本文中发布历史记录时,它显示了您尝试和学习的各种命令。
$
history
1
clear
2
df
-h
3
du
如果要在以前的历史记录中执行命令,但又不想重新输入该命令怎么办? 使用! 在重新执行命令号之前。
在确定为什么您的应用程序在一个开发环境中工作而在另一个开发环境中工作时,基本命令可以增强您的故障排除专业知识。 许多系统管理员利用这些命令来调试系统问题。 了解其中一些有用的故障排除命令可以帮助您与sysadmin进行通信并解决应用程序中的问题。
翻译自: https://opensource.com/article/17/7/20-sysadmin-commands
linux管理员权限命令