Linux Professional Institute Learning Logo.
main contentにスキップ
  • ホーム
    • 全てのリソース
    • LPI学習教材
    • コントリビューターになる
    • Publishing Partners
    • Publishing Partnerになる
    • About
    • FAQ
    • コントリビューター
    • Roadmap
    • 連絡先
  • LPI.org
2.4 レッスン 1
課題 1: Linuxコミュニティとオープンソースのキャリア
1.1 ポピュラーなOSとLinuxの発展
  • 1.1 レッスン 1
1.2 主なオープンソースのアプリケーション
  • 1.2 レッスン 1
1.3 オープンソースソフトウエアとライセンス
  • 1.3 レッスン 1
1.4 ICTスキルとLinuxでの作業
  • 1.4 レッスン 1
課題 2: Linuxシステムで自分の手法を見つける
2.1 コマンドラインの基本
  • 2.1 レッスン 1
  • 2.1 レッスン 2
2.2 コマンドラインのヘルプ機能の利用
  • 2.2 レッスン 1
2.3 ディレクトリの利用とファイルの一覧
  • 2.3 レッスン 1
  • 2.3 レッスン 2
2.4 ファイルの作成、移動と削除
  • 2.4 レッスン 1
課題 3: コマンドラインの力
3.1 コマンドラインでのファイル圧縮
  • 3.1 レッスン 1
3.2 ファイルの検索と展開
  • 3.2 レッスン 1
  • 3.2 レッスン 2
3.3 コマンドをスクリプトにする
  • 3.3 レッスン 1
  • 3.3 レッスン 2
課題 4: Linuxオペレーティングシステム
4.1 オペレーティングシステムの選択
  • 4.1 レッスン 1
4.2 コンピュータハードウエアの理解
  • 4.2 レッスン 1
4.3 データの保管場所
  • 4.3 レッスン 1
  • 4.3 レッスン 2
4.4 ネットワーク上のコンピュータ
  • 4.4 レッスン 1
課題 5: セキュリティとファイルパーミッション
5.1 セキュリティの基本と、ユーザタイプの確認
  • 5.1 レッスン 1
5.2 ユーザとグループの作成
  • 5.2 レッスン 1
5.3 ファイルのパーミッションと所有権の管理
  • 5.3 レッスン 1
5.4 特別なディレクトリとファイル
  • 5.4 レッスン 1
How to get certified
  1. 課題 2: Linuxシステムで自分の手法を見つける
  2. 2.4 ファイルの作成、移動と削除
  3. 2.4 レッスン 1

2.4 レッスン 1

Certificate:

Linux Essentials

Version:

1.6

Topic:

2 Linuxでのやりかたを見つける

Objective:

2.4 ファイルの作成、移動、削除

Lesson:

1 of 1

はじめに

このレッスンでは、Linuxのコマンドラインツールを使用して、ファイルとディレクトリを管理する方法を学びます。

ファイルは、名前と属性のセットを持つデータのコレクションです。たとえば、携帯電話からコンピュータに写真を転送して、わかりやすい名前を付けると、コンピュータ上に多数の画像ファイルができます。これらのファイルには、最後にアクセスおよび変更された時刻などの属性が付けられます。

ディレクトリとは、ファイルの整理に使用する特別なファイルです。ディレクトリを例えると、ファイルキャビネットに書類を整理する際の、ファイルフォルダ(バインダー)のようなものです。紙のファイルフォルダとは異なり、ディレクトリ内に別のディレクトリを配置することができます。

コマンドラインは、Linuxシステムでファイルを管理する最も効果的な方法です。シェルおよびコマンドラインツールには、グラフィカルなファイルマネージャーよりも、速く効果的に使用できる機能を備えています。

このセクションでは、ファイルやディレクトリを管理するために、ls、mv、cp、pwd、find、touch、rm、rmdir、echo、cat、mkdir といったコマンドを使用していきます。

大文字・小文字の区別

Microsoft Windowsとは異なり、Linuxシステムでは、ファイルやディレクトリの名前で大文字・小文字が区別されます(訳注: case sensitiveという)。つまり、/etc/ ディレクトリと /ETC/ ディレクトリは異なります。次のコマンドを試してみましょう:

$ cd /
$ ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr
$ cd ETC
bash: cd: ETC: No such file or directory
$ pwd
/
$ cd etc
$ pwd
/etc

pwd コマンドは、現在のディレクトリを表示します。例では、/ETC ディレクトリへの移動が、そのようなディレクトリは無いと言う理由で失敗しています。対して、存在する /etc ディレクトリへの移動は成功しました。

ディレクトリの作成

ディレクトリを作成するには、mkdir コマンドを使用します。

ホームディレクトリに新しいディレクトリを作成してみましょう:

$ cd ~
$ pwd
/home/user
$ ls
Desktop  Documents  Downloads
$ mkdir linux_essentials-2.4
$ ls
Desktop  Documents  Downloads  linux_essentials-2.4
$ cd linux_essentials-2.4
$ pwd
/home/emma/linux_essentials-2.4

このレッスンでは、このディレクトリないしサブディレクトリのひとつでコマンドを実行します。

ファイルシステムのどこに居たとしても、レッスン用のディレクトリに簡単に戻るには、次のコマンドを使います:

$ cd ~/linux_essentials-2.4

シェルは、文字 ~ を、自分のホームディレクトリと解釈します。

レッスン用ディレクトリに移動したら、演習で使用するディレクトリをいくつか作成します。mkdir コマンドに、スペースで区切ってすべてのディレクトリ名を指定します:

$ mkdir creating moving copying/files copying/directories deleting/directories deleting/files globs
mkdir: cannot create directory ‘copying/files’: No such file or directory
mkdir: cannot create directory ‘copying/directories’: No such file or directory
mkdir: cannot create directory ‘deleting/directories’: No such file or directory
mkdir: cannot create directory ‘deleting/files’: No such file or directory
$ ls
creating  globs  moving

エラーメッセージと、moving、globs、および creating のみが作成されたことに着目しましょう。copying と deleting ディレクトリは、まだ存在しません。デフォルトでは、mkdir は、存在しないディレクトリ内にディレクトリを作成しません。mkdir に -p または --parents オプションを指定すると、親ディレクトリが存在しない場合にはそれを作成することを指示します。今度は -p オプションを付けて、同じ mkdir コマンドを実行しましょう:

$ mkdir -p creating moving copying/files copying/directories deleting/directories deleting/files globs

今度は、エラーメッセージは表示されませんでした。どのディレクトリが作成されたかを確認してみましょう:

$ find
.
./creating
./moving
./globs
./copying
./copying/files
./copying/directories
./deleting
./deleting/directories
./deleting/files

find プログラムは通常、ファイルやディレクトリの検索に使用しますが、オプションを指定しないと、現在のディレクトリのすべてのファイル、ディレクトリ、およびサブディレクトリをリスト表示します。

Tip

ls でディレクトリの内容を一覧表示する場合、-t および -r オプションが便利です。出力を更新時刻でソートし( -t )、ソート順序を逆にします( -r )。両方を指定すると、最新のファイルが最後に表示されます。

ファイルの作成

通常、ファイルは、そのデータを処理するプログラムによって作成されます。touch コマンドを使用すると、空のファイルを作成できます。既存のファイルに対して touch を実行すると、ファイルの内容は変更されませんが、ファイルの変更時刻を示すタイムスタンプが更新されます。

以下のコマンドを実行して、グロビング(globbing)のレッスンで使用するファイルを作成しましょう。

$ touch globs/question1 globs/question2012 globs/question23 globs/question13 globs/question14
$ touch globs/star10 globs/star1100 globs/star2002 globs/star2013

globs ディレクトリにすべてのファイルが作成されたことを確認してみましょう:

$ cd globs
$ ls
question1   question14    question23  star1100  star2013
question13  question2012  star10      star2002

touch はどのようなファイルを作成したのでしょうか? cat コマンドを使うと、テキストファイルの内容を見ることができます。作成したばかりのファイルの1つで試してみましょう。

$ cat question14

touch は空のファイルを作成するので、何も出力されません。 echo コマンドと > を組み合わせることで、サンプルのテキストファイルを作成できます。やってみましょう:

$ echo hello > question15
$ cat question15
hello

echo はコマンドラインにテキストを表示します。 文字 > は、端末ではなく指定されたファイルにコマンドの出力を書き込むことを、シェルに指示します。この場合、echo の出力(この場合は hello )がファイル question15 に書き込まれます。この機能は echo だけのものではなく、任意のコマンドで使用できます。

Warning

文字 > を使用するときは注意が必要です。すでに存在するファイルの名前を指定すると、上書きされてしまいます。

ファイル名の変更(リネーム)

mv コマンドを使うと、ファイルを移動したり名前を変更する事ができます。

作業ディレクトリを moving ディレクトリに変更しましょう:

$ cd ~/linux_essentials-2.4/moving

練習用のファイルをいくつか作りましょう。もうこれらのコマンドはお馴染みですね。

$ touch file1 file22
$ echo file3 > file3
$ echo file4 > file4
$ ls
file1  file22  file3  file4

file22 は、file2 のタイポでした。mv コマンドで修正しましょう。リネーム(ファイル名の変更)を行う場合、最初の引数は現在の名前で、2つめの引数は新しい名前です。

$ mv file22 file2
$ ls
file1  file2  file3  file4

mv コマンドは注意深く使いましょう。あるファイルの名前を、既存のファイルと同じ名前に変更しようとすると、上書きしてしまいます。file3 と file4 で試してみましょう:

$ cat file3
file3
$ cat file4
file4
$ mv file4 file3
$ cat file3
file4
$ ls
file1  file2  file3

file3 の内容が、file4 になっています。-i オプションを指定すると、mv は既存のファイルを上書きするかどうかを尋ねます。

$ touch file4 file5
$ mv -i file4 file3
mv: overwrite ‘file3’? y

ファイルの移動

mv コマンドで、ファイルをあるディレクトリから別のディレクトリに移動することができます。

ファイルの移動先となるディレクトリをいくつか作りましょう:

$ cd ~/linux_essentials-2.4/moving
$ mkdir dir1 dir2
$ ls
dir1  dir2  file1  file2  file3  file5

file1 を dir1 に移動します:

$ mv file1 dir1
$ ls
dir1  dir2  file2  file3  file5
$ ls dir1
file1

mv の最後の引数が、宛先ディレクトリであることに注意しましょう。最後の引数がディレクトリであるときは、ファイルがその中に移動されます。1つの mv コマンドで、複数のファイルを指定することができます。

$ mv file2 file3 dir2
$ ls
dir1  dir2  file5
$ ls dir2
file2  file3

mv を使って、ディレクトリの名前を変更したり、移動することもできます。dir1 の名前を dir3 に変更してみましょう:

$ ls
dir1  dir2  file5
$ ls dir1
file1
$ mv dir1 dir3
$ ls
dir2  dir3  file5
$ ls dir3
file1

ファイルやディレクトリの削除

rm コマンドで、ファイルやディレクトリを削除することができます。対して、rmdir コマンドはディレクトリのみを削除することができます。file5 を削除して、moving ディレクトリをお掃除しましょう:

$ cd ~/linux_essentials-2.4/moving
$ ls
dir2  dir3  file5
$ rmdir file5
rmdir: failed to remove ‘file5’: Not a directory
$ rm file5
$ ls
dir2  dir3

rmdir は、デフォルトでは空のディレクトリしか削除できませんから、通常ファイルを削除するには rm を使わねばなりません。deleting ディレクトリを削除してみましょう:

$ cd ~/linux_essentials-2.4/
$ ls
copying  creating  deleting  globs  moving
$ rmdir deleting
rmdir: failed to remove ‘deleting’: Directory not empty
$ ls -l deleting
total 0
drwxrwxr-x. 2 emma emma 6 Mar 26 14:58 directories
drwxrwxr-x. 2 emma emma 6 Mar 26 14:58 files

rmdir は、デフォルトでは空ではないディレクトリの削除を拒否します。deleting ディレクトリにある空のサブディレクトリを、rmdir で 削除します:

$ ls -a deleting/files
.  ..
$ rmdir deleting/files
$ ls -l deleting
directories

多くのサブディレクトリやファイルがある深いディレクトリ構造を削除するのは面倒に思えるかもしれませんが、実際には簡単です。 rm は、デフォルトでは通常のファイルのみを削除しますが、-r オプションでこの動作を変更できます。 rm -r は優れたフットガン(訳注: 足撃ち銃/強力な道具だが、悲惨なミスを起こしやすいものの意)です。rm に -r オプションを指定すると、ディレクトリだけではなく、そのディレクトリにあるすべてのサブディレクトリやその内容を削除します。 rm -r がどのように機能するかを、確認しておきましょう:

$ ls
copying  creating  deleting  globs  moving
$ rm deleting
rm: cannot remove ‘deleting’: Is a directory
$ ls -l deleting
total 0
drwxrwxr-x. 2 emma emma 6 Mar 26 14:58 directories
$ rm -r deleting
$ ls
copying  creating  globs  moving

空ではなかったのに、deleting が無くなったことに注意しましょう。mv や rm と同様に、-i オプションを指定すると、処理を行う前に確認してきます。もう必要が無くなったので、rm -ri を使って、moving を削除します:

$ find
.
./creating
./moving
./moving/dir2
./moving/dir2/file2
./moving/dir2/file3
./moving/dir3
./moving/dir3/file1
./globs
./globs/question1
./globs/question2012
./globs/question23
./globs/question13
./globs/question14
./globs/star10
./globs/star1100
./globs/star2002
./globs/star2013
./globs/question15
./copying
./copying/files
./copying/directories
$ rm -ri moving
rm: descend into directory ‘moving’? y
rm: descend into directory ‘moving/dir2’? y
rm: remove regular empty file ‘moving/dir2/file2’? y
rm: remove regular empty file ‘moving/dir2/file3’? y
rm: remove directory ‘moving/dir2’? y
rm: descend into directory ‘moving/dir3’? y
rm: remove regular empty file ‘moving/dir3/file1’? y
rm: remove directory ‘moving/dir3’? y
rm: remove directory ‘moving’? y

ファイルやディレクトリをコピーする

ファイルやディレクトリをコピーするには、cp コマンドを使用します。copying ディレクトリに、いくつかのファイルをコピーしましょう:

$ cd ~/linux_essentials-2.4/copying
$ ls
directories  files
$ cp /etc/nsswitch.conf files/nsswitch.conf
$ cp /etc/issue /etc/hostname files

最後の引数がディレクトリの場合、cp は前の引数に指定したファイルのコピーをディレクトリ内に作成します。mv と同様に、ターゲット(宛先)がディレクトリであれば、複数のファイルを一度に指定できます。

cp の両方の引数がファイルであり、両方のファイルが存在する場合、cp は1番目のファイルの内容で2番目のファイルを上書きします。hostname ファイルで issue ファイルを上書きしてみましょう:

$ cd ~/linux_essentials-2.4/copying/files
$ ls
hostname  issue  nsswitch.conf
$ cat hostname
mycomputer
$ cat issue
Debian GNU/Linux 9 \n \l

$ cp hostname issue
$ cat issue
mycomputer

続いて、files ディレクトリのコピーを、directories ディレクトリにコピーしてみましょう:

$ cd ~/linux_essentials-2.4/copying
$ cp files directories
cp: omitting directory ‘files’ (訳注: ディレクトリ `files`は除外)

このように、cp はデフォルトでは、個々のファイルしか扱いません。ディレクトリをコピーするには、-r オプションを使用します。-r オプションを使うと、cp はコピー対象のディレクトリの内容もコピーします。

$ cp -r files directories
$ find
.
./files
./files/nsswitch.conf
./files/fstab
./files/hostname
./directories
./directories/files
./directories/files/nsswitch.conf
./directories/files/fstab
./directories/files/hostname

コピー先のディレクトリが存在している場合、cp はコピー元のディレクトリのコピーを、宛先のディレクトリの中に作成することに注意しましょう。宛先のディレクトリが存在していない場合は、その(宛先の)ディレクトリを作成してから、コピー元ディレクトリの内容をそこにコピーします。

$ cp -r files files2
$ find
.
./files
./files/nsswitch.conf
./files/fstab
./files/hostname
./directories
./directories/files
./directories/files/nsswitch.conf
./directories/files/fstab
./directories/files/hostname
./files2
./files2/nsswitch.conf
./files2/fstab
./files2/hostname

グロビング(globbing)

Linuxでは、単純なパターンマッチング言語を グロビング と呼んでいます。Linuxシステムのコマンドラインシェルは、この言語を使用して、ファイル名が特定のパターンに一致するファイルのグループを参照します。POSIX.1-2017という規格で、次のパターンマッチング文字を定義しています。(訳注: 単純に「グロブ」と呼ぶこともあります)

*

任意の数(ゼロを含む)の文字と一致します

?

任意の1文字と一致します

[]

文字のクラスに一致します

これは、英語の正確な文字列を指定するのではなく、一致するパターンを使ってシェルに指示することができることを意味します。Linuxにおいては、それぞれのファイル名をタイプする代わりに、複数のファイルを指示するために使用します。以下のコマンドを試してみましょう:

$ cd ~/linux_essentials-2.4/globs
$ ls
question1   question14  question2012  star10    star2002
question13  question15  question23    star1100  star2013
$ ls star1*
star10  star1100
$ ls star*
star10  star1100  star2002  star2013
$ ls star2*
star2002  star2013
$ ls star2*2
star2002
$ ls star2013*
star2013

シェルは * を任意の数の文字に展開するので、star* は現在のディレクトリからの相対パスが star で始まるすべてのファイル/ディレクトリを意味することになります。ls star* を実行したときには、ls コマンドに start* という引数が与えられるのではなく、現在のディレクトリにあるファイルからパターン star* に一致するもの(star 自体も含まれます)を探して、一致したそれぞれのファイルを ls の引数とします:

$ ls star*

この ls コマンドは、以下と同じです:

$ ls star10  star1100  star2002  star2013

ls に文字 * が伝わることはありません。次のコマンドで確認してみましょう:

$ ls star\*
ls: cannot access star*: No such file or directory

文字の前に \ を置くと、その文字の特別な意味を解釈しないようにシェルに指示することになります。この例では、star* をグロブせずに、ls に引数 star* を渡しています。

文字 ? は、1文字に展開されます。次のコマンドを実行してみてください:

$ ls
question1   question14  question2012  star10    star2002
question13  question15  question23    star1100  star2013
$ ls question?
question1
$ ls question1?
question13  question14  question15
$ ls question?3
question13  question23
$ ls question13?
ls: cannot access question13?: No such file or directory

カギ括弧 [ ] は、文字の範囲あるいはクラスへの一致を表わします。カギ括弧 [ ] は、POSIXの正規表現と同じように機能しますが、 文字 ! の代わりにグラブでは文字 ^ を使用します。

練習用にいくつかのファイルを作りましょう:

$ mkdir brackets
$ cd brackets
$ touch file1 file2 file3 file4 filea fileb filec file5 file6 file7

カギ括弧 [ ] で範囲を示すには、文字 - を使います:

$ ls
file1  file2  file3  file4  file5  file6  file7  filea  fileb  filec
$ ls file[1-2]
file1  file2
$ ls file[1-3]
file1  file2  file3

複数の範囲を指定することができます。

$ ls file[1-25-7]
file1  file2  file5  file6  file7
$ ls file[1-35-6a-c]
file1  file2  file3  file5  file6  filea  fileb  filec

カギ括弧は、一群の文字との一致にも使えます。

$ ls file[1a5]
file1  file5  filea

指定した文字 以外 との一致を示すためには、文字 ^ を先頭に置きます。

$ ls file[^a]
file1  file2  file3  file4  file5  file6  file7  fileb  filec

このレッスンの最後に、 文字クラス を取り上げます。文字クラスへの一致には、[:クラス名:] を使います。例えば、数字(digit)クラスを使うには、次のようにします:

$ ls file[[:digit:]]
file1  file2  file3  file4  file5  file6  file7
$ touch file1a file11
$ ls file[[:digit:]a]
file1  file2  file3  file4  file5  file6  file7  filea
$ ls file[[:digit:]]a
file1a

グロブ file[[:digit:]a] は、file に続いて数字ないしは a があるものと一致します。

サポートされる文字クラスは、システムの現在のロケール(地域設定)によって異なります。POSIX規格では、以下の文字クラスは、すべてのロケールにおいて利用可能です。

[:alnum:]

アルファベットと数字。

[:alpha:]

大文字・小文字の文字。

[:blank:]

スペース(空白)とタブ。

[:cntrl:]

制御文字(control characters)、例えばバックペース、ベル、NAK、エスケープなど。

[:digit:]

数字(0123456789)。

[:graph:]

図形文字(制御文字と空白文字を除くすべての文字)。

[:lower:]

アルファベットの小文字(a-z)。

[:print:]

表示可能な文字(alnum、punct、および空白文字)。

[:punct:]

句読点。すなわち、!、&、"。

[:space:]

空白文字。すなわち、タブ、スペース、改行。

[:upper:]

アルファベットの小文字(A-Z)。

[:xdigit:]

16進数での数字(通常は 0123456789abcdefABCDEF)。

演習

  1. 以下の場合に、コマンド mkdir -p /tmp/outfiles/text/today /tmp/infiles/text/today で作成されるディレクトリはどれでしょうか?

    $ pwd
    /tmp
    $ find
    .
    ./outfiles
    ./outfiles/text

    /tmp

    /tmp/outfiles

    /tmp/outfiles/text

    /tmp/outfiles/text/today

    /tmp/infiles

    /tmp/infiles/text

    /tmp/infiles/text/today

  2. mkdir、rm、および cp において、-v は何を行いますか?

  3. 1つのコマンドラインで、誤って3つのファイルを、既存のディレクトリではなく1つのファイルにコピーすると、何が起きますか?

  4. mv コマンドで、ディレクトリをそれ自体に移動しようとすると何が起きますか?

  5. 現在のディレクトリから、すべての old で始まるファイルを削除するにはどうしますか?

  6. 次のファイルの内、log_[a-z]_201?_*_01.txt に一致するものはどれでしょう?

    log_3_2017_Jan_01.txt

    log_+_2017_Feb_01.txt

    log_b_2007_Mar_01.txt

    log_f_201A_Wednesday_01.txt

  7. 以下のファイル名に一致するグロブをいくつか作りましょう:

    doc100
    doc200
    doc301
    doc401

発展演習

  1. cp のmanページを参照して、パーミッションと更新日時が元のファイルと同じファイルにコピーする方法を見つけてください。

  1. rmdir -p コマンドは何を行いますか? 試してみた上で、rm -f との違いを説明してください。

  2. このコマンドを実際に実行してはいけません。rm -ri /* を実行するとどうなりますか? (繰り返しますが、このコマンドを実行してはいけません!)。

  3. mv コマンドで、-i を指定する以外に、宛先ファイルの上書きを禁止することはできますか?

  4. cp -u コマンドについて説明してください。

まとめ

Linuxコマンドライン環境には、ファイルを管理するためのツールがあります。cp、mv、mkdir、rm、rmdir がよく使用されます。シェルのグロブとこれらのツールと組み合わせると、多くの作業を迅速に行うことができます。

多くのコマンドには -i オプションがあり、処理を行う前に問い合わせを行います。何かを打ち間違えた場合など、確認を行うことによって多くのやっかい事から守ることができます。

また、多くのコマンドには -r オプションがあります。多くの場合 -r オプションは、再帰を意味します。数学とコンピュータサイエンスでは、再帰関数はそれ自体を定義に使用する関数です。コマンドラインツールでは、通常、あるディレクトリとそこに含まれるすべてに、コマンドを適用します。

このレッスンで使用したコマンド:

cat

ファイルの内容を読み取って出力します。

cp

ファイルやディレクトリをコピーします。

echo

文字列を出力します。

find

ファイルシステムの木構造を横断して、条件に一致するファイルを探します。

ls

ディレクトリの内容をリスト表示したり、ファイルやディレクトリの属性を表示します。

mkdir

新しいディレクトリを作成します。

mv

ファイルやディレクトリを移動したり、名前を変更します。

pwd

現在の作業ディレクトリを出力します。

rm

ファイルやディレクトリを削除します。

rmdir

ディレクトリを削除します。

touch

新しい空のファイルを作成したり、既存ファイルの変更時刻を更新します。

演習の解答

  1. 以下の場合に、コマンド mkdir -p /tmp/outfiles/text/today /tmp/infiles/text/today で作成されるディレクトリはどれでしょうか?

    $ pwd
    /tmp
    $ find
    .
    ./outfiles
    ./outfiles/text

    ○をしたディレクトリが作成されたものです。ディレクトリ /tmp、/tmp/outfiles、/tmp/outfiles/text は、すでに存在していたので、mkdir はそれらを無視します。

    /tmp

    /tmp/outfiles

    /tmp/outfiles/text

    /tmp/outfiles/text/today

    ○

    /tmp/infiles

    ○

    /tmp/infiles/text

    ○

    /tmp/infiles/text/today

    ○

  2. mkdir、rm、および cp において、-v は何を行いますか?

    一般的に、-v は冗長な出力を有効にします。それぞれのプログラムは、実行中の処理について出力します:

    $ rm -v a b
    removed 'a'
    removed 'b'
    $ mv -v a b
    'a' -> 'b'
    $ cp -v b c
    'b' -> 'c'
  3. 1つのコマンドラインで、誤って3つのファイルを、既存のディレクトリではなく1つのファイルにコピーすると、何が起きますか?

    cp は何も実行せず、エラーメッセージを表示します。

    $ touch a b c d
    $ cp a b c d
    cp: target 'd' is not a directory
  4. mv コマンドで、ディレクトリをそれ自体に移動しようとすると何が起きますか?

    mv は、その操作が行えないというエラーメッセージを表示します。

    $ mv a a
    mv: cannot move 'a' to a subdirectory of itself, 'a/a'
  5. 現在のディレクトリから、すべての old で始まるファイルを削除するにはどうしますか?

    rm でグロブを使用します:

    $ rm old*
  6. 次のファイルの内、log_[a-z]_201?_*_01.txt に一致するものはどれでしょう?

    log_3_2017_Jan_01.txt

    log_+_2017_Feb_01.txt

    log_b_2007_Mar_01.txt

    log_f_201A_Wednesday_01.txt

    X

    $ ls log_[a-z]_201?_*_01.txt
    log_f_201A_Wednesday_01.txt

    順に見ていきましょう。log_[a-z] は、log_ に続く任意の小文字に一致しますから、log_f_201A_Wednesday_01.txt と log_b_2007_Mar_01.txt が一致します。さらに、_201? は _201 に続く任意の1文字に一致しますから、(一致した2つのうち)log_f_201A_Wednesday_01.txt のみが一致します。最後に、*_01.txt は、末尾が _01.txt であるものに一致するので、ここまでの選択はそのまま残ります。

  7. 以下のファイル名に一致するグロブをいくつか作りましょう:

    doc100
    doc200
    doc301
    doc401

    いくつもの解決策がありますが、ここではいくつかを示します:

    doc*
    doc[1-4]*
    doc?0?
    doc[1-4]0?

発展演習の解答

  1. cp のmanページを参照して、パーミッションと更新日時が元のファイルと同じファイルにコピーする方法を見つけてください。

    manページから、-p オプションを使えば良いことが分かります。

    $ man cp
    -p     same as --preserve=mode,ownership,timestamps
    --preserve[=ATTR_LIST]
                  preserve the specified attributes (default: mode,ownership,time‐
                  stamps), if  possible  additional  attributes:  context,  links,
                  xattr, all
                  訳: 指定した属性(デフォルトでは、モード、所有者、タイムスタンプ)
                      を保存します。さらに指定できる属性: context, links, xattr, all
  2. rmdir -p コマンドは何を行いますか? 試してみた上で、rm -f との違いを説明してください。

    rmdir の -p オプションは、mkdir -p と同様に動作します。ディレクトリツリーが空になるパスを指定すると、それらすべてを削除します。

    $ find
    .
    ./a
    ./a/b
    ./a/b/c
    $ rmdir -p a/b/c
    $ ls
  3. このコマンドを実際に実行してはいけません。rm -ri /* を実行するとどうなりますか? (繰り返しますが、このコマンドを実行してはいけません!)。

    ログインしているユーザーの権限で書き込み可能な、すべてのファイルやディレクトが削除されてしまいます。その中には、ネットワークファイルシステムも含まれます。

  4. mv コマンドで、-i を指定する以外に、宛先ファイルの上書きを禁止することはできますか?

    できます。-n ないし --no-clobber オプションは、mv による上書きを禁止します。

    $ cat a
    a
    $ cat b
    b
    $ mv -n a b
    $ cat b
    b
  5. cp -u コマンドについて説明してください。

    cp の -u オプションは、コピー先のファイルが存在しないか、コピー元のファイルより古い場合にのみ、コピーを行います。

    $ ls -l
    total 24K
    drwxr-xr-x 123 emma student  12K Feb  2 05:34 ..
    drwxr-xr-x   2 emma student 4.0K Feb  2 06:56 .
    -rw-r--r--   1 emma student    2 Feb  2 06:56 a
    -rw-r--r--   1 emma student    2 Feb  2 07:00 b
    $ cat a
    a
    $ cat b
    b
    $ cp -u a b
    $ cat b
    b
    $ cp -u a c
    $ ls -l
    total 12
    -rw-r--r-- 1 emma student 2 Feb  2 06:56 a
    -rw-r--r-- 1 emma student 2 Feb  2 07:00 b
    -rw-r--r-- 1 emma student 2 Feb  2 07:00 c

Linux Professional Insitute Inc. All rights reserved. 学習資料をご覧ください: https://learning.lpi.org
ここでの作成物は、Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Licenseの下でライセンスされています。

次のレッスン

3.1 コマンドラインでのファイル圧縮 (3.1 レッスン 1)

次のレッスンを読む

Linux Professional Insitute Inc. All rights reserved. 学習資料をご覧ください: https://learning.lpi.org
ここでの作成物は、Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Licenseの下でライセンスされています。

LPIは非営利団体です。

© 2023 Linux Professional Institute(LPI)は、オープンソースプロフェッショナル向けのグローバルな認定基準およびキャリアサポート組織です。200,000人以上の認定保持者を擁する、世界初かつ最大のベンダー中立Linuxおよびオープンソース認定機関です。LPIは180か国以上で認定プロフェッショナルを擁し、複数の言語で試験を実施し、何百ものトレーニングパートナーを擁しています。

私たちの目的は、オープンソースの知識とスキルの認定資格を世界中からアクセスできるようにすることで、誰にとっても経済的で創造的な機会を可能にすることです。

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • お問い合わせ
  • 個人情報とCookieポリシー

間違いを見つけたり、このページを改善したいですか? 私たちに知らせてください。.

© 1999–2023 The Linux Professional Institute Inc. All rights reserved.