ホームページ  >  記事  >  運用・保守  >  プログラマーなら必ず理解しておきたい超実践的な高度なLinuxコマンド!

プログラマーなら必ず理解しておきたい超実践的な高度なLinuxコマンド!

Linux中文社区
Linux中文社区転載
2023-08-02 15:47:53912ブラウズ





序文


私は数年間、運用と保守の穴の中で苦労してきましたが、最初に始めたときは、「一部を使用する」ということしか知らなかったことを今でも覚えています。単純なコマンドを使用するだけでなく、スクリプトを作成するときもできるだけ単純にしたいため、作成されたスクリプトが長くて臭いものになることがあります。

プログラマーなら必ず理解しておきたい超実践的な高度なLinuxコマンド!

Xargs コマンド、パイプライン コマンド、自動応答コマンドなどの一部の高度なコマンドと同様です。私はそれを知っていたので、簡潔で効率的なスクリプトを書くことができたかもしれません。

どんな理由であっても、他の人や自分自身のために役立つように、Linux で使用されるいくつかの高度なコマンドの使用法を説明したいと思います。将来覚えていない場合でも、振り返ることができます。







1.実践的な xargs コマンド


##通常時 使用時は、 xargs コマンドは比較的重要で便利です。このコマンドを使用すると、コマンドの出力をパラメータとして別のコマンドに渡すことができます。

たとえば、特定のパスで .conf で終わるファイルを検索し、これらのファイルを分類したいとします。一般的なアプローチは、まず .conf で終わるファイルを見つけて、それをファイル内に出力し、次にそれをファイルに出力することです。ファイルを cat し、file ファイル分類コマンドを使用して出力ファイルを分類します。

この通常の方法は確かに少し面倒なので、このような場合に xargs コマンドが役に立ちます。
例 1: / ディレクトリで .conf で終わるファイルを検索し、ファイルを分類します。
コマンド:

find / -name *.conf -type f \
-print | xargs file

出力結果は次のとおりです。以下の表示:

プログラマーなら必ず理解しておきたい超実践的な高度なLinuxコマンド!

#xargs その後にファイル分類コマンドを追加できるだけでなく、他の多くのコマンドを追加することもできます。正直に言うと、tar コマンドでは、find コマンドと tar コマンドを併用して、指定されたパスにある特殊ファイルを検索し、tar コマンドを使用して、見つかったファイルを直接パッケージ化することができます。コマンドは次のとおりです。 ##

find / -name *.conf -type f \
-print | xargs tar cjf test.tar.gz






二、命令或脚本后台运行


有时候我们进行一些操作的时候,不希望我们的操作在终端会话断了之后就跟着断了,特别是一些数据库导入导出操作,如果涉及到大数据量的操作,我们不可能保证我们的网络在我们的操作期间不出问题,所以后台运行脚本或者命令对我们来说是一大保障。

比如说我们想把数据库的导出操作后台运行,并且将命令的操作输出记录到文件,那么我们可以这么做:(反斜杠代表换行,可以忽略)

nohup mysqldump -uroot -pxxxxx \
—all-databases > \
./alldatabases.sql &(xxxxx是密码)

当然如果你不想密码明文,你还可以这么做:

nohup mysqldump -uroot -pxxxxx \
—all-databases \
> ./alldatabases.sql (后面不加&符号)

执行了上述命令后,会提示叫你输入密码,输入密码后,该命令还在前台运行,但是我们的目的是后天运行该命令,这个时候你可以按下Ctrl+Z,然后在输入bg就可以达到第一个命令的效果,让该命令后台运行,同时也可以让密码隐蔽输入。

命令后台执行的结果会在命令执行的当前目录下留下一个nohup.out文件,查看这个文件就知道命令有没有执行报错等信息。







三、找出当前系统内存使用量较高的进程


在很多运维的时候,我们发现内存耗用较为严重,那么怎么样才能找出内存消耗的进程排序呢?
命令:

ps -aux | sort -rnk 4 | head -20

プログラマーなら必ず理解しておきたい超実践的な高度なLinuxコマンド!

输出的第4列就是内存的耗用百分比。最后一列就是相对应的进程。








四、找出当前系统CPU使用量较高的进程


在很多运维的时候,我们发现CPU耗用较为严重,那么怎么样才能找出CPU消耗的进程排序呢?
命令:

ps -aux | sort -rnk 3 | head -20

プログラマーなら必ず理解しておきたい超実践的な高度なLinuxコマンド!

输出的第3列为CPU的耗用百分比,最后一列就是对应的进程。

牛逼啊!接私活必备的 N 个开源项目!赶快收藏

我想大家应该也发现了,sort 命令后的3、4其实就是代表着第3列进行排序、第4列进行排序。







五、同时查看多个日志或数据文件


在日常工作中,我们查看日志文件的方式可能是使用tail命令在一个个的终端查看日志文件,一个终端就看一个日志文件。包括我在内也是,但是有时候也会觉得这种方式略显麻烦,其实有个工具叫做multitail可以在同一个终端同时查看多个日志文件。

首先安装multitail:

wget ftp://ftp.is.co.za/mirror/ftp.rpmforge.net/redhat/el6/en/x86_64/dag/RPMS/multitail-5.2.9-1.el6.rf.x86_64.rpm
yum -y localinstall multitail-5.2.9-1.el6.rf.x86_64.rpm

multitail工具支持文本的高亮显示,内容过滤以及更多你可能需要的功能。

如下就来一个有用的例子:
此时我们既想查看secure的日志指定过滤关键字输出,又想查看实时的网络ping情况:
命令如下:

multitail -e "Accepted" \/var/log/secure -l "ping baidu.com"

プログラマーなら必ず理解しておきたい超実践的な高度なLinuxコマンド!

不是很方便?如果平时我们想查看两个日志之间的关联性,可以观察日志输出是否有触发等。如果分开两个终端可能来回进行切换有点浪费时间,这个multitail工具查看未尝不是一个好方法。









6. ping を継続し、結果をログに記録します


多くの場合、運用保守担当者は、ネットワークに何か問題があり、ビジネスに奇妙な症状を引き起こしているのではないか、サーバー ネットワークに何か問題があるに違いない、という声を常に耳にします。これは一般に責任を負うこととして知られており、ビジネスに問題が発生した場合、担当者はその原因をすぐに見つけることができず、多くの場合、問題の原因をサーバー ネットワークの問題に帰します。

現時点では、いくつかのパケットを ping して結果を破棄すると、人々はあなたに反論します。それはその期間だけの問題でした。現在はビジネスが通常に戻っています。 、ネットワークは正常である必要があります。おそらくこの時点で怒られるでしょう。

你要是再拿出zabbix等网络监控的数据,这个时候就不太妥当了,zabbix的采集数据间隔你不可能设置成1秒钟1次吧?小编就遇到过这样的问题,结果我通过以下的命令进行了ping监控采集。

然后再有人让我背锅的时候,我把出问题时间段的ping数据库截取出来,大家公开谈,结果那次被我叼杠回去了,以后他们都不敢轻易甩锅了,这个感觉好啊。

命令:

ping api.jpush.cn | awk '{ print $0 " " strftime(“%Y-%m-%d %H:%M:%S”,systime()) }' >> /tmp/jiguang.log &

输出的结果会记录到/tmp/jiguang.log 中,每秒钟新增一条ping记录,如下:

プログラマーなら必ず理解しておきたい超実践的な高度なLinuxコマンド!







七、查看tcp连接状态


指定查看80端口的tcp连接状态,有利于分析连接是否释放,或者攻击时进行状态分析。另外,搜索公众号Java架构师技术后台回复“面试题”,获取一份惊喜礼包。

命令:

netstat -nat |awk \'{print $6}' |sort|\uniq -c|sort -rn


プログラマーなら必ず理解しておきたい超実践的な高度なLinuxコマンド!







八、查找80端口请求数最高的前20个IP


有时候业务的请求量突然上去了,那么这个时候我们可以查看下请求来源IP情况,如果是集中在少数IP上的,那么可能是存在攻击行为,我们使用防火墙就可以进行封禁。命令如下:

netstat -anlp|grep 80|grep tcp|awk '{print $5}' \|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20

プログラマーなら必ず理解しておきたい超実践的な高度なLinuxコマンド!








##9 、 sshポート転送を実装




###################################################################################################################################################################################################################################### ssh は、一般的なリモート ログイン管理サーバーである Linux のリモート ログイン セキュリティ プロトコルであることは誰もが聞いたことがあるでしょう。しかし、SSH でポート転送もできることを聞いたことのある友人はほとんどいないでしょう。実際、ポート転送のための ssh の機能は依然として非常に強力です。以下にデモを示します。 ############インスタンスの背景: 当社には要塞マシンがあり、すべての操作は要塞マシンで実行する必要があります。一部の開発者は、クラスターのステータスを表示するために ElasticSearch のヘッド パネルにアクセスする必要があります。ただし、ElasticSearch の 9200 ポートをマップする必要はなく、要塞マシン経由でアクセスしたいと考えています。したがって、踏み台マシン (192.168.1.15) へのリクエストは、サーバー ElasticSearch (192.168.1.19) の 9200 に転送されます。 ############例: ###ローカル マシン (192.168.1.15) に送信された 9200 ポート アクセスを 9200 ポート 192.168.1.19######### に転送します。
ssh -p 22 -C -f -N -g -L \9200:192.168.1.19:9200 \ihavecar@192.168.1.19

记住:前提是先进行秘钥传输。

命令执行完后,访问192.168.1.15:9200端口则真实是访问192.168.1.19:9200端口。

以上がプログラマーなら必ず理解しておきたい超実践的な高度なLinuxコマンド!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はLinux中文社区で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。