気の向くままに辿るIT/ICT/IoT
UNIX/Linuxコマンド

UNIX/Linux ファイルの基本操作とコマンド1

ホーム前へ次へ
UNIX/Linux ファイルの基本的な操作はどうやるの?

UNIX/Linux ファイルの基本操作とコマンド1

UNIX/Linux ファイルの基本操作とコマンド1

 UNIX/Linux及びシェルにおけるファイルの内容の閲覧やファイルの新規作成には複数の方法があり、ファイルコピー、ファイルの移動についてはシンプルかつ強力な方法があります。

 更にリダイレクト・ヒアドキュメント・標準入出力と標準エラー出力を併せればファイルの基本操作で迷うことはないでしょう。

fileコマンド

$ file foo 

foo: HTML document text 

 ファイル基本操作コマンド、その名もfileコマンドは、引数で与えたファイルの種類(ディレクトリなども含む)を表示します。

ファイル内容の閲覧

 ファイルの内容を確認するコマンドには以下のようなものがあり、ページャ(pager)と呼ばれることもあります。

$ pg ファイル名 

page / pagerの略

$ cat ファイル名 

※concatenate(連結)の略

$ more ファイル名 

$ less ファイル名 

 pgは、一画面に収まる分と画面最下段にコロンが表示された(コマンド入力)状態になり、Enterキーを押すことでページを進めることができ、最終行に到達するか、[ q ]キーを押した時に終了してプロンプトに戻ります。

 catは、concatenate(連結)の略で本来は引数に2つ以上の複数のファイルを取り、それらのファイルを連結して標準出力に出力するコマンドですが、引数にファイルを1つだけ渡すとページャとして利用できますし、-vオプションを渡すと制御文字も表示できるなどページャ専用のコマンドであるかのように頻繁に利用される便利なコマンドです。

 そのcatではページが一画面に収まらない情報量だった場合、最後まで表示されてプロンプトに戻るので画面上でファイル内容の閲覧の為にcatを利用する場合に(ファイル内容が一画面に収まりそうにない場合には、そもそもcatではなくmore/lessを使えば済みますが、)パイプ経由でmore/lessなどを利用すると便利です。

$ cat ファイル名 | more      * [ more ファイル名 ] と同じ

$ cat ファイル名 | less        * [ less ファイル名 ] と同じ

 パイプ経由でmore/lessを利用する場合には、その操作もmore/lessに移るのでmoreコマンドのページ送りにはEnterキー、1ページ(画面)分だけ戻るには[ b ]キー、より細かくよりスムースにページを送ったり戻したりできるlessコマンドはキーボードの上下矢印キーか使用中のエディタの上下キーに該当するキー、終了するには何れも[ q ]キーを押します。

$ head ファイル名 

$ tail ファイル名 

 とりあえずファイルの冒頭や末尾の10行見られればよい場合には、head、tailコマンドを使用し、いずれも冒頭からまたは最終行を含めた10行分が表示されプロンプトに戻ります。

 headやtailは、「このファイルなんだっけ?」と別にどうでもいいんだけど、なんか気になる。。。とか、さらっと見ればわかるよねというケースなどでは操作数が少なくて済む分、意外と便利に感じるコマンドです。

 ファイル名を引数に取るだけでなく例えばあらゆるファイルをまたいで調べたいことがある場合などにコマンドラインからワンライナーでfind/grepなどで検索した結果をパイプを通してheadやtailに渡して最初か最後の一部だけを確認するといった使い方もできます。

 尚、[ -n ]オプションに数値を渡すとheadでは先頭からtailでは最後の行からその行数分表示することもできます。

ファイルの新規作成と編集

 vi系 

 emacs系 

 ファイルの新規作成や編集をする為にはコマンドラインエディタ、vi系やemacs系などのテキストエディタ、これら含めX Windowを利用したGUIエディタなどを利用します(vi/vimクイックリファレンス)。

 この他、テキストファイルの新規作成については、プロンプトからいきなりリダイレクトして新規ファイル名を入力する方法や[ touch ]コマンドやヒアドキュメント、リダイレクトと[ cat ]コマンドなどを使うとコマンドラインを編集する為のコマンドラインエディタとして利用することができます。

$ > ファイル名 

 プロンプトからいきなりリダイレクトで新規ファイル名を入力してカラのファイルを作成(既存ファイル名を指定すると上書き)したり、

$ touch ファイル名 

 touchコマンドでカレントディレクトリにカラのファイルを作成(最終アクセス日時と最終更新日時を変更し、指定ファイルが存在しない場合、新規作成するというtouchコマンドの性質を利用)したり、

$ cat > ファイル名 

 catとリダイレクトを組み合わせてこのように入力後、Enterを押して、改行され、プロンプトなしの入力状態から入力後、[Ctrl]+[D]でファイルを作成したり、

$ cat > ファイル名 <<HERE 

 catとリダイレクト、ヒアドキュメントを利用して環境変数PS2にセットされた複数行用プロンプトが表示された入力状態から、データ入力、最後に開始したヒアドキュメント文字列を入力して[Ctrl]+[D]を押してファイルを作成したりすることもできます。

ファイルのコピー・移動・削除

 ファイルのコピーは[ cp (copy)]コマンドを使って

 cp コピー元(パス名+)ファイル名 コピー先パス名 

または

 cp コピー元(パス名+)ファイル名 コピー先(パス名+)ファイル名 

とし、前者はコピー元と同名のファイル名がコピー先ディレクトリに作成され、後者のようにファイル名を指定して別のファイル名にしてコピーすることもできます。

 ファイルの移動は[ mv (move)]コマンドを使って

 mv 移動元(パス名+)ファイル名 移動先パス名 

または

 mv 移動元(パス名+)ファイル名 移動先(パス名+)ファイル名 

とし、前者は移動元と同名のファイル名が移動先ディレクトリに作成され、後者のようにファイル名を指定して別のファイル名にして移動することもできます(shellにはC標準ライブラリにあるrename関数にあたる専用のコマンドはありませんが、mvコマンドで同じディレクトリ内を移動先として違うファイル名を指定すれば結果的にファイル名変更と同じになります)。

 ファイルの削除は[ rm (remove)]コマンドを使って

 rm ファイル名 

としますが、コピー、移動、削除ともにうっかり必要なファイルを上書きや削除してしまわないように注意が必要です。

 [ rm ]コマンドはまさにそうですが、[ cp ]コマンドや[ mv ]コマンドでコピー先や移動先にファイル名を指定する場合に無意識に(コピー先や移動先に)既に存在するファイル名を指定してしまうとコピー元や移動元ファイルの内容で上書きしてしまうことになってしまうからです。

 そうした場合に[ cp ]、[ mv ]コマンドに有効な共通のオプションとしてタイムスタンプを比較してコピー元/移動元より新しい同名ファイルが存在する場合に上書きをしない-uオプション(--updateオプション)や、同名ファイルが存在する場合は一切上書きしない-nオプション(--no-clobberオプション)があり、また、[ rm ]、[ cp ]、[ mv ]コマンドに有効な共通のオプションとして同名ファイルが存在する場合に上書きをしていいかどうかの確認を促してくれる-iオプション(--interactiveオプション)があります。

 逆に意図して利用したいケースは、テスト後のデータファイルを初期状態に戻したい場合にバックアップファイルを[ cp ]する場合やスクリプト内で一時ファイルに書き出し、必要な処理をした後、ファイルごと本来の出力ファイルに上書きする場合に[ cp ]、[ rm ]せずに[ mv ]すれば結果的にプロセスを1つ省くことができるようなケースです。

 尚、UNIX/Linuxでは慣例として「ファイル名」といったフレーズではなく例示にはhogehoge,hoge,foo,barなどを使うのが一般的です。

LINK

ホーム前へ次へ