Shell One-Liner Practice: Japanese Exercises

I’ve recently started learning shell, and I’d like to master one-liners, etc., so I can use it smoothly in my job. Please generate 10 somewhat complex exercises for practice, each with expected outputs. Don’t show the answer command, and reply in Japanese.

You

シェルワンライナー練習問題(10問)

問題1: ログファイル解析

以下のようなアクセスログファイル access.log があります:

192.168.1.10 - - [01/Jan/2024:10:15:23] "GET /index.html HTTP/1.1" 200 1024
192.168.1.20 - - [01/Jan/2024:10:16:45] "GET /about.html HTTP/1.1" 404 512
192.168.1.10 - - [01/Jan/2024:10:17:12] "POST /api/users HTTP/1.1" 201 256
192.168.1.30 - - [01/Jan/2024:10:18:00] "GET /index.html HTTP/1.1" 200 1024
192.168.1.10 - - [01/Jan/2024:10:19:30] "GET /contact.html HTTP/1.1" 200 2048

課題: IPアドレスごとのアクセス回数を降順で表示してください。

期待される出力:

3 192.168.1.10
1 192.168.1.30
1 192.168.1.20

問題2: プロセス監視

課題: 現在実行中のプロセスの中から、CPU使用率が最も高い上位5つのプロセスを、プロセス名、PID、CPU使用率の形式で表示してください。

期待される出力の例:

chrome 12345 45.2%
firefox 23456 23.1%
node 34567 15.8%
python3 45678 12.3%
vscode 56789 8.9%

問題3: ディレクトリサイズ集計

課題: カレントディレクトリ以下のすべてのディレクトリについて、そのディレクトリ直下のファイル(サブディレクトリは除く)の合計サイズを計算し、サイズの大きい順に上位10個を人間が読みやすい形式(K, M, G単位)で表示してください。

期待される出力の例:

2.5G ./videos
856M ./documents
234M ./pictures
125M ./downloads
89M ./music
45M ./projects
23M ./backups
12M ./configs
8.5M ./logs
3.2M ./cache

問題4: テキストファイル内の単語頻度解析

sample.txt に以下の内容があるとします:

The quick brown fox jumps over the lazy dog.
The dog was really lazy and the fox was quick.

課題: ファイル内のすべての単語(大文字小文字を区別しない)の出現回数を集計し、出現回数の多い順に表示してください。ただし、記号は除去してください。

期待される出力:

3 the
2 was
2 quick
2 lazy
2 fox
2 dog
1 really
1 over
1 jumps
1 brown
1 and

問題5: CSVファイルの集計

以下のような売上データ sales.csv があります:

date,product,quantity,price
2024-01-01,Apple,10,100
2024-01-01,Banana,20,50
2024-01-02,Apple,15,100
2024-01-02,Orange,8,80
2024-01-03,Banana,25,50

課題: 商品ごとの売上金額(quantity × price)の合計を計算し、売上金額の高い順に表示してください。

期待される出力:

Apple: 2500
Banana: 2250
Orange: 640

問題6: ファイル名の一括変換

課題: カレントディレクトリにある .jpeg 拡張子のファイルをすべて .jpg に変更し、変更前と変更後のファイル名を表示してください。ただし、実際の変更は行わず、どのように変更されるかのプレビューのみ表示してください。

期待される出力の例:

photo001.jpeg -> photo001.jpg
vacation.jpeg -> vacation.jpg
screenshot_2024.jpeg -> screenshot_2024.jpg

問題7: システムリソース監視

課題: 1秒ごとに5回、現在のメモリ使用率とCPU使用率を取得し、タイムスタンプとともに表示してください。

期待される出力の例:

2024-01-15 10:30:01 | Memory: 65.3% | CPU: 23.5%
2024-01-15 10:30:02 | Memory: 65.1% | CPU: 25.2%
2024-01-15 10:30:03 | Memory: 66.0% | CPU: 22.8%
2024-01-15 10:30:04 | Memory: 65.8% | CPU: 24.1%
2024-01-15 10:30:05 | Memory: 65.5% | CPU: 23.9%

問題8: 重複ファイルの検出

課題: カレントディレクトリ以下のすべてのファイルから、同じMD5ハッシュ値を持つ(つまり内容が同一の)ファイルのグループを見つけ、各グループのファイルパスを表示してください。

期待される出力の例:

=== Duplicate Group 1 ===
./backup/document.txt
./archive/document.txt
./old/document_copy.txt

=== Duplicate Group 2 ===
./images/photo.jpg
./pictures/photo_backup.jpg

問題9: ポート使用状況の確認

課題: 現在リッスンしているTCPポートとそれを使用しているプロセス名を、ポート番号順に表示してください。

期待される出力の例:

22: sshd
80: nginx
443: nginx
3306: mysqld
5432: postgres
8080: node

問題10: ログローテーション

課題: app.log というファイルがあり、そのサイズが100MBを超えている場合、以下の処理を行うワンライナーを作成してください:

  1. 現在の日時を使ってバックアップファイル名を生成(例: app.log.20240115_103000
  2. 元のファイルをバックアップ
  3. 元のファイルを空にする
  4. 処理結果を表示

期待される出力の例:

Log rotation completed:
Original size: 156M
Backed up to: app.log.20240115_103000
New log file created: app.log (0 bytes)

これらの問題を解くことで、パイプ、リダイレクト、各種コマンドの組み合わせ、正規表現、awk、sed、sortなどの使い方を実践的に学ぶことができます。頑張ってください!

Claude 4 Opus