22
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

最低限のLinux基本操作は少しずつ慣れてきたけどは、もう少し効率的に操作できるようになりたい!
そんな初心者が次のステップに行くための、知っておくとに役立つコマンドをまとめてみました。

この記事では、単にコマンドを覚えるのではなく、実際に手を動かしながら、現場でよく使う「ちょっと便利なテクニック」を練習問題として紹介していきます。最後に確認テストも用意しているので、ぜひ挑戦してみてください!

0. 練習環境の準備

  • Linux環境を用意する

(例)

  • Windows:WSL(Ubuntu)
  • macOS:ターミナル
  • クラウド:Cloud Shell(AWS / GCP / OCI など)

ターミナルを開いて、次が動けば準備完了です。

whoami
pwd
  • 作業用ディレクトリを作成
mkdir unix_practice
cd unix_practice

それでは始めていきましょう!

1. ファイルを作る(ヒアドキュメント)

まずは、練習で使うデータを作ります。

cat << EOF > long_file_name_for_history_practice.txt
apple
banana
grape
EOF

確認:

cat long_file_name_for_history_practice.txt

これは ヒアドキュメントという書き方で、
複数行の文字列をまとめてファイルに書き込む方法です。
cat << EOF は、EOF が出てくるまでの入力を
標準入力として cat に渡し、ファイルに書き込む構文です。
複数行のテキストを一度に作りたいときに便利です。

2. ファイルの中身を検索する(grep)

作ったファイルの中から、特定の文字列を探します。

grep apple long_file_name_for_history_practice.txt

3. 直前の引数を再利用する(!$)

直前のコマンドで使った 長いファイル名を、
手入力せずに再利用します。

vi !$

(すぐ閉じてOKです)

例えば、cat で中身を見たファイルをそのまま編集する時、「今見たファイルをそのまま開いて編集」のような場面で使えますね。

4. エディタを使わずに新しいファイルを作る(cat >)

次の内容を memo.txt に作成してください。

cat > memo.txt

入力内容:

TODO
- write report
- review
- submit

終了は Ctrl + D

5. 既存ファイルに追記する(cat >>)

作成したファイルの末尾に追記します。

cat >> memo.txt

入力内容:

- follow up

6. 変数展開を理解する(ヒアドキュメント)

変数展開あり

cat << EOF > env_info.txt
User: $USER
Home: $HOME
EOF

確認:

cat env_info.txt

(実行例)

ubuntu@ubuntu:~/unix_practice$ cat << EOF > env_info.txtinfo.txt
User: $USER
Home: $HOME
EOF
ubuntu@ubuntu:~/unix_practice$ ls
env_info.txt  long_file_name_for_history_practice.txt  memo.txt
ubuntu@ubuntu:~/unix_practice$ cat env_info.txt
User: ubuntu
Home: /home/ubuntu

この書き方では、$USER$HOME
コマンド実行時に実際の値へ置き換えられてから
ファイルに書き込まれます。

変数展開なし

EOFをシングルクォートで囲んでいるため、ヒアドキュメント内で変数展開が行われません。
$USER$HOME は文字列のままファイルに書き込まれます。

cat << 'EOF' > env_info_literal.txt
User: $USER
Home: $HOME
EOF

(実行例)

ubuntu@ubuntu:~/unix_practice$ cat << 'EOF' > env_info_literal.txt
User: $USER
Home: $HOME
EOF
ubuntu@ubuntu:~/unix_practice$ cat env_info_literal.txt
User: $USER
Home: $HOME

7. 実行ユーザーとシェルを確認する

これらのコマンドは、
「誰が」「どのシェルで」作業しているかを確認するためのものです。
whoami は実行ユーザー、echo $0 は使用中のシェルを表示します。
ps -p $$ では、現在のシェルプロセスを詳細付きで確認できます。

whoami

表示されたユーザー名は root か、それとも一般ユーザーか確認しましょう。

echo $0

bash / sh / zsh のどれが表示されましたか?それは 自分が想定しているシェルでか確認してみましょう。

ps -p $$

ps -p $$ は、「今このターミナルで動いているシェル」を確認するコマンドです。

(実行例)

ubuntu@ubuntu:~/unix_practice$ ps -p $$
    PID TTY          TIME CMD
 716588 pts/0    00:00:00 bash

PID はそのシェルのプロセスID、TTY は紐づいている端末を表します。
CMD が bash なので、現在のシェルは bash であることが分かります。

8. ファイル名を変更し、引数を使い回す

touch original_name.txt
mv original_name.txt renamed_file.txt

直前の引数だけを再利用して、
シンボリックリンクを作成します。

ln -s !$ !:1

!$
→ 直前のコマンドの 最後の引数
renamed_file.txt

!:1
→ 直前のコマンドの 最初の引数
original_name.txt

つまり、このコマンドは、renamed_file.txt へのリンクをriginal_name.txt という名前で作るという意味になります。

9. 大きなファイルを探す(df/find)

ディスクの使用状況を確認します。

df -h

-h はサイズを人が読みやすい形式で表示します

ホームディレクトリ配下で、
1MB以上のファイルを探します。

find ~ -size +1M -exec ls -lh {} \;

件数を確認:

find ~ -size +1M | wc -l

10. Webの内容を取得して加工する(curl + grep)

Webページを取得します。

curl -s https://example.com

<title> を含む行だけ表示:

curl -s https://example.com | grep title

Webページをファイルとして保存:

curl -s -o example.html https://example.com

curl は
「Webをブラウザで見る」以外の選択肢を提供するコマンドです。
確認・取得・保存を、すべてコマンドラインで完結できます。

11. ログを解析する(grep / awk)

ログファイルを使って、
**「必要な行を絞る」「必要な部分だけ取り出す」**練習をします。

ログファイルを作成します。

cat << EOF > app.log
info: start
error: file not found
warning: low memory
error: timeout
EOF

error で始まる行だけ表示:

grep '^error' app.log

: の前の文字列だけ表示:

awk -F: '{print $1}' app.log

grep で 行を絞り、awk で 中身を切り出す。この2つを組み合わせることでエラーの内容だけ表示する、というようなことも出来ます。

(実行例)

ubuntu@ubuntu:~/unix_practice$ grep '^error' app.log
error: file not found
error: timeout
ubuntu@ubuntu:~/unix_practice$ awk -F: '{print $1}' app.log
info
error
warning
error
ubuntu@ubuntu:~/unix_practice$ grep '^error' app.log | awk -F: '{print $2}'
 file not found
 timeout

上記のように正規表現を効果的に使うことで、grep で「どの行を対象にするか」を細かく指定することができます。

パターン 意味 用途例
^ 行の先頭 行頭が特定の文字列かどうか
$ 行の末尾 行末が特定の文字列かどうか
[] 括弧内のいずれか 特定の文字種を含む行
[^ ] 否定(〜以外) 数字以外の文字を含む行
. 任意の1文字 文字数や位置が決まったパターン
* 直前の文字の0回以上 同じ文字の繰り返し

12. ディレクトリ移動を管理する(pushd / popd)

pushd / popd は、
移動したディレクトリをスタック(履歴)として管理するためのコマンドです。
「元の場所に戻る」を何度も行う作業で特に便利です。

pushd .
pushd /etc
pushd /var
dirs
popd
popd
  • pushd <dir>:移動しつつ、元の場所を記録する
  • dirs:移動履歴(スタック)を表示
  • popd:1つ前の場所に戻る
    → 元のディレクトリを意識せずに移動できるのがポイントです。

13. データを集計する(awk)

CSVファイルを作成します。

cat << EOF > sales.csv
Alice,10,20,30
Bob,5,15,10
Charlie,8,12,20
EOF
  • 1行が1人分のデータ
  • カンマ区切りで「名前, 数値, 数値, 数値」が並んでいます

名前と合計値を表示:

awk -F, '{print $1,$2+$3+$4}' sales.csv

このコマンドでやっていること

  • -F,
    → 区切り文字を カンマ に指定しています

  • $1
    → 1列目(名前)

  • $2 + $3 + $4
    → 2〜4列目の数値を足し算

  • print
    → 計算結果を表示

つまり、「各行について、名前と数値の合計を表示する」という処理をしています。

合計が40以上の人だけ表示:

awk -F, '{sum=$2+$3+$4; if(sum>=40) print $1,sum}' sales.csv

確認テストをしてみよう!

ここまで

確認テスト(実践)

問題1

次の内容を持つファイル check1.txt を作成してください。

red
blue
green
答え(クリックして表示)
cat << EOF > check1.txt
red
blue
green
EOF

問題2

check1.txt の中から blue を含む行だけ表示してください。

答え(クリックして表示)
grep blue check1.txt

問題3

直前のコマンドで使ったファイルを、
ファイル名を入力せずに表示してください。

答え(クリックして表示)
cat !$

問題4

note.txt を作成し、次の順で内容を完成させてください。

FIRST
SECOND
答え(クリックして表示)
cat > note.txt
FIRST
Ctrl+D
cat >> note.txt
SECOND
Ctrl+D

問題5

実行中のユーザー名が入ったファイル user.txt を作成してください。

答え(クリックして表示)
cat << EOF > user.txt
User: $USER
EOF

問題6

$USER という文字列がそのまま入るファイル
user_literal.txt を作成してください。

答え(クリックして表示)
cat << 'EOF' > user_literal.txt
User: $USER
EOF

問題7

今使っているシェルを確認してください。

答え(クリックして表示)
echo $0

または

ps -p $$

問題8

a.txt を作成し、b.txt に名前を変更してください。
その後、変更後のファイルを 引数の再利用で表示してください。

答え(クリックして表示)
touch a.txt
mv a.txt b.txt
cat !$

問題9

ディスクの使用状況を確認してください。

答え(クリックして表示)
df -h

問題10

ホームディレクトリ配下で、
1MBより大きいファイルを探してください。

答え(クリックして表示)
find ~ -size +1M

問題11

Webページを取得し、page.html という名前で保存してください。

答え(クリックして表示)
curl -s -o page.html https://example.com

問題12

次のファイルがあるとします。

cat << EOF > log.txt
info: start
error: failed
warning: low memory
error: timeout
EOF

error の行だけを表示してください。

答え(クリックして表示)
grep '^error' log.txt

問題13

先ほどの log.txt から、
: の前の文字列だけを表示してください。

答え(クリックして表示)
awk -F: '{print $1}' log.txt

問題14

今いるディレクトリを記録したあと /etc に移動し、
元の場所に戻ってください。

答え(クリックして表示)
pushd .
pushd /etc
popd

おわりに

お疲れ様でした!最後の確認テストまで完走できたでしょうか。

今回紹介したテクニックは、どれも実務のちょっとした場面で役立つものばかりです。一度にすべてを覚えるのは大変ですが、作業中に「あ、これあの記事で見たな」と思い出したときに読み返してもらえると嬉しいです。

少しずつ使えるコマンドを増やして、日々のターミナル操作をより快適にしていきましょう!

参考

本記事は先輩エンジニア @engchina さんの記事を参考にさせていただき作成しました!

22
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?