系统管理员都应该知道的20个Linux命令(上)

VSole2022-06-25 07:54:23

在一个充斥着新工具和多样化开发环境的世界中,几乎所有开发人员或工程师都有必要学习一些基本的系统管理命令。特定的命令和软件包可以帮助开发人员组织、排除故障并优化其应用程序,并且在出现问题时为操作员和系统管理员提供有价值的分类信息。

无论你是新开发人员还是希望管理自己的应用程序,以下20个基本的sysadmin命令都可以帮助你更好地理解应用程序。它们还可以帮助你向系统管理员描述问题,并排除应用程序可能在本地工作而不在远程主机上工作的原因。这些命令适用于Linux开发环境、容器、虚拟机(VM)和裸机。

1. curl

curl调用一个URL。使用此命令测试应用程序的端点或与上游服务端点的连接。curl对于确定应用程序是否可以访问其他服务(如数据库)或检查服务是否正常非常有用。

例如,假设您的应用程序抛出HTTP 500错误,指示它无法访问MongoDB数据库:

$ curl -I -s myapplication:5000
HTTP/1.0 500 INTERNAL SERVER ERROR


-I 选项显示页面头信息(header),-s选项不显示页面body信息。从本地桌面检查数据库的终结点:

$ 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后,信息的输出可能比较很难读取。所以有时候你需要提高输出信息的可读性。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(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模块一样漂亮地打印,只需将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检查日志中发生了什么。


$ tail -f /var/log/httpd/access.log


-f 选项表示“follow”,该选项在日志行写入文件时输出日志行。该示例有一个后台脚本,每隔几秒钟访问一次端点,日志记录请求。您也可以使用tail来查看文件的最后100行(使用-n选项),而不是实时跟踪日志。


$ 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将高亮显示相关行。使用此命令搜索日志文件、特定进程等。如果您想查看ApacheTomcat是否启动,那么您可能会被大量的行所淹没。通过将输出管道化到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命令是procps-ng包的一部分,它提供用于调查进程ID的有用命令,显示正在运行的进程的状态。使用此命令确定正在运行的应用程序或确认预期进程。例如,如果要检查正在运行的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
为了更清晰,可以结合管道使用grep:
$ 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,并且具有连接到MongoDB数据库的环境变量。


9. top

top显示并更新已排序的进程信息。使用此监视工具可以确定哪些进程正在运行,以及它们消耗了多少内存和CPU。当你运行一个应用程序并在一分钟后消亡时,会出现一种常见情况。首先,检查应用程序的返回错误,这是一个内存错误:


$ tail myapp.log
Traceback (most recent call last):
MemoryError


真的是应用程序内存不足吗?要确认,请使用top来确定应用程序消耗的CPU和内存量。在发布top时,您注意到一个Python应用程序使用了大部分CPU,内存使用率不断攀升,并怀疑它就是您的应用程序。当它运行时,点击“C”键可以看到完整的命令,如果进程是您的应用程序,则可以进行反向工程。它原来是内存密集型应用程序(memeater.py)。当您的应用程序内存不足时,系统将以内存不足(OOM)错误终止它。

应用程序的内存和CPU使用率增加,最终被杀死


通过点击“C”键,您可以看到启动应用程序的完整命令


除了检查您自己的应用程序外,您还可以使用top调试其他使用CPU或内存的进程。


10. netstat

netstat显示网络状态。此命令显示正在使用的网络端口及其传入连接。然而,netstat在Linux上并不是现成的。如果需要安装它,可以在net-tools包中找到它。作为在本地进行实验或将应用程序推送到主机的开发人员,您可能会收到一个错误,即端口已分配或地址已在使用。将netstat与协议、进程和端口选项一起使用表明,Apache HTTP服务器已经在下面的主机上使用了端口80。

使用netstat-tulpn表明Apache已经在这台机器上占用了端口80

本文作者:Rosemary Wang,翻译:GLIU

原文来自:www.opensource.com

python系统管理员
本作品采用《CC 协议》,转载必须注明作者和本文链接
安全研究人员和系统管理员开发了一个工具,可以帮助用户检查 NPM JavaScript 软件注册表中软件包中的清单不匹配。
在一个充斥着新工具和多样化开发环境的世界中,几乎所有开发人员或工程师都有必要学习一些基本的系统管理命令。特定的命令和软件包可以帮助开发人员组织、排除故障并优化其应用程序,并且在出现问题时为操作员和系统管理员提供有价值的分类信息。 无论你是新开发人员还是希望管理自己的应用程序,以下20个基本的sysadmin命令都可以帮助你更好地理解应用程序。它们还可以帮助你向系统管理员描述问题,并排除应用程序可
调研还表明,仅一小部分CISO晋升高管层,兼具业务和技术职责。其中,超过三分之二的受访CISO供职价值超50亿美元的大企业。随后,他一路晋升,成长为摩根大通旗下Bank One零售集团的CISO。之后,West供职美国五三银行,担任这家历史悠久的银行的企业CISO。West将其导师的成就归功于能向领导层和董事会讲好故事。据《财富》报道,真正的高管CISO非常稀缺,他们的薪酬在百万美元以上。
WebSecProbe是一款功能强大的Web应用程序网络安全评估工具,该工具专为网络安全爱好者、渗透测试人员和系统管理员设计,可以执行精确而深入的复杂网络安全评估。
近日,安全公司Gemini Advisory报道,黑客组织FIN7假冒网络安全公司向企业提供渗透测试“服务”来实施勒索软件攻击。FIN7,又名“Carbanak”,自2015年首次出现在网络犯罪领域以来就一直参与网络攻击并窃取现金,包括用MITM中间人攻击恶意软件感染ATM提款机。
随着攻防演练的频繁和?们安全意识的提升,企业内部Windows主机的?令也设置的较为复杂,经 常拿到windows 服务器的时候,获取到了hash,但是?法解密出密码的情况,这时候就需要?法,攻击者不需要花费时间来怼hash进?02测试环境Windows server 2012 ?先需要获取ntml hash,由于直接从内存读取到的可能是密码修改之前的hash,这?些远程命令的执??持wmi,默认开启,且windows 默认不会将wmi 的操作记录到?具的原理是wmi 创建进程执?impacket 中的smbexec 程序,命令如下python3 smbexec.py -hashes
我经常听到朋友问,是否有更好的Web日志安全性分析工具? 首先,我们应该清楚的是,日志文件不仅可以帮助我们追踪入侵者的来源并找到其攻击路径,而且在正常的操作和维护中,日志还可以反映出许多安全攻击。 一个简单易用的Web日志分析工具可以大大提高效率。当前,行业中有许多日志分析工具。今天,我们推荐十种易于使用的Web日志安全性分析工具。
VSole
网络安全专家