【Linux】作業中によく使うコマンド 23選 + おまけ

#サーバ
written by パイン

ども。Linuxおじさんのパインです。
新卒のみなさまはもう現場の空気には慣れたでしょうか?おじさんはもう新人の記憶とか遥か古の記憶です・・・(;´・ω・)

今回は初心に帰ってLinuxのコマンド集なんぞ書いていきます。

hostname

ホスト名(コンピューター名)を表示します。

# hostname
localhost.localdomain

uname

システム情報(カーネルバージョン等)を表示します。

# uname -a
Linux localhost.localdomain 4.18.0-348.7.1.el8_5.x86_64 #1 SMP Tue Dec 21 13:57:48 EST 2021 x86_64 x86_64 x86_64 GNU/Linux

id

現在使用しているユーザーのuid、gid等を表示します。

# id
uid=0(root) gid=0(root) groups=0(root)

ip

ネットワーク設定をするコマンドです。が、ぶっちゃけNetworkManagerが使えればnmtuiでグラフィカルに設定ができますし、/etc/sysconfig/network-script配下のプロファイルをいじれば設定できちゃうので、ipコマンドでネットワーク設定をすることはあまりないですね。。。
一応ルーティングテーブルの設定などもできるので覚えておいて損はないですね。

# ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
~略~

# ip r
default via 192.168.2.1 dev eth0 proto static metric 100
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.72 metric 100

cd

カレントディレクトリを変更します。引数が空の場合はユーザーのhomeディレクトリに移動します。

# cd /var
# pwd
/var
# cd
# pwd
/root     ※rootユーザーのhomeディレクトリ

ls

指定のディレクトリの内容をlistします。引数が空の場合はカレントディレクトリの内容が表示されます。

# ls /var
adm crash empty gopher lib lock mail opt run tmp
cache db games kerberos local log nis preserve spool yp

オペレーションでよく使うのは-lで詳細表示を有効にして、そこにさらにオプションを組み合わせるパターンが多いです。

# ls -la /var
合計 12
drwxr-xr-x. 19 root root 267 5月 8 15:38 .
dr-xr-xr-x. 17 root root 224 5月 9 00:36 ..
-rw-r--r--. 1 root root 163 5月 9 00:31 .updated  ※-a で隠し属性のファイルを表示できる
~略~

mkdir

ディレクトリを作成します。
上位ディレクトリがない場合は「-p」オプションを付けます。

# mkdir /tmp/data
# ls -l /tmp
合計 0
drwxr-xr-x 2 root root 6 6月 5 09:10 data

# mkdir /tmp/data1/testdata
mkdir: ディレクトリ `/tmp/data1/testdata' を作成できません: そのようなファイルやディレクトリはありません
# mkdir -p /tmp/data1/testdata
# ls -l /tmp/data1/
合計 0
drwxr-xr-x 2 root root 6 6月 5 09:12 testdata

cp

ファイルやディレクトリをコピーします。
パーミッションなどを維持したいときは「-p」を、ディレクトリを丸ごとコピーする場合は「-r」オプションを使用します。

# ls -l /tmp/data1/testdata/test1
-rw-r--r-- 1 root root 0 6月 5 09:13 /tmp/data1/testdata/test1
# cp /tmp/data1/testdata/test1 /tmp/data1/testdata/test2
# ls -l /tmp/data1/testdata
# ls -l /tmp/data1/testdata
合計 0
-rw-r--r-- 1 root root 0 6月 5 09:13 test1
-rw-r--r-- 1 root root 0 6月 5 09:14 test2

# cp -r /tmp/data1 /tmp/data2
# ls -l /tmp
合計 0
drwxr-xr-x 3 root root 22 6月 5 09:12 data1
drwxr-xr-x 3 root root 22 6月 5 09:15 data2
# ls -l /tmp/data2/testdata
合計 0
-rw-r--r-- 1 root root 0 6月 5 09:15 test1
-rw-r--r-- 1 root root 0 6月 5 09:15 test2

mv

ファイルやディレクトリを別のパスに移動します。

# mv /tmp/data2/testdata/test2 /tmp
# ls -l /tmp
合計 0
drwxr-xr-x 3 root root 22 6月 5 09:12 data1
drwxr-xr-x 3 root root 22 6月 5 09:15 data2
-rw-r--r-- 1 root root 0 6月 5 09:15 test2

rm

間違っても「rm -rf /」とかやるんじゃないぞ、おじさんとの約束だ。
ファイルやディレクトリを削除します。ディレクトリを丸ごと削除するときは「-r」オプションで再帰的に処理します。

# rm /tmp/data1/testdata/test1
rm: 通常の空ファイル '/tmp/data1/testdata/test1' を削除しますか? y
# ls -l /tmp/data1/testdata
合計 0
-rw-r--r-- 1 root root 0 6月 5 09:14 test2

cat

テキストファイルの内容を標準出力に表示します。

# cat /var/log/boot.log
------------ 日 6月 05 06:34:13 EDT 2022 ------------
[ OK ] Started Show Plymouth Boot Screen.
[ OK ] Reached target Paths.
[ OK ] Started Forward Password Requests to Plymouth Directory Watch.
[ OK ] Found device /dev/mapper/almalinux-root.
~略~

tail

テキストファイルの内容を標準出力に表示します。
catコマンドとの違いは、最終行から何行表示、といった形式になるところです。

# tail -5 /var/log/messages
Jun 5 06:53:25 dev01 systemd[1]: Started /usr/bin/systemctl start man-db-cache-update.
Jun 5 06:53:43 dev01 systemd[1]: man-db-cache-update.service: Succeeded.
Jun 5 06:53:43 dev01 systemd[1]: Started man-db-cache-update.service.
Jun 5 06:53:43 dev01 systemd[1]: run-r22eebc67dd22485fbb898a9eb731fb0b.service: Succeeded.
Jun 5 06:53:43 dev01 systemd[1]: run-rb5d265ab1b20454296c1f62c7afdf1bf.service: Succeeded.

tailf

tailfコマンドはファイルに出力されるテキストをリアルタイムに標準出力に表示し続けることができます。
tailfコマンドが使えない場合はtail -fで同様のことができます。
本番環境の作業を行うときは別のターミナルでmessagesをずっと流し続けて作業しながらログファイルを目検で監視したりします。

# tailf /var/log/messages
Jun 5 06:53:43 dev01 systemd[1]: Started man-db-cache-update.service.
Jun 5 06:53:43 dev01 systemd[1]: run-r22eebc67dd22485fbb898a9eb731fb0b.service: Succeeded.
Jun 5 06:53:43 dev01 systemd[1]: run-rb5d265ab1b20454296c1f62c7afdf1bf.service: Succeeded.
Jun 5 06:56:07 dev01 systemd[1]: Started /usr/bin/systemctl start man-db-cache-update.  ※新しいテキストが勝手に読み込まれる
Jun 5 06:56:07 dev01 systemd[1]: Starting man-db-cache-update.service...
Jun 5 06:56:09 dev01 systemd[1]: man-db-cache-update.service: Succeeded.
Jun 5 06:56:09 dev01 systemd[1]: Started man-db-cache-update.service.
Jun 5 06:56:09 dev01 systemd[1]: run-rb499efcce0bf492ea7abed42e51d2cab.service: Succeeded.

ps

実行中のプロセスを表示します。

# ps
PID TTY TIME CMD
1855 pts/0 00:00:00 bash
1905 pts/0 00:00:00 ps

個人的によく使うオプションは「-ef」か「-aux」あたりですね。

# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 128036 6640 ? Ss 06:32 0:05 /usr/lib/system
root 2 0.0 0.0 0 0 ? S 06:32 0:00 [kthreadd]
~略~

あとSELinuxが「Enforcing」の環境では「-Z」のオプションも使います。

# ps -efZ
LABEL UID PID PPID C STIME TTY TIME CMD
system_u:system_r:init_t:s0 root 1 0 0 06:32 ? 00:00:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
system_u:system_r:kernel_t:s0 root 2 0 0 06:32 ? 00:00:00 [kthreadd]

vi / view / vim

viコマンドについては以前、とんがりのコーンさんが記事書いていましたね。
エディタを起動してテキストを編集します。
viewコマンドで開いた場合は読み取り専用で開くため、変更の保存には「!」をつける必要があります。
viコマンドについて -written by とんがりのコーン

find

ファイル/ディレクトリの検索を行います。
コマンド構文がなかなかややこしいので最初は???となりがちですが、使い方覚えるとオペレーションの操作性が格段に上がるのでぜひ覚えていただきたいです。
正直おじさんもfindコマンドに関しては使いたいオプションを都度調べながら実行することが多いです。。。

# find . -type f #現在のディレクトリ以下のファイル属性のオブジェクトを検索
# find /var -type d #/var以下のディレクトリ属性のオブジェクトを検索

grep

テキスト検索を行います。
こやつもなかなか曲者なのですが、テキストファイル内から検索したり、パイプラインで引き渡した標準出力内から検索したりと使い方は多種多用です。
ログ洗ったりするのに便利。併せて正規表現も覚えておくと吉。

# grep -i err /var/log/messages
Jun 5 06:34:09 dev01 kernel: ACPI: Using IOAPIC for interrupt routing
Jun 5 06:34:09 dev01 kernel: ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 7 9 10 *11 12 14 15)
Jun 5 06:34:09 dev01 kernel: ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 7 9 10 11 12 14 15) *0, disabled.

# ps -ef | grep -i httpd # psコマンドの標準出力をパイプラインで引き渡し、httpdを含む行のみ表示
root 1197 1 0 06:34 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1627 1197 0 06:34 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1628 1197 0 06:34 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1629 1197 0 06:34 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1630 1197 0 06:34 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
root 1913 1855 0 06:43 pts/0 00:00:00 grep --color=auto -i httpd

systemctl

daemonを管理するコマンドです。起動したり停止したり、ステータスを確認するのに使います。

# systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor prese>
Drop-In: /usr/lib/systemd/system/httpd.service.d

ping

icmpでネットワークの疎通を確認するコマンドです。
クラウド環境だとicmpをブロックしていることが多いので最近は割と使わないことが多いですね。

# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=57 time=3.40 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=57 time=3.77 ms

nslookup

ネームサーバーへ名前解決の問い合わせを行います。
特定のドメインに紐づくIPアドレスを調べる他、プログラムのリクエストでFQDNを用いている際に、OSが正しく名前解決を行えるか確認するのに使います。

# nslookup google.com
Server: 192.168.2.11
Address: 192.168.2.11#53

Non-authoritative answer:
Name: google.com
Address: 142.251.42.206

traceroute

tracerouteコマンドについては以前、キムキムさんがCisco製品で書いていたのと同じものになります。
特定のIPアドレスへのアクセスのルートを確認するコマンドになります。
【Cisco】Tracerouteコマンドとは?何に使えるの? – written by キムキム

curl

HTTPリクエストを送信するコマンドです。
WebサーバーへのアクセスやAPIの稼働確認に使います。

# curl https://google.com/

こんな感じのメッセージが返ってきたり返ってこなかったり。。。
下記のパターンは「google.com」から「www.google.com」にリダイレクトされたよ!と申しております。

xargs

xargsは単体で使うコマンドではなく、ほかのコマンドと併用します。
標準出力やファイルからの入力をパイプライン等でコマンドへ引き渡すときに使います。

# xargs -a {file名} {command} ※ファイルから{command}に引数を渡す場合
# {command1} | xargs {command2} ※{command1}の実行結果を{command2}の引数に渡す場合

参考リンク: 【 xargs 】コマンド――コマンドラインを作成して実行する –@it

おまけ: while true; do ~; sleep X ; done

おまけです。
while文をtrue条件で無限ループさせて、{sleep X}の間隔で特定のコマンドを定期実行させます。
外部システムとの連携でファイル受信待ちをしたりする場合に使ったりします。

# while true ;
> do
> find /data -type f;
> sleep 5;
> done

if条件を省いていますが、findとsleepの間でif条件分岐をすることで「ファイル属性のオブジェクトが存在する場合、~~する」みたいな処理を{sleep X}間隔で実行させることができます。

最後に

あとawkとかcutとか、sedとか。。。あと地味にchmodとかchownとか書いてないですね。。。SElinux環境下であればchconとか。。。
まだまだ便利なコマンド・覚えておくべきコマンドはたくさんあるんですが文字数がだいぶ多くなっているので今回はここまで。

皆様よきLinuxライフを!