コンテンツにスキップ

Linux コマンド集

コンピュータ系

ディストリビューションのバージョンを確認する

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
$ cat /etc/os-release
PRETTY_NAME="Ubuntu 24.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.1 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo

Debian でマイナーバージョンまで知りたかったら以下が使える模様。(Ubuntu だと意味不明な文字列が返ってくる)

1
2
$cat /etc/debian_version
12.9

IP アドレスを取得する

1
2
3
4
5
6
$ ip add show eth0 | grep -oE '(192\.168\.[0-9]+\.[0-9]+)?' | sed -n 1P
192.168.XX.X

$ ip add show eth0 | grep -oE '(192\.168\.[0-9]+\.[0-9]+)?'
192.168.XX.X
192.168.YY.YYY

CPU を消費しているプロセスを確認する

1
$ ps aux --sort -%cpu

syslog を監視する

1
2
```bash
$ tail -f /var/log/syslog

PATH を確認する

1
2
$ env | grep PATH
$ sudo env | grep PATH

sudo 時と通常時は PATH が異なる。sudo visudoで以下のように変更すれば同じに出来る。

1
2
# Defaults      secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults        env_keep += "PATH"

検索系

ファイルをファイル名で検索する

1
$ find -name main.py

ファイルをファイル名で検索する(エラーを出力しない)

1
$ find / -name "main.hex" 2>/dev/null

ファイル内を文字列で検索する

1
$ grep "keyword" -nr ./

ストレージ系

ディスク一覧を確認する

1
$ sudo fdisk -l

ストレージ容量を確認する

1
$ df -h

ストレージ全体の空き容量を確認する

1
2
3
4
$ df -h --total
Filesystem      Size  Used Avail Use% Mounted on
# 略
total           1.9T  9.9G  1.7T   1% -

ディレクトリサイズを確認する

1
$ du -sh ./*/

シンボリックリンクを作成する

1
$ ln -s /path/to/file file

標準出力をファイルに書き出す

1
$ sudo apt update | tee result_`date +%Y%m%d%H%M%S`.txt

ダウンロード系

curl

ファイル・ディレクトリ系

複数階層のディレクトリを一度に作成する、存在する場合エラーを無視する

1
$ mkdir -p temp/aaa/bbb/ccc

リネームする

ディレクトリ内のファイル名をまとめて変更(連番付与)する - Qiita

1
2
3
4
5
6
7
8
9
# 期待結果を確認する
$ ls | awk '{ printf "mv %s test%03d.png\n", $0, NR }'
mv 0-9876589.png test001.png
mv 0987654678.png test002.png
mv 234567.png test003.png
mv 32456789654.png test004.png

# 実行する
$ ls | awk '{ printf "mv %s test%03d.png\n", $0, NR }' | sh

awk コマンドでテキスト加工をしてファイル名変更用のコマンドを生成する。

mv %s test%03d.png¥n %sは文字列、%03dは3桁 0 埋めの数値文字列

$0lsの表示結果(元のファイル名)

NRawkの組込変数で現在処理しているレコード番号

ディレクトリ構成をツリー形式で出力する

1
2
3
4
5
6
7
8
$ sudo apt install tree
$ tree

# node_modulesディレクトリを無視する
$ tree -I node_modules

# 複数のディレクトリを無視する
$ tree -I "node_modules|cdk.out|__pycache__"

その他

sudo のパスワード入力を省略する

sudo 時のパスワード入力を省略する【ubunutu/CentOS】 - F27P

1
2
3
4
5
6
$ sudo visudo

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
# 以下を追加する
{ユーザー名} ALL=NOPASSWD: ALL

yyyymmddhhmmss

1
2
$ date "+%Y%m%d%H%M%S"
20230128131449

UUID を生成させる

1
2
3
4
5
# 1個
$ cat /proc/sys/kernel/random/uuid

# たくさん
$ for((i=0; i<10; i++)); do cat /proc/sys/kernel/random/uuid; done

標準出力をファイル出力させる

1
$ python main.py | tee logs/`date +%Y%m%d%H%M%S`.log

optipng で一括処理させる

1
$ find -name "*.png" | sort | xargs optipng -o7

途中でバックグラウンド処理に切り替える

シェルのバックグラウンド実行って後だしできるって知ってました? #Linux コマンド - Qiita

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# なんか時間のかかるコマンド
$ sleep 10

# ここでCtrl+Z
^Z
[1]+  Stopped                 sleep 10

$ bg
[1]+ sleep 10 &

# しばらく待ったあとEnterを押すなりで行を送る
$
[1]+  Done                    sleep 10

ディレクトリ下を絶対パスで再帰的に取得する

1
2
3
4
# ls -1d $(find ${path})
$ ls -1d $(find path/to)
path/to
path/to/file

SCP

1
2
3
4
5
# ダウンロード
$ scp -P {ポート番号} {サーバーのユーザー名}@{サーバーのIPアドレス}:{ダウンロードしたいファイルのパス} {ダウンロード先のパス}

# アップロード
$ scp -P {ポート番号} {アップロードしたいファイルのパス} {サーバーのユーザー名}@{サーバーのIPアドレス}:{アップロード先のパス}

1 行ずつ取り出して引数に渡す

data
1
2
3
aaa
bbb
ccc
1
2
3
4
$ cat data | xargs -I {} echo "Hi, {}"
Hi, aaa
Hi, bbb
Hi, ccc