Linux(Linux Essentials)2‐4.ファイルの作成、移動、および削除

今回紹介するのは以下
・ファイルやディレクトリのコピー:cp
・ファイルやディレクトリの移動(名前変更):mv
・ファイルやディレクトリの削除:rm
ディレクトリの作成:mkdir
ディレクトリの削除:rmdir
・タイムスタンプの変更や空ファイルの作成:touch
・メタキャラクター(* ? [])
・補足:「ls -l」で表示されるLinuxのファイル種別






■ファイルやディレクトリのコピー:cp
・cp [オプション] <コピー元> <コピー先>
→コピー先に同名ファイルがある場合は強制削除してコピー:-f
→コピー先に同名ファイルがある場合は確認メッセージを表示:-i
ディレクトリごと再帰的にコピー:-r または -R
→ファイル情報(更新日時やユーザーなど)を保持したままコピー:-p


例:ファイル「file001」をコピーして「file002」を作成する場合「$ ______ file001 file002」の下線部に入るコマンド。
→cp(※指定する順番は<コピー元> <コピー先>)


例:ファイル「abc.txt」を「def.txt」にコピーしようとしたところ、以下のメッセージが出力された。

cp: overwrite 'def.txt'?

このようなメッセージを出力することなく、強制的にコピーを行うコマンド。
→cp -f abc.txt def.txt


例:ファイルをコピーする際に誤って既存のファイルを上書きしないよう、確認メッセージを出力するcpコマンドのオプション。
-i


例:カレントディレクトリが「/home/user01」の場合、サブディレクトリ「subdir」を「/tmp」ディレクトリへコピーしてバックアップするコマンド。
→cp -r subdir /tmp


例:ファイル「2010_0101.log」「2010_0102.log」を、ディレクトリ「subdir」へコピーしたい。ただし、ファイルの所有ユーザーや作成日などには変更を加えたくない場合、「$ cp ______ 2010_0101.log 2010_0102.log subdir/」の下線部に入る正しいオプションは。
-p


■ファイルやディレクトリの移動(名前変更):mv
・mv [オプション] <移動元/変更前> <移動先/変更後>
強制的に上書き:-f
→移動先を上書きする前に確認メッセージを表示:-i


例:ディレクトリ「subdir」を「subdir001」へ名前変更するコマンドライン
→mv subdir subdir001


例:ファイル「file.txt」のファイル名を「file01.txt」に変更する場合「$ ______ file.txt file01.txt」の下線部に入るコマンド。
→mv(※指定する順番は<変更> <変更>)


例:カレントディレクトリにあるファイル「file01」を、サブディレクトリ「subdir01」へ移動する場合、適切なコマンド。
→mv file01 subdir01/(※移動先のディレクトリのみ指定した場合)
→mv file01 subdir01/file01(※移動先のディレクトリ構成まで指定した場合)


例:カレントディレクトリにある三つのファイル「fileA」「fileB」「fileC」を、サブディレクトリ「subdir」へ強制移動する最短コマンド。
→mv -f fileA fileB fileC subdir(「-f」で強制移動。複数ファイルはスペースで並べる


例:ファイルの名称変更を行う際、誤って上書きしないよう確認メッセージを出力するmvコマンドのオプション。
-i


■ファイルやディレクトリの削除:rm
・rm [オプション] <ファイル名/ディレクトリ名>
→確認やエラーメッセージ無しに強制削除:-f
→削除時に確認メッセージを表示:-i
ディレクト再帰的に削除:-r または -R


・カレントディレクトリに以下のファイルおよびディレクトリがある(ディレクトリは末尾に"/"がついているものとする)。

$ ls -F
fileA fileB fileC subdir01/ subdir02/

サブディレクトリ内のファイルの有無にかかわらず、これらのファイルおよびディレクトリを削除するためのコマンドとして正しいものはどれか。
→rm -rf *


例:ファイル「fileA」を削除する場合「$ ______ fileA」の下線部に入るコマンドを答えよ。
→rm


例:ディレクトリ「subdirA」を削除するために以下のコマンドを実行したところ、エラーが出力された。

$ rmdir subdirA
rmdir: failed to remove 'subdirA': Directory not empty

「subdirA」を適切に削除するためのコマンドとして正しいものはどれか。
→rm -rf subdirA(※ディレクトリ内が空ではなかったため「rmdir」では削除不可。「rm -r」で再帰的かつ強制的に削除)


例:コマンドを実行したところ、以下のような出力を得た。

$ rm _____ testfile
rm: remove regular file 'testfile'?

下線部に入るオプションはどれか。
→-i(※確認のメッセージを表示する)


・cp、mv、rmのオプションは基本的に同じ意味を持っている。
→-f(--force):強制的に処理を行う。
→-i(--interactive):問合せ(上書き確認や削除確認など)を行う。
→-r(--recursive):再帰的に処理する(ディレクトに対しての処理)。


ディレクトリの作成:mkdir
・mkdir [オプション] <ディレクトリ名>
→親ディレクトリも一緒に作成。


例:ディレクトリ「subdir01」を作成する場合「$ ______ subdir01」の下線部に入るコマンドを答えよ。
→mkdir


例:ホームディレクトリにサブディレクトリ「subdirA」と「subdirB」を作成するコマンドライン
→mkdir ~/subdirA ~/subdirB(※「~(チルダ)」でホームディレクトリを指定。スペースで複数ディレクリを指定


例:ディレクトリ「subdir」も「sub2dir」も存在しない状態で「$ mkdir _____ subdir/sub2dir」を正常に実行するには。
→-p(※必要に応じて親ディレクトリを作成


ディレクトリの削除:rmdir
・rmdir <ディレクトリ名>


例:空のディレクトリ「subdir01」を削除する場合「$ ______ subdir01」の下線部に入るコマンドを答えよ。
→rmdir


例:ディレクトリ「subdirA」を削除するために以下のコマンドを実行したところ、エラーが出力された。

$ rm subdirA
rm: cannot remove 'subdirA': Is a directory

「subdirA」を適切に削除するためのコマンド(ディレクトリ内にはファイルは存在しないものとする)。
→rmdir subdirA(※空のディレクトを削除するコマンド)
→rm -r subdirA(※ファイルを削除するコマンドに、ディレクトリを削除するオプションを付加)


例:空のディレクトリ「subdir」を削除するコマンド。
→rmdir subdir(※空のディレクトリを削除するコマンド)
→rm -r subdir(※ファイルを削除するコマンドに、ディレクトリを削除するオプションを付加)


■タイムスタンプの変更や空ファイルの作成:touch
・touch [オプション] <ファイル名>
→更新日時を指定:-d


例:空のファイル「file00」を作成する場合「$ ______ file00」の下線部に入るコマンド。
→touch


例:ファイル「file001」の最終更新日時を2019年1月1日に変更するコマンド。
→touch -d "2019-01-01" file001(※オプション「-d」で更新日時を指定





■メタキャラクター(* ? [])
・*(アスタリスク
0文字以上の文字列。


・?
→任意の1文字分


例:カレントディレクトリに「file1.txt」「file2.txt」「file303.txt」「file004.txt」「fileA.txt」の5つのファイルがある。
コマンド「ls file?.txt」を実行した際に表示されるファイルはどれか。
→file1.txt
→file2.txt
→fileA.txt
※「file」と「.txt」の間に1文字あるファイルが該当。


例:カレントディレクトリに「out.data」「test.txt」「memo」「sample.data」「20190101.data」のファイルがある。
これらのファイルのうち、「.data」で終わるファイルだけを削除するコマンド。
→rm *.data
(※ファイル名部分は0文字以上=文字数制限無し)


例:カレントディレクトリに「1.txt」「1000.csv」「10001.txt」「abcde.csv」「xyz.sh」のファイルがある。
コマンド「mv ?????.* /test」を実行した場合、ディレクトリ「/test」へ移動するファイルはどれか。
→10001.txt
→abcde.csv
※ファイル名部分は5文字、拡張子は0文字以上=文字数制限無し)


・[]
→[]内のいずれか1文字。
→[abc]:a,b,cのどれか1文字
→[a-z]:小文字のアルファベット(aからz)どれは1文字。
→[!abc]:a,b,c以外の1文字。


例:ディレクトリ「log」に、2013年10月6日から10月15日分の日付の入ったファイルがある。

 20131006.log 20131008.log 20131010.log 20131012.log 20131014.log
 20131007.log 20131009.log 20131011.log 20131013.log 20131015.log

このうち、10月6日~10月9日までのファイルを削除するコマンドはどれか。
→rm 2013100[0-9].log(※日付の1の位が0から9
→rm 2013100[6-9].log(※日付の1の位が6から9
→rm 2013100[6789].log(※日付の1の位が6か7か8か9


例:ディレクトリ「/work」にある以下のファイルのうち、RPMファイルのみをカレントディレクトリの「rpmfiles」ディレクトリへコピーするコマンドライン
→cp /work/*.rpm rpmfiles
(※RPMファイルの拡張子「.rpm」を指定し、ファイル名は「*」で文字数無制限で全指定


■補足:「ls -l」で表示されるLinuxのファイル種別
・「-」は通常のファイル。
・「d」はディレクトリ。
・「l」はシンボリックリンク