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

初めて Linux のコマンドを学ぶ時は、ググるキーワードがわからなかったり、1つずつ調べるのが面倒だったりしました。

そのため、本記事の上から順にコピペして実行することで、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 で編集した内容が確認できます。

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
ls

cp ファイルコピー

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

cp ../test.txt test.txt

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

ls
test.txt

rm ファイルの削除

rm test.txt
ls

ファイルが削除され、何も表示されません。

mv ファイルの移動

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

find ファイルを検索

find <検索パス> -name <ファイル名>

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

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

echo テキストを表示

echo hoge
hoge

> リダイレクト

echo hoge > test.txt
cat test.txt
hoge

「echo hoge」の出力が、「画面」から「test.txt」にリダイレクトされていることがわかります。

なお、この「画面」のことを「標準出力」と言います。

標準ストリーム

標準ストリームとは、以下の3つを指します。

入出力名番号デフォルト意味
標準入力0キーボードデータ入力元
標準出力1画面データ出力先
標準エラー出力2画面エラー出力先

「echo hoge > test.txt」と「echo hoge 1> test.txt」は同じ意味です。
(「標準出力」を「画面」から「test.txt」に変更するという意味です)

標準エラー出力

cho error 1> test.txt
-bash: cho: コマンドが見つかりません

「標準エラー出力 (画面)」 にエラーメッセージが表示されます。

cat test.txt

「標準出力」の「test.txt」には何も出力されていません。これは標準出力が出力が無いためです。

cho error 2> test.txt

「標準エラー出力」を「test.txt」にリダイレクトしたため、「標準出力 (画面)」にエラーメッセージが表示されなくなりました。

cat test.txt
-bash: cho: コマンドが見つかりません

「test.txt」に「標準エラー出力」の内容がリダイレクトされていることを確認できました。

>> 追記

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

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

echo add2 >> test.txt
cat test.txt
-bash: cho: コマンドが見つかりません
add2

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

grep <検索する正規表現> <ファイル名>

grep ad test.txt
add2

オプション 「-A」、「-B」前後の行を検索

オプション -B (Before 前の行を検索)

grep <検索する正規表現> <ファイル名> -B <行数>

grep ad test.txt -B 1
-bash: cho: コマンドが見つかりません
add2

オプション -A (After 後の行を検索)

grep bash test.txt -A 1
-bash: cho: コマンドが見つかりません
add2

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

「左側のコマンドの標準出力 (結果) 」を、「右側のコマンドの標準入力 (キーボードからの入力の代わり) 」に利用します。

cat test.txt |grep ad
add2

パイプの仕組み (動作解説)

先程のパイプを含むコマンドを、2つに分解すると以下のとおりです。

cat test.txt
-bash: cho: コマンドが見つかりません
add2
grep ad
-bash: cho: コマンドが見つかりません
add2
add2

「Enter」を押すと、標準入力 (キーボード) から入力した文字列のうち、「grep で検索している「ad」が赤くなります。

つまり、「cat test.txt |grep ad」の「| (パイプ)」は、「cat test.txt」の標準出力を、「grep ad」の標準入力として利用する役割を持ちます。

Ctrl + C プロセスの中断

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

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
test.txt

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
ユーザ hoge をグループ tech に追加
id hoge
uid=1006(hoge) gid=1006(hoge) groups=1006(hoge),1007(tech)

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

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

sudo gpasswd -d hoge tech
ユーザ 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 のカーネルに関する記事一覧

参考書籍一覧

Linux のブート、階層構造、コマンドなど

個人的には、こちらで実践を通じて学ぶ方が好きです