Linux

home

Linixコマンド > Linuxコマンド【中級編】

Linuxコマンド【中級編】

ここでは、Linuxコマンド【初級編】で紹介しきれなかったLinuxコマンドを取り上げる。 実際の作業で便利なコマンドがたくさんあるのでマスターしてほしい。

コマンド 説明
cat ファイルの中身を表示
tail ファイルの末尾を表示
grep 指定した文字列がファイル内に存在する場合、その行を抽出
awk テキストの加工とパターン処理
sed 文字や文字列を変換
ln ファイルやディレクトリにリンクを設定
find ファイルやディレクトリを検索
tar アーカイブを作成または復元

ここまでのコマンドが使えるのであれば、Linuxでほとんどの作業ができるであろう。 Linuxコマンド【上級編】では筆者の備忘録も兼ねて、さらにいくつかのコマンド(システム関係)を紹介している。

cat

catはファイルの中身を表示するコマンドである。 cat ファイル名として使用する。

[user@local ~]$ cat data.dat
function data
# id    x    y
  zero  0    0
  one   1    1
  two   2    4
  three 3    9

コマンドを実行すると、ファイルの中身がターミナル上に出力される。

tail

tailはファイルの末尾を表示するコマンドである。 tail ファイル名で使用できるが、オプションを指定すると便利である。

tailオプション 説明
-c 最後から出力する文字数を指定する。
-n 最後から出力する行数を指定する。nは省略できる。
-f ファイルへの追記をリアルタイムで監視する。

ファイルの最終行から3行を表示する場合には次のコマンドを実行する。

[user@local ~]$ tail -3 data.dat
  one   1    1
  two   2    4
  three 3    9

このコマンドはログファイルのリアルタイム監視時にtail -f ログファイル名で用いると便利である。 また似たようなコマンドに、ファイルの先頭から出力するheadが存在する。

grep

grepは指定した文字列がファイル内に存在する場合、その行を抽出するコマンドである。 基本的にはgrep 文字列 ファイル名として使用する。 便利なオプションも多いので表にまとめておく。

grepオプション 説明
-v 指定した文字列を含まない行を抽出する。
-n 抽出結果に行番号を表示する。
-c 指定した文字列を含む行の数を表示する。
-i 大文字・小文字を区別せずに抽出する。
-e 拡張正規表現で抽出を行う。実際には複数条件(OR)での抽出に使用する。
[user@local ~]$ grep one data.dat
  one   1    1
[user@local ~]$ grep -ve zero -ve one data.dat
function data
# id    x    y
  two   2    4
  three 3    9

2つ目の例では文字列「zero」または「one」が含まれる行以外を抽出している。 grepはデータ加工に非常に便利であり、出力結果をリダイレクトして活用することが多い。

awk

awkはテキストの加工とパターン処理を行うコマンドである。 と言われても釈然としないが、awkには本当にたくさんの使用方法がある。 ここではgrepと組み合わせたデータ抽出の例を取り上げる。

一般的にawkawk (パターン) {アクション}の形で使用する。 grepと組み合わせる場合はgrep ファイル名 | awk '{print 出力したい部分}'とすることで、必要な数値のみを抽出できる。 例えば、data.dat内の「two」の行の「4」という数字がほしい場合は以下のコマンドを実行する。

[user@local ~]$ grep two data.dat | awk '{print $3}'
4

この例ではgrepで「two」を含む行を抽出した後、awkにより空白区切りで3番目の文字列を出力するようにしている。 書式は例を参考にしてそのまま覚えてほしい。 なお、2つのコマンドを繋ぐ「|」の記号はパイプと呼ばれており、左側の処理結果を右のコマンドに受け渡す役割を担っている。 パイプの使用例としてはlsで表示した内容のうち、grepで指定したものだけを取り出す場合などがある。

[user@local ~]$ ls
data.dat    submit1.sh    submit2.sh    plot.py    analysis.py
[user@local ~]$ ls | grep py
plot.py
analysis.py

sed

sedは文字や文字列を変換するコマンドである。 このコマンドの使用方法も様々であるので、ここではファイル文字列の置換処理と行削除の例を扱う。

sed -e 's/xxx/XXX/g' ファイル名

あるファイル内の「xxx」という文字列全てを「XXX」に置換して出力する場合に使用する。 さらに-iオプションをつけることでファイルの直接置換を行うことも可能。

[user@local ~]$ sed -e 's/1/-1/g' data.dat
function data
# id    x    y
  zero  0    0
  one   -1    -1
  two   2    4
  three 3    9
[user@local ~]$ sed -i -e 's/function/incorrect/g' data.dat
[user@local ~]$ cat data.dat | head -1
incorrect data

ファイル名の部分には複数ファイルを指定することもできる。 なお、sは正規表現で置換処理をする、gは全てのマッチした文字列を置換するという意味を持っている。

sed (行数)d

seddは行削除を行うコマンドである。 単純にsed dとすると全ての行が削除されてしまうので、基本は行数を同時に指定して削除を行う。

[user@local ~]$ sed 1d data.dat
# id    x    y
  zero  0    0
  one   1    1
  two   2    4
  three 3    9
[user@local ~]$ sed 2,4d data.dat
incorrect data
  two   2    4
  three 3    9

1つ目の例はファイルの1行目を、2つ目の例はファイルの2行目から4行目までを削除したものである。

ln

lnはファイルやディレクトリにリンクを設定するコマンドである。 リンクは通常ln ファイル名でハードリンクを作成するが、-sをつけることでシンボリックリンクを作成することができる。

[user@local ~]$ ln data.dat data_hardLink
[user@local ~]$ ls
data.dat    data_hardLink
[user@local ~]$ ln -s data.dat data_symbolicLink
[user@local ~]$ ls
data.dat    data_hardLink    data_symbolicLink

ハードリンクはファイルに別名をつけたものであり、実体は元のファイルとなる。 一方でシンボリックリンクは元ファイルのポインタを指す。 同じファイルをいくつも使用したい場合にはシンボリックリンクを使用した方が効果的な場合が多い。

find

findはファイルやディレクトリを検索するコマンドである。 基本的にはfind ファイル名として使用するが、便利なオプションがいくつか存在する。

findオプション 説明
-name ワイルドカードを使用して、ファイルやディレクトリの名前の一部から検索する。
-atime 任意の日付にアクセスされたファイルやディレクトリを検索する。
-mtime 任意の日付に更新されたファイルやディレクトリを検索する。
-amin 任意の時刻にアクセスされたファイルやディレクトリを検索する。
-mmin 任意の時刻に更新されたファイルやディレクトリを検索する。
-size ファイル容量を指定して検索する。
-type f ファイルのみを対象として検索する。ディレクトリの場合は-type dとする。
[user@local ~]$ ls test_dir
data1.dat    data2.dat    setup.py    data_symbolicLink
[user@local ~]$ find test_dir -name \*.dat
test_dir/data1.dat
test_dir/data2.dat

例ではtest_dirディレクトリ内に存在するdatファイルを検索している。 検索は頻繁に使用するものではないが、シェルスクリプトに組み込むと便利に使えたりする。

tar

tarはアーカイブの作成、または復元を行うコマンドである。 一番よく使用する用法はtar xvf アーカイブ名として展開をするものであるだろう。

tarオプション 説明
-c 新しいアーカイブを作成(圧縮)する。
-x アーカイブを展開(解凍)する。
-v 圧縮・解凍状況を表示する。
-f 圧縮ファイル名を指定する。
-z 拡張子gzのアーカイブを使用する。
-j 拡張子bz2のアーカイブを使用する。
-J 拡張子xzのアーカイブを使用する。
[user@local ~]$ tar cvf test_dir.tar test_dir
test_dir/
test_dir/data1.dat
test_dir/data2.dat
test_dir/setup.py
[user@local ~]$ ls
test_dir    test_dir.tar
[user@local ~]$ rm -r test_dir
[user@local ~]$ tar xvf test_dir.tar
test_dir/
test_dir/data1.dat
test_dir/data2.dat
test_dir/setup.py

tarのオプションについてはハイフンを付けなくてもよい。 また、-zなどの拡張子オプションについても、指定しなくてもアーカイブ名から自動で判別してくれる。


Linuxコマンド【中級編】はここまでにしておく。 ここまで分かれば通常の操作は問題ないであろう。