はうすてんぼぶ

コードかいてて疑問に思ったことや、興味あることをつらつらと暇なときに書く場所、ここはそんな場所

Unixシェルコマンドの勉強 part 3

はじめに

前々回前回に引き続きpart 3。

ひとまず今回で、基礎的なコマンド11個について勉強したことになる。

今回触れるのは、

cp, mv, cat, less

の4つ。

参考資料は、参考書「Amazon.co.jp: 改訂 新Linux/UNIX入門: 林 晴比古: 本」。

cp

概要

ファイルをコピーする。
語源はCoPyより。

使い方は以下の通り。

% cp [file1] [file2] (単体のファイルコピー)
% cp [files] [dir] (ファイル(複数可)をディレクトリへコピー)
% cp -r [dir1] [dir2] (ディレクトリをまるごとコピー)

単体のファイルをコピーする際は、[file1]にコピー元、[file2]にコピー先のファイル名を入れる。

ディレクトリへファイルをコピーする場合は、[files]にコピー元の単体(または複数)のファイル名、[dir]にコピー先のディレクトリ名を入れる。このコピー方法だと、自動的にコピー先のファイル名は、コピー元と同じになる。

ディレクトリをまるごとコピーする際は、[dir1]にコピー元のディレクトリ名、[dir2]にコピー先のディレクトリ名を入れる。

オプション

-p

ファイル属性を維持したままコピーしたい場合はこのオプションを用いる。

タイムスタンプやオーナ情報やグループ情報を維持したままコピーされる。

語源は、preserveより。

オーナ情報などはcpコマンドを読んだときのユーザの名前になるので、維持したい場合には-pが必要になる。

% sudo cp -p file file2
% sudo cp file1 file2
% ls -l
合計 12
-rw-rw-r-- 1 bob bob 5  917 23:08 file1
-rw-rw-r-- 1 bob bob 5  917 23:08 file2
-rw-r--r-- 1 root    root    5  917 23:38 file3

-pを付けないと、オーナ情報や権限情報が変わっていることがわかる。

-r

ディレクトリをコピーする際はこのオプションが必要になる。

語源は再帰を意味するrecursive。

コピー先のディレクトリがあるか無いかで動作が異なる点に注意。
以下に、コピー先のディレクトリがある場合と無い場合で実行した結果を載せる。

% ls
dir1 dir2

%ls dir2
()

% ls dir1
file1 file2

% cp dir1 dir2 (dir1ディレクトリを既存のdir2へコピー)
% ls dir2
dir1

% cp dir1 newdir (dir1ディレクトリを新しくnewdirとしてコピー)
% ls newdir
file1 file2

存在するディレクトリへコピーする場合には、コピー元のディレクトリが、存在するディレクトリのサブディレクトリとしてコピーされる。
存在しないディレクトリへコピーする場合は、コピー元のディレクトリを新しいディレクトリとしてまるごとコピーする。

mv

概要

ファイルの移動とファイル名を変更する。
語源は、MoVeより。

使い方は以下の通り。

% mv [files] [dir]
% mv [file1] [file2]

ファイルの移動をする場合には、最後にディレクトリ名を指定する。
以下のようにディレクトリ名の前に複数ファイルを指定しても良く。
シェルグロブを用いて、複数ファイルを指定しても良い。

% mv file1 file2 dir2
% mv file* dir2

また、ファイル名を変更する場合にもmvコマンドを使う。

オプション

参考書には主なオプションとして、-i-fが取り上げられている。-iは他のコマンドと同じく確認を表示し、-fも他のコマンドのオプションと同様に問答無用で(コピー先に同名のファイルがあろうとなかろうと)コピーする。

なのでここでは割愛する。

aliasにmv = 'mv -i'としておくとコピー先に同名のファイルがあっても安全なので、もし確認されず上書きされた場合には設定ファイルに書いておこう。

cat

概要

ファイルの内容を表示する。
語源は、conCATenate(連結させる)。

ファイル連結をさせるためのコマンドらしいが、基本的に単一ファイルの内容を表示させるために用いられる。

使い方は以下の通り。

% cat [file_1] [file_2] ...

[file_n]にファイル名を指定することで、その中身を見ることができる。
複数指定すると、連続してファイルの中身が出力される。

%cat -n file1 file2
     1	this is file1.
     2	this is file2.

注目して欲しいのは、オプションで-nで行番号を表示させる場合には、ファイルが異なっていても連番で出力される点である。語源のconcatenate(連結させる)はこういうところから来ていると思う。

オプション

-n

行番号を表示する。
複数のファイルを引数で与えた場合には、上の例のように、ファイルが異なっていても連番で行番号が振られる。

-b

空白の行に番号を振らずに、行番号を表示する。

% cat file3
()
this is file3.

% cat -b file1 file2 file3
     1	this is file1.
     2	this is file2.

     3	this is file3.

-nは空行にも行番号を振るため、
状況によって-nと使いわけると良い。

-v

非印字文字を特殊な形式で文字として表示する。

実行ファイルをcatでやると文字化けした感じで出力されるが、-vを付けると一応文字化けなしで見ることができる。

ただ、どっちにしろ読めたものではない。むしろ付けないほうが読みたいところを読める場合もある。

less

概要

テキストをページ単位で表示する。

同じくテキストをページ単位で表示するmoreの機能強化版で、「moreの反対」という遊び感覚で名前を付けられたのが語源?らしい。

% less [files]

といった感じに使う。

触ってみた感じ、manを実行したときと操作方法は同じだと思う。

% less file1 file2 file3
% less file*

のように複数指定することもできる。
次のファイルに行くときは:n(next)とすれば次のファイルを表示できる。
また:p(previous)で前のファイルを表示できる。

オプション

参考書に載っている主なオプションが多いので表形式で載せる。

-s 連続した空白行を1行に圧縮する
-c いったん画面クリアしながら次ページ表示をする
-E 最終行まで表示したら自動的に終了する
-e 最終行まで表示し、更に次に進むと終了する
-i 文字列検索の時大文字/小文字を同一視する
-m 全体の何%の部分を表示しているかガイド表示する
-M -mと同じだが詳細を表示する
-行数 1度にスクロールする行数を指定
+行番号 指定業から表示開始
+/文字列 指定した文字列のある行から表示開始。一致文字列が反転表示される。

おそらく普通にvimなどのテキストエディタとかで見たほうが良いとは思う。

終わりに

これでひとまず、基本的なコマンドの勉強に関してはひとまず終わり。

まだ全然触れていないコマンドはあるが、それらは触りつつ覚えていくっきゃない!!