【入門】初心者が練習すべき Linux コマンドの一覧

初めて Linux のコマンドを学ぶ時は、ググるキーワードがわからず、1つずつ調べるのが大変です

そのため、本記事では上からコピペして実行することで、Linux でよく利用するコマンドを網羅的に理解できるようにしました。

関連記事:Linux の基本
学習ロードマップ

ファイル・ディレクトリの操作

使用 OS は Amazon Linux 2 です。
(一般的な Linux ディストリビューションなら動くと思います。)

touch ファイル作成

test.txt という名前のファイルを作ります。

touch test.txt

ls ディレクトリの内容一覧

ディレクトリとはフォルダのことです。

ls
test.txt

先程作成した test.txt ファイルが確認できます。

vi ファイル編集

test.txt の内容を編集します。

vi test.txt
test.txt

キーボードから「a」を入力すると、「コマンドモード→入力モード」に変更します。

そのまま好きな文字を入力します。

キーボードから「Esc」を入力すると、「入力モード→コマンドモード」に変更します。

コマンドモードで「:wq」と入力し、Enter を押すと上書き保存され、vi が終了します。

cat ファイルの内容を出力

cat test.txt
apple

先程 vi で編集した内容が確認できます。

echo テキストを表示

echo hoge
hoge

> リダイレクト (上書き)

echo hoge > test.txt
cat test.txt
hoge

「echo hoge」の出力が、「画面」から「ファイル (test.txt)」にリダイレクトされています。

>> リダイレクト (追記)

「>」では、リダイレクト先のファイルの内容が消え、新しく上書き保存されていました。

「>>」では、リダイレクト先のファイルの内容を残し、ファイルの最後に追記します。

echo add >> test.txt
cat test.txt
hoge
add

「hoge」を残しつつ、「add」が追記されていることが確認できます。

標準ストリーム

標準ストリームとは、デフォルトの入力/出力先です。

標準ストリームFD 番号デフォルト意味
標準入力 (stdin)0キーボードデータ入力元
標準出力 (stdout)1端末 (が表示されるディスプレイ)データ出力先
標準エラー出力 (stderr)2端末 (が表示されるディスプレイ)エラー出力先
実際にはカーネルがキーボードからの入力を受け取っているが、途中の経路は省略

先ほど紹介したリダイレクトは標準出力を「ディスプレイ」から「ファイル」に変更しています。

なお、リダイレクトのデフォルトの FD 番号は 1(標準出力) です。

つまり、「echo hoge > test.txt」と「echo hoge 1> test.txt」は同じです。

標準入力のリダイレクトを変更

標準入力を変更したい場合は、 FD 番号 0 (標準入力) を指定します。

cat 0< test.txt
hoge
add

つまり、「cat test.txt」と「cat 0< test.txt」は同じです。

なお、cat コマンドはファイルを指定しなかった場合、標準入力がキーボードになります。

cat

この状態でキーボードから好きな文字を入力して Enter を押すと、入力した文字が出力されます。

aaa
aaa

Ctrl + C プロセスの中断

先程の cat コマンドによる標準入力の受付を終了するために、キーボードから「Ctrl + C」 を入力します。

grep 行のパターンマッチ検索

grep ho test.txt
hoge

-A 後の行も表示

オプション -A をつけると、検索した行の後も表示します。

grep hoge test.txt -A 1
hoge
add

hoge の1行後の行も表示されました。

-B 前の行も表示

オプション -A をつけると、検索した行の前も表示します。

grep add test.txt -B 1
hoge
add

| パイプ (標準出力を標準入力に利用)

「左側のコマンドの標準出力 (結果) 」を、「右側のコマンドの標準入力」に利用します。

echo abcdefg |grep cd
abcdefg

上記は abcdefg の中に、cd という文字列が含まれるか grep で検索しています。

今まで:grep の標準入力を、ファイルの内容にだった
今回:grep の標準入力を、echo の標準出力にする

mkdir ディレクトリを作成

mkdir newdir
ls -l
drwxrwxr-x 2 ec2-user ec2-user  6  3月 16 21:46 newdir
-rw-rw-r-- 1 ec2-user ec2-user 53  3月 16 21:43 test.txt

先頭に「d」とついているファイルがディレクトリ (フォルダ)です。

「newdir」ディレクトリを作成できたことが確認できました。

-p 再帰的にディレクトリを作成

mkdir -p recursive/newdir
ls -l recursive
drwxrwxr-x 2 ec2-user ec2-user 6  3月 16 21:50 newdir

recursive ディレクトリの中に newdir ディレクトリを作成できたことを確認できます。

pwd 現在のディレクトリを確認

pwd
/home/ec2-user

cd 現在のディレクトリを移動

cd newdir
pwd
/home/ec2-user/newdir

cp ファイルコピー

親ディレクトリ (/home/ec2-user/) から 現在のディレクトリ (/home/ec2-user/newdir) にファイルをコピーします。

cp ../test.txt ./test.txt

なお、「../」は親ディレクトリ、「./」は現在のディレクトリを示します。

ls ../
newdir    recursive test.txt
ls ./
test.txt

rm ファイルの削除

rm test.txt
ls test.txt
ls: ./test.txt にアクセスできません: No such file or directory

ファイルが削除されていることが確認できます。

mv ファイルの移動

mv ../test.txt ./test.txt
ls ../
newdir    recursive
ls ./
test.txt

親ディレクトリ (../) から test.txt が消え、現在のディレクトリ (./) に移動しています。

find ファイルを検索

find ./ -name test*
./test.txt

「./」は現在のディレクトリ (カレントディレクトリ) を示します。

less ファイルをページ表示

for i in {1..100}; do echo $RANDOM>>rand.txt; done
less rand.txt

ファイルの内容がページで表示されていることが確認できます。

マウスでスクロール、「G」でページの最後に移動、「q」で less コマンドを終了します。

cat rand.txt

cat の場合はファイルの全ての内容が表示され、今までのコマンドが上の方に流れてしまいます。

権限 (パーミッション)

パーミッション パーミッションとは、ファイルに設定する「ユーザー」・「ユーザーグループ」ごとのアクセス権限のことです。

パーミッションの検証準備

検証用に test.sh を作成します。

echo "echo success" > test.sh

権限がない場合は、以下のように「Permission denied」が発生します。

./test.sh
-bash: ./test.sh: Permission denied

ls -l 権限の確認

ls -l test.sh
-rw-rw-r-- 1 ec2-user ec2-user 13  3月 21 13:19 test.sh

「-rw-rw-r-- 1 root root」は以下の意味を持ちます。

意味
1 文字目 -ファイルの種類:レギュラーファイル
ファイルの種類一覧はちら
2, 3, 4 文字目 rw-所有者の権限
r:読み取り
w:書き込み
x:実行
5, 6, 7 文字目 rw--所有グループの権限
8, 9, 10 文字目 r---その他
1ハードリンクの数
ec2-user所有ユーザー
ec2-user所有グループ
  • 所有ユーザー ec2-user は「読み取り」・「書き込み」権限があります
  • 所有グループ ec2-user は「読み取り」・「書き込み」権限があります
  • それ以外のユーザー or グループは「読み取り」権限があります

なお、ユーザー、グループの詳細については後述します。

chmod 権限の設定

chmod <モード> ファイル

chmod u+x test.sh

上記の例では、<モード> で、「所有ユーザー "u"」に「実行 "x"」権限を「付与 "+"」しています。

モードの詳細は以下のとおりです。

対象意味
uユーザー
gグループ
oその他
aすべて
操作意味
=指定した権限にする
+指定した権限を付与する
-指定した権限を除去する
権限意味
r読み取り
w書き込み
x実行
ls -l test.txt
-rwxrw-r-- 1 ec2-user ec2-user 54  3月 21 08:56 test.txt

2, 3, 4 文字目が「rwx」となっているため、「所有ユーザー」に「実行」権限を「付与」できています。

./test.sh
success

test.sh が実行できるようになりました。

sudo スーパーユーザーで実行

sudo <コマンド> で、コマンドをスーパーユーザー (root ユーザー) として実行します。

less /var/log/messages
/var/log/messages: Permission denied

Permission denied が発生しました。次のスーパーユーザーで less コマンドを実行します。

sudo less /var/log/messages

スーパーユーザーはすべての権限を持つため、less コマンドが実行できました。

なお、初めて sudo コマンドを実行する場合は、以下の表示がでますので、よく読んだ上でパスワードを入力してください。

あなたはシステム管理者から通常の講習を受けたはずです。
これは通常、以下の3点に要約されます:

    #1) 他人のプライバシーを尊重すること。
    #2) タイプする前に考えること。
    #3) 大いなる力には大いなる責任が伴うこと。

[sudo] <ユーザー名> のパスワード:

chown ファイルの所有者を変更

chown <ユーザー[:グループ]> <ファイル>

sudo chown root:root test.sh
ls -l test.sh
-rwxrw-r-- 1 root root 13  3月 21 13:29 test.sh

所有ユーザーも所有グループも root になっていることが確認できます。

./test.sh
-bash: ./test.sh: Permission denied

実行ユーザーは root では無いので、実行を防いでくれています。

sudo ./test.sh
success

root ユーザー (スーパーユーザー) では、実行に成功します。

ユーザー・グループの操作

who ログインユーザーを表示

who
ec2-user pts/0        2022-03-19 11:37

useradd 新規ユーザーの作成

useradd <ユーザー名>

sudo useradd hoge

id ユーザーの確認 (ID の表示)

id hoge
uid=1006(hoge) gid=1006(hoge) groups=1006(hoge)

ユーザー ID が 1006 で、ユーザー「hoge」が作成されていることが確認できます。

ユーザーはグループに所属できます。

ユーザー「hoge」はグループ ID 1006 の実効グループ「hoge」に所属します。

/etc/passwd ユーザーの一覧を確認

cat /etc/passwd
(中略)
hoge:x:1006:1006::/home/hoge:/bin/bash

フィールドは「:」で区切られていて、それぞれの意味は以下のとおりです。

フィールド意味
第1フィールドユーザ名
第2フィールドパスワード (シャドウパスワード)
セキュリティの都合で(☓)と表記
第3フィールドユーザID
第4フィールドグループID
第5フィールドコメント欄
第6フィールドホームディレクトリ
第7フィールドログインシェル
cat /etc/passwd|grep hoge
hoge:x:1006:1006::/home/hoge:/bin/bash

passwd パスワードの変更

sudo passwd hoge
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。

変更したいパスワードを2回パスワード入力します。

su 別のユーザーでログイン

su hoge
パスワード:

パスワードを入力すると、「hoge@<ipアドレス>」の表示となる (設定による) ので、操作するユーザーが「hoge」であることがわかります。

exit ログアウト (シェルの終了)

exit

su コマンドを実行する前のユーザーに戻っていることが確認できます。

groupadd 新規グループを作成

sudo groupadd tech

/etc/group グループの一覧を確認

cat /etc/group
hoge:x:1006:hoge
tech:x:1007:
cat /etc/group|grep tech
tech:x:1007:

gpasswd -a グループにユーザーを追加

sudo gpasswd -a hoge tech
id hoge
uid=1006(hoge) gid=1006(hoge) groups=1006(hoge),1007(tech)

1007(tech) が実効グループに追加されていることがわかります。

gpasswd -d グループからユーザーを削除

sudo gpasswd -d hoge tech
id hoge
uid=1006(hoge) gid=1006(hoge) groups=1006(hoge)

1007(tech) が実効グループから削除されていることがわかります。

groupdel グループを削除

sudo groupdel tech
cat /etc/group|grep tech

グループ「tech」が削除できていることが確認できます。

userdel ユーザーの削除

sudo userdel hoge
cat /etc/passwd|grep hoge

ユーザー「hoge」が削除できていることが確認できます。

その他

history コマンド履歴

history
(中略)
 1326  cat /etc/passwd|grep hoge
 1327  history

man コマンドのマニュアル

man <コマンド> でコマンドのマニュアルが読めます。

man ls

英語だと読む気が失せるので日本語化します。

man 日本語化

sudo yum install man-pages-ja -y
echo $LANG
ja_JP.utf8

「ja_JP.utf8」なら OK です。それ以外なら「export LANG=ja_JP.utf8」を実行します。

man ls

man のマニュアルが日本語になりました。

関連情報

学習ロードマップ
関連記事:Linux の基本
Linux カーネルの機能
ネットワークのコマンド
関連記事:サーバー