Bash チートシート - Ubuntu、Mint、Debian 向けの Linux コマンド

一部ツールのコマンドラインパラメータ

目次

非常に網羅的なリストではありませんが、私自身にとって有用な項目をいくつかまとめました

bash and shell anniversary!

開発ツールとワークフローの詳細については、開発ツール:モダンな開発ワークフローの完全ガイド をご覧ください。

スクリプト内でインタラクティブなプロンプトパターンが必要な場合は、Bash、CMD、PowerShell、macOS でキーを押してスクリプトを一時停止する を参照してください。

Linux Ubuntu のバージョン確認方法

Ubuntu バージョンの確認の詳細については、Linux Ubuntu バージョンの確認 をご覧ください。

方法 1

lsb_release -a

これにより、以下のような出力が得られます。

No LSB modules are available.
Distributor ID:	Linuxmint
Description:	Linux Mint 22.1
Release:	22.1
Codename:	xia

方法 2

cat /etc/os-release

これにより、以下のような出力が得られます。

NAME="Linux Mint"
VERSION="22.1 (Xia)"
ID=linuxmint
ID_LIKE="ubuntu debian"
PRETTY_NAME="Linux Mint 22.1"
VERSION_ID="22.1"
HOME_URL="https://www.linuxmint.com/"
SUPPORT_URL="https://forums.linuxmint.com/"
BUG_REPORT_URL="http://linuxmint-troubleshooting-guide.readthedocs.io/en/latest/"
PRIVACY_POLICY_URL="https://www.linuxmint.com/"
VERSION_CODENAME=xia
UBUNTU_CODENAME=noble

Tar を使った Bash でのアーカイブ作成と展開

圧縮

tar -zcvf archive-name.tgz directory-name

解凍

tar -zxvf archive-name.tgz

SSH と SCP を使った Bash でのリモートサーバーアクセス

ユーザーの ID をリモートサーバーにプッシュ

ssh-copy-id user@10.0.0.225

これにより、次回以降はパスワードなしでログインできるようになります。

ssh user@10.0.0.225

ファイルのアップロード

scp ~/file.ext user@host-ip:/home/user/file.ext

ネストされたフォルダを再帰的にダウンロード

scp -r user@host-ip:/home/user/dir ~/dir

Bash でのフォルダとファイルの管理

存在確認

# 存在しない場合は、中間フォルダも含めてフォルダを作成
[ -d $repdir ] || mkdir -p $repdir

# または
if [ -d $fname ]; then
  echo "File doesn't exist: $fname"
  return
fi

特定のユーザー用のフォルダ作成

sudo mkdir dir1
sudo chown specific_user dir1
sudo chown :specific_group dir1

フォルダ内のファイルをループ処理

# この例では、特定のフォルダ内のすべての jpg ファイルを fits 形式に変換します
for f in some-folder/*.jpg
do
  convert "$f" "${f/.jpg/.fits}"
done

すべてのファイルを 1 つにマージ

cat ./* > merged.txt

Crontab にコマンドを追加する

(crontab -l 2>/dev/null | \
  grep -v control-marker-1; \
  echo '*/15 * * * * /bin/bash /home/user/stest/stest.sh /home/user/stest >> /home/user/stest/stest.log 2>&1 #control-marker-1') | \
  crontab -

ここで:

  • */15 - 15 分ごとに実行
  • control-marker-1 - cron 設定内でこのコマンドを識別し、次回同じスクリプトで更新するための識別子
  • /bin/bash - 実行するコマンド
  • /home/user/stest/stest.sh - bash パラメータ - bash はこのスクリプトを実行します
  • /home/user/stest - スクリプトパラメータ - $1 でアクセス可能
  • /home/user/stest/stest.log - stest.sh のコンソール出力を含むログファイル

確認

grep /home/user/stest/stest.sh /var/log/syslog
crontab -e

Bash でのログファイルの監視

ログファイルをライブで監視

sudo tail -f /var/log/megalog.log

Bash で curl を使った HTTP ステータスコードの取得

response=$(curl --write-out '%{http_code}' --silent --output /dev/null servername)
  
# または

url='http://localhost:8080/'
status=$(curl --head --location --connect-timeout 5 --write-out %{http_code} --silent --output /dev/null ${url})

[[ $status == 500 ]] || [[ $status == 000 ]] && echo restarting ${url} # スタート/再起動ロジックを実行

ログアウト後に SSH コマンドを継続して実行する

https://stackoverflow.com/questions/954302/how-to-make-a-program-continue-to-run-after-log-out-from-ssh

プログラムをフォアグラウンドで実行している場合、以下の操作を行います。

  • ctrl-Z を押すと:

[1]+ Stopped myprogram

  • disown -h %1
  • bg 1

[1]+ myprogram &

  • logout

jo を使った Bash での JSON 生成

jo のインストール

sudo apt-get install jo
a="123"
b="456"
jo "model=a" "prompt=b" "stream=false"

以下のような出力が得られます。

{"model":"a", "prompt":"b", "stream":false}

少し複雑な例:

jo -p name=Jane point[]=1 point[]=2 geo[lat]=10 geo[lon]=20
{
   "name": "Jane",
   "point": [
      1,
      2
   ],
   "geo": {
      "lat": 10,
      "lon": 20
   }
}

jq を使った Bash での JSON 整形

使用法

| jq .

上記で生成した JSON を整形するには:

a="123"
b="456"
jo "model=$a" "prompt=$b" "stream=false" | jq .

整形された JSON は以下のようになります。

{
  "model": 123,
  "prompt": 456,
  "stream": false
}

Bash での JSON パースとフィールド値の抽出

まず jq をインストールします

sudo apt-get install jq

使用法

  | jq -r '.fieldName'

Ollama への呼び出し出力をパースする例:

curl http://localhost:11434/api/generate -d '{
  "model": "llama3",
  "prompt": "Why is the sky blue?",
  "stream": false
}'  | jq -r '.response'

Bash でのファイルの単語数カウント

単語数:

wc -w filename.txt

以下のような値が返されます。

261 filename.txt

整数のみを取得したい場合は、最初の単語(数字)を切り出します。

words=`wc -w filename.txt | cut -f1 -d' '`
echo "$words words"

または、wc を以下のように使用します:

words=`wc -w < filename.txt`
echo "$words words"

ディレクトリのディスク使用量の確認

du ~/dirname

Bash でのスクリプトディレクトリパスの取得

SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )

Bash でのスクリプト実行時間の測定

1 つのオプションとして time 関数を使用します。

time your_script.sh

もう 1 つの方法は、もう少し複雑ですが:

start=`date +%s`

# ここに非常に重要なコードが
# 入ります

end=`date +%s`

runtime=$((end-start))

VS Code を使った 2 つのファイルの比較

code -d <file 1> <file 2>

Ubuntu リポジトリでの利用可能なパッケージの確認

sudo apt-cache policy <packageName>

参考リンク

購読する

システム、インフラ、AIエンジニアリングの新記事をお届けします。