参考書籍
動作環境
- Windows11
- Oracle VM VirtualBox
- CentOS 7
ディレクトリ作成
- 新しくディレクトリを作成するにはmkdirコマンドを使用する。
- 存在しない親ディレクトリも含めてディレクトリを作成する際は
-p
オプションを指定する。
書式
mkdir
[オプション] <作成するディレクトリ名>
使用例
$ 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>
使用例
$ touch newfile
$ ls
newfile
$ touch file1 file2
$ ls
file1 file2
touch
コマンドの本来の動きはファイルのタイムスタンプ(日時)の更新である。
しかし、指定したファイルが存在しない場合は、新しく空ファイルを作成するという動きをする。
ファイルとディレクトリの削除
- ファイルを削除するにはrmコマンドを使用する。
- 複数のファイルを一度に削除することもできる。
-
rm
コマンドでディレクトリを削除するには-r
オプションを指定する。 - 削除前に確認を行うには
-i
オプションを指定する
書式
rm
[オプション] <削除するファイル名1> <削除するファイル名2>
使用例
$ ls -F
newfile dir/
$ rm newfile
$ ls -F
dir/
$ ls
file1 file2 file3
$ rm file1 file2
$ ls
file3
$ rm *.txt
$ 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
<ディレクトリ名>
使用例
$ ls -F
dir/ newfile
$ rmdir dir
$ ls
newfile
$ rmdir dir
rmdir: `dir` を削除できません: ディレクトリは空ではありません
rmdir
コマンドはファイルが残っていることに気づかずに誤って削除してしまうという事故を防ぐことができる。
ファイル、ディレクトリのコピー
- ファイルをコピーするにはcpコマンドを使用する。
-
cp
コマンドはコピー先にファイルが既に存在している場合は上書きする。 - 上書き確認をするには
-i
オプションをつける。 - ディレクトリをコピーするには
-r
オプションをつける。
書式
cp
[オプション] <コピー元>...<コピー先>
- <コピー先>がディレクトリの場合は、<コピー先>のディレクトリ内に同一ファイル名でコピーする。
- 複数のファイルをディレクトリにコピーすることもできる。その際は引数の最後に指定したディレクトリへファイルをコピーする。
使用例
$ ls
file1
$ cp file1 file2
$ ls
file1 file2
$ ls -F
dir/ newfile
$ cp newfile dir
$ ls -F . ./dir
.:
dir/ newfile
./dir:
newfile
$ ls -F
dir/ file1 file2 file3
$ cp file1 file2 file3 dir
$ ls -F . ./dir
.:
dir/ file1 file2 file3
./dir:
file1 file2 file3
$ cp *.txt dir
$ ls -F
dir1/
$ cp -r dir1 dir2
$ ls -F
dir1/ dir2/
$ 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
[オプション] <ファイル名>
コマンド | 内容 |
---|---|
スペースキー、f、Ctrl + v | 1画面下にスクロールする |
b、Meta + v | 1画面上にスクロールする |
j、Ctrl + n、Enterキー | 1行下にスクロールする |
k、Ctrl + p | 1行上にスクロールする |
q | lessコマンドを終了する |
ファイル内の検索
-
less
コマンドでファイルを表示中に/
を入力すると画面の一番下の行が、検索文字列の入力欄に変わる。 - この
/
の後ろに検索したい文字列を入力してEnterキーを押すと、指定した文字列をファイルの中から検索できる。
コマンド | 内容 |
---|---|
/ <文字列> | 下方向に向かって検索する |
? <文字列> | 上方向に向かって検索する |
n | 次の検索結果に移動する |
N | 前の検索結果に移動する |
リンクを張る
- リンクを張るにはlnコマンドを使用する。
- リンクを削除するには
rm
コマンドを使用する。
書式
ln
[オプション] <リンク元ファイル名> <リンク名>
リンクとは
- リンクとはファイルに別名をつけるLinuxの機能のことである。
- 別名をつけることを「リンクを張る」と表現する。
- Windows における「ショートカット」や、Mac OS X における「エイリアス」と似た機能である。
- リンクにはハードリンクとシンボリックリンクの2種類がある。
活用方法
リンクは長いパス名を持つファイルやディレクトリを省略する際や、複数バージョンのプログラムを管理する際によく使用される。
ハードリンク
- ハードリンクとは1つのファイルの実態に複数の名前を付ける機能である。
- ハードリンクを持つファイルの実態は、すべてのハードリンクがなくなったときに削除される。
使用例
$ 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
オプションを指定すると、リンク先を確認できる。
使用例
$ 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
で区切る、もしくはスペース区切りで並べることで、複数の検索条件を指定できる。
使用例
$ mkdir -p dir/doc
$ touch file1.txt dir/doc/file1.txt
$ find . -name file1.txt -print
./dir/doc/file1.txt
./file1.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
を指定する。
使用例
$ locate '*.html'
......検索結果......
find
コマンドと同様にワイルドカードを使用できる。
$ locate -b docs '*.html'
......検索結果......
$ locate -A docs '*.html'
......検索結果......
終わりに
次はコマンドの使用方法の検索についてまとめようと思う。
何かご指摘がありましたら、コメントしていただけると幸いです。
最後までお読みいただきありがとうございました!