Linux コマンドメモ
目次
ファイル検索
ファイル名検索は find で. ファイル内容検索は grep で.
find
ファイル名検索
find [検索ディレクトリ] -name [名前]
- オプション
- -delete: 削除もする
- xargs で渡す
-
find . -name "*.dat" -type f | xargs wc -l -
chmod を使った例
# ディレクトリ $ sudo find . -type d -print | xargs sudo chmod 755 # 通常のファイル $ sudo find . -type f -print | xargs sudo chmod 644 # secure なファイル $ sudo find . -type f -print | xargs sudo chmod 444
grep
テキスト(ファイル内容)検索. パイプでand検索.
grep RegExp
# pwd 以下のファイルを再帰的に検索
grep -rl RegExp
# RegExp を含む行を表示
grep RegExp Filename
- 検索オプション
- -r: カレントディレクトリ以下を再帰的に検索
- -i: 大文字と小文字の区別をしない
- -w: 検索を単語として行う
- 表示オプション
- -l: ファイル名のみ表示
- -n: マッチした行番号も表示
- -h: マッチしたファイル名も表示
- -v: 文字列を除く行をすべて表示
- ユースケース集
- インストールファイル検索:
dpkg -L $package_name | grep $file_name
- インストールファイル検索:
ファイル編集
- データ処理関連は Pandasを使うて手も
sed (Stream EDitor)
置換処理
sed "s/置換条件/置換文字/g" input.txt > output.txt
- GNU sed REPL:シミュレータ
- ユースケース一覧
- 非オプションパラメータの扱い
- スクリプト指定(-e or -f)かない:第1がスクリプト・それ以降は入力ファイル
- 入力ファイルの指定がない:標準入力を使用
- オプション
- -e: テキストでスクリプト指定
- -f: ファイルでスクリプト指定
- -i: inplace (上書き保存)。続いて文字列指定で、指定形式でのバックアップ。
awk
抽出処理
awk -F'[,]' -v 'OFS=,' '{print $1, $NF}'
- AWK REPL:シミュレータ
- -F: 読み込みデータの区切り文字(複数指定可)
- -v: 変数指定
- OFS: 区切り文字(書き出し)
- RS: レコードの区切り文字(改行相当・読み込み)
- ORS: レコードの区切り文字(改行相当・書き出し)
- 出力変数
- $0: すべてのデータ
- $1,$2,… : 1,2,.. 個目のデータ
- $NF: 最後のデータ
- $NF-1: 最後から二番目のデータ
その他データ処理
- Linuxコマンドでテキストデータを自在に操る
- cat, paste:単純に縦・横にデータ結合
- join:データ結合(複数フィールドは awk で[:]区切りで1フィールド目に結合して使う)
- sort:データの並び替え
- LinuxでExcelをCSVに変換するコマンドラインツール
ファイル変換
nkf
文字コードを変換して標準出力
nkf -w before.dat > after.dat
- 文字コード指定
- -w: UTF-8
- -s: Shift_JIS
- -e: EUC-JP
-
—overwrite:上書き
nkf -w —-overwrite hoge.dat -
–guess:文字コード判定
nkf --guess hoge.dat
convert
画像・pdfファイルの相互変換:convert [変換前ファイル] [変換後ファイル]
パッチ処理
パッチ作成
-
diff -up original_source modified_source > source.patch diff -uprN /path/to/original /path/to/modified > folder.patch -
git を使う:
git diff > diff.patch
パッチ適用
- diff:
patch [option] applied_file < patch_file.patch - git:
git apply diff.patch
ユーザー処理
- ユーザー追加:
sudo useradd -s /bin/bash -m username- ワンライナーで追加: シェル指定・ホームディレクトリ付き
- ウィザードで追加:
sudo adduser username - ユーザー削除:
sudo userdel -r username - グループに追加:
sudo usermod -G group username - sudo 権限を追加:
sudo usermod -aG sudo username
- グループ確認:
cat /etc/group | grep username - SSH
- SSH 鍵生成:
ssh-keygen -t ed25519 -P "" -f key_name- パスワードなし:
-P "" - 鍵の名前指定:
-f key-name
- パスワードなし:
- SSH 登録:
ssh-copy-id -i ~/.ssh/key_name.pub remote_url-
直接行う場合は key-name.pub を登録先の ~/.ssh/authorized_keys に追記
# クライアント側 eval `ssh-agent` ssh-add ~/.ssh/key_name scp key_name.pub remote_url:~/.ssh # サーバ側 cat ~/.ssh/key_name.pub >> ~/.ssh/authorized_keys
-
- SSH 鍵生成:
自動化関連
自動入力・自動実行
- expect:ルールに従って自動入力
- trap:シグナル(Ctrl+C等)をトリガーとしてコマンド実行
- EXIT:プロセス終了時に実行
- mktemp の一時ファイルを削除するイディオム
tmp_file=$(mktemp) trap 'rm -f "$temp_file"' EXIT HUP INT QUIT TERM
ファイル操作
- mktemp:一時ファイル生成
- 生成ファイルはユニーク
- 生成先は /tmp (再起動時に削除・10日間で未使用ファイル削除)
- 削除は上記 trap コマンドを使用するイディオムを活用
その他
# シンボリックリンク
ln -s ./real_data_path ./alias_path
# os 確認
neofetch