ファイル・ディレクトリ操作
基本操作
| コマンド | 説明 | 例 |
|---|---|---|
ls | ファイル一覧 | ls -la |
cd | ディレクトリ移動 | cd ~/projects |
pwd | 現在のディレクトリ | pwd |
mkdir | ディレクトリ作成 | mkdir -p src/components |
touch | 空ファイル作成 | touch index.html |
cp | コピー | cp -r src/ backup/ |
mv | 移動/リネーム | mv old.txt new.txt |
rm | 削除 | rm -rf dist/ |
よく使うパターン
# 隠しファイルも含めて一覧表示(詳細)
ls -la
# 人間が読みやすいサイズ表示
ls -lh
# ファイルサイズ順に並べる
ls -lS
# 更新日時順に並べる
ls -lt
# ディレクトリを再帰的にコピー
cp -r src/ src-backup/
# 中間ディレクトリも一緒に作成
mkdir -p path/to/deep/directory
# 対話的に削除(確認あり)
rm -i important-file.txt
# ディレクトリの中身だけ移動
mv src/* dest/
ファイル検索
find
# 名前で検索
find . -name "*.js"
# 名前で検索(大文字小文字無視)
find . -iname "*.js"
# 特定ディレクトリを除外
find . -name "*.ts" -not -path "*/node_modules/*"
# 最近24時間以内に変更されたファイル
find . -mtime -1
# サイズが10MB以上のファイル
find . -size +10M
# 見つけたファイルを削除
find . -name "*.tmp" -delete
# 見つけたファイルに対してコマンド実行
find . -name "*.log" -exec gzip {} \;
locate と which
# ファイルを高速検索(データベース使用)
locate nginx.conf
# コマンドの場所を検索
which node
# /usr/local/bin/node
# コマンドの全パスを検索
whereis python
テキスト処理
ファイル内容の表示
# ファイル全体を表示
cat file.txt
# 先頭N行を表示
head -20 file.txt
# 末尾N行を表示
tail -20 file.txt
# リアルタイムで末尾を監視
tail -f /var/log/syslog
# ページャーで表示(スクロール可能)
less file.txt
grep — テキスト検索
# 文字列を検索
grep "error" log.txt
# 大文字小文字を無視
grep -i "error" log.txt
# 再帰的に検索
grep -r "TODO" src/
# 行番号を表示
grep -n "function" app.js
# マッチしない行を表示
grep -v "debug" log.txt
# 前後の行も表示
grep -C 3 "error" log.txt
# 正規表現
grep -E "error|warning" log.txt
# ファイル名だけ表示
grep -rl "import React" src/
# マッチ数をカウント
grep -c "error" log.txt
sed — テキスト置換
# 文字列を置換(最初の1つ)
sed 's/old/new/' file.txt
# 文字列を全置換
sed 's/old/new/g' file.txt
# ファイルを直接編集
sed -i 's/old/new/g' file.txt
# macOS の場合(バックアップ拡張子が必要)
sed -i '' 's/old/new/g' file.txt
# 特定の行だけ置換
sed '3s/old/new/' file.txt
# 行を削除
sed '5d' file.txt # 5行目を削除
sed '/pattern/d' file.txt # パターンに一致する行を削除
awk — テキスト処理
# 特定のカラムを抽出(スペース区切り)
awk '{print $1}' file.txt
# CSVの特定カラム
awk -F',' '{print $2}' data.csv
# 条件付き表示
awk '$3 > 100 {print $1, $3}' data.txt
# 合計を計算
awk '{sum += $1} END {print sum}' numbers.txt
# 行番号付きで表示
awk '{print NR, $0}' file.txt
その他のテキスト処理
# 行数・単語数・バイト数をカウント
wc file.txt
wc -l file.txt # 行数だけ
# ソート
sort file.txt
sort -n file.txt # 数値順
sort -r file.txt # 逆順
sort -u file.txt # 重複除去
# 重複行の処理
uniq file.txt # 連続する重複を除去
sort file.txt | uniq -c # 出現回数をカウント
# カラムの切り出し
cut -d',' -f1,3 data.csv # CSVの1列目と3列目
# 文字列の置換(tr)
echo "Hello World" | tr 'a-z' 'A-Z'
# HELLO WORLD
パイプとリダイレクト
# パイプ: コマンドの出力を次のコマンドの入力に
ls -la | grep ".js" | sort -k5 -n
# 標準出力をファイルに書き込み(上書き)
echo "hello" > output.txt
# 標準出力をファイルに追記
echo "world" >> output.txt
# 標準エラーもリダイレクト
command 2>&1 > output.txt
# 標準エラーだけリダイレクト
command 2> error.log
# /dev/null に捨てる(出力を無視)
command > /dev/null 2>&1
# tee: 画面に表示しながらファイルにも書き込み
command | tee output.txt
パーミッション
chmod — 権限変更
# 数値で指定
chmod 755 script.sh # rwxr-xr-x
chmod 644 file.txt # rw-r--r--
chmod 600 id_rsa # rw-------
# 記号で指定
chmod +x script.sh # 実行権限を追加
chmod u+w file.txt # オーナーに書き込み権限を追加
chmod go-r file.txt # グループとその他の読み取りを削除
chmod a+r file.txt # 全員に読み取り権限を追加
# 再帰的に変更
chmod -R 755 directory/
パーミッションの読み方
rwxr-xr-x
│││ │││ │││
│││ │││ └── その他: r-x (5)
│││ └───── グループ: r-x (5)
└──────── オーナー: rwx (7)
| 数値 | 権限 | 意味 |
|---|---|---|
| 7 | rwx | 読み・書き・実行 |
| 6 | rw- | 読み・書き |
| 5 | r-x | 読み・実行 |
| 4 | r— | 読みのみ |
| 0 | --- | 権限なし |
chown — 所有者変更
# オーナーを変更
chown user file.txt
# オーナーとグループを変更
chown user:group file.txt
# 再帰的に変更
chown -R www-data:www-data /var/www/
プロセス管理
# 実行中のプロセスを表示
ps aux
ps aux | grep node
# リアルタイムでプロセスを監視
top
htop # より見やすい(要インストール)
# プロセスを終了
kill PID
kill -9 PID # 強制終了
# 名前でプロセスを終了
pkill node
killall node
# バックグラウンドで実行
command &
# ジョブ管理
jobs # バックグラウンドジョブ一覧
fg %1 # ジョブ1をフォアグラウンドに
bg %1 # ジョブ1をバックグラウンドに
ネットワーク
# ネットワーク情報
ip addr # IPアドレス(Linux)
ifconfig # IPアドレス(macOS)
# ポートの使用状況
lsof -i :3000
ss -tlnp # Linux
netstat -tlnp # Linux
# 接続テスト
ping google.com
ping -c 5 google.com # 5回だけ
# HTTPリクエスト
curl https://api.example.com
curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' https://api.example.com
curl -o file.zip https://example.com/file.zip # ダウンロード
# DNS確認
dig example.com
nslookup example.com
# ポート接続テスト
nc -zv host 443
ディスク・システム情報
# ディスク使用量
df -h # パーティション別
du -sh * # ディレクトリ別サイズ
du -sh * | sort -h # サイズ順
# メモリ使用量
free -h
# システム情報
uname -a
cat /etc/os-release # ディストリビューション情報
# 稼働時間
uptime
圧縮・展開
# tar.gz
tar czf archive.tar.gz directory/ # 圧縮
tar xzf archive.tar.gz # 展開
# zip
zip -r archive.zip directory/ # 圧縮
unzip archive.zip # 展開
# 中身を確認(展開せずに)
tar tzf archive.tar.gz
unzip -l archive.zip
便利なワンライナー
# 特定の拡張子のファイル数をカウント
find . -name "*.ts" | wc -l
# 最も大きいファイルを探す
find . -type f -exec du -h {} + | sort -rh | head -10
# 特定の文字列を含むファイルを一括置換
grep -rl "oldtext" src/ | xargs sed -i 's/oldtext/newtext/g'
# ポートを使っているプロセスを終了
lsof -ti :3000 | xargs kill
# 全サブディレクトリのnode_modulesを削除
find . -name "node_modules" -type d -prune -exec rm -rf {} +
# CSVの特定列のユニーク値をカウント
cut -d',' -f2 data.csv | sort | uniq -c | sort -rn
まとめ
日常的に使うコマンドは限られています。まずは以下を覚えましょう:
- ファイル操作:
ls,cd,cp,mv,rm,mkdir - テキスト:
cat,grep,head,tail,less - 検索:
find,grep -r - プロセス:
ps,kill,top - パーミッション:
chmod,chown
慣れてきたら awk, sed, パイプなどを組み合わせて効率を上げていきましょう。
ファイルのパーミッション計算にはAssistyのchmod計算機が便利です。数値表記と記号表記を相互変換できます。