banner
lMingyul

lMingyul

记录穿过自己的万物
jike

常用シリーズ - Linux 常用コマンド

常用系列は、自分がプログラミングでよく使うものを記録するものであり、この記事は常用系列の第 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 は入力データを特定のコマンドのコマンドライン引数に変換できる;これにより、多くのコマンドと組み合わせて使用できる。例えばgrepfind

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

参考資料#

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。