Linux の初心者向けに、よく使うコマンドと使用例をまとめます。前半はファイル・ディレクトリを管理するコマンド、後半はユーザ・グループを管理するコマンドです。実行例は、それぞれのコマンドを実行したときの出力です。
pwd・ls・cdで場所と中身を確認し、touch・mkdir・rm・cp・mvでファイルを操作する方法-i(確認)や-r(ディレクトリごと)など、よく使うオプションの意味useradd・passwd・usermod・groupaddなどで、ユーザとグループを管理し、更新されるファイルを確認する方法
プロンプトの $ は一般ユーザ、# は root での実行を表します。実行例の日付、ユーザ名、ホスト名は、検証した環境のものです。ls -l の「合計」や「9月」は日本語表示の環境の出力で、英語の環境では「total」や「Sep」のように表示されます。
ファイル・ディレクトリを管理するコマンド
この章で使うコマンドは、次のとおりです。
| コマンド | 用途 |
|---|---|
pwd | カレントディレクトリを表示する |
ls | ファイル・ディレクトリの一覧を表示する |
touch | 空ファイルを作成する。更新日時を変更する |
mkdir | ディレクトリを作成する |
cd | カレントディレクトリを移動する |
rm | ファイル・ディレクトリを削除する |
cp | ファイル・ディレクトリをコピーする |
mv | ファイル・ディレクトリを移動する。名前を変更する |
less | ファイルの内容をページ単位で表示する |
pwd:カレントディレクトリの表示
現在作業しているディレクトリ(カレントディレクトリ)を表示します。
$ pwd
/home/ec2-user
ls:ファイル・ディレクトリ一覧の表示
現在作業中のディレクトリにあるファイル・ディレクトリを表示するには、ls を実行します。
一覧表示
下記の例では、text1.txt と text2.txt が一覧表示されています。
$ ls
text1.txt text2.txt
現在作業中以外のディレクトリ内の一覧を取得したい場合は、取得したいディレクトリのパスを引数にします。下記は、/var/log 配下のファイル・ディレクトリ一覧を表示します(途中を省略した表示です)。
$ ls /var/log/
amazon chrony dmesg lastlog secure yum.log
...
btmp cron journal sa wtmp
隠しファイルを表示:-a
隠しファイルは、名前が . ではじまるファイルです。-a を付けると、隠しファイルも表示します。
$ ls -a
. .. .bash_history .bash_logout .bash_profile .bashrc .ssh text1.txt text2.txt
隠しファイルを表示(. と .. を除く):-A
.(カレントディレクトリ)と ..(親ディレクトリ)を表示しない場合は、-A を使用します。
$ ls -A
.bash_history .bash_logout .bash_profile .bashrc .ssh text1.txt text2.txt
詳細表示:-l
詳細表示をする場合は、-l を使用します。
$ ls -l
合計 0
-rw-rw-r-- 1 ec2-user ec2-user 0 9月 4 04:45 text1.txt
-rw-rw-r-- 1 ec2-user ec2-user 0 9月 4 04:45 text2.txt
1行が1つのファイルを表します。左から順に、次の項目を表示します。
| 表示 | 意味 |
|---|---|
| 合計 0 | ファイルが使っているディスク容量(ブロック数)の合計。この例のファイルは空なので 0 |
| -rw-rw-r– | 先頭の1文字がファイルの種類(- は通常のファイル、d はディレクトリ)。続く9文字がパーミッション |
| 1 | ハードリンクの数 |
| ec2-user ec2-user | 所有ユーザと、所有グループ |
| 0 | ファイルのサイズ(バイト) |
| 9月 4 04:45 | 更新日時 |
| text1.txt | ファイル名 |
更新日時が新しい順に詳細表示:-lt
-t を付けると、更新日時が新しい順に並べます。更新日時の一番新しいファイルが先頭に表示されます。実務でよく使用します。
$ ls -lt
合計 0
-rw-rw-r-- 1 ec2-user ec2-user 0 9月 4 05:35 text4.txt
-rw-rw-r-- 1 ec2-user ec2-user 0 9月 4 05:33 text3.txt
-rw-rw-r-- 1 ec2-user ec2-user 0 9月 4 04:45 text2.txt
-rw-rw-r-- 1 ec2-user ec2-user 0 9月 4 04:45 text1.txt
更新日時が古い順に詳細表示:-ltr
-r は並び順を逆にするオプションです。-t と組み合わせると、更新日時が古い順に並びます。
$ ls -ltr
合計 0
-rw-rw-r-- 1 ec2-user ec2-user 0 9月 4 04:45 text1.txt
-rw-rw-r-- 1 ec2-user ec2-user 0 9月 4 04:45 text2.txt
-rw-rw-r-- 1 ec2-user ec2-user 0 9月 4 05:33 text3.txt
-rw-rw-r-- 1 ec2-user ec2-user 0 9月 4 05:35 text4.txt
ファイルタイプを表示:-F
ファイル名の後ろに、種類を表す記号を付けます。ディレクトリの場合は /、実行可能なファイルは *、シンボリックリンクは @ が付きます。
$ ls -F
dir1/ text1.txt text2.txt text3.txt text4.txt text5
touch:空ファイルを作成
引数に指定したファイルが存在しないときは、空ファイルを作成します。すでに存在するときは、更新日時を現在の時刻に変更します。-d を使うと、日時を指定できます。
ファイル新規作成
file1.txt の空ファイルを新規作成します。
$ touch file1.txt
日付を指定:-d
更新日時を 2010/10/10 にして、text5.txt を作成します。ls -l では、半年以上前の更新日時は、時刻の代わりに年が表示されます。
$ touch text5.txt -d 2010/10/10
$ ls -l
合計 0
-rw-rw-r-- 1 ec2-user ec2-user 0 9月 4 04:45 text1.txt
-rw-rw-r-- 1 ec2-user ec2-user 0 9月 4 04:45 text2.txt
-rw-rw-r-- 1 ec2-user ec2-user 0 9月 4 05:33 text3.txt
-rw-rw-r-- 1 ec2-user ec2-user 0 9月 4 05:35 text4.txt
-rw-rw-r-- 1 ec2-user ec2-user 0 10月 10 2010 text5.txt
mkdir:ディレクトリを作成
ディレクトリを作成します。-p を付けると、パスの途中のディレクトリも含めて、複数作成できます。
ディレクトリ新規作成
カレントディレクトリに、新規ディレクトリ(dir1)を作成します。
$ mkdir dir1
$ ls -F
dir1/ text1.txt text2.txt text3.txt text4.txt text5
パスの途中のディレクトリを含めて複数作成:-p
dir2、dir3、dir4 を一度に作成します。-p がないと、dir2 が存在しないため、エラーになります。
$ mkdir -p dir2/dir3/dir4
$ ls -F
dir1/ dir2/ text1.txt text2.txt text3.txt text4.txt text5
$ ls dir2/
dir3
$ ls dir2/dir3/
dir4
cd:ディレクトリの位置を変更
作業するディレクトリを移動します。下記のファイル・ディレクトリ構成で、cd の使用例を確認します。
$ ls -F
dir1/ dir2/ text1.txt text2.txt text3.txt text4.txt text5
移動の向きは、図1のとおりです。
dir1/ にディレクトリを移動します。
$ cd dir1/
$ pwd
/home/ec2-user/dir1
1階層上に移動:../
元に戻るため、1つ上のディレクトリに移動するには、cd ../ とします。
$ cd ../
$ pwd
/home/ec2-user
2階層上に移動:../../
../ が1つ上の意味です。2つ上の場合は、../ を2回書きます。
$ pwd
/home/ec2-user
$ cd ../../
$ pwd
/
ホームディレクトリへ移動:~
ログインしているユーザのホームディレクトリへ移動するには、~(チルダ)を使用します。
$ pwd
/
$ cd ~
$ pwd
/home/ec2-user
ルートディレクトリから直接移動
ルートディレクトリ(/)からのパスを指定することで、移動したいディレクトリを直接指定できます。
$ pwd
/home/ec2-user
$ cd /var/log/
$ pwd
/var/log
rm:ファイル削除
ファイルを削除する場合、rm コマンドを使用します。
rm で削除したファイルは、ゴミ箱を経由せず、すぐに削除されます。実行する前に、ls で対象を確認してください。
ファイル削除
$ ls
dir1 dir2 text1.txt text2.txt text3.txt text4.txt text5.txt
$ rm text1.txt
$ ls
dir1 dir2 text2.txt text3.txt text4.txt text5.txt
複数ファイルを一括削除
削除したいファイルを複数指定します。
$ ls
dir1 dir2 text2.txt text3.txt text4.txt text5.txt
$ rm text2.txt text3.txt
$ ls
dir1 dir2 text4.txt text5.txt
ファイルを削除してよいか確認:-i
削除する前に確認するには、-i オプションを付けます。削除する場合は、yes を入力します。(no を入力すると、削除されません)
$ rm -i text4.txt
rm: 通常の空ファイル `text4.txt' を削除しますか? yes
$ ls
dir1 dir2 text5.txt
ディレクトリを削除:-r
ディレクトリを削除するには、-r を付けます。指定したディレクトリの中に、ファイルやディレクトリが存在していても、まとめて削除します。-r がないと、ディレクトリは削除できません。
$ ls
dir1 dir2 text5.txt
$ rm -r dir1
$ ls
dir2 text5.txt
cp:ファイル・ディレクトリのコピー
ファイルやディレクトリを複製(コピー)する場合は、cp コマンドを使用します。引数として、コピー元とコピー先を順に指定します。
ファイルをコピー
text1.txt を text10.txt という名前でコピーします。
$ ls
dir1 dir2 text1.txt text2.txt text3.txt text4.txt text5.txt
$ cp text1.txt text10.txt
$ ls
dir1 dir2 text1.txt text10.txt text2.txt text3.txt text4.txt text5.txt
ディレクトリをコピー:-r
dir1 を dir3 にコピーします。ディレクトリをコピーするときは、-r が必要です。
$ ls -F
dir1/ dir2/ text1.txt text10.txt text2.txt text3.txt text4.txt text5.txt
$ cp -r dir1 dir3
$ ls -F
dir1/ dir2/ dir3/ text1.txt text10.txt text2.txt text3.txt text4.txt text5.txt
上書き確認:-i
コピー先に同じ名前のファイルがあると、-i を付けない場合は、確認なしで上書きされます。-i を付けると、上書きする前に確認します。下記は、text1.txt を text2.txt に上書きコピーするときの例です。
$ ls
dir1 dir2 dir3 text1.txt text10.txt text2.txt text3.txt text4.txt text5.txt
$ cp -i text1.txt text2.txt
cp: `text2.txt' を上書きしますか? yes
$
mv:ファイルの移動、ファイル名変更
ファイルやディレクトリの移動や、ファイル名のリネームをする場合、mv コマンドを使用します。
ファイルの移動
text1.txt を dir1 の配下に移動します。
$ ls
dir1 dir2 dir3 text1.txt text10.txt text2.txt text3.txt text4.txt text5.txt
$ ls dir1
$
$ mv text1.txt dir1
$ ls
dir1 dir2 dir3 text10.txt text2.txt text3.txt text4.txt text5.txt
$ ls dir1
text1.txt
ファイルのリネーム
text2.txt のファイル名を text2_change.txt にリネームします。
$ ls
dir1 dir2 dir3 text10.txt text2.txt text3.txt text4.txt text5.txt
$ mv text2.txt text2_change.txt
$ ls
dir1 dir2 dir3 text10.txt text2_change.txt text3.txt text4.txt text5.txt
上書き確認:-i
移動先のディレクトリに同じ名前のファイルが存在するとき、-i を付けないと、確認なしで上書きされます。
下記のとおり、カレントディレクトリと dir1 配下に、同じファイル名(text1.txt)が保存されています。
$ touch text1.txt
$ ls
dir1 dir2 dir3 text1.txt text10.txt text2_change.txt text3.txt text4.txt text5.txt
$ ls dir1
text1.txt
カレントディレクトリの text1.txt を dir1 配下に移動すると、確認なしで上書きされます。
$ mv text1.txt dir1/
$
上書きしてよいか確認するには、-i オプションを付けます。上書きする場合は、yes を入力します。(no を入力すると、移動されません)
$ mv -i text1.txt dir1/
mv: `dir1/text1.txt' を上書きしますか? yes
$
less:ファイル内容をページ単位で表示
ファイルの内容をページ単位で表示するには、less を使用します。
下記の例は、/var/log/messages の内容をページ単位で表示します。
# less /var/log/messages
表示した画面の中で、次のキーを使用します。
| キー | 動作 |
|---|---|
e | 1行下に進む |
f | 1画面分下に進む |
d | 半画面分下に進む |
y | 1行上に戻る |
b | 1画面分上に戻る |
u | 半画面分上に戻る |
g | 先頭行に移動する |
G | 末尾に移動する |
50G | 50行目に移動する |
/ | 検索する(/ に続けて文字列を入力して Enter。n で次の一致、N で逆方向の一致へ移動する) |
v | 表示中のファイルを、VISUAL または EDITOR に設定したエディタで編集する(未設定なら vi) |
q | 終了する |
ユーザ・グループを管理するコマンド
ユーザとグループの情報は、/etc 配下のファイルに保存されています。この章のコマンドは、次のファイルを更新します。ユーザやグループの追加・削除は、root で実行します。
| コマンド | 用途 | 更新されるファイル |
|---|---|---|
useradd | ユーザを追加する | /etc/passwd、/etc/shadow |
passwd | パスワードを設定する | /etc/shadow |
userdel | ユーザを削除する | /etc/passwd、/etc/shadow |
groupadd | グループを追加する | /etc/group、/etc/gshadow |
usermod | ユーザの所属グループなどを変更する | /etc/group など |
groupdel | グループを削除する | /etc/group、/etc/gshadow |
su -:ルートユーザへ変更
スーパユーザである root ユーザに変更するには、su - を実行します。ユーザ名を省略すると、root になります。- を付けると、root のログインシェルとして起動するので、環境変数が root のものになり、カレントディレクトリも root のホームディレクトリ(/root)になります。
[ec2-user@ip-10-0-1-81 ~]$ su -
パスワード: ルートユーザのパスワードを入力
最終ログイン: 2021/09/05 (日) 02:47:47 UTC日時 pts/1
[root@ip-10-0-1-81 ~]# pwd
/root
id:ユーザ情報の確認
自分がどのユーザでログインしているのかを、id コマンドで確認します。
# id
uid=0(root) gid=0(root) groups=0(root)
| 表示 | 意味 |
|---|---|
| uid=0(root) | ユーザ ID と、ユーザ名 |
| gid=0(root) | プライマリグループの ID と、グループ名 |
| groups=0(root) | 所属しているグループの一覧 |
ユーザ登録・削除
useradd:ユーザの追加
一般ユーザとして、user01 を追加します。ユーザを追加すると、/etc/passwd と /etc/shadow にエントリーが追加されます。この検証環境では、ユーザのホームディレクトリ(/home/user01)も作成されました。
# useradd user01
# tail -1 /etc/passwd
user01:x:1001:1001::/home/user01:/bin/bash
# tail -1 /etc/shadow
user01:!!:18875:0:99999:7:::
# ls -F /home/
ec2-user/ user01/
/etc/passwd の1行は、コロン(:)で区切られた7つの項目です。
| 項目 | 値の例 | 意味 |
|---|---|---|
| 1 | user01 | ユーザ名 |
| 2 | x | パスワード。x は、パスワードを /etc/shadow に保存していることを表す |
| 3 | 1001 | ユーザ ID |
| 4 | 1001 | プライマリグループの ID |
| 5 | (空) | コメント(氏名など) |
| 6 | /home/user01 | ホームディレクトリ |
| 7 | /bin/bash | ログインシェル |
useradd でホームディレクトリが作成されるかどうかは、/etc/login.defs の CREATE_HOME の設定で決まります。作成されない環境では、-m を付けると作成できます。
passwd:パスワード設定
user01 のログインパスワードを設定します。
# passwd user01
Changing password for user user01.
New password:パスワードを入力
Retype new password:パスワードを再入力
passwd: all authentication tokens updated successfully.
パスワードが設定されると、/etc/shadow の第2項目が、!! から、暗号化されたパスワードに変更されます。!! は、パスワードが設定されていない状態を表します。
# tail -1 /etc/shadow
user01:$6$HjriImNi$......kKTg1:18875:0:99999:7:::
userdel:ユーザ削除
user01 を削除します。何もオプションを付けないと、/etc/passwd や /etc/shadow から、そのユーザのエントリーが削除されるだけで、ホームディレクトリは残ります。-r を付けると、ホームディレクトリとメールスプールも削除されます。
# userdel -r user01
# ls -F /home/
ec2-user/
グループ追加・削除
groupadd:グループ追加
user_gr1 という名前のグループを作成します。作成されると、/etc/group と /etc/gshadow にエントリーが追加されます。
# groupadd user_gr1
# tail -1 /etc/group
user_gr1:x:1002:
# tail -1 /etc/gshadow
user_gr1:!::
usermod:ユーザの所属グループの変更
ユーザ user01 の所属グループを user_gr1 に変更します。現在 user01 が所属しているグループは、id コマンドで確認できます。
# id user01
uid=1001(user01) gid=1001(user01) groups=1001(user01)
# tail -1 /etc/group
user_gr1:x:1002:
# usermod -G user_gr1 user01
# id user01
uid=1001(user01) gid=1001(user01) groups=1001(user01),1002(user_gr1)
# tail -1 /etc/group
user_gr1:x:1002:user01
usermod -G は、補助グループ(プライマリグループ以外のグループ)の一覧を、指定したグループに置き換えます。以前に所属していた補助グループは外れます。下記の例では、user_gr1 に所属していた user01 が、user_gr2 に変更され、user_gr1 から外れています。
# id user01
uid=1001(user01) gid=1001(user01) groups=1001(user01),1002(user_gr1)
# groupadd user_gr2
# usermod -G user_gr2 user01
# id user01
uid=1001(user01) gid=1001(user01) groups=1001(user01),1003(user_gr2)
今の補助グループを残したまま、グループを追加する場合は、usermod -aG を使用します。-a は、-G と一緒に使い、「追加する」という意味です。
# id user01
uid=1001(user01) gid=1001(user01) groups=1001(user01),1002(user_gr1)
# usermod -aG user_gr2 user01
# id user01
uid=1001(user01) gid=1001(user01) groups=1001(user01),1002(user_gr1),1003(user_gr2)
groupdel:グループ削除
グループ user_gr2 を削除します。削除すると、user01 の所属グループからも user_gr2 がなくなります。
# id user01
uid=1001(user01) gid=1001(user01) groups=1001(user01),1002(user_gr1),1003(user_gr2),
# groupdel user_gr2
# id user01
uid=1001(user01) gid=1001(user01) groups=1001(user01),1002(user_gr1)
どれかのユーザのプライマリグループになっているグループは、groupdel で削除できません。先にそのユーザを削除します。
まとめ
ファイルの操作では、削除や上書きを確認する -i と、ディレクトリを対象にする -r を使い分けます。ユーザ・グループの管理では、コマンドが /etc 配下のどのファイルを更新するかを、tail や id で確認すると、動きがわかります。
| やりたいこと | コマンドの例 |
|---|---|
| 今いる場所を確認する | pwd |
| 更新日時が新しい順に詳細表示する | ls -lt |
| 隠しファイルも表示する | ls -a |
| 空ファイルを作成する | touch file1.txt |
| 途中のディレクトリも含めて作成する | mkdir -p dir2/dir3/dir4 |
| ホームディレクトリへ移動する | cd ~ |
| 確認しながら削除する | rm -i text4.txt |
| ディレクトリごと削除する | rm -r dir1 |
| ディレクトリをコピーする | cp -r dir1 dir3 |
| 確認しながら移動する | mv -i text1.txt dir1/ |
| ファイルをページ単位で表示する | less /var/log/messages |
| root になる | su - |
| ユーザを追加し、ホームも削除する | useradd user01/userdel -r user01 |
| 補助グループに追加する | usermod -aG user_gr2 user01 |
コメント