復習がてら新しいLinuxの教科書を読んでるんだが、基本コマンドでも普段使っていないコマンドがいくつかあったのでメモ。

$ less

cat のスクロール表示版

$ ls -F

ファイル種別を表示(@はシンボリックリンク、*は実行ファイル)

$ ls test-??

「*」は任意の文字列に対して、「?」は任意の一文字

$ ln -s ソース シンボリック

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

$ find 検索開始ディレクトリ 検索条件 アクション

例:$ find . -name file-1.txt -print
このコマンドで、file-1.txtというファイル名を現在のディレクトリ以下で検索し、条件に該当するファイルパスを表示(-print)するということを意味する。

例:$ find . -type d -print
このコマンドは、カレントディレクトリ配下にあるディレクトリを列挙する。

例:$ find . -type d -a bin -pring
このコマンドは、カレントディレクトリ配下にあるbinという名前のディレクトリを列挙する。

$ locate 検索したいファイル名

ファイル名データベースから検索する。スキャンする必要がないため、findより早い。
標準では入っていないことがある。

// インストール
$ yum install mlocate
// データベースを作成(通常一日一回データベースが作成される)
$ updatedb

$ man マニュアルを見たいコマンド
$ コマンド –help

ヘルプ、あるいはオンラインマニュアルを見る

$ uniq ファイルパス

同じ内容の行が連続している場合に、重複を取り除く。
ファイル全体で重複を取り除く場合は、下記のようにする。
$ sort ファイルパス | uniq
あるいは
$ sort -u ファイルパス

重複している行の出現数ランキングを作成するのによく使われる。
$ sort ファイルパス | uniq -c | sort -n

$ sed スクリプト ファイルパス

非対話型のエディタコマンド。
下記のように使用する。

// file.txtのファイルのtestという文字列をsampleに書き換える
$ sed 's/test/sample' file.txt

$ awk ‘パターン
{アクション}’ ファイルパス

テキストの検索や抽出・加工などの編集を行うためのコマンド。
awk(オーク)と呼ぶ。
各行をレコードと呼び、レコードごとにパターンに合致するかどうかを判定し、合えばアクションを起こすという仕組み。

// lsの結果から5列目と9列目を表示
$ ls -la /usr/bin | awk '{print $5,$9}'
// ファイル名がcatで始まる行のみを表示
$ ls -la /usr/bin | awk '$9 ~ /^cat/ {print $5}'
// 9列目($9)の先頭がcatから始まる(/^cat/)かを比較(~)し、合致すれば5列目を表示({print $5})

// デフォルトのアクションはレコード全体を表示するので下記の3つは同じ意味
$ awk '$9 ~ /^cat/'
$ awk '$9 ~ /^cat/ {print}'
$ awk '$9 ~ /^cat/ {print $0}'

// 「,」で区切られた(-Fオプションでレコードを分割する文字列を指定)csvの最終列($NF - 組み込み変数)の数値のみを表示
$ awk -F, '{print $NF}' test.csv

// 「,」で区切られたcsvの最終行の数値の合計値を表示(sumという変数を宣言し、最終列を足し算していく)
// ENDブロックの内容は最後に処理される
$ awk -F, '{sum += $NF} END{print sum}' test.csv

// 「,」で区切られたcsvの最終行の数値の平均値を表示(NRは処理した行数を示す組み込み変数)
$ awk -F, '{sum += $NF} END{print "合計:",sum/NR}' test.csv