どうも、@ryusei__46です。
今回は、自分自身の備忘録も兼ねて私が普段使用頻度が多いかつ忘れやすいLinuxコマンドをまとめていこうと思います。
やっぱり、サーバーを管理していて頻繁に使うコマンドは忘れないのですが、それ以外はちょっと使わないと記憶がおぼろげになっていきますね。
そのたびに、毎回ググるのも非効率でなりません。
ただ最近はChat GPTを初めとする便利な生成AIが使えるので、コマンドなんかももっぱら聞くことが増えましたね。Chat GPTも良いのですが、「phind」がなかなか素晴らしいです。「phind」はプログラミングに特化した生成AIで、基本無料でGPT4が利用できます。おすすめなのでぜひ使ってみてください。
少し話がそれましたが、ここからコマンドをまとめていきます。以下で紹介するコマンド群は、私のサーバー環境である「Ubuntu 22.04」で使用しているものです。
この記事は、新しく使っていくであろう忘れやすいコマンドが増えたら順次追加していきます。
サーバー管理者なら誰でも知っているような毎日使用するコマンドについてはあえて載せる必要はないと思うので、省略します。
lsコマンド:ディレクトリーの中身を一覧表示
これはLinuxコマンドの中でも定番だと思いますが、オプションを色々と付与して実行することでかなり見やすくなります。私がいつも使用するls
コマンドのオプション付きの例は以下になります。
$ ls -laF --group-directories-first --color -h
これを実行すると以下のように、個々の項目は「パーミッション」、「所有ユーザー」、「所有グループ」、「サイズ(単位付き)」、「更新日時」、「ファイルまたはディレクトリーの名前(ディレクトリーの場合は末尾に/、テキストには色が付与される)」の順で表示され、並び順はディレクトリー群を上へファイル軍を下へグルーピングして表示します。この表示方法は、Windowsのエクスプローラーと同じなので、パッと見てとても分かりやすい表示にすることができます。
ただ、オプションが非常に長くなってしまって毎回入力するのは手間なので、エイリアスとしてコマンドを登録しておけばOKです。
$ alias myls="ls -laF --group-directories-first --color -h"
これで、ターミナルにmyls
と入力して実行すれば上記の形式で表示してくれます。myls
の部分は好きな文字列に変更してくださいね。ただ、既に既存のコマンドが存在する文字列を登録してしまった場合、エイリアスに登録したコマンドが優先して実行されてしまうので、かぶらないように注意する必要があります。
エイリアスを削除したい場合にはunalias [command]
を実行してください。
ただ、エイリアスを一度設定してもログアウトしてしまうと設定が消えてしまうので、~/.bashrc
ファイルに上記のコマンドをログイン時に実行するように追記しておく必要があります。
htopコマンド:システムリソースの監視
htop
は、LinuxおよびUnix系システム用の対話型システム監視ツールで、top
コマンドの代替として使用されています。このツールは、システムのCPU使用率、メモリ使用率、Swap使用率をバー表示させ、プロセスの詳細情報を表示します。Linux系OSに標準搭載されているtopコマンドよりずっと高機能です。
特に理由がなければhtop
コマンドを使った方がよいです。htop
コマンドは以下のコマンドでインストールできます。
$ sudo apt install 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)
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 0
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
コマンドは、cat
やless
コマンドの代替として開発されており、ファイルの拡張子によって自動でシンタックスハイライトと行番号が適用されます。また、lessコマンドのページャの機能も有しており、スクリーンに収まり切れない場合は自動でページャモードになります。更に、ファイル内で文字列の検索機能も使用できます。
このツールを使用するには、パッケージのインストールが必要です。
$ sudo apt install bat -y
ファイル内容を表示する場合は、ターミナルでbatcat [file path]
を実行します。
fdコマンド:ファイル検索
fd
コマンドは、Linuxに標準搭載されているfind
コマンドの代替として開発されています。find
コマンドの全ての機能をサポートしているわけではないですが、Rust言語で開発されているため、find
コマンドより高速に動作させることができます。
下記コマンドでパッケージをインストールする必要があります。
$ sudo apt install fd-find -y
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 [検索文字列] [パス]
で行えます。
また、特定のファイル拡張子を含むファイルを検索条件に加えたい場合は、--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
オプションで有効にできます。