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

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

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

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

スポンサーリンク

初めに

本記事は Linux の基本シリーズの第1回目です。そのほかの記事は以下のとおりです。

また、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 カーネル