ファイル・ディレクトリ操作

基本操作

コマンド説明
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)
数値権限意味
7rwx読み・書き・実行
6rw-読み・書き
5r-x読み・実行
4r—読みのみ
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

まとめ

日常的に使うコマンドは限られています。まずは以下を覚えましょう:

  1. ファイル操作: ls, cd, cp, mv, rm, mkdir
  2. テキスト: cat, grep, head, tail, less
  3. 検索: find, grep -r
  4. プロセス: ps, kill, top
  5. パーミッション: chmod, chown

慣れてきたら awk, sed, パイプなどを組み合わせて効率を上げていきましょう。


ファイルのパーミッション計算にはAssistyのchmod計算機が便利です。数値表記と記号表記を相互変換できます。