=====コマンド忘備録=====
毎回忘れて毎回googleかmanに聞いてる気がするので。以下$は一般ユーザ、#はrootでのコマンドを意味する。
====ls====
ファイルやディレクトリの一覧を表示する(list segment)。
^オプション^意味^
|a|隠しファイル込みで表示(all)|
|l|色々情報を出す(long)|
|h|容量に接頭辞をつける(human-readable)|
|--color|ファイル・ディレクトリの種類ごとに色を変える|
|t|更新時順で表示(time)|
|v|数字順で表示(version)|
|S|ファイルサイズ順で表示(Size)|
====head, tail====
ファイルの先頭・末尾を出力する。
^オプション^意味^
|n|出力する行数を指定|
====grep====
文字列の検索
^オプション^意味^
|r|再帰的に行う(recursive)|
|i|大文字と小文字を区別しない(ignore-case)|
====du====
ディレクトリの使用容量の確認(disk usage)。あるディレクトリ内のファイルサイズの総量を調べたいときは
$ du -sh /(path to directory)/*/
^オプション^意味^
|a|ファイルの容量も表示(all)|
|s|サブディレクトリ以下はまとめる(summary)|
|h|容量に接頭辞をつける(human-readable)|
====df====
ディレクトリの使用可能容量の確認(disk free)。外部デバイスの情報とマウントポイントが確認できるのでよく使う。
^オプション^意味^
|h|容量に接頭辞をつける(human-readable)|
====ssh====
secure shell
^オプション^意味^
|v|verbose。vの数でverbose levelが変わる(三つまで)|
====chmod====
権限を編集するコマンド(change mode)。\\
オーナー・グループ・他ユーザの順。数字の意味は以下。
|< 150px 50px - >|
^数字^意味^
|4|readable|
|2|writable|
|1|executable|
|< 300px 100px - >|
^オプション^意味^
|R|再帰的に行う(Recursive)|
*権限について\\
lsするにはそのディレクトリのxが必要\\
rmするにはそのファイルのwが必要
====chown====
所有者を編集するコマンド(change owner)。\\
fileの所有ユーザをuser、グループをgroupにしたいときは
$ chown user:group file
|< 300px 100px - >|
^オプション^意味^
|R|再帰的に行う(Recursive)|
====sed====
テキストデータの処理(Steam EDitor)。オプション、コマンド、対象ファイルの順に指定する。\\
例:file内のhogeを全てfugaに置換する場合
$ sed -i s/hoge/fuga/g file
|< 300px 100px - >|
^オプション^意味^
|i|ファイルを上書きする。|
|< 300px 100px - >|
^コマンド^意味^
|s/hoge/fuga|ファイルの一番上にあるhogeをfugaに置換する。全て置換する場合は末尾に/gをつける。|
====rename====
ファイル名の置換。置換前・置換後・対象のファイルの順に書く。カレントディレクトリ以下のファイル名のうちhogeをfugaに置換したい場合:
$ rename hoge huga ./*
====tar====
tarballを作成・展開するコマンド。\\
1.とにかくtarballを展開したいとき
$ tar xvf hoge.tar
2.圧縮したいとき
|< 200px 100px - >|
^オプション^意味^
|c|圧縮|
|x|展開|
|t|中身の表示|
|< 300px 100px - >|
^オプション^意味^
|f|ファイル名の指定|
|< 300px 100px - >|
^オプション^意味^
|a|圧縮形式を自動認識|
|z|gzip|
|j|bzip|
|J|xz compress|
|< 400px 100px - >|
^オプション^意味^
|v|verbose(処理したファイルの一覧を表示)|
====zip====
解凍はunzip。
$ zip -r アーカイブ名 圧縮する対象
|< 400px 100px - >|
^オプション^意味^
|r|ディレクトリの中についても再帰的に圧縮する(recursive)|
====rsync====
ファイルの同期を行う(remote syncronize)~scp。
|< 400px 100px - >|
^オプション^意味^
|v|verbose(処理したファイルの一覧を表示)|
|a|アーカイブモード(archive)。以下のオプション全部盛り|
|r|recursive|
|l|シンボリックリンクを保持(links)|
|p|パーミッションを保持(permisson)|
|t|タイムスタンプを保持(times)|
|o|所有者をそのまま保持(owner)|
|g|所有グループをそのまま保持する|
|D|デバイスファイルや特殊ファイルを保持する(devices)|
|-no-H|ハードリンクを保持しない|
|-no-A|ACL(アクセス制御リスト)を保持しない|
|-no-X|拡張属性を保持しない|
====su====
ユーザーの変更を行う(switch user)。\\
引数を与えない場合はrootユーザーになる。''-''をつけるとそのユーザーのホームに移動する(推奨)。
====ssh-keygen====
ssh用の鍵を作る。 とりあえずkeynameという名前のed25519の鍵を作りたいときは以下のコマンド
$ cd ~/.ssh
$ ssh-keygen -f keyname -t ed25519 -N ""
でkeyname(秘密鍵)とkeyname.pub(公開鍵)ができる
|< 400px 100px - >|
^オプション^意味^
|f|鍵の名前を指定(file name)|
|t|鍵の方式を指定(type)|
|b|鍵の長さを指定(bits)|
|C|コメントを設定(Comment)|
|N|新しいパスフレーズを設定(new pass phrase)|
====screen====
screenを作成してセッションを保存できる。\\
例 : ssh先で何かのscriptを回しているが、sshが切れてしまうと実行が止まってしまうとき。screen上で実行して一時的にセッションを離脱することでscriptを回し続けられる。\\
screenの作成
$ screen
これでscreenの中に入れる。
^入力^意味^
|Ctr + a|今のscreenを終了|
|Ctr + a → Ctr + d|screenから一時的に出る(デタッチ)|
存在するscreenの確認
$ screen -ls
screenに入る(アタッチ)。KEKCCの環境ではidはtab補完が効いた。
$ screen -r hoge(screen id)
外側からデタッチ(?)
$ screen -d hoge(screen id)
screen (id:hoge)を削除
$ screen -X quit # screen hogeの中にいる場合
$ screen -S hoge -X quit # screenの外にいる場合
=====ワンライナーのわざ=====
====ファイル数のカウント====
$ ls -1 | wc -l
ls listで1行に1ファイルを表示、その行数を数える。
====ディレクトリ構造のみコピー====
$ cp -sr hoge fuga
ファイルの相対的なシンボリックリンクが貼れないことを利用
====ディレクトリ構造は残して中のファイルのみ削除====
$ find /path/to/hoge -type f | xargs rm -f
ファイル名を探索してrmに渡す。
=====リダイレクト=====
''>''でリダイレクト。コマンドの出力を利用したいときに使う(ログなど)。\\
例1:
$ hoge.exe 2>&1 | tee log.txt
正直何が起こっているのかあまりわかっていない。
''&''は複製を意味する。標準出力が複製されて標準エラー出力になっているらしい。結果、標準出力と標準エラー出力が同じ場所に出力される。''tee''コマンドは出力をファイルとターミナルの両方に出力するコマンド。
^ファイルディスクリプタ^意味^
|0|標準入力|
|1|標準出力|
|2|標準エラー出力|
例2:
$ hoge.exe > /dev/null
''/dev/null''にリダイレクトすることで出力を捨てられる。つまりブラックホールみたいなもの(by D.H.)
=====Shellスクリプト=====
0行目に
#!/bin/sh
を書く。
====ループ====
0から99までloop
#!/bin/sh
for i in $(seq 0 99); do
#ループ回数を参照するには${i}
done
====計算====
変数で受ける方法\\
計算式を(())で囲む。
#!/bin/bash
input=${1}
((output=${input}+1))
echo ${output}
上のscriptの出力結果は
$ source hoge.sh 1
2
====コメントアウト====
一行の場合は
# print("not display")
複数行の場合は
<< HOGE
print("This message")
print("cannot be seen")
HOGE
同じ文字が出てくるとコメントアウト終了。
====どこでも動くスクリプト====
最初に
cd `dirname $0`
と書いておく。''$0''は自分の名前(フルパス)を出力し、''dirname''はディレクトリ部分を抽出する。ちなみに''basename''はファイル名部分を抽出する。