【译】那些没有人教你的最重要的Linux命令(高手私藏篇)转载
无论你是Sysadmin、Developer、DevOps、Security还是Ops......有效使用Linux及其工具可以说是一项必须掌握的基本技能。
毕竟,Linux是全球大多数服务器和应用程序的支柱。
“47%的专业开发人员使用基于Linux的操作系统。”
在过去的几个月里,我阅读了许多类似“你必须知道的20个Linux命令”或“Linux生存指南”的文章。我发现几乎所有这些东西的问题在于,它们都针对初学者,教授ls
或echo
的使用。我相信我的大多数受众至少熟悉Linux命令行提供的基本命令。
这篇文章不会是那样的。
我将记录并展示我在工作中每天使用的私家收藏命令表。这个精心策划的列表超越了完整的初学者,而是专注于命令,这些命令将帮助你进一步推动,提高效率,并管理Linux系统及其重要工具。
这将分为两个部分:
- Linux工具—基本的Linux工具以及如何最好地利用它们。
- AdHoc命令—AdHoc命令在紧要关头非常有用。
Linux工具
实用工具
rsync
用于将文件和目录复制到目标,类似于cp
命令。然而,它也允许复制到远程位置,并可以提供进度条,这通常用于备份
# Example Usage
$ rsync -vap --ignore-existing <source_file> <destination_file>
# Key flags:
v = verbrose, r = recursive, p = preserve permissions, g = group, o = owner, a = archive, --progress = progresss bar
mkpasswd
mkpasswd
是一个简单但非常有用的命令,它会在指定长度上生成一个复杂的随机密码。
$ mkpasswd -l 8
> iwF1g2Lo
screen
screen是一个全屏窗口管理器;它创建一个运行shell的单个窗口,并允许多个screen窗口在单个会话中运行。当您远程运行一项长任务并担心SSH会话掉落并破坏一切时,这是最有益的。screen将通过断开连接继续,即使窗口不可见,也会继续运行您的命令。
# Example Usage
$ screen # Start a screen session
$ screen -ls # List running services
$ screen -r # Attach to session
Ldapsearch
如果你经常使用LDAP数据库,那么Ldapsearch是必须的。该工具打开与LDAP服务器的连接,并允许你搜索、查找和调试数据库中的条目。
# Example Usage
$ ldapsearch -x -W -D <username | less
# Key Flags
-x = simple authentication, -W = prompt for password, -D = Use distinguished binddn name to bind to LDAP directory
监控工具
Uptime
正常运行时间返回服务器运行时间、当前时间、用户数量和内存使用平均值的指标。如果您的服务器出现问题,这通常是第一个调用端口。
“w”—是的,一封信。这是正常运行时间和谁命令一个接一个运行的绝佳组合。$ w
wall
Wall是任何系统管理员的方便命令;它允许您向当前已登录系统的每个人的终端发送消息。这对于全系统公告非常有用。
$ wall "Maintenance scheduled for 13:30"
Broadcast message from Joel@localhost: Maintenance scheduled for 13:30
top
显示CPU和关键内存使用量以及CPU使用指标的进程自动刷新列表。
$ top
ncdu
ncdu命令为磁盘使用提供了快速、方便的视图。您可以使用它快速轻松地查看哪些目录正在使用最多的磁盘空间。
$ ncdu
lsof
lsof是一个用于一个基本目的的单一命令:LiSt Open Files。当遇到安装问题时,这特别有用,比如说正在使用文件。此命令快速识别哪些文件正在使用哪些进程。
$ lsof
网络工具
Netcat
Netcat或nc
主要用于端口扫描,但实际上是系统管理员用于任何任务的后口袋里的绝佳实用工具。Netcat可以支持端口扫描、文件复制、端口转发、代理服务器和托管服务器......可以肯定地说,它用途非常广泛。
# Example Usage:
$ nc -vz <host> <port> # Checks the connection between two hosts on a given port
$ nc -l 8080 | nc <host> 80 # Creating a proxy server
Netcat是如此可定制,以至于我无法将所有可能性包含在一个帖子中,因此如果您想了解更多信息,我会链接我最喜欢的关于@sahityamaruvada撰写的关于以下主题的媒体文章。
NetStat
Netstat返回各种网络详细信息,如路由表、网络连接、会员资格、统计数据、标志等。
# Example Usage
$ netstat -a # List all network ports
$ netstat -tlpn # List all listening ports
# Key Flags
-s = Show statistics, -v = verbrose, -r = show routing tables, -i display interface table, -g = show group memeberships
Nslookup
用于获取有关互联网或本地网络服务器的信息。它查询DNS以查找名称服务器信息,可用于网络调试。
# Example Usage
$ nslookup medium.com/tags/devops
# Key Flags
-port = Change port number for connection, -type = Change type of query. -domain = Sets search list to name
TCPDump
用于捕获和分析进出系统的流量。这是一个强大而多功能的工具,专门用于调试和故障排除网络问题,但也可以用作安全工具。
# Example Usage
$ tcpdump
$ tcpdump -i <interface> <ipaddress or hostname> <port>
Ad-Hoc Commands
完美打印API响应
在使用API时,从终端读取JSON数据可能会非常令人沮丧。如您在下面看到的那样,即使一个小数据集在显示到命令行时也会很快变得一团糟,因此很难阅读。
$ 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有一个答案。通过将您的输出管道到python,我们可以调用JSON工具模块。这将很好地打印出JSON文档,它更容易阅读,眼睛也更好。
$ 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"
}
也值得参考JQ,这是一个命令行JSON接口
$ jq . file.json
通过apt搜索可用的软件包
$ apt-cache seach <keyword>
任意两个命令的分别输出
# Example usage of comparing output of two ls commands
$ diff -u <(ls -l /directory/) <(ls -l /directory/) | colordiff
将Unix时间戳转换为可读格式
# Convert Unix timestamp to human readable
$ date -d 1656685875
Fri, 01 Jul 2022 14:31:15 +0000
# Current time as UNIX timestamp
$ date "+%s"
压缩Git并提交
$ git log # See how many commits you've made
$ git rebase -i HEAD~x # x = number of commits you've made
# Make changes on the text editor, keeping the last commit as pick and changing the rest to sqash
# Edit the commit messages as you'd like, preferbly removing ones from previous commits
$ git push --force-with-lease
列出所有系统服务
$ systemctl -l -t service | less
我希望你从这个列表中学到了一些东西;由于Linux在服务器上很受欢迎,掌握它可能非常有用,不信你可以看看这个统计数据:
在前100万台网络服务器中,96.3%正在运行Linux。
原文作者:Joel Belton