常用系列は、自分がプログラミングでよく使うものを記録するものであり、この記事は常用系列の第 1 篇で、日常の開発プログラミングでよく使う Linux コマンドを記録し、必要なときに参照できるようにするためのものです。
ディレクトリの表示#
ls#
# 前のディレクトリに戻る
cd -
# すべてのファイルを表示
ls -a
# ディレクトリ内のファイルを最終更新日時でソートして表示
ls -lht
tree#
現在のディレクトリのファイル構造を表示
# 現在のディレクトリのファイル構造を表示
tree -FC /
-a:隠しファイルを表示
-C: カラー表示
-L 2: 2層のみ表示
-F: ディレクトリの後に\を表示;実行可能ファイルには*を表示;ls -Fと同様の機能
ファイルの権限を変更#
# ファイルの権限を変更
chmod
# xxxに書き込み権限を追加、実行するスクリプトに権限を与えるためによく使用される
chmod +x xxx
# xxxに読み取り権限を追加
chmod +r xxx
# xxxの権限を777に変更、すべての人がこのファイルを読み書き実行できる
chmod 777 xxx
# フォルダ全体の権限を再帰的に変更
chmod 777 xxx -R
ファイルの内容を表示#
more#
# ファイルの内容を閲覧
more <filename>
Enter:次の行
Space:次のページ # ページ進行が36%増加
b:前のページ
q:終了
less#
# moreに似ており、機能がより豊富
less
Enter:次の行
y:前の行
Page Down:次のページ
Page Up:前のページ
q:終了
tail#
# ファイルの末尾3行を表示
tail -3 <filename>
# ログの書き込み過程を観察するためによく使用される
tail -f -n 1000 <filename>
パイプ関連#
wc#
# 出力結果は行数、単語数、バイト数の順
wc
wc -l:行数をカウント
wc -w:単語数をカウント
wc -c:バイト数をカウント
grep#
# ファイル内で指定されたmatch_pattenをフィルタリング
grep match_patten <file>
よく使われるパラメータ
-c テキストが含まれる回数をカウント
-n マッチした行番号を表示
-i 検索時に大文字と小文字を無視
# stdinから複数行のデータを読み込み、xxxを含む行を出力。--colorはハイライト表示を示す
grep xxx --color
# 多層ディレクトリ内でテキストを再帰的に検索(プログラマーがコードを検索するのに最適)
grep "class" . -R -n
# 使用したコマンドを見つける
history | grep <コマンド>
xargs#
xargs は入力データを特定のコマンドのコマンドライン引数に変換できる;これにより、多くのコマンドと組み合わせて使用できる。例えば
grep
、find
;
xargsのパラメータ説明
-d 定義された区切り文字(デフォルトは空白、複数行の区切り文字はn)
-n 出力を複数行に指定
-I {} 置換文字列を指定、この文字列はxargsの展開時に置き換えられ、実行するコマンドが複数の引数を必要とする場合に使用
-0:0を入力区切り文字として指定
複数行の出力を単一行の出力に変換
cat file.txt| xargs
単一行を複数行の出力に変換、-n:各行に表示するフィールド数を指定
cat single.txt | xargs -n 3
cat file.txt | xargs -I {} ./command.sh -p {} -1
cut#
各行から部分的な内容を削除するために使用
# 一行の内容を分割し、stdinから複数行のデータを読み込む
例:
echo $PATH | cut -d ':' -f 3,5 でPATHを:で分割した後の3列目と5列目のデータを出力
echo $PATH | cut -d ':' -f 3-5 でPATHを:で分割した後の3列目から5列目のデータを出力
echo $PATH | cut -c 3,5 でPATHの3番目と5番目の文字を出力
echo $PATH | cut -c 3-5 でPATHの3番目から5番目の文字を出力
ファイルを探す#
locate#
パス名でファイルを検索、検索範囲は /var/lib/mlocate/ というデータベース内で、メモリに保存され、毎日更新されるため、locate で新しく作成されたファイルを検索することはできません。updatedb を使用してデータベースを即座に更新できます。
システムに
locate
コマンドが付属していない場合は、yum install mlocate -y
でインストールし、インストールが完了したらupdatedb
コマンドを実行します。
# 名前にzipを含むファイルを検索
lcoate zip
find コマンド#
ファイル名でファイルを検索
# 特定のファイルパス内のすべての*.pyファイルを検索
find /path/to/directory/ -name '*.py'
# 大文字と小文字を無視して検索
find /home -iname "*.txt"
# 現在のディレクトリおよびサブディレクトリ内で.txtおよび.pdfで終わるすべてのファイルを検索
find . -name "*.txt" -o -name "*.pdf"
# 現在のディレクトリ内のファイル数を表示
find ./ | wc -l
# タイプで検索し、すべてのディレクトリのみをリスト表示、-type f ファイル / l シンボリックリンク / d ディレクトリ
find . -type d -print
# ファイルのサイズを制限して検索、+1Mは1Mを超えるファイルを検索
find ./ -type f -name "*.py" -size +1M
# 条件に合うファイルを削除、以下のコマンドは現在のディレクトリ内の.bak拡張子を持つファイルを削除します
find ./ -type f -name "*.bak" -delete
sed テキスト置換#
sed は一般にテキスト内容の置換に使用され、操作は行単位で行われます。
sed の基本的な動作方式は:
- ファイルを行単位でメモリに読み込む(このメモリはパターンスペースとも呼ばれます)
- sed の各スクリプトを使用してその行を操作
- 処理が完了したらその行を出力
形式
sed ‘操作コマンド’ 1 つ以上のファイル
sedの置換コマンドs:
sed 's/古い文字列/新しい文字列/' ファイル名
sedに複数の指示を渡す
sed -e 's/古い文字列/新しい文字列/' -e 's/古い文字列/新しい文字列/' ファイル名
最初の一致を置換
sed 's/text/replace_text/' file //各行の最初の一致するtextを置換
全体置換
sed 's/text/replace_text/g' file
デフォルトでは置換後、置換された内容を出力します。元のファイルを直接置換する必要がある場合は、-iを使用します:
sed -i 's/text/repalce_text/g' file
空白行を削除
sed '/^$/d' file
最初の一致の括弧内容はマーク1を使用して参照
sed 's/hello\([0-9]\)/\1/' file
Bash キーボードテクニック#
# カーソルを行の最初の文字に移動
Ctl + a
# カーソルを行の最後の文字に移動
Ctl + e
# カーソルから行の最初までのすべての文字を削除
Ctl + u
# よく使われる:
# 入力した内容を削除
Ctl + e + Ctl + u
アーカイブとバックアップ#
gzip#
単一または複数のファイルを圧縮
gzip foo.text
gunzip#
ファイルを解凍
# 圧縮してfoo.txt.gzを生成
gunzip foo.text
zip#
.zip ファイルに圧縮およびアーカイブ
zip -r text.zip text
unzip#
.zip ファイルを解凍
unzip text.zip
tar#
複数のファイルまたはディレクトリをアーカイブ
# gzipと組み合わせてパッケージ化
tar -zcvf <パッケージ圧縮後のファイル名> <パッケージ圧縮するファイル>
z:gzip圧縮コマンドを呼び出して圧縮
c:ファイルをパッケージ化
v:実行過程を表示
f:ファイル名を指定
# 解凍
tar -zxvf test.tar.gz -C /usr**(- Cは解凍位置を指定)
x:解凍を示す
ディスクスペースの確認#
# ディスクスペースの利用状況を確認する:-h: humanの略、可読性のある形式で結果を表示
df -hT
# 現在のディレクトリが占めるスペースの大きさを確認、-sはディレクトリ全体のサイズを再帰的に表示
du -sh
# 現在のディレクトリ内のすべてのサブフォルダのサイズをソートして表示:
for i in `ls`; do du -sh $i; done | sort
または:
du -sh `ls` | sort
プロセスの確認#
ps#
# 実行中のプロセス情報を確認:
# VSZ-仮想メモリサイズ RSS-プロセスが占有するRAMの量
ps -aux/ ps -ef
top#
# プロセス情報を表示し、リアルタイムで更新
top
開いた後、Mを入力:メモリ使用量でソート
開いた後、Pを入力:CPU使用量でソートし、システム内でCPU、メモリを最も使用しているプロセスを確認
開いた後、iを入力:topがアイドルまたはゾンビプロセスを表示しないようにする
開いた後、qを入力:終了
lsof#
# ポートを占有しているプロセスの状態を確認:
lsof -i:3306
# ユーザーusernameのプロセスが開いているファイルを確認
lsof -u username
# initプロセスが現在開いているファイルを確認
lsof -c init
その他#
# プロセスIDを確認(プロセス名の一部しか覚えていない場合に適しています)
pgrep -l <プロセス名>
# ポートを占有しているプロセスを確認
netstat -anp | grep port
プロセスを終了#
# 指定されたPIDのプロセスを終了する (PIDはプロセスID)
kill PID
# 関連するプロセスを終了
kill -9 3434
# jobを終了する (jobはジョブ番号)
kill %job
スレッドスタックの分析#
pmap コマンドを使用してプロセスのメモリ状況を出力し、スレッドスタックを分析できます;
pmap PID
パフォーマンスモニタリング#
CPU の監視#
# CPU使用率を確認
sar -u
例:
$sar -u 1 2
後ろの2つのパラメータは監視の頻度を示し、例の1と2は1秒ごとにサンプリングし、合計2回サンプリングすることを示します;
# CPUの平均負荷を確認するには、sarを指定-qにすると、実行キュー内のプロセス数、システム上のプロセスのサイズ、平均負荷などを確認できます;
sar -q 1 2
メモリの確認#
# メモリ使用状況を確認するには、sarを指定-rにすると、メモリ使用状況を確認できます;
sar -rh 1 2
# メモリ使用量を確認
free -mh
ポート占有の確認#
# 現在のシステムのポート使用状況を確認
netstat -an
# プロセスと占有されているポートを表示
netstat -ntlp
ページスワップの確認#
ページスワップが発生している状況を確認します。ページがスワップされると、サーバーのスループットが大幅に低下します。サーバーの状態が悪い場合、メモリ不足が原因でページスワップが発生していると疑われる場合は、sar -W コマンドを使用して大量のスワップが発生しているかどうかを確認できます;
sar -W 1 3
総合的な応用#
システムで sar が使用できない場合、以下のツールを代わりに使用できます:Linux では vmstat、Unix システムでは prstat
例: CPU、メモリ、使用状況を確認: vmstat n m (n は監視頻度、m は監視回数)
vmstat 1 3
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 86560 42300 9752 63556 0 1 1 1 0 0 0 0 99 0
1 0 86560 39936 9764 63544 0 0 0 52 66 95 5 0 95 0
0 0 86560 42168 9772 63556 0 0 0 20 127 231 13 2 84 0
watch コマンドを使用して変化を監視する。特定のデータの変化を継続的に監視する必要がある場合、watch コマンドが要件を満たします。watch コマンドを実行すると、監視されているデータが出力され、データが変化するとハイライト表示されます;
例:redis を操作する際、メモリの変化を監視:
watch -d -n 1 './redis-cli info | grep memory'
(以下はwatchツール内のインターフェース内容で、メモリが変化するとリアルタイムでハイライト表示されます)
Every 1.0s: ./redis-cli info | grep memory Mon Apr 28 16:10:36 2014
used_memory:45157376
used_memory_human:43.07M
used_memory_rss:47628288
used_memory_peak:49686080
used_memory_peak_human:47.38M
ping#
指定されたホストに ICMP パケットを送信し、ホストとのネットワーク接続を確認します。送信の間隔は 1 秒で、Ctrl + C で送信を中断し、正常なネットワークでは 0% のパケット損失率が表示されます。
# ネットワーク接続を確認
ping www.baidu.com
traceroute#
ネットワークがローカルから指定されたホストに到達するまでのすべてのホップをリスト表示します。
# ルーターを経由するホスト名、IPアドレス、およびローカルからそのルーターまでの3つの往復時間のサンプリングデータを表示します。
traceroute -I www.baidu.com
ip#
多機能なネットワーク設定ツールで、システムのネットワークインターフェースとルーティングテーブルを確認するために使用されます。
- 複数のネットワークインターフェースを表示し、一般的なインターフェース:
- lo:ループバックインターフェース、システムが「自分自身と対話する」ために使用する仮想インターフェース
- eth0: イーサネットインターフェース
- インターフェースの最初の行に
UP
という文字が含まれている場合、そのインターフェースは有効です。 - 3 行目の inet フィールドは、そのネットワークインターフェースの IP アドレスです。
#
~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:16:3e:0e:a0:8b brd ff:ff:ff:ff:ff:ff
inet 172.30.140.229/20 brd 172.30.143.255 scope global dynamic eth0
valid_lft 310094870sec preferred_lft 310094870sec
inet6 fe80::216:3eff:fe0e:a08b/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:53:b2:cd:34 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
netstat#
様々なネットワーク設定と統計情報を確認するために使用され、
net-tools yum install net-tools
をインストールする必要があります。
# システムのネットワークインターフェースを確認
netstat -ie
# すべてのネットワーク接続を表示
netstat -nt
ssh#
ローカルホストとリモートホスト間の通信に使用されます。
# remote-sysホストのubuntuユーザーのログインパスワードを入力する必要があります。
ssh ubuntu@remote-sys
その他の一般的なコマンド#
# よく使用されるエイリアスコマンドaliasと一緒に使用され、=の両側に空白を入れてはいけません。エイリアスされるコマンドは単一引用符で囲む必要があります。
alias ll='ls -alh'
# 2つのファイル間の違いを確認:
diff file1 file2
# SVNの環境変数値を確認:
env | grep SVN