LoginSignup
0
0
はじめての記事投稿

ディレクトリとファイルの作成、削除、移動、コピーに関するコマンド

Last updated at Posted at 2023-07-20

参考書籍

新しいLinuxの教科書

動作環境

  • Windows11
  • Oracle VM VirtualBox
  • CentOS 7

ディレクトリ作成

  • 新しくディレクトリを作成するにはmkdirコマンドを使用する。
  • 存在しない親ディレクトリも含めてディレクトリを作成する際は-pオプションを指定する。

書式

mkdir [オプション] <作成するディレクトリ名>

使用例

workという名前のディレクトリを作成
$ mkdir work
$ ls -F
work/
深いディレクトリを一気に作成
$ mkdir -p ./work/2023/07
$ ls -F . ./work ./work/2023
.:
work/

./work:
2023/

./work/2023:
07/
  • 指定したパスの途中のディレクトリが存在しない場合はエラーとなる。
  • Linuxの内部ではディレクトリはファイルの一種として扱われているため、既存のファイル名と同名のディレクトリを作成することはできない。
エラー表示
$ mkdir ./work/2023/07
mkdir: ディレクトリ `./work/2023/07` を作成できません: そのようなファイルやディレクトリはありません

$ mkdir test
mkdir: ディレクトリ `test` を作成できません: ファイルが存在します

ディレクトリ名は基本的に英語で作成する。
日本語のディレクトリは文字化けなど様々な問題が発生する可能性があるからである。

ファイル作成

  • Linuxでファイルを作成する方法は複数存在する。
  • touchコマンドは中身が何も書かれていない空のファイルを作成する。
  • 複数のファイルをまとめて作成することもできる。
  • 既存のファイル名を指定した場合は内容が上書きされたり削除されたりしない

書式

touch <新しいファイル名1> <新しいファイル名2>

使用例

newfileという名前のファイルを作成
$ touch newfile
$ ls 
newfile
file1とfile2という名前の複数のファイルを作成
$ touch file1 file2
$ ls 
file1 file2

touchコマンドの本来の動きはファイルのタイムスタンプ(日時)の更新である。
しかし、指定したファイルが存在しない場合は、新しく空ファイルを作成するという動きをする。

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

  • ファイルを削除するにはrmコマンドを使用する。
  • 複数のファイルを一度に削除することもできる。
  • rmコマンドでディレクトリを削除するには-rオプションを指定する。
  • 削除前に確認を行うには-iオプションを指定する

書式

rm [オプション] <削除するファイル名1> <削除するファイル名2>

使用例

newfileという名前のファイルを削除
$ ls -F
newfile dir/
$ rm newfile
$ ls -F
dir/
file1とfile2という名前の複数のファイルを削除
$ ls 
file1 file2 file3
$ rm file1 file2
$ ls 
file3
拡張子が.txtのファイルをまとめて削除
$ rm *.txt
dirという名前のディレクトリを削除
$ ls -F 
dir/ newfile
$ rm -r dir
$ ls 
newfile

-rオプションがないとエラーとなる。

削除前に確認をさせる
$ rm -ir dir
rm: ディレクトリ `dir` を削除しますか?

ここでYesの意味であるyもしくはYを入力した後に、Enterキーを押すと削除される。
削除しない場合はNoの意味であるnもしくはNを入力してEnterキーを押す。

-iオプションに慣れてしまうと削除対象ファイルの確認がおろそかになる。
LinuxではWindowsやMac OS Xでのごみ箱の機能は存在しないため、削除対象を事前に確認することが大切である。

空のディレクトリの削除

  • 空のディレクトリを削除するにはrmdirコマンドでも行える。
  • 指定したディレクトリの中にファイルがある場合はエラーとなる。

書式

rmdir <ディレクトリ名>

使用例

dirという名前のディレクトリを削除
$ ls -F
dir/ newfile
$ rmdir dir
$ ls
newfile
中身があるディレクトリを指定した場合
$ rmdir dir
rmdir: `dir` を削除できません: ディレクトリは空ではありません

rmdirコマンドはファイルが残っていることに気づかずに誤って削除してしまうという事故を防ぐことができる。

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

  • ファイルをコピーするにはcpコマンドを使用する。
  • cpコマンドはコピー先にファイルが既に存在している場合は上書きする。
  • 上書き確認をするには-iオプションをつける。
  • ディレクトリをコピーするには-rオプションをつける。

書式

cp [オプション] <コピー元>...<コピー先>

  • <コピー先>がディレクトリの場合は、<コピー先>のディレクトリ内に同一ファイル名でコピーする。
  • 複数のファイルをディレクトリにコピーすることもできる。その際は引数の最後に指定したディレクトリへファイルをコピーする。

使用例

file1をfile2という名前でコピー
$ ls 
file1
$ cp file1 file2
$ ls 
file1 file2
newfileをdirディレクトリへコピー
$ ls -F
dir/ newfile
$ cp newfile dir
$ ls -F . ./dir
.:
dir/ newfile

./dir:
newfile
複数のファイルをdirディレクトリへコピー
$ ls -F
dir/ file1 file2 file3
$ cp file1 file2 file3 dir
$ ls -F . ./dir
.:
dir/ file1 file2 file3

./dir:
file1 file2 file3

拡張子txtのファイルをまとめてdirディレクトリへコピー
$ cp *.txt dir
dir1ディレクトリをdir2という名前でコピー
$ ls -F
dir1/
$ cp -r dir1 dir2
$ ls -F
dir1/ dir2/
dir2ディレクトリをdir1ディレクトリにコピー
$ ls dir2
file1 file2
$ ls -F
dir1/ dir2/
$ cp -r dir2 dir1
$ ls -F . ./dir1 ./dir1/dir2
.:
dir1/ dir2/

./dir1:
dir2/

./dir1/dir2:
file1 file2

<コピー先>が存在しなければ、<コピー先>に指定した名前でコピーする。
<コピー先>が存在していれば、<コピー先>のディレクトリの中に名前を変えずにコピーする。

ディレクトリのコピーの際は-rオプションをつけないとエラーとなる。

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

  • ファイルを移動するにはmvコマンドを使用する。
  • cpコマンドと同様に、複数のファイルを移動することもできる。
  • cpコマンドと同様に、移動先にファイルが既に存在している場合は上書きする。
  • 上書き確認を行うには-iオプションをつける。

書式

mv [オプション] <移動元>...<移動先>

  • mvコマンドはcpコマンドと似ていて、移動先がファイルかディレクトリかで動きが変わる。
  • <移動元>と<移動先>の両方にファイル名を指定するとファイル名の変更を行う。
  • <移動先>がディレクトリ名の場合は<移動元>を<移動先>の中へ移動する。

使用例

ファイル名の変更
$ ls
file1 
$ mv file1 file2
$ ls
file2
ファイルをディレクトリへ移動
$ ls -F 
dir/ newfile
$ mv newfile dir
$ ls -F . ./dir
.:
dir/

./dir:
newfile
複数ファイルの移動
$ ls -F 
dir/ file1 file2 file3
$ mv file1 file2 file3 dir
$ ls -F . ./dir
.:
dir/

./dir:
file1 file2 file3
ディレクトリの移動
$ ls -F . ./dir1
.:
dir1/ dir2/

./dir1:
file1 file2
$ mv dir1 dir2
$ ls -F . ./dir2 ./dir2/dir1
.:
dir2/

./dir2:
dir1/

./dir2/dir1:
file1 file2

cpコマンドと違い、ディレクトリの移動の際に-rオプションを指定する必要はない。

ファイルの表示

  • ファイルの内容を表示するにはcatコマンドがよく利用される。
  • 複数のファイルを指定すると、ファイルを連結して表示する。
  • -nオプションをつけると行番号をつけて内容を表示する。
  • ファイルを指定しない場合はキーボードからの入力を待つようになる。

書式

cat [オプション] <ファイル名>

スクロール表示

  • 行数が長いファイルは内容が1画面に収まりきらなくなる。
  • lessコマンドは指定したファイルの内容を1画面ごとに表示して、上下にスクロールすることができる。

書式

less [オプション] <ファイル名>

lessコマンドのスクロール操作
コマンド 内容
スペースキー、f、Ctrl + v 1画面下にスクロールする
b、Meta + v 1画面上にスクロールする
j、Ctrl + n、Enterキー 1行下にスクロールする
k、Ctrl + p 1行上にスクロールする
q lessコマンドを終了する

ファイル内の検索

  • lessコマンドでファイルを表示中に/を入力すると画面の一番下の行が、検索文字列の入力欄に変わる。
  • この/の後ろに検索したい文字列を入力してEnterキーを押すと、指定した文字列をファイルの中から検索できる。
lessコマンドの検索操作
コマンド 内容
/<文字列> 下方向に向かって検索する
?<文字列> 上方向に向かって検索する
n 次の検索結果に移動する
N 前の検索結果に移動する

リンクを張る

  • リンクを張るにはlnコマンドを使用する。
  • リンクを削除するにはrmコマンドを使用する。

書式

ln [オプション] <リンク元ファイル名> <リンク名>

リンクとは

  • リンクとはファイルに別名をつけるLinuxの機能のことである。
  • 別名をつけることを「リンクを張る」と表現する。
  • Windows における「ショートカット」や、Mac OS X における「エイリアス」と似た機能である。
  • リンクにはハードリンクシンボリックリンクの2種類がある。

活用方法

リンクは長いパス名を持つファイルやディレクトリを省略する際や、複数バージョンのプログラムを管理する際によく使用される。

ハードリンク

  • ハードリンクとは1つのファイルの実態に複数の名前を付ける機能である。
  • ハードリンクを持つファイルの実態は、すべてのハードリンクがなくなったときに削除される。

使用例

ハードリンクfile2を作成
$ ls
file1 
$ ln file1 file2
$ ls 
file1 file2
$ cat file2
......file1の内容が表示される......
ハードリンクの削除
$ rm file1
$ ls 
file2
$ cat file2
......file1の内容が表示される......
$ rm file2
$ ls
$ 

ハードリンクは複数のファイル名をつける機能のため、ファイルの実体はファイル名が1つでも残っていると削除されない。

シンボリックリンク

  • シンボリックリンクとは、リンク先のパス名が書かれた小さな特殊ファイルである。
  • ハードリンクと異なる主な点は、ディレクトリに対して作成できることと、ファイルの実体はリンク先であることである。
  • シンボリックリンクを作成するには-sオプションを指定する。
  • lsコマンドで-lオプションを指定すると、リンク先を確認できる。

使用例

シンボリックリンクfile2を作成
$ ls 
file1
$ ln -s file1 file2
$ ls -l
合計 0
-rw-rw-r--. 1 ユーザ名 ユーザ名 0 7月 19 13:05 file1
lrwxrwxrwx. 1 ユーザ名 ユーザ名 5 7月 19 13:05 file2 -> file1
$ cat file2
......file1の内容が表示される......
シンボリックリンクの削除
$ rm file2
$ ls 
file1
リンク先を削除
$ ln -s file1 file2
$ ls -l
-rw-rw-r--. 1 ユーザ名 ユーザ名 0 7月 19 13:05 file1
lrwxrwxrwx. 1 ユーザ名 ユーザ名 5 7月 19 13:05 file2 -> file1
$ rm file1
$ ls -l
合計 0
lrwxrwxrwx. 1 ユーザ名 ユーザ名 5 7月 19 13:05 file2 -> file1
$ cat file2
cat: file2: そのようなファイルやディレクトリはありません

シンボリックリンクを残したまま、リンク先の実体ファイルを削除すると、シンボリックリンクのリンク先がなくなる。
この状態を「リンクが壊れた」状態と呼ぶ。

ファイルを探す

  • ファイルを探す際は、findコマンドとlocateコマンドの2つがよく使用される。

findコマンド

書式

find <検索開始ディレクトリ> <検索条件> <アクション>

  • findコマンドを実行すると、<検索開始ディレクトリ>を起点としてディレクトリツリーを順に下りながら、<検索条件>を満たすファイルを探し、<アクション>を実行する。
  • 検索条件を指定しない場合は、すべてのファイルとディレクトリが対象となる。
  • アクションを指定しない場合は、-printが指定される。-printはパス名を表示するアクションである。

検索条件

-name <ファイル名>
ファイル名を指定してファイルを探す際に使用する。
ファイル名の大文字と小文字を区別する。
ファイル名の指定にはワイルドカードとして*?が使用できる。
-iname <ファイル名>
ファイル名の大文字と小文字を区別しないこと以外は`-name`と同じ動きをする。
-type <ファイルタイプ>
ファイルの種別を指定してファイルを探す際に使用する。
指定できるファイルタイプは複数ある。
指定 ファイル種別
-type f 通常ファイル
-type d<文字列> ディレクトリ
-type l シンボリックリンク
  • 検索条件は-aで区切る、もしくはスペース区切りで並べることで、複数の検索条件を指定できる。

使用例

file1.txtを検索してパスを表示
$ mkdir -p dir/doc
$ touch file1.txt dir/doc/file1.txt
$ find . -name file1.txt -print
./dir/doc/file1.txt
./file1.txt
ファイル名の末尾が.txtのファイルを検索
$ find . -name '*.txt' -print

-name?*を使用する際は、bashのパス名展開と解釈されないように''(シングルクォート)、もしくは""(ダブルクォート)で囲む。

*などのシェルが解釈する文字をメタ文字と呼ぶ。

カレントディレクトリの下にあるディレクトリを表示
$ find . -type d -print
.
./dir
./dir/doc
複数の検索条件を指定
$ find . -type f -a -name '*.txt' -print
$ find . -type f -name '*.txt' 

上記の例では通常ファイルかつ、ファイル名が.txtで終わるファイルのみが表示される。

locateコマンド

  • locateコマンドはパス名の一部を指定してファイルを探すためのコマンドである。
  • findコマンドは実行のたびにディレクトリツリーを下って全てのファイルを探すため、時間がかかる場合がある。
  • それに対して、locateコマンドは事前にファイルパスのデータベースが作成されていて、実行の際はこのデータベースだけを検索するため高速に動作する。
  • データベースの更新は一日一回のため、たった今作成したファイルはデータベースに入っていないなど、最新の状態ではないことに注意する。

書式、

locate [オプション] <検索パターン>

  • オプションに-iもしくは--ignore-caseを指定すると、大文字小文字を区別しない。
  • -bもしくは--basenameを指定すると、ファイル名だけを検索対象にする。

locateコマンドでは、指定したパターンがファイルパスのどこかに含まれていれば、一致判定となる。
つまり-bオプションの指定は、findコマンドにおける検索条件の-name-inameに該当する。

  • 検索パターンは複数指定すると OR 検索となる。
  • AND 検索をするにはオプションに-Aもしくは--allを指定する。

使用例

拡張子.htmlのファイルを検索
$ locate '*.html'
......検索結果......

findコマンドと同様にワイルドカードを使用できる。

拡張子が.htmlもしくはファイル名にdocsを含むファイルを検索
$ locate -b docs '*.html'
......検索結果......
拡張子が.htmlであり、かつファイル名にdocsを含むファイルを検索
$ locate -A docs '*.html'
......検索結果......

終わりに

次はコマンドの使用方法の検索についてまとめようと思う。

次回

何かご指摘がありましたら、コメントしていただけると幸いです。
最後までお読みいただきありがとうございました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0