Linuxエンジニア養成講座 第7回|全36回・フェーズ2「Linux基礎」の4回目です。
前回までに学んだこと: Linuxのディレクトリ構造とFHS、df・du・mountによるディスク使用量の確認(第6回)。
今回学ぶこと: ファイルの作成・コピー・移動・削除、ファイル内容の閲覧、ファイルの検索と圧縮。
前回はLinuxの「どこに何があるか」というディレクトリ構造を学びました。今回はその構造の上で、ファイルやディレクトリを実際に操作するコマンドを身につけます。冒頭では、今後のシリーズで使う便利なツールのインストール(dnf install)も初めて体験します。
この回の学習目標
dnf installでパッケージを追加インストールできるmanコマンドでコマンドのマニュアルを参照できるmkdir、cp、mv、rmでファイルとディレクトリの作成・コピー・移動・削除ができるcat、less、head、tailでファイルの中身を確認できるfindで条件に合うファイルを検索し、tarでアーカイブ・展開ができる
なぜファイル操作コマンドを覚えるのか
もし100台のサーバーすべてにGUIでログインして、マウスで設定ファイルを開いて編集していたらどうなるでしょうか。少し考えてから読み進めてください。
Linuxサーバーの管理は、突き詰めると「ファイルを操作すること」です。設定を変更するなら設定ファイルを編集する。ログを調べるならログファイルを読む。バックアップを取るならファイルをコピー・圧縮する。どの作業にも、ファイル操作コマンドが土台として必要になります。
GUIのファイルマネージャーに慣れている方は、コマンドでのファイル操作を面倒に感じるかもしれません。しかし、サーバーにはGUIがないのが普通です。Minimal Installで構築した検証環境のalma-mainにも、デスクトップ環境は入っていません。コマンドでのファイル操作は、サーバー管理における唯一の手段です。
また、コマンドは再現性があります。同じコマンドを実行すれば、誰がやっても同じ結果が得られます。手順書に「このコマンドを実行してください」と書けば、それだけで正確に伝わります。GUIでの操作を手順書にすると「このボタンをクリックして」「次にこのメニューを選んで」と長くなり、伝達ミスの原因にもなります。
準備 — 便利ツールをインストールする
ファイル操作の学習に入る前に、今後のシリーズで使う便利なツールをインストールします。AlmaLinuxのMinimal Installには、必要最小限のパッケージしか含まれていません。tree(ディレクトリ構造の可視化)、tar(ファイルのアーカイブ)、vim(テキストエディタ)といったツールは、自分で追加する必要があります。
ネットワーク設定の確認
第7回以降、dnf install でパッケージをインストールする場面が増えます。お使いの環境によっては、インターネットへの接続にプロキシサーバーの設定が必要になる場合があります。
- 企業環境で学習している方 — 社内プロキシのアドレスを
/etc/dnf/dnf.confに設定してください。プロキシのアドレスとポート番号はネットワーク管理者に確認してください。設定方法は下記「プロキシ設定の追加手順」を参照してください - 自宅などの個人環境で、VMから直接インターネットに接続できる方 — プロキシ設定は不要です。この手順をスキップして「dnf installで5つのパッケージを導入する」に進んでください
- 筆者の検証環境(alma-proxy)を再現している方 — 下記の手順で
proxy=http://10.0.1.254:3128を設定してください
プロキシの仕組みは第18回で詳しく学びます。今は「インターネットへの中継サーバー」程度の理解で大丈夫です。
プロキシ設定の追加手順
以下のコマンドはすべてalma-mainにSSH接続した状態で実行します。
実行コマンド:
$ sudo vi /etc/dnf/dnf.conf
[main] セクションの末尾に以下の形式で1行を追加します。vi の操作は第9回で学びますが、今は以下の手順で進めてください。G キーでファイル末尾に移動 → o キーで新しい行を追加 → 以下を入力 → Esc キー → :wq で保存終了。
proxy=http://プロキシのアドレス:ポート番号
筆者の検証環境の場合
筆者の検証環境では alma-proxy(10.0.1.254:3128)を使用しているため、以下の1行を追加します。
proxy=http://10.0.1.254:3128
設定後のファイルは以下のようになります。
実行コマンド:
$ cat /etc/dnf/dnf.conf
実行結果:
[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=True
best=True
skip_if_unavailable=False
proxy=http://10.0.1.254:3128
プロキシを設定した場合、末尾に proxy= の行が追加されています。この設定により、dnf コマンドは指定したプロキシサーバーを経由してパッケージをダウンロードします。プロキシとは何か、なぜ企業環境で必要なのかは第18回「企業ネットワークの仕組み」で改めて学びます。
dnf installで5つのパッケージを導入する
Linuxでソフトウェアをインストールするには、パッケージマネージャーを使います。AlmaLinux 9では dnf がパッケージマネージャーです。Windowsでいう「アプリの追加と削除」に近い役割ですが、コマンド1つでダウンロードからインストールまで自動で行われます。パッケージ管理の詳細は第19回で扱います。ここでは「ソフトウェアを追加するためのコマンド」として使い方を体験してください。
パッケージのインストールにはシステム全体に影響を与える管理者権限が必要です。コマンドの先頭に sudo を付けると、管理者(root)権限で実行できます。sudo やユーザー管理の詳細は第10回で学びます。今は「管理者権限が必要なコマンドの前に付けるもの」と覚えておけば大丈夫です。
それでは、パッケージをインストールします。
実行コマンド:
$ sudo dnf install tar vim-enhanced tree man-pages bash-completion
実行すると、インストール対象のパッケージとその依存パッケージが一覧表示され、確認を求められます。
依存関係が解決しました。
================================================================================
パッケージ Arch バージョン リポジトリー サイズ
================================================================================
インストール:
bash-completion noarch 1:2.11-5.el9 baseos 456 k
man-pages noarch 5.10.2-5.el9 baseos 2.1 M
tar x86_64 2:1.34-7.el9 baseos 880 k
tree x86_64 1.8.0-10.el9 baseos 64 k
vim-enhanced x86_64 2:8.2.2637-21.el9 appstream 1.7 M
依存関係のインストール:
gpm-libs x86_64 1.20.7-29.el9 appstream 20 k
vim-common x86_64 2:8.2.2637-21.el9 appstream 6.6 M
vim-filesystem noarch 2:8.2.2637-21.el9 appstream 48 k
アップグレード:
man-db x86_64 2.9.3-7.el9 baseos 1.1 M
vim-minimal x86_64 2:8.2.2637-21.el9 baseos 703 k
トランザクションの概要
================================================================================
インストール 8 パッケージ
アップグレード 2 パッケージ
ダウンロードサイズの合計: 14 M
これでよろしいですか? [y/N]:
y を入力してEnterを押すとインストールが始まります。「完了しました!」と表示されれば成功です。パッケージのバージョンや依存関係の表示はお使いの環境や実行時期によって異なる場合があります。パッケージ名が合っていれば問題ありません。
インストールした5つのパッケージの役割は以下のとおりです。
tar: 複数のファイルを1つにまとめる(アーカイブ)ツール。Minimal Installには含まれていないvim-enhanced: 高機能テキストエディタ。使い方は第9回で学ぶtree: ディレクトリ構造をツリー形式で表示するツールman-pages: コマンドのマニュアル(説明書)ページ集bash-completion: Tabキーによるコマンド補完を強化するツール
依存関係として man-db がアップグレードされていることにも注目してください。man-db はマニュアルを検索・表示するための仕組みで、Minimal Installにも最初から含まれています。今回追加した man-pages はマニュアルの「中身」にあたるもので、両方揃って初めて役に立ちます。
bash-completion をインストールした直後は、補完機能がまだ読み込まれていません。シェルを再起動して有効にします。
実行コマンド:
$ exec bash
見た目には何も変わりませんが、シェルが再起動され、bash-completionが読み込まれた状態になります。これ以降、コマンド名やオプション名の途中でTabキーを押すと、候補が自動補完されます。たとえば systemc と入力してTabキーを押すと systemctl に補完されます。
インストールしたものを確認する
インストールしたパッケージが正しく入っているか、バージョンを確認してみます。
実行コマンド:
$ tar --version
実行結果:
tar (GNU tar) 1.34
Copyright (C) 2021 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
作者: John Gilmore, Jay Fenlason.
実行コマンド:
$ tree --version
実行結果:
tree v1.8.0 (c) 1996 - 2018 by Steve Baker, Thomas Moore, Francesc Rocher, Florian Sesser, Kyosuke Tokoro
どちらもバージョン情報が表示されれば、インストールは正常に完了しています。
manコマンドの使い方
man(manual)コマンドは、コマンドの使い方を調べるためのマニュアルを表示します。コマンドのオプションを忘れたとき、最も確実な情報源になります。
実行コマンド:
$ man cp
マニュアルが表示されたら、以下のキーで操作します。
スペースまたはf: 次のページへ進むb: 前のページへ戻る/検索語: マニュアル内を検索する(例:/-rで「-r」を検索)n: 次の検索結果へ移動q: マニュアルを閉じる
マニュアルの操作方法は、この後登場する less コマンドと同じです。man は内部で less を使ってマニュアルを表示しているためです。
今後、コマンドのオプションに迷ったら、まず man コマンド名 を実行してみてください。Web検索より正確で、そのサーバーにインストールされているバージョンに対応した情報が得られます。
ファイルとディレクトリの基本操作
ここからは、ホームディレクトリ(/home/developer)で作業します。現在のディレクトリを確認してから始めます。
実行コマンド:
$ pwd
実行結果:
/home/developer
/home/developer と表示されていれば、ホームディレクトリにいる状態です。別のディレクトリにいた場合は、cd ~ でホームディレクトリに戻ってください。
ディレクトリを作る・消す(mkdir, rmdir)
mkdir(make directory)でディレクトリを作成します。
実行コマンド:
$ mkdir practice
実行コマンド:
$ ls -l
実行結果:
合計 0
drwxr-xr-x. 2 developer developer 6 3月 29 10:00 practice
先頭の d はディレクトリであることを示しています。rwxr-xr-x はパーミッション(アクセス権限)で、詳しくは第11回で学びます。
深い階層のディレクトリを一度に作りたい場合は、-p オプションを使います。
実行コマンド:
$ mkdir -p practice/sub1/sub2
-p を付けないと、途中のディレクトリ(sub1)が存在しない場合にエラーになります。-p は「途中の階層もまとめて作る」という意味です。
空のディレクトリを削除するには rmdir(remove directory)を使います。
実行コマンド:
$ rmdir practice/sub1/sub2
rmdir は対象が空でないとエラーになります。ファイルが入ったディレクトリを削除する方法は、後述の rm -r で説明します。
ファイルを作る(touch)
touch コマンドは、空のファイルを作成します。本来は「ファイルのタイムスタンプを更新する」コマンドですが、指定したファイルが存在しない場合は新規作成されるため、空ファイルの作成に広く使われています。
実行コマンド:
$ touch practice/file1.txt practice/file2.txt practice/file3.txt
実行コマンド:
$ ls -l practice/
実行結果:
合計 0
-rw-r--r--. 1 developer developer 0 3月 29 10:01 file1.txt
-rw-r--r--. 1 developer developer 0 3月 29 10:01 file2.txt
-rw-r--r--. 1 developer developer 0 3月 29 10:01 file3.txt
drwxr-xr-x. 2 developer developer 6 3月 29 10:00 sub1
サイズが 0 の空ファイルが3つ作成されました。先頭が -(ハイフン)になっている行が通常のファイルです。
コピーする(cp)
cp(copy)でファイルをコピーします。書式は cp コピー元 コピー先 です。
実行コマンド:
$ cp practice/file1.txt practice/file1_backup.txt
実行コマンド:
$ ls practice/
実行結果:
file1.txt file1_backup.txt file2.txt file3.txt sub1
ディレクトリをコピーする場合は -r(recursive: 再帰的)オプションが必要です。
実行コマンド:
$ cp -r practice practice_copy
-r を付けないと、ディレクトリのコピー時にエラーが出ます。ディレクトリの中にあるファイルやサブディレクトリも含めて丸ごとコピーするため、「再帰的」という表現が使われています。
移動・名前変更する(mv)
mv(move)はファイルやディレクトリを移動します。移動先のファイル名を変えれば、名前変更としても使えます。
実行コマンド:
$ mv practice/file3.txt practice/sub1/
実行コマンド:
$ ls practice/sub1/
実行結果:
file3.txt
ファイル名を変更する場合は、同じディレクトリ内で移動先に新しい名前を指定します。
実行コマンド:
$ mv practice/file2.txt practice/renamed.txt
実行コマンド:
$ ls practice/
実行結果:
file1.txt file1_backup.txt renamed.txt sub1
Windowsとは異なり、Linuxには「名前変更」専用のコマンドがありません。mv が移動と名前変更を兼ねています。
削除する(rm)
rm(remove)はファイルを削除します。
実行コマンド:
$ rm practice/file1_backup.txt
Linuxでは、削除したファイルはゴミ箱に入りません。rm で消したファイルは基本的に復元できないため、実行前に対象を確認する習慣をつけてください。
ディレクトリを中身ごと削除するには -r オプションを使います。先ほど作った practice_copy を削除してみます。
実行コマンド:
$ rm -r practice_copy
practice_copy ディレクトリとその中のファイルがすべて削除されます。
現場ヒヤリハット: rm -rf の恐怖
現場で最も恐れられるコマンドの1つが rm -rf / です。-f は確認なしで強制削除、/ はルートディレクトリ(すべてのファイルの起点)を意味します。つまり「確認なしにシステム上の全ファイルを再帰的に削除する」というコマンドです。
特に危険なのが、シェルスクリプト内での変数展開ミスです。たとえば、変数 $DIR に削除対象のパスを入れて rm -rf $DIR/ と書いたとき、変数が空だった場合はどうなるでしょうか。シェルは rm -rf / として解釈します。
現在のLinuxでは --preserve-root オプションがデフォルトで有効になっており、rm -rf / は拒否されます。しかし rm -rf /*(ルート直下の全ディレクトリ)には効きません。rm を -rf オプション付きで使うときは、削除対象のパスが間違いないことを必ず二重に確認してください。
ファイルの中身を見る
この節の演習用に、中身のあるファイルを準備します。/etc/hostname の内容をコピーして使います。
実行コマンド:
$ cp /etc/hostname practice/sample.txt
まるごと見る(cat)
cat(concatenate: 連結)はファイルの内容を丸ごと画面に表示します。短いファイルの確認に向いています。
実行コマンド:
$ cat practice/sample.txt
実行結果:
alma-main
行番号を付けて表示したい場合は -n オプションを使います。
実行コマンド:
$ cat -n /etc/dnf/dnf.conf
実行結果:
1 [main]
2 gpgcheck=1
3 installonly_limit=3
4 clean_requirements_on_remove=True
5 best=True
6 skip_if_unavailable=False
7 proxy=http://10.0.1.254:3128
cat は短い設定ファイルの確認に便利です。ただし、数百行を超えるファイルに cat を使うと画面が一瞬で流れてしまい、読めません。長いファイルには次に紹介する less を使います。
ページ送りで見る(less)
less は、長いファイルをページ単位で読むためのコマンドです。先ほど man コマンドの操作で使ったキー操作がそのまま使えます。
実行コマンド:
$ less /etc/dnf/dnf.conf
表示されたら、スペースキーで次のページ、b で前のページ、q で終了です。/ に続けて文字を入力すると、ファイル内を検索できます。
cat と less の使い分けは明快です。数行~数十行程度の短いファイルは cat、それ以上は less と覚えておいてください。
先頭・末尾だけ見る(head, tail)
head はファイルの先頭、tail はファイルの末尾を表示します。デフォルトではそれぞれ10行が表示されます。
実行コマンド:
$ head -5 /etc/passwd
実行結果:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
-5 は「先頭5行を表示する」という意味です。-n 5 と書いても同じ結果になります。
実行コマンド:
$ tail -3 /etc/passwd
実行結果:
chrony:x:996:996:chrony system user:/var/lib/chrony:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/usr/sbin/nologin
developer:x:1000:1000:developer:/home/developer:/bin/bash
末尾の3行が表示されました。最後のユーザーとして developer(普段使っているアカウント)が見えます。
tail にはもう1つ重要な使い方があります。-f(follow)オプションを使うと、ファイルに追記された内容をリアルタイムで表示し続けます。ログファイルの監視に使う定番のテクニックですが、本格的なログ監視は第23回で扱うため、ここでは「tail -f でログをリアルタイムに追いかけられる」とだけ覚えておいてください。
行数・単語数を数える(wc)
wc(word count)はファイルの行数・単語数・バイト数を表示します。
実行コマンド:
$ wc /etc/passwd
実行結果:
21 39 1001 /etc/passwd
左から順に「行数」「単語数」「バイト数」「ファイル名」です。/etc/passwd は21行あることがわかります。
行数だけを知りたい場合は -l(line)オプションを使います。
実行コマンド:
$ wc -l /etc/passwd
実行結果:
21 /etc/passwd
「このサーバーにユーザーは何人いるか」を素早く確認したいとき、wc -l /etc/passwd で行数を数えるのは現場でよく使うテクニックです(厳密にはシステムアカウントも含む行数ですが、目安として有用です)。
ディレクトリ構造を見渡す(tree)
冒頭でインストールした tree コマンドを使ってみます。tree はディレクトリ構造をツリー形式で表示します。
実行コマンド:
$ tree practice
実行結果:
practice
├── file1.txt
├── renamed.txt
├── sample.txt
└── sub1
└── file3.txt
1 directory, 4 files
前回の記事で ls を使ってディレクトリの中身を確認しましたが、tree はサブディレクトリの中身まで一度に見渡せるのが利点です。特にディレクトリ階層が深い場合に役立ちます。
表示する深さを制限したい場合は -L オプションでレベルを指定します。
実行コマンド:
$ tree -L 1 /etc
これで /etc 直下のディレクトリとファイルだけが表示されます。-L 2 にすると2階層目まで表示されます。システムディレクトリのように中身が多い場所では、-L で深さを制限するのが定番の使い方です。
ファイルを探す(find, xargs)
find は、指定した条件に合うファイルやディレクトリを検索するコマンドです。書式は find 検索開始ディレクトリ 条件 です。
名前で検索する例として、/etc 配下で .conf で終わるファイルを探してみます。
実行コマンド:
$ find /etc -name "*.conf" | head -10
実行結果:
/etc/lvm/lvm.conf
/etc/lvm/lvmlocal.conf
/etc/resolv.conf
/etc/dnf/plugins/copr.conf
/etc/dnf/plugins/debuginfo-install.conf
/etc/dnf/protected.d/dnf.conf
/etc/dnf/protected.d/setup.conf
/etc/dnf/protected.d/systemd.conf
/etc/dnf/protected.d/grub2-tools-minimal.conf
/etc/dnf/protected.d/grub2-efi-x64.conf
-name "*.conf" は「名前が .conf で終わるもの」を意味します。* は任意の文字列に一致するワイルドカードです。"*.conf" をクォーテーションで囲んでいるのは、シェルが * を勝手に展開しないようにするためです。
| head -10 は「出力の先頭10行だけを表示する」という意味です。|(パイプ)はコマンドの出力を次のコマンドに渡す仕組みで、詳しくは第8回で学びます。ここでは「結果が多すぎるときに件数を絞る手段」として使っています。
find でよく使う条件をいくつか紹介します。
-name "パターン": ファイル名で検索(大文字小文字を区別する)-iname "パターン": ファイル名で検索(大文字小文字を区別しない)-type f: ファイルのみ検索-type d: ディレクトリのみ検索-mtime -7: 7日以内に更新されたものを検索-size +10M: 10MBより大きいファイルを検索
練習用ディレクトリで種類を絞った検索も試してみます。
実行コマンド:
$ find practice -type f
実行結果:
practice/sub1/file3.txt
practice/file1.txt
practice/sample.txt
practice/renamed.txt
-type f でファイルだけに絞り込まれ、ディレクトリ(sub1)は結果に含まれません。
find の検索結果に対して別のコマンドを実行したい場合、xargs を使います。xargs は、前のコマンドの出力を引数として次のコマンドに渡す仕組みです。
たとえば、practice 配下のすべての .txt ファイルの行数を数えるには、以下のように書きます。
実行コマンド:
$ find practice -name "*.txt" | xargs wc -l
実行結果:
0 practice/sub1/file3.txt
0 practice/file1.txt
1 practice/sample.txt
0 practice/renamed.txt
1 合計
find が見つけたファイルのパスが、xargs を通じて wc -l に渡され、各ファイルの行数が表示されました。find と xargs の組み合わせは、「条件に合うファイルを探して、それに対して何かを実行する」という作業で頻繁に使われます。
find には、ここで紹介した以外にも多くのオプションがあります。「こういう条件で探せないかな」と思ったら、man find で確認してみてください。すべてを覚える必要はなく、必要なときに調べられることが大切です。
ファイルをまとめる・圧縮する(tar, gzip)
サーバー運用では、複数のファイルを1つにまとめて保管したり、他のサーバーに転送したりする場面がよくあります。そのために使うのが tar(アーカイブ)と gzip(圧縮)です。
この2つは役割が異なります。
tar: 複数のファイルやディレクトリを1つのファイル(アーカイブ)にまとめる。サイズは小さくならないgzip: ファイルを圧縮してサイズを小さくする。1つのファイルしか圧縮できない
「複数のファイルをまとめて圧縮する」には、tar で1つにまとめてから gzip で圧縮する、という2段階の処理が必要です。ただし、tar コマンドには gzip を同時に呼び出すオプション(-z)があるため、実際には1コマンドで済みます。
まず、practice ディレクトリをアーカイブ+圧縮してみます。
実行コマンド:
$ tar czf practice.tar.gz practice
オプションの意味は以下のとおりです。
c(create): アーカイブを作成するz: gzipで圧縮するf(file): 出力先のファイル名を指定する(fの直後にファイル名を書く)
作成されたファイルを確認します。
実行コマンド:
$ ls -lh practice.tar.gz
実行結果:
-rw-r--r--. 1 developer developer 247 3月 29 10:05 practice.tar.gz
圧縮ファイルの拡張子は .tar.gz です。.tar(アーカイブ)を .gz(gzip圧縮)したものであることを示しています。.tgz と書かれることもあり、意味は同じです。
次に、中身を確認(展開せずに一覧表示)してみます。
実行コマンド:
$ tar tzf practice.tar.gz
実行結果:
practice/
practice/sub1/
practice/sub1/file3.txt
practice/file1.txt
practice/sample.txt
practice/renamed.txt
t(list)は中身の一覧を表示するオプションです。展開する前に「このアーカイブには何が入っているか」を確認するのは、良い習慣です。
展開(解凍)するには x(extract)を使います。別の場所に展開して試してみます。
実行コマンド:
$ mkdir restore_test
実行コマンド:
$ tar xzf practice.tar.gz -C restore_test
実行コマンド:
$ tree restore_test
実行結果:
restore_test
└── practice
├── file1.txt
├── renamed.txt
├── sample.txt
└── sub1
└── file3.txt
2 directories, 4 files
-C は展開先のディレクトリを指定するオプションです。元の practice と同じ構造が restore_test の中に復元されています。
tar のオプションをまとめます。
| 操作 | コマンド | 覚え方 |
|---|---|---|
| アーカイブ+圧縮 | tar czf ファイル名.tar.gz 対象 | create(作成) |
| 一覧表示 | tar tzf ファイル名.tar.gz | table of contents(目次) |
| 展開 | tar xzf ファイル名.tar.gz | extract(抽出) |
tar のオプションは数が多いため、すべてを覚える必要はありません。c・t・x の3つを押さえておけば日常業務は十分です。それ以外のオプションが必要になったときは、man tar で調べれば大丈夫です。
tar はバックアップ作業で頻繁に使います。第31回「バックアップと復旧」で改めて実践的な使い方を学びます。
やってみよう — 総合演習
ここまで学んだコマンドを使って、以下の演習に取り組んでください。回答は1つの正解に限りません。自分なりにコマンドを組み立てて試してみてください。
演習1: ディレクトリ構造の構築
以下のディレクトリ構造をコマンドで作成してください。
project/
├── docs/
├── logs/
└── scripts/
ヒント: mkdir は複数のディレクトリ名をスペースで区切って一度に指定できます。
演習2: ファイルの作成と移動
project/docs/にreadme.txtとmanual.txtを作成するmanual.txtをproject/docs/からproject/scripts/に移動するproject/全体をコピーしてproject_backup/を作成するtreeコマンドで両方の構造を確認する
演習3: ファイルの検索と確認
findで/etc配下にある.confファイルのうち、7日以内に更新されたものを検索する/etc/passwdの先頭3行と末尾3行を表示する/etc/passwdの行数をwcで確認する
ヒント: find の条件は複数同時に指定できます。-name "*.conf" -mtime -7 のように並べてください。
演習4: アーカイブと復元
project/をproject.tar.gzとして圧縮する- 中身を一覧表示して、意図したファイルが含まれているか確認する
/tmpに展開して、元と同じ構造が復元されることを確かめる
演習5: manでコマンドを調べてみよう
man cpを開いて、-iオプションの意味を調べてみてくださいman findを開いて、-maxdepthオプションの意味を調べてみてください
ヒント: マニュアル内で / に続けて検索語を入力すると検索できます。たとえば /-i と入力してEnterを押すと、-i を含む箇所にジャンプします。n で次の検索結果に移動できます。
後片付け
演習で作成したファイルやディレクトリを削除して、ホームディレクトリを元の状態に戻しておきます。
実行コマンド:
$ rm -r practice practice.tar.gz restore_test project project_backup project.tar.gz
実行コマンド:
$ ls
何も表示されなければ(隠しファイルを除く)、後片付けは完了です。
理解度チェック
以下の文が正しければ○、間違っていれば×と答えてください。
mkdir -p a/b/cを実行すると、途中のディレクトリaとbも同時に作成されるcpでディレクトリをコピーするときは-rオプションが必要であるrmで削除したファイルは、Windowsのゴミ箱のように復元できるcatは長いファイルの閲覧に適したコマンドであるtar czfは、ファイルのアーカイブと圧縮を同時に行うdnf installコマンドでパッケージをインストールするには、sudo(管理者権限)が必要であるmanコマンドは、そのサーバーにインストールされているバージョンに対応したマニュアルを表示するfindコマンドで-name "*.conf"を指定すると、名前が.confで終わるファイルだけを検索できる
解答
- ○ ――
-pオプションにより、途中の階層のディレクトリがなければ自動的に作成される - ○ ――
-r(recursive)を付けないと、ディレクトリのコピーはエラーになる - × ―― Linuxにはゴミ箱の仕組みがなく、
rmで削除したファイルは基本的に復元できない - × ――
catは短いファイルに向いている。長いファイルにはlessを使う - ○ ――
cがアーカイブ作成、zがgzip圧縮、fが出力ファイル名の指定 - ○ ―― パッケージのインストールはシステム全体に影響するため、管理者権限が必要
- ○ ―― Web検索と異なり、実際のバージョンに対応した正確な情報が得られる
- ○ ――
*は任意の文字列にマッチするワイルドカード
まとめ
今回は、Linuxのファイル操作に必要な基本コマンドを学びました。
dnf installでパッケージを追加インストールする方法を体験した。管理者権限が必要な操作にはsudoを付けるmanコマンドでマニュアルを参照する習慣を身につけた。オプションを忘れたらman コマンド名mkdir、touch、cp、mv、rmでファイルとディレクトリの作成・コピー・移動・削除ができるcat、less、head、tail、wcでファイルの中身を確認・集計できるtreeでディレクトリ構造を一覧表示し、findで条件に合うファイルを検索できるtar czfでアーカイブ+圧縮、tar xzfで展開。中身の事前確認はtar tzfrm -rfは取り消しが利かないため、実行前にパスの確認を徹底する
次回の第8回「基本コマンド(テキスト処理・パイプとリダイレクト)」では、今回は軽く触れただけのパイプ(|)やリダイレクト(>)の仕組みを本格的に学びます。grep、sed、awk といったテキスト処理コマンドも登場します。
シリーズ一覧
フェーズ1: エンジニアのいろは
フェーズ2: Linux基礎
- 第4回 Linuxとは何か+環境確認
- 第5回 SSH接続とターミナル操作
- 第6回 ファイルシステムとディレクトリ構造
- 第7回 基本コマンド(ファイル操作)(この記事)
- 第8回 基本コマンド(テキスト処理・パイプとリダイレクト)
- 第9回 viエディタ
- 第10回 ユーザーとグループ管理
- 第11回 パーミッションと所有権
- 第12回 プロセス管理
- 第13回 systemd
- 第14回 シェルスクリプト入門
- 第15回 フェーズ2まとめ演習
フェーズ3: ネットワークとインフラ基盤
- 第16回 ネットワーク基礎
- 第17回 ネットワーク設定と疎通確認
- 第18回 企業ネットワークの仕組み
- 第19回 パッケージ管理
- 第20回 ファイアウォール(firewalld)
- 第21回 ボンディング/チーミング
- 第22回 VLAN
- 第23回 ログ管理
- 第24回 cron / systemd timer
- 第25回 ストレージ管理(LVM)
- 第26回 シェルスクリプト実践
- 第27回 SSH応用
フェーズ4: サーバー構築と運用
