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.
シェルワンライナー練習問題(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を超えている場合、以下の処理を行うワンライナーを作成してください:
- 現在の日時を使ってバックアップファイル名を生成(例:
app.log.20240115_103000) - 元のファイルをバックアップ
- 元のファイルを空にする
- 処理結果を表示
期待される出力の例:
Log rotation completed:
Original size: 156M
Backed up to: app.log.20240115_103000
New log file created: app.log (0 bytes)
これらの問題を解くことで、パイプ、リダイレクト、各種コマンドの組み合わせ、正規表現、awk、sed、sortなどの使い方を実践的に学ぶことができます。頑張ってください!