お問い合わせ

【Ubuntu】サーバー管理でよく使う私的Linuxコマンドまとめ

記事のサムネイル画像

どうも、@ryusei__46です。

今回は、自分自身の備忘録も兼ねて私が普段使用頻度が多いかつ忘れやすいLinuxコマンドをまとめていこうと思います。

やっぱり、サーバーを管理していて頻繁に使うコマンドは忘れないのですが、それ以外はちょっと使わないと記憶がおぼろげになっていきますね。

そのたびに、毎回ググるのも非効率でなりません。

ただ最近はChat GPTを初めとする便利な生成AIが使えるので、コマンドなんかももっぱら聞くことが増えましたね。Chat GPTも良いのですが、「phind」がなかなか素晴らしいです。「phind」はプログラミングに特化した生成AIで、基本無料でGPT4が利用できます。おすすめなのでぜひ使ってみてください。

少し話がそれましたが、ここからコマンドをまとめていきます。以下で紹介するコマンド群は、私のサーバー環境である「Ubuntu 22.04」で使用しているものです。

この記事は、新しく使っていくであろう忘れやすいコマンドが増えたら順次追加していきます。

サーバー管理者なら誰でも知っているような毎日使用するコマンドについてはあえて載せる必要はないと思うので、省略します。

lsコマンド:ディレクトリーの中身を一覧表示

これはLinuxコマンドの中でも定番だと思いますが、オプションを色々と付与して実行することでかなり見やすくなります。私がいつも使用するlsコマンドのオプション付きの例は以下になります。

$ ls -laF --group-directories-first --color -hCommandline

これを実行すると以下のように、個々の項目は「パーミッション」、「所有ユーザー」、「所有グループ」、「サイズ(単位付き)」、「更新日時」、「ファイルまたはディレクトリーの名前(ディレクトリーの場合は末尾に/、テキストには色が付与される)」の順で表示され、並び順はディレクトリー群を上へファイル軍を下へグルーピングして表示します。この表示方法は、Windowsのエクスプローラーと同じなので、パッと見てとても分かりやすい表示にすることができます。

上記のオプション付きでlsコマンドを実行した結果のスクリーンショット

ただ、オプションが非常に長くなってしまって毎回入力するのは手間なので、エイリアスとしてコマンドを登録しておけばOKです。

$ alias myls="ls -laF --group-directories-first --color -h"Commandline

これで、ターミナルにmylsと入力して実行すれば上記の形式で表示してくれます。mylsの部分は好きな文字列に変更してくださいね。ただ、既に既存のコマンドが存在する文字列を登録してしまった場合、エイリアスに登録したコマンドが優先して実行されてしまうので、かぶらないように注意する必要があります。

エイリアスを削除したい場合にはunalias [command]を実行してください。

ただ、エイリアスを一度設定してもログアウトしてしまうと設定が消えてしまうので、~/.bashrcファイルに上記のコマンドをログイン時に実行するように追記しておく必要があります。

htopコマンド:システムリソースの監視

htopは、LinuxおよびUnix系システム用の対話型システム監視ツールで、topコマンドの代替として使用されています。このツールは、システムのCPU使用率、メモリ使用率、Swap使用率をバー表示させ、プロセスの詳細情報を表示します。Linux系OSに標準搭載されているtopコマンドよりずっと高機能です。

特に理由がなければhtopコマンドを使った方がよいです。htopコマンドは以下のコマンドでインストールできます。

$ sudo apt install htopCommandline
htopコマンドの画面

画面もグラフィカルになっており、画面下部に表示されているファンクションキーで様々な操作が行えます。フィルターや検索機能、プロセス停止などの操作が非常に便利ですね。

特にプロセスの強制停止などの操作では、以前までpsコマンドでプロセスを探して、killコマンドでプロセスを停止させていましたが、最近はhtopで全て行うようになりました。

lsofコマンド:指定したポート番号が使用されているかの確認

lsofコマンドは、特定のファイルやポート番号を開いているプロセスの情報を一覧表示させるためのものです。rootユーザーや他のユーザーが開いているプロセスも確認したい場合は、sudoコマンドで実行するかrootユーザーで実行する必要があります。

特定のディレクトリーまたはファイルで使用しているプロセスを確認する場合は、lsof [directory path or file path]を実行しますが、特定のポート番号を開いているプロセスを確認するにはlsof -i:[port]を実行します。

出力は以下のようになります。

// SSHの標準で使われる22番ポートが開かれているか確認
$ sudo lsof -i:22
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd     1004  root    3u  IPv4  23201      0t0  TCP *:ssh (LISTEN)
sshd     1004  root    4u  IPv6  23203      0t0  TCP *:ssh (LISTEN)
sshd    32619  root    4u  IPv4 151342      0t0  TCP my-host:ssh->192.168.1.19:53733 (ESTABLISHED)
sshd    32728  root    4u  IPv4 151342      0t0  TCP my-host:ssh->192.168.1.19:53733 (ESTABLISHED)Commandline

ifconfigコマンド:ネットワークインターフェイスの確認

ifconfigコマンドは、Linuxのネットワークインターフェース設定ユーティリティで、ネットワークインターフェースパラメータの設定、管理、クエリを実行します。このコマンドは、現在のネットワーク構成情報の表示、ネットワークインターフェイスへのIPアドレス、ネットマスク、またはブロードキャストアドレスの設定、ネットワークインターフェイスのエイリアスの作成、ハードウェアアドレスの設定、ネットワークインターフェイスを有効または無効にするために使用されます。

私はもっぱらIPアドレスの確認をするのに使っています。ip aコマンドでも確認できますが、ifconfigコマンドの方がレイアウトが整っていて見やすくなっています。

$ ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.4.6  netmask 255.255.255.0  broadcast 192.168.4.255
        inet6 240b:12:8241:9205:c836:8dff:faf8:13d4  prefixlen 64  scopeid 0x0<global>
        inet6 fe80::b826:8efe:fed5:13d0  prefixlen 64  scopeid 0x20<link>
        ether ca:46:8e:f5:13:d0  txqueuelen 1000  (イーサネット)
        RX packets 383025  bytes 81380768 (81.3 MB)
        RX errors 0  dropped 24  overruns 0  frame 0
        TX packets 139316  bytes 12230672 (12.2 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0Commandline

inetがIPv4、inet6がIPv6、etherがMacアドレスを表しています。

screenコマンド:ターミナルセッション管理

screenコマンドは、複数のスクリーンセッションを管理するためのツールです。これにより、複数のウィンドウを含むスクリーンセッションを開始し、端末で実行されているプロセスを分離することが可能になります。また、screenコマンドを使用すると、セッションを切り替えて、接続するセッションを選択することができます。

私は現在このツールを使って、Webサーバーのプロセスやバックエンドで動作しているシステムの管理を行っています。ただ、近いうちにPM2というオープンソースのNode.js用プロセス管理ツールに乗り換える予定です。

新しいターミナルセッションを開始するには、screenコマンドを実行し、セッションから離脱する(でタッチ)には、キーボードのCtrl + A・Dを押します。

起動しているターミナルセッションの一覧を確認するには、screen -lsコマンドを実行し、指定のスクリーンに接続する(アタッチ)には、screen -r [screen ID]で接続できます。

また、接続しているスクリーン内で画面をスクロールしたい場合は、キーボードのCtrl + A・[を押してコピーモードに入ります。そうすると、上下矢印キーで画面スクロールができるようになります。コピーモードを抜ける場合は、キーボードescキーを押します。

batコマンド:ファイルの内容をリッチに出力

batコマンドは、catlessコマンドの代替として開発されており、ファイルの拡張子によって自動でシンタックスハイライトと行番号が適用されます。また、lessコマンドのページャの機能も有しており、スクリーンに収まり切れない場合は自動でページャモードになります。更に、ファイル内で文字列の検索機能も使用できます。

このツールを使用するには、パッケージのインストールが必要です。

$ sudo apt install bat -yCommandline

ファイル内容を表示する場合は、ターミナルでbatcat [file path]を実行します。

batコマンドでhtmlファイルを表示している様子

fdコマンド:ファイル検索

fdコマンドは、Linuxに標準搭載されているfindコマンドの代替として開発されています。findコマンドの全ての機能をサポートしているわけではないですが、Rust言語で開発されているため、findコマンドより高速に動作させることができます。

fdコマンドを使用している様子

下記コマンドでパッケージをインストールする必要があります。

$ sudo apt install fd-find -yCommandline

Ubuntuでfdコマンドを実行するには、fdではなくfdfindで実行します。理由は以下GitHubのissueで解凍されています。

シンプルにカレントディレクトリー内のファイルを再帰的に検索するには、fdfind [検索文字列]で行えます。また、デフォルトの機能で検索文字列は正規表現パターンとして扱われます。なので、正規表現で利用される.?などのメタ文字を検索文字列として含めたい場合はエスケープが必要です。正規表現パターンを無効にし、通常のテキストとして検索文字列を扱いたい場合は、-gオプションを付与します。

また、fdfindは特に設定を行わない場合、隠しファイルやディレクトリーは検索対象に含めません。これを含めるように変更するには、-Hオプションを付与します。また、GitHubリポジトリー内のファイルを検索対象にする場合、.gitignoreファイルが考慮されます。.gitignoreファイルを無視するよう変更するには、-Iオプションを付与します。

ファイルの拡張子を指定して検索したい場合は、fdfind -e [拡張子] [検索検索パターン]で行えます。

検索するディレクトリーを指定したい場合は、fdfind [検索パターン] [パス]で行えます。

fdfindはデフォルトでは、ファイル名のみを検索対象としていますが、ファイルのフルパスを検索対象にすることもできます。その場合は、-pオプションを付与します。

これらのオプションは全て組み合わせることができますので、個々の状況用途に応じて柔軟に対応できます。

rgコマンド:ファイル内容検索

rgコマンドは、Linuxに標準搭載されているgrepコマンドの代替として開発されています。こちらもRust言語で開発されており、非常に高速に動作させることができます。fdコマンドがファイル名でファイルを検索できるのに対して、rgコマンドはファイルの内にある文字列を検索対象とします。実際こちらの方が使う頻度が多いと思います。また、[command] | rg “search pattern”のようにパイプして使うことも多いコマンドです。

コマンドの正式名は「ripgrep」となっており、以下がGitHubリポジトリーです。

rgコマンドを使用している様子

シンプルにカレントディレクトリー内で指定した文字列が含まれるファイルを検索するのであれば、rg [検索文字列]で行えます。rgコマンドも同様にデフォルトで正規表現として扱われるので、メタ文字を含む検索文字列を対象とする場合はエスケープする必要があります。

対象とするディレクトリーを指定する場合は、rg [検索文字列] [パス]で行えます。

また、特定のファイル拡張子を含むファイルを検索条件に加えたい場合は、--typeオプションを付与し、ファイルタイプを記述します(例:rg [検索文字列] [パス] --type html )。また、それとは逆に特定のファイル拡張子を除外したい場合は、--type-notオプションを使用します(例:rg [検索文字列] [パス] --type-not html)。サポートされているファイルタイプの一覧を取得するには、rg --type-listを実行します。

rgコマンドにはfdコマンドと同様に、デフォルトで隠しファイルとディレクトリーを無視するようになっており、これを含めるように変更するには、--hiddenオプションを使用します。また、fdコマンドと同様に、GitHubリポジトリー内のファイルを検索対象にする場合、.gitignoreファイルが考慮されます。.gitignoreファイルを無視するよう変更するには、--no-ignoreオプションを付与します。ここからはrgコマンド固有になりますが、バイナリーファイルの内容も検索可能となっており、--textまたは-aオプションで有効にできます。更に、シンボリックリンクをたどるかどうかを、--followまたは-Lオプションで有効にできます。

Discussion


Category List