Linuxでファイルやディレクトリを操作するときに便利なコマンド

Linuxでファイルやディレクトリを操作するときに便利なコマンド

Linux環境で、ファイルやディレクトリを操作するときに必要となるコマンドの具体的な使用例を分かりやすく解説します。

  • ls - ファイルやディレクトリの内容を表示する
  • cp - ファイルやディレクトリをコピーする
  • mv - ファイルやディレクトリを移動する
  • rm - ファイルやディレクトリを削除する
  • mkdir - ディレクトリを作成する
  • csplit, split - ファイルを分割する
  • cat - ファイルを結合する
  • touch - ファイルのタイムスタンプを変更する

ファイルやディレクトリの内容を表示

ファイルやディレクトリの内容を表示するときは、lsコマンドを利用します。

使用例

ディレクトリdirectoryAの内容を表示するには、以下のように実行します。(ディレクトリを指定しないと、カレントディレクトリの内容が表示されます。)

# ls directoryA

名前が「a」から始まるファイルやディレクトリだけを表示するには、、以下のように実行します。

# ls a*

ディレクトリdirectoryA内のファイルやディレクトリ詳細情報(アクセス権や所有者、ファイルサイズなどの情報)を表示するには、以下のように実行します。

# ls -l directoryA

ディレクトリdirectoryA内のドットファイル(隠しファイル)を含めて表示するには、以下のように実行します。

# ls -a directoryA

ディレクトリdirectoryA内のサブディレクトリの内容を含めて表示するには、以下のように実行します。

# ls -R directoryA

ファイルやディレクトリのコピー

ファイルやディレクトリをコピーするときは、cpコマンドやinstallコマンドを利用します。

使用例

cpコマンド

sampleA.txtを、sampleB.txtにコピーするには、以下のように実行します。

# cp sampleA.txt sampleB.txt

sampleA.txtを、ディレクトリ/home/hoge内にコピーするには、以下のように実行します。

# cp sampleA.txt /home/hoge

sampleA.txtとsampleB.txtの2ファイルを、ディレクトリ/home/hoge内にコピーするには、以下のように実行します。

# cp sampleA.txt sampleB.txt /home/hoge

「file」から始まるすべてのファイルを、/home/hogeにコピーするには、以下のように実行します。

# cp file* /home/hoge

ディレクトリdirectoryAを、ディレクトリ内の内容を含めてディレクトリdirectoryBにコピーするには、以下のように実行します。

# cp -r /home/hoge/directoryA /home/hoge/directoryB

installコマンド

ファイルをコピーするのと同時に、所有者やアクセス権も変更したいときはistallコマンドが便利です。

たとえば「test.txt」というファイルの所有者をroot、グループをroot、パーミッションを755として/usr/local/binディレクトリにコピーしたいときは、以下のようにコマンドを実行します。

# install -o root -g root -m 755 test.txt /usr/local/bin/test.txt

ファイルやディレクトリの移動

ファイルやディレクトリを指定した場所に移動したいときは、mvコマンドを利用します。

使用例

sample.txtを、ユーザーのホームディレクトリに移動するには、以下のように実行します。

# mv sample.txt ~

また、mvコマンドはファイル名を変更するときにも利用できます。

たとえば、before.txtのファイル名を、after.txtに変更するには、以下のように実行します。

# mv before.txt after.txt

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

ファイルやディレクトリを削除するときは、rmコマンドを利用します。

使用例

カレントディレクトリ内で拡張子がtxtのファイルを削除するには、以下のように実行します。

# rm *.txt

sampleディレクトリを、ディレクトリ内のファイルごと削除するには、以下のように実行します。

# rm -r /tmp/sample

file1.txtとfile2.txtの2つのファイルを削除するには、以下のように実行します。

# rm file1.txt file2.txt

ディレクトリの作成

ディレクトリを作成するときは、mkdirコマンドやinstallコマンドを利用します。

使用例

mkdirコマンド

アクセス権が755のディレクトリ「mydirectory」を作成するには、以下のように実行します。

# mkdir -m 755 mydirectory

ディレクトリ「third」を、親ディレクトリ「top/second/」も含めて一気に作成するには、以下のように実行します。

# mkdir -p top/second/third

installコマンド

ディレクトリの所有者やアクセス権を指定してディレクトリを作成したいときは、istallコマンドが便利です。

たとえば「/usr/local/bin/test」というディレクトリを、所有者がroot、グループがroot、パーミッションを600として作成したいときは、以下のようにコマンドを実行します。

# install -o root -g root -m 600 -d /usr/local/bin/test

ファイルの分割

ファイルを分割したいときは、行数や正規表現を使って分割できるcsplitコマンドや行数やファイルサイズ、個数で分割できるsplitコマンドを利用します。

使用例

csplitコマンド

csplitコマンドでは、行数や正規表現を使ってテキストファイルを分割できます。

たとえば、以下のようなテキストファイル「test.txt」を分割してみます。

$ cat test.txt
aaa
bbb
ccc
ddd
aaa
bbb
ccc
ddd
aaa
bbb
ccc
ddd

行数で分割したいときは、以下のようにコマンドを実行します。以下では3行目で分割しています。

$ csplit test.txt 3
8  ←分割したファイルのサイズが表示されます。
40  ←分割したファイルのサイズが表示されます。

$ head xx*
==> xx00 <==
aaa
bbb

==> xx01 <==
ccc
ddd
aaa
bbb
ccc
ddd
aaa
bbb
ccc
ddd

デフォルトでは、上のように繰り返し実行されませんが、繰り返し回数を指定することもできます。以下のコマンドでは、繰り返し回数に2回を指定しています。(ファイルの末尾まで繰り返いしたいときは「{*}」と指定します。)

$ csplit test.txt 3 '{2}'
8
12
12
16

$ head xx*
==> xx00 <==
aaa
bbb

==> xx01 <==
ccc
ddd
aaa

==> xx02 <==
bbb
ccc
ddd

==> xx03 <==
aaa
bbb
ccc
ddd

また、以下のように複数の行数を指定して分割することもできます。以下では、2行目と6行目で分割しています。

$ csplit test.txt 2 6
4
16
28

$ head xx*
==> xx00 <==
aaa

==> xx01 <==
bbb
ccc
ddd
aaa

==> xx02 <==
bbb
ccc
ddd
aaa
bbb
ccc
ddd

正規表現で文字列パターンを指定して分割したいときは、以下のようにコマンドを実行します。以下では、dから始まる行で分割するよう指定しています。

$ csplit test.txt '/^d.*/' '{*}'
12
16
16
4

$ head xx*
==> xx00 <==
aaa
bbb
ccc

==> xx01 <==
ddd
aaa
bbb
ccc

==> xx02 <==
ddd
aaa
bbb
ccc

==> xx03 <==
ddd

なお、csplitコマンドでは分割したファイルの名前にデフォルトで「xx00」「xx01」という連番が付きますが、分割したファイルの名前(接頭辞や接尾辞)を指定することもできます。

splitコマンド

splitコマンドでは、行数やファイルサイズ、個数でテキストファイルを分割できます。

たとえば、以下のようなテキストファイル「test.txt」を分割してみます。

$ cat test.txt
aaa
bbb
ccc
ddd
aaa
bbb
ccc
ddd
aaa
bbb
ccc
ddd

行数で分割したいときは、以下のようにコマンドを実行します。以下では、5行目で分割しています。

$ split -l 5 test.txt

$ head xa*
==> xaa <==
aaa
bbb
ccc
ddd
aaa

==> xab <==
bbb
ccc
ddd
aaa
bbb

==> xac <==
ccc
ddd

ファイルサイズで分割したいときは、以下のようにコマンドを実行します。以下では、10バイトでとで分割しています。

$ split -b 10 test.txt

$ head xa*
==> xaa <==
aaa
bbb
cc
==> xab <==
c
ddd
aaa

==> xac <==
bbb
ccc
dd
==> xad <==
d
aaa
bbb

==> xae <==
ccc
ddd

個数で分割したいときは、以下のようにコマンドを実行します。以下では、ファイルを3つに分割しています。

$ split -n 3 test.txt

$ head xa*
==> xaa <==
aaa
bbb
ccc
ddd

==> xab <==
aaa
bbb
ccc
ddd

==> xac <==
aaa
bbb
ccc
ddd

なお、splitコマンドで分割したファイルの名前にデフォルトで「xaa」「xab」という連番が付きますが、分割したファイルの名前(接頭辞や接尾辞)を指定することもできます。

ファイルの結合

複数のテキストファイルを一つのファイルに結合したいときは、catコマンドを利用します。

使用例

たとえば、csplitコマンドで分割した複数のファイルを結合したいときは、以下のようにコマンドを実行します。以下では「x00」「x01」「x02」「x03」という4つのファイルを「result.txt」という一つのファイルに結合しています。

$ cat xx00 xx01 xx02 xx03 > result.txt

また、以下のようにワイルドカードを指定して、複数のファイルを結合することもできます。

$ cat xx* > result.txt

なお、catコマンドは引数で指定した順番にファイルが結合されます。

ファイルのタイムスタンプの変更

ファイルのタイムスタンプを変更するときは、touchコマンドを利用します。

使用例

ファイルfile1.txtのタイムスタンプを現在の日時に変更したいときは、以下のように実行します。

# touch file1.txt

ファイルfile1.txtの最終アクセス日時を現在の日時に変更したいときは、以下のように実行します。

# touch -a file1.txt

ファイルfile1.txtの最終更新日時を現在の日時に変更したいときは、以下のように実行します。

# touch -m file1.txt

ファイルfile1.txtのタイムスタンプを5月10日2:15に変更したいときは、以下のように実行します。

# touch -t 05100215 file1.txt

ファイルfile1.txtのタイムスタンプを2021年11月10日12:15に変更したいときは、以下のように実行します。

# touch -t 2111101215 file1.txt

ちなみに、存在しないファイルを指定すると、空のファイルが作成されます。

あとがき

コマンドよるファイル操作方法をマスターしておけば、作業効率は格段にアップすると思います。これはWindows環境でも同じですね。