【まとめ】Linux 基本コマンド一覧と使用例

Linux の初心者向けに、よく使うコマンドと使用例をまとめます。前半はファイル・ディレクトリを管理するコマンド、後半はユーザ・グループを管理するコマンドです。実行例は、それぞれのコマンドを実行したときの出力です。

この記事でわかること
  1. pwd・ls・cd で場所と中身を確認し、touch・mkdir・rm・cp・mv でファイルを操作する方法
  2. -i(確認)や -r(ディレクトリごと)など、よく使うオプションの意味
  3. useradd・passwd・usermod・groupadd などで、ユーザとグループを管理し、更新されるファイルを確認する方法
実行例の見方

プロンプトの $ は一般ユーザ、# は root での実行を表します。実行例の日付、ユーザ名、ホスト名は、検証した環境のものです。ls -l の「合計」や「9月」は日本語表示の環境の出力で、英語の環境では「total」や「Sep」のように表示されます。

  1. ファイル・ディレクトリを管理するコマンド
    1. pwd:カレントディレクトリの表示
    2. ls:ファイル・ディレクトリ一覧の表示
      1. 一覧表示
      2. 隠しファイルを表示:-a
      3. 隠しファイルを表示(. と .. を除く):-A
      4. 詳細表示:-l
      5. 更新日時が新しい順に詳細表示:-lt
      6. 更新日時が古い順に詳細表示:-ltr
      7. ファイルタイプを表示:-F
    3. touch:空ファイルを作成
      1. ファイル新規作成
      2. 日付を指定:-d
    4. mkdir:ディレクトリを作成
      1. ディレクトリ新規作成
      2. パスの途中のディレクトリを含めて複数作成:-p
    5. cd:ディレクトリの位置を変更
      1. 1階層上に移動:../
      2. 2階層上に移動:../../
      3. ホームディレクトリへ移動:~
      4. ルートディレクトリから直接移動
    6. rm:ファイル削除
      1. ファイル削除
      2. 複数ファイルを一括削除
      3. ファイルを削除してよいか確認:-i
      4. ディレクトリを削除:-r
    7. cp:ファイル・ディレクトリのコピー
      1. ファイルをコピー
      2. ディレクトリをコピー:-r
      3. 上書き確認:-i
    8. mv:ファイルの移動、ファイル名変更
      1. ファイルの移動
      2. ファイルのリネーム
      3. 上書き確認:-i
    9. less:ファイル内容をページ単位で表示
  2. ユーザ・グループを管理するコマンド
    1. su -:ルートユーザへ変更
    2. id:ユーザ情報の確認
    3. ユーザ登録・削除
      1. useradd:ユーザの追加
      2. passwd:パスワード設定
      3. userdel:ユーザ削除
    4. グループ追加・削除
      1. groupadd:グループ追加
      2. usermod:ユーザの所属グループの変更
      3. groupdel:グループ削除
  3. まとめ

ファイル・ディレクトリを管理するコマンド

この章で使うコマンドは、次のとおりです。

コマンド用途
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のとおりです。

/homevarec2-userdir1logホーム(~)ルートec2-user から見た移動cd dir1/1つ下へcd ../1つ上へcd ../../2つ上へcd ~ホームへcd /var/log/ルートからの指定太い紺の箱が、作業中のディレクトリ(/home/ec2-user)
図1 ディレクトリの階層と、cd での移動

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 で削除したものは元に戻せない

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

表示した画面の中で、次のキーを使用します。

キー動作
e1行下に進む
f1画面分下に進む
d半画面分下に進む
y1行上に戻る
b1画面分上に戻る
u半画面分上に戻る
g先頭行に移動する
G末尾に移動する
50G50行目に移動する
/検索する(/ に続けて文字列を入力して 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つの項目です。

項目値の例意味
1user01ユーザ名
2xパスワード。x は、パスワードを /etc/shadow に保存していることを表す
31001ユーザ ID
41001プライマリグループの 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 と一緒に使い、「追加する」という意味です。

現在: user_gr1補助グループusermod -G user_gr2 user01usermod -aG user_gr2 user01user_gr2 だけになる(user_gr1 は外れる)user_gr1 と user_gr2 の両方になる-G は補助グループの一覧を置き換える。-a を付けると、今のグループに追加する
図2 usermod -G と -aG の違い
# 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

コメント