初めて Linux のコマンドを学ぶ時は、ググるキーワードがわからなかったり、1つずつ調べるのが大変です。
そのため、本記事の上から順にコピペして実行することで、Linux でよく利用するコマンドを網羅的に理解できるようにしました。
関連記事:Linux の基本機能 | |||||
---|---|---|---|---|---|
ファイル・ディレクトリの操作
使用 OS は Amazon Linux 2 です。
(一般的な Linux ディストリビューションなら動くと思います。)
touch ファイル作成
test.txt という名前のファイルを作ります。
ls ディレクトリの内容一覧
ディレクトリとはフォルダのことです。
test.txt
先程作成した test.txt ファイルが確認できます。
vi ファイル編集
test.txt の内容を編集します。
test.txt
キーボードから「a」を入力すると、「コマンドモード→入力モード」に変更します。
そのまま好きな文字を入力します。
キーボードから「Esc」を入力すると、「入力モード→コマンドモード」に変更します。
「:wq」と入力し、Enter を押すと上書き保存され、vi が終了します。
cat ファイルの内容を出力
apple
先程 vi で編集した内容が確認できます。
mkdir ディレクトリを作成
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 再帰的にディレクトリを作成
drwxrwxr-x 2 ec2-user ec2-user 6 3月 16 21:50 newdir
recursive ディレクトリの中に newdir ディレクトリを作成できたことを確認できます。
pwd 現在のディレクトリを確認
/home/ec2-user
cd 現在のディレクトリを移動
/home/ec2-user/newdir
cp ファイルコピー
親ディレクトリからファイルをコピーします。
(/home/ec2-user/newdir を親ディレクトリは /home/ec2-user)
なお、「../」は親ディレクトリを示します。
test.txt
rm ファイルの削除
ファイルが削除され、何も表示されません。
mv ファイルの移動
test.txt
ls: ../test.txt にアクセスできません: No such file or directory
find ファイルを検索
find <検索パス> -name <ファイル名>
./test.txt
「./」は現在のディレクトリ (カレントディレクトリ) を示します。
echo テキストを表示
hoge
> リダイレクト
hoge
「echo hoge」の出力が、「画面」から「test.txt」にリダイレクトされていることがわかります。
なお、この「画面」のことを「標準出力」と言います。
標準ストリーム
標準ストリームとは、以下の3つを指します。
「echo hoge > test.txt」と「echo hoge 1> test.txt」は同じ意味です。
(「標準出力」を「画面」から「test.txt」に変更するという意味です)
標準エラー出力
-bash: cho: コマンドが見つかりません
「標準エラー出力 (画面)」 にエラーメッセージが表示されます。
「標準出力」の「test.txt」には何も出力されていません。これは標準出力が出力が無いためです。
「標準エラー出力」を「test.txt」にリダイレクトしたため、「標準出力 (画面)」にエラーメッセージが表示されなくなりました。
-bash: cho: コマンドが見つかりません
「test.txt」に「標準エラー出力」の内容がリダイレクトされていることを確認できました。
>> 追記
今までの「>」では、リダイレクト先のファイルの内容が消え、新しく上書き保存されていました。
「>>」では、リダイレクト先のファイルの内容はそのままに、ファイルの最後に内容を追記します。
-bash: cho: コマンドが見つかりません add2
grep 行のパターンマッチ検索
grep <検索する正規表現> <ファイル名>
add2
オプション 「-A」、「-B」前後の行を検索
オプション -B (Before 前の行を検索)
grep <検索する正規表現> <ファイル名> -B <行数>
-bash: cho: コマンドが見つかりません
add2
オプション -A (After 後の行を検索)
-bash: cho: コマンドが見つかりません
add2
| パイプ (標準出力を標準入力に利用)
「左側のコマンドの標準出力 (結果) 」を、「右側のコマンドの標準入力 (キーボードからの入力の代わり) 」に利用します。
パイプの仕組み (動作解説)
先程のパイプを含むコマンドを、2つに分解すると以下のとおりです。
-bash: cho: コマンドが見つかりません add2
add2
「Enter」を押すと、標準入力 (キーボード) から入力した文字列のうち、「grep で検索している「ad」が赤くなります。
つまり、「cat test.txt |grep ad」の「| (パイプ)」は、「cat test.txt」の標準出力を、「grep ad」の標準入力として利用する役割を持ちます。
Ctrl + C プロセスの中断
先程の grep コマンドによる標準入力の受付を終了するためには、キーボードから「Ctrl + C」 を入力します。
less ファイルをページ表示
マウスでスクロール、「G」でページの最後に移動、「q」で less コマンドを終了します。
cat の場合はファイルの全ての内容が表示され、今までのコマンドが上の方に流れてしまいます。
権限 (パーミッション)
パーミッションの検証準備
検証用に test.sh を作成します。
権限がない場合は、以下のように「Permission denied」が発生します。
-bash: ./test.sh: Permission denied
ls -l 権限の確認
-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 <モード> ファイル
上記の例では、<モード> で、「所有ユーザー "u"」に「実行 "x"」権限を「付与 "+"」しています。
モードの詳細は以下のとおりです。
対象 | 意味 |
---|---|
u | ユーザー |
g | グループ |
o | その他 |
a | すべて |
操作 | 意味 |
---|---|
= | 指定した権限にする |
+ | 指定した権限を付与する |
- | 指定した権限を除去する |
権限 | 意味 |
---|---|
r | 読み取り |
w | 書き込み |
x | 実行 |
-rwxrw-r-- 1 ec2-user ec2-user 54 3月 21 08:56 test.txt
2, 3, 4 文字目が「rwx」となっているため、「所有ユーザー」に「実行」権限を「付与」できています。
success
test.sh が実行できるようになりました。
sudo スーパーユーザーで実行
sudo <コマンド> で、コマンドをスーパーユーザー (root ユーザー) として実行します。
/var/log/messages: Permission denied
Permission denied が発生しました。次のスーパーユーザーで less コマンドを実行します。
スーパーユーザーはすべての権限を持つため、less コマンドが実行できました。
なお、初めて sudo コマンドを実行する場合は、以下の表示がでますので、よく読んだ上でパスワードを入力してください。
あなたはシステム管理者から通常の講習を受けたはずです。 これは通常、以下の3点に要約されます: #1) 他人のプライバシーを尊重すること。 #2) タイプする前に考えること。 #3) 大いなる力には大いなる責任が伴うこと。 [sudo] <ユーザー名> のパスワード:
chown ファイルの所有者を変更
chown <ユーザー[:グループ]> <ファイル>
-rwxrw-r-- 1 root root 13 3月 21 13:29 test.sh
所有ユーザーも所有グループも root になっていることが確認できます。
-bash: ./test.sh: Permission denied
実行ユーザーは root では無いので、実行を防いでくれています。
success
root ユーザー (スーパーユーザー) では、実行に成功します。
ユーザー・グループの操作
who ログインユーザーを表示
ec2-user pts/0 2022-03-19 11:37
useradd 新規ユーザーの作成
useradd <ユーザー名>
id ユーザーの確認 (ID の表示)
uid=1006(hoge) gid=1006(hoge) groups=1006(hoge)
ユーザー ID が 1006 で、ユーザー「hoge」が作成されていることが確認できます。
ユーザーはグループに所属できます。
ユーザー「hoge」はグループ ID 1006 の実効グループ「hoge」に所属します。
/etc/passwd ユーザーの一覧を確認
(中略) hoge:x:1006:1006::/home/hoge:/bin/bash
フィールドは「:」で区切られていて、それぞれの意味は以下のとおりです。
フィールド | 意味 |
---|---|
第1フィールド | ユーザ名 |
第2フィールド | パスワード (シャドウパスワード) セキュリティの都合で(☓)と表記 |
第3フィールド | ユーザID |
第4フィールド | グループID |
第5フィールド | コメント欄 |
第6フィールド | ホームディレクトリ |
第7フィールド | ログインシェル |
hoge:x:1006:1006::/home/hoge:/bin/bash
passwd パスワードの変更
新しいパスワード: 新しいパスワードを再入力してください: passwd: すべての認証トークンが正しく更新できました。
変更したいパスワードを2回パスワード入力します。
su 別のユーザーでログイン
パスワード:
パスワードを入力すると、「hoge@<ipアドレス>」の表示となる (設定による) ので、操作するユーザーが「hoge」であることがわかります。
exit ログアウト (シェルの終了)
su コマンドを実行する前のユーザーに戻っていることが確認できます。
groupadd 新規グループを作成
/etc/group グループの一覧を確認
hoge:x:1006:hoge tech:x:1007:
tech:x:1007:
gpasswd -a グループにユーザーを追加
uid=1006(hoge) gid=1006(hoge) groups=1006(hoge),1007(tech)
1007(tech) が実効グループに追加されていることがわかります。
gpasswd -d グループからユーザーを削除
uid=1006(hoge) gid=1006(hoge) groups=1006(hoge)
1007(tech) が実効グループから削除されていることがわかります。
groupdel グループを削除
グループ「tech」が削除できていることが確認できます。
userdel ユーザーの削除
ユーザー「hoge」が削除できていることが確認できます。
その他
history コマンド履歴
(中略) 1326 cat /etc/passwd|grep hoge 1327 history
man コマンドのマニュアル
man <コマンド> でコマンドのマニュアルが読めます。
英語だと読む気が失せるので日本語化します。
man 日本語化
ja_JP.utf8
「ja_JP.utf8」なら OK です。それ以外なら「export LANG=ja_JP.utf8」を実行します。
man のマニュアルが日本語になりました。
関連情報
学習ロードマップ | |||||
---|---|---|---|---|---|
関連記事:Linux の基本機能 | |||||
---|---|---|---|---|---|
Linux カーネルの機能 | |||
---|---|---|---|
ネットワークのコマンド | |||
---|---|---|---|
関連記事:サーバー | ||||
---|---|---|---|---|