Skip to content

Shell(Bash) memo.

usermod

ユーザー情報の変更
(参考)【 usermod 】コマンド――ユーザーアカウントの情報を変更する
https://atmarkit.itmedia.co.jp/ait/articles/1612/14/news022.html

ユーザー名変更する場合は、

usermod -l [新ユーザー名] -d /home/[新ユーザー名] -m [変更前ユーザー名]

groupmod

所属グループの変更

groupmod -n [変更後グループ名] [変更前グループ名]

du / df / sort

du -h の結果を簡単にソート
サイズに単位名が出てくるので上手くソートできない。
→sort -h でソートできる。-kで、カラム指定ソートもできる

du -h | sort -nr
※-h :サイズ単位付き
du --max-depth=1 -h | sort -hr
※max-depth:ディレクトリ1階層分

以下、共にファイルサイズ順に並び替え

ls -lh | sort -hr -k 5,5
df -h | sort -hr -k 2

(参考)du -h などの結果を簡単にソートする
https://qiita.com/shuhei/items/9e9b7c5ad95a95ac4163

sortのオプション

-n :サイズの数値順(数字部分のみ)でソート
-h :サイズの数値順(単位を考慮)でソート
-f :大文字小文字を区別しない
-k :key=列順。-k 3なら3列目で並び替え。-k 3nなら3列目を数値扱いで並び替え
-r :降順

find

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point...] [expression]
-P シンボリックリンクを追わない。既定の動作
-L シンボリックリンクを追う

(参考)findコマンドの使い方を簡単に理解するための7つのルール+実践的な知識
https://qiita.com/ko1nksm/items/7fec71f78a394a80ed2b

findコマンドの基本形

find . -name '*.txt' # クォートはほぼ必須
(解説)
 .  →カレントディレクトリを基準に
 -name '*.txt' →拡張子が".txt"のファイルを検索

良く書かれる、下記のような記述は、*.txtの部分はshellで展開され、

find \*.txt
 ↓
find file1.txt file2.txt file3.txt

のような形に展開されてから実行される

そのほかのオプション

-depth :ディレクトリ内のファイルを先に処理してから、ディレクトリ自体を処理する。
-xdev :現在のファイルシステムを越えて検索しない
-mount :-xdevと同じ
-name :ファイル名が pattern に一致するものを検索する。''で括ること。
 例)find /path -name "*.txt"
-iname :同じ。大文字小文字を区別しない。
-path :ファイルのフルパスが pattern に一致するものを検索する。
 例)find /path -path "/path/to/*"
-type :指定したファイルタイプを検索
 f : 通常ファイル
 d : ディレクトリ
 l : シンボリックリンク
-perm mode :指定したパーミッションを持つファイルを検索
 例)-perm 644 → 644 に完全一致
-user name :指定したユーザーが所有するファイルを検索
-group name :指定したグループが所有するファイルを検索
-size :ファイルサイズが n 単位のファイルを検索
 例)find /path -size +100M  # 100MB以上のファイル
 例)find /path -size -50k   # 50KB未満のファイル
-atime n :最後にアクセスされた日数が n のファイル
-ctime n :iノードが変更された(最終ステータス変更時刻)日数が n のファイル
-mtime n :内容が変更された日数が n のファイル
-amin n :最後にアクセスされた分が n のファイル
-cmin n :iノードが変更された(最終ステータス変更時刻)分が n のファイル
-mmin n :内容が変更された分が n のファイル
 例)find /path -mtime -7   # 7日以内に変更されたファイル
 例)find /path -atime +30  # 30日以上アクセスされていないファイル
 例)find /path -mmin -60   # 60分以内に変更されたファイル
-exec command :検索結果に対して command を実行する。{} は見つかったファイルのパスに置き換えられる。
 例)find /path -type f -name "*.log" -exec rm {} \;  # 検索された*.logファイルを削除
-print :検索結果を標準出力に表示(デフォルトなので指定不要)
-prune :指定したディレクトリを検索対象から除外
 例)find /path -type d -name "backup" -prune -o -print

findコマンド 組み合わせ例

1 . 最終更新日が30日以上のログファイル(/var/logディレクトリ下の'*.log'に該当)を削除

find /var/log -type f -name "*.log" -mtime +30 -exec rm {} \;

2 . /homeディレクトリ下の、サイズが1GB以上のファイルを探す

find /home -type f -size +1G

3 . オーナーが alice で、7日以内に変更されたファイルを表示

find /data -user alice -mtime -7 -print

4 . ルートファイルシステム下の拡張子confのファイルを検索

find / -xdev -type f -name "*.conf"

セキュリティ関連コマンド

ssh

cd
pwd  # homeディレクトリに居ることを確認
--- ssh-key作成
ssh-keygen -t ed25519 -C mailaddress@xxxx.com
cat ./.ssh/id_ed25519.pub   # 公開鍵の確認

--- 公開鍵を認証したいサイトに登録
ssh -T 

--- gitアクセスするときはgit用のURLで
git pull git@github.com:XXXXXXXXXXXXXXXX/ZZZZZZZZZZ.git  # ここはgitubからコピー

GPGの設定 / git secret

(参考)Gitリポジトリ暗号化のススメ - git-secret -
https://qiita.com/jqtype/items/9b0524baa4b7fe6dbde0

-- インストール
sudo apt-get install gnupg

-- gpgキーの作成
gpg --gen-key

-- gpgキーのインポート(XXXXXXXXXXXX.pubは、上記で作成したGPG公開鍵)
gpg --import XXXXXXXXXXXX.pub

-- gpgキーの確認
gpg --list-keys

-- gpgキーの登録
gpg --armor --export XXXXXXXXXXXXX

sed

sed '/^$/d'  → 空行を削除
sed 's/,\t/\t/g'  → ,<tab>の場合の,を削除してtabのみに
sed 's/\t$//g'  → tab文字で終わる場合tab文字を削除

awk

圧縮コマンド

gzip

圧縮(compress)

gzip -c

解凍(decompress)

gzip -d xxxxx.gz

tar

tar cvf xxxx.gz /home/xxxx
tar xvf xxxx.gz

オプション説明

c -- create
x -- extract
t -- list

z -- gzip形式
j -- bzip2形式

v -- 詳細出力
f -- ファイル名

goのインストール

wget https://go.dev/dl/go1.23.5.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.23.5.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
go version
--> go version go1.23.5 linux/amd64

jqコマンド

その他(IT一般)

命名

キャメルケース:camelCase (Java, JavaScript)
スネークケース:snake_case (PHP, Python, Ruby)
ケバブケース :kebab-case (HTML, css, Lisp)