▼すべてを開く。
▲すべてを閉じる。
$ ls -l -rw-r--r-- 1 masa users 256 10月 10 12:57 #file#
$ rm '#file#'または
$ rm "#file#"または
$ rm \#file#
rmコマンドで、上のようにファイルを指定するとファイル「#file#」が削除される。
$ rm #file# rm: 引数が足りません
普通に「#file#」を削除しようとすると、「引数が足りません」というエラーメッセージが出る。これは、シェルが「#」をコメントと解釈してrmコマンドにファイル名「#file#」を渡さないため、上のようなエラーメッセージになる。
意図しないファイルを誤って削除しないために、削除するファイルをlsコマンドで直接指定して、目的のファイルだけが表示されるかを確認する。
lsコマンドでファイルが正しく指定できない例$ ls #file# #file# * ** *** **** ***** -file \ ~masah
シェルが「#」をコメントと解釈するため、単純なlsコマンドが実行されてすべてのファイルが表示される。
lsコマンドでファイルが正しく指定できた例$ ls \#file# #file# $ ls '#file#' #file# $ ls "#file#" #file#
シェルに「#」をコメントと解釈させないために、ファイル名の前にエスケープ文字「\」を付けて「\#file#」とするか、ファイル名を引用符「'」で囲って「'#file#'」、また二重引用符で囲って「"#file#"」と指定すると正しくファイル「#file#」が表示される。
$ ls -l 合計 20 -rw-r--r-- 1 masa users 256 10月 10 17:25 * -rw-r--r-- 1 masa users 256 10月 10 17:25 ** -rw-r--r-- 1 masa users 256 10月 10 17:25 *** -rw-r--r-- 1 masa users 256 10月 10 17:25 **** -rw-r--r-- 1 masa users 256 10月 10 17:25 *****
$ rm '***'または
$ rm "***"または
$ rm \*\*\*
rmコマンドで、上のようにファイルを指定するとファイル「***」が削除される。
$ rm *
「*」は、シェルにワイルドカードとして解釈されるので、ワイルドカード指定に該当するファイルが削除されてしまう。
意図しないファイルを誤って削除しないために、削除するファイルをlsコマンドで直接指定して、目的のファイルだけが表示されるかを確認する。
lsコマンドでファイルが正しく指定できない例$ ls *** ls: オプションが違います -- e 詳しくは `ls --help' を実行して下さい. $ ls \*** * ** *** **** *****
$ ls \*\*\* *** $ ls '***' *** $ ls "***" ***
シェルが「*」を解釈しないようにエスケープ文字「\」をすべての「*」の前に入れて「\*\*\*」とするか、引用符で囲って「'***'」、二重引用符で囲って「"***"」と指定すると正しくファイル「***」が表示される。
$ ls -l -rw-r--r-- 1 masa users 256 10月 10 21:28 ~masa
$ rm '~masa'または
$ rm "~masa"または
$ rm \~masa
rmコマンドで、上のようにファイルを指定するとファイル「~masa」が削除される。
$ ls -l -rw-r--r-- 1 masa users 256 10月 10 21:22 ~masahi
システムに「masahi」という名前のホームディレクトリが存在しない場合は、通常のファイル同様に扱える。
$ ls ~masahi ~masahi $ rm ~masahi
$ rm ~masa rm: cannot remove `/home/masa': 許可がありません
「~masa」は、ユーザ「masa」のホームディレクトリを示すため、ファイル「~masa」が削除されない。
意図しないファイルを誤って削除しないために、削除するファイルをlsコマンドで直接指定して、目的のファイルだけが表示されるかを確認する。
lsコマンドでファイルが正しく指定できない例$ ls ~masa evolution filesize lfile2 mbox proj sfile1 work
lsコマンドでも「~masa」はホームディレクトリと解釈されて、ホームディレクトリの内容が表示される。
lsコマンドでファイルが正しく指定できた例$ ls \~masa ~masa $ ls '~masa' ~masa $ ls "~masa" ~masa
シェルが「~」を解釈しないようにエスケープ文字「\」をファイル名の前につけて「\~masa」とするか、引用符で囲って「'~masa'」、二重引用符で囲って「"~masa"」と指定すると正しくファイル「~masa」が表示される。
$ ls -l -rw-r--r-- 1 masa users 256 10月 10 22:57 '*'
$ rm \'\*\'または
$ rm "'*'"
rmコマンドで、削除するファイルのファイル名を1文字ずつエスケープ記号「\」でエスケープすると、ファイル「\'\*\'」が削除される。エスケープ記号を使う代わりに、ファイル名を2重引用符「"」で囲ってもよい。
$ rm '*' rm: cannot lstat `*': そのようなファイルやディレクトリはありません
これは、rmコマンドに「*」というファイル名が渡されるためにこのようなエラーとなる。ただし、実際に「*」というファイルがあれば削除されてしまう。
意図しないファイルを誤って削除しないために、削除するファイルをlsコマンドで直接指定して、目的のファイルだけが表示されるかを確認する。
lsコマンドでファイルが正しく指定できない例$ ls '*' ls: *: そのようなファイルやディレクトリはありません $ ls ''*'' ls: オプションが違います -- e
これは、シェルが「'」と「'」に囲まれた「*」をファイル名と解釈してlsコマンドに与えたためにこのようなエラーになる。この場合、ファイル名が「*」のファイルがあればエラーとならずにファイル「*」が表示される。
lsコマンドでファイルが正しく指定できた例$ ls \'\*\' '*' $ ls "'*'" '*'
シェルが「'」を解釈しないようにエスケープ文字「\」を「'」の前に入れて「\'\*\'」とするか、二重引用符で囲って「"'*'"」と指定すると正しくファイル「'*'」が表示される。
$ ls -l -rw-r--r-- 1 masa users 256 10月 10 22:42 ''
$ rm \'\'または
$ rm "''"
rmコマンドで、削除するファイルのファイル名を1文字ずつエスケープ記号「\」でエスケープすると、ファイル「''」が削除される。エスケープ記号を使う代わりに、ファイル名を2重引用符「"」で囲ってもよい。
$ rm '' rm: cannot lstat `': そのようなファイルやディレクトリはありません
これは、シェルが「'」と「'」に囲まれた文字数0のファイル名をrmコマンドに渡したためにこのようなエラーとなる。
意図しないファイルを誤って削除しないために、削除するファイルをlsコマンドで直接指定して、目的のファイルだけが表示されるかを確認する。
lsコマンドでファイルが正しく指定できない例$ ls '' ls: : そのようなファイルやディレクトリはありません $ ls '''' ls: : そのようなファイルやディレクトリはありませんこれは、シェルが「'」と「'」に囲まれた文字数0のファイル名をrmコマンドに渡したためにこのようなエラーとなる。 lsコマンドでファイルが正しく指定できた例
$ ls \'\' '' $ ls "''" ''
シェルが「'」を解釈しないようにエスケープ文字「\」をすべての「'」の前に入れて「\'\'」とするか、二重引用符で囲って「"''"」と指定すると正しくファイル「''」が表示される。
$ ls -l -rw-r--r-- 1 masa users 256 10月 10 18:40 -file
$ rm -- -file
rmコマンドで、「--」削除するファイル「-file」指定すると、ファイル「-file」が削除される。
$ rm -file rm: オプションが違います -- l
rmコマンドは、ファイル名「-file」をオプションと解釈してしまう。
「-」をオプションと解釈させないためにエスケープ文字を使ってみる。
$ rm \-file rm: オプションが違います -- l $ rm '-file' rm: オプションが違います -- l $ rm "-file" rm: オプションが違います -- l
どれもうまくいかない。
意図しないファイルを誤って削除しないために、削除するファイルをlsコマンドで直接指定して、目的のファイルだけが表示されるかを確認する。
lsコマンドでファイルが正しく指定できない例$ ls -file ls: オプションが違います -- e $ ls \-file ls: オプションが違います -- e $ ls '-file' ls: オプションが違います -- e $ ls "-file" ls: オプションが違います -- e
ファイル名を「\-file」、「'-file'」、「"-file"」と指定しても、lsコマンドは「-file」をファイル名ではなくオプションと解釈してしまう。lsコマンドのオプションに「f,i,l」はあるが「e」がないため、「オプションが違います」というエラーになる。
lsコマンドでファイルが正しく指定できた例$ ls -- -file -file
lsコマンドのオプションに「--」を指定し、ファイル名「-file」を指定すると正しくファイル「-file」が表示される。これは、「--」が空のオプションを指定するからと推測される。
$ ls -l -rw-r--r-- 1 masa users 256 10月 10 15:02 \
$ rm '\'または
$ rm \\
rmコマンドで、削除するファイルを引用符「'」で囲って「'\'」指定すると、ファイル「\」が削除される。エスケープ文字「\」を使ってファイル名を「\\」と指定しても削除できる。
$ rm \ >
「\」記号を入力して[Return]を押すと、シェルは行が続くと解釈して入力するためのプロンプト「>」を表示する。そのため、ファイル「\」を指定することができない。
意図しないファイルを誤って削除しないために、削除するファイルをlsコマンドで直接指定して、目的のファイルだけが表示されるかを確認する。
lsコマンドでファイルが正しく指定できない例$ ls \ > $ ls "\" >
「\」記号を入力して[Return]を押すと、シェルは行が続くと解釈して入力するためのプロンプト「>」を表示する。そのため、ファイル「\」を指定することができない。
lsコマンドでファイルが正しく指定できた例$ ls '\' \ $ ls \\ \
シェルが「\」を解釈しないように引用符で囲ってファイル名を「'\'」とするか、エスケープ文字「\」をファイル名の前に入れて「\\」と指定すると正しくファイル「\」が表示される。