Linuxシステム管理者がよく使うコマンドとよく使うオプションまとめ

onlyindreams
自分がよく使うLinuxコマンドをまとめたものです。殴り書きしていたメモをコピペしただけなので、体裁は徐々に修正していく予定…

デリミタが連続した空白で構成された表から希望の列のみを取り出す

ringo  apple   red
mikan   orange  orange
banana  banana    yellow
こんな感じの表から例えば指定した列だけ取り出したいとき。

cutでの取得方法
sed -e “s/\s\s*/\t/g” <対象ファイル> |cut -f<列番号>
awkでの取得方法
awk ‘{print $<列番号>}’ <対象ファイル>

rpm

インストール
-i(新規インストール)

アンインストール
-e(アンインストール)

アップグレード
-U(既存パッケージがない場合も)
-F(既存パッケージがある場合)

署名無し警告を表示しない
–nosignature

問い合わせ
-q(パッケージのインストール済みかどうか)
-qi(詳細情報)
-qf(ファイルとパッケージの関連付け)
-qf ファイル名
-ql(インストールされたファイルリスト表示)

依存関係表示
-qpR

-qlp(インストールしていないRPMファイルからファイルリスト表示)

ソースパッケージからrpmパッケージ作成
–rebuild
e.g.)rpm –rebuild ***.src.rpm
#「unknown option」が表示される場合はrpmbuildパッケージを
# インストールし、以下を実行
rpmbuild –rebuild ***.src.rpm

rpm2cpio

rpm2cpio
rpmパッケージ内のファイルを展開
rpm2cpio | cpio -idv
# カレントディレクトリに作成される点、注意すること。

イースターエッグ

ls /usr/share/emacs/バージョン/lisp/play/で表示されるプログラム
emacsを起動し、「M+X プログラム名」でプレイ可能
sl
slが走るダミープログラム

プロセス参照

ps
(オプション)
a 全プロセス一覧
-l 詳細表示
f 階層表示(pstreeでも可)
u ユーザ名の表示
x 制御端末のないデーモンなどのプロセスも表示
aux 全プロセス一覧
便利な使い方)
/bin/ps -eo ruser,pid,ppid,pcpu,pmem,vsz,rss,ni,time,lstart,stat,sgi_p,wchan:30,args

[STAT] S スリープ
D 割り込み不可スリープ
R 実行可能状態
W スワップアウト
Z ゾンビプロセス

( BSD形式の場合上記文字列に以下の添付文字が表示される場合あり。)
< 優先度高プロセス N 優先度低プロセス L 実メモリページロックプロセス s セッションリーダ l マルチスレッド化 + フォアグランドプロセスグループ

実行プログラムの優先順位操作

nice -n command
-n -20(高)~19(低)まで指定可能
デフォルトで実行プログラムのnice値は10

メモリーやCPUの負荷率や使用状況を表示する

vmstat 1(更新間隔) [(更新回数)] [ステータス] procs アクティブなプロセスに関する統計
r:実行待ち状態プロセス数(CPUを使いたがっている/使っているプロセス)
b:割り込み不可スリープ状態プロセス数(デバイスへのI/O処理を行っているプロセス)
w:スワップアウト実行可能プロセス数
memory メモリーの使用量と使用可能量に関するデータ
swpd:仮想メモリー量
free:空きメモリー量
buff:バッファとして用いられているメモリー量
swap スワップに関する統計
si:ディスクからスワップインしているメモリー量
so:ディスクにスワップしているメモリー量
iO デバイスとの転送量
bi:ブロックデバイスから受け取ったブロック数(ブロック/秒)
bo:ブロックデバイスに送られたブロック数(ブロック/秒)
system システム全体の割り込みおよびコンテキストの切り替えレート
in:毎秒の割り込み回数
cs:毎秒のコンテキストスイッチ回数
cpu CPUの使用量割合
us:ユーザ時間
sy:システム時間
id:アイドル時間
wa:IO待ち時間

sar [オプション] (更新間隔) [(更新回数)] -A すべてのオプションの結果を出力
-b バッファの転送
-B ページング失敗数
-r フリーメモリ
-u CPU使用率
-f ファイル名指定
-s 出力する開始時刻指定(hh:mm:ss)
-e 出力する終了時刻指定(hh:mm:ss)
-n DEV ネットワークデバイス情報
-P ALL (コアごとのCPU使用率)
-w コンテキストスイッチ
-q ロードアベレージ
-s 00:00:00 範囲指定開始時刻
-e 00:00:00 範囲指定終了時刻
# 途中のヘッダ表示を無くしたい場合は、出力結果を”|egrep -v ^\n”でリダイレクト処理
# すると、ヘッダ表示が省略される。

カーネルパラメータ(セマフォ値)の変更

sysctl -w パラメータ名=値 ( 再起動するまで)

再起動後も設定したい場合は、/etc/systl.confを直接修正して下記コマンド。
sysctl -p (再起動後も)
e.g.)/etc/sysctl.conf
kernel.sem=’SEMMSL SEMMNS SEMOPM SEMMNI’
#デフォルト 250 32000 32 128
fs.file-max=10000(ファイルディスクリプタの制限を10000に)

設定変更の確認は、/proc/sys/kernelで、catで確認可能。
セマフォ設定の場合は、ipcs -sl でも。

ディスクの利用状況の確認

df
(option)
-h 容量を適切な単位で表示
-i iノード※の使用状況を表示
ex.)
[root@server01 user01]# df -h
Filesystem サイズ 使用 残り 使用% マウント位置
/dev/sda3 20G 11G 7.6G 59% /
/dev/sda1 99M 22M 73M 23% /boot
/dev/sda2 20G 19G 250M 99% /home
none 3.0G 0 3.0G 0% /dev/shm
/dev/sda7 211G 159G 42G 80% /usr
/dev/sda5 9.7G 467M 8.7G 5% /var
※ファイルやディレクトリのパーミッションや、更新日時等を管理する領域

アクセス権限の変更

chmod (3桁) ファイル名
r(4)
w(2)
x(1)
e.g.) ls -lでの表示
-rwxr-x–x = (rwx)7(r-x)5(–x)1

カーネル情報の参照

uname -r 稼動しているカーネルのバージョン
lsmod カーネルにロードされているモジュール一覧

ネットワーク機能に関する情報を表示

netstat
(option)
-c 状況を1秒ごとに表示
-p PIDとプロセスの表示
-n IPアドレスで表示する
-o keepalive情報を表示する
-t tcpのみ表示する
-u udpのみ表示する
-a 全てのプロトコルを表示する

ユーザの作成と削除

useradd -D (作成されるユーザの初期値)
useradd ユーザ名
-d ホームディレクトリ指定
-m ホームディレクトリが存在しない場合作成する
userdel -r ユーザ名
usermod -G グループ名 ユーザ名
passwd ユーザ名

su について

・su は -をつけないと、前のユーザの環境変数を引き継ぐ
・suはPAM認証を経由する

コンパイラ

gcc
-L .libがあるディレクトリを指定
-I ヘッダファイルがあるディレクトリを指定
-l○○ lib○○.aを指定

プログラムリンクファイル名表示

ldd [プログラム名]

システム全体の情報を表示

top (オプション)
[-b バッチ]:バッチ処理
[-d 時間]:時間間隔の設定
操作コマンド
[c] 各種プロセスの実行コマンド表示
[1] CPUを独立して表示/まとめて表示t

[u] ユーザ名入力でユーザ単位の情報
[h] ヘルプ

各フィールドの説明
PID タスクの一意なプロセスID
USER タスク所有者のユーザ名
PR タスク優先度
NI nice値。負のほうが高い、0は設定されていない
VIRT 仮想メモリ総量(kb)VIRT=SWAP+RES
(プロセスが確保したメモリのうち1回もアクセスしていない部分を含む)
RES 物理メモリへの常駐サイズ(kb)RES=CODE+DATA
SHR 他のプロセスと共有メモリサイズ
S プロセス状態
(D:割込み不能スリープ R:実行中 S:スリープ T:中止 Z:ゾンビ)
%CPU CPU使用率
%MEM メモリ使用率
TIME+ タスク開始後のCPU時間総計
COMMAND コマンド名

ファイルの中身をリアルタイム表示

tail -f ファイル名

ファイル検索

find [検索対象ディレクトリ] -name [検索ファイル名]

シェルの操作をストップ・スタート

Ctl+s ストップ
Ctl+q スタート

パッチ

diff -Naur [old file] [new file] > 出力ファイル名
patch -p0 < パッチファイル #パッチファイルが適用されるファイル名は先頭の***の方 #-p%dは、パッチを適用するディレクトリの指定。 #-p0で、パッチファイルに書かれているディレクトリ構造& #を適用、ディレクトリ構造が違う場合は-p1,-p2のように& #することで、階層を移動できる

プロセスに割り当てる資源を制限

ulimit [option] -a [設定されている各種の制限を表示] -c [プロセスがファイルへコア・ダンプする容量を最大Nブロック
に制限] -s [プロセスが使用するスタックサイズの制限] -n [プロセスが開けるファイルポインタ数] -H [ハードリミットの設定(一般ユーザは下げることなら出来る)] -S [ソフトリミットの設定(ハードリミット以下、ユーザは変更可能)] ※何もつけないと-HSを指定したことになる。
※unlimitedは制限なし

解凍・圧縮

tar xzvf ファイル名(.tar.gz) 【解凍】
tar jxvf ファイル名(.tar.bz2) 【解凍】
tar cvf 固めたあとの名前(.tar.gz) ディレクトリ名 【固める】
tar jcf 固めたあとの名前(.tar.bz2) ディレクトリ名 【固める】
zip (-r) 固めた後の名前(.zip) ファイル名【圧縮】
unzip ファイル名  【解凍】

プロセスの強制終了

kill -[signal] PID
signal(man 7 signalで参照可能)
pkill [プロセス名]

ディレクトリ内のファイルサイズ

du [option] ディレクトリ名
※省略時はカレントディレクトリ内を表示
-c 検索したすべての容量の総計
-b 単位をバイトにする
-k 単位をキロバイトにする(デフォルト)
-m 単位をメガバイトにする
-a ファイルも表示
-s トータル容量とエラーのみ出力する
e.g.)
du -s -m * #現在のディレクトリ内の容量を全て表示

シャットダウン

shutdown [option] [time] -h シャットダウン後に電源off
-r 再起動
-c シャットダウンキャンセル
time +m(m分ディレイ後シャットダウン)
now(即座にシャットダウン)

X Window System

startx 起動
[Ctl]+[Alt]+[Back] 強制終了

デバイスのマウント

mount 読み込むデバイス名 マウントする場所
・読み込むデバイス名は/dev/配下
・マウントする場所は任意のディレクトリを指定
unmount マウントした場所
・アンマウントしてもディレクトリは消去されない
・/etc/fstabにシステムブート時にマウントされるデバイス情報が記載されている
・/etc/fstabにマウント情報を記載しておけば、読み込むデバイス名は省略できる

シンボリックリンク

ln [-s] [リンク先ファイル名][リンクファイル名]

文字列検索

grep -r -n “hogehoge” . ←これ忘れない!
->カレントディレクトリ内のファイル全てから”hogehoge”
という文字列のあるファイルを抽出(行番号も出力)
[tips]該当する行の前後も表示する
grep “keyword” -A 3 -n sample.txt #後3行を表示
grep “keyword” -B 3 -n sample.txt #前3行を表示

ファイルの[行数 単語数 バイト数]を表示する

wc [option] -c バイト数のみ表示
-l 改行数のみ表示
-m 文字数のみ表示
-w 単語数のみ表示

定期的にコマンドを実行

watch -n [seconds] [コマンド]

[DIFF]二つのファイルの内容を比較する

diff [option…] FROMFILE TOFILE
-s 二つのファイルが同じ場合も報告
-c context出力形式
-b スペースの数が違うだけの場合は無視する

日付/時刻の設定

clock [option] -u ハードウェアクロックの協定世界時を表示
-r –show ハードウェアクロックの表示
-w –systohc FROM システムクロック TO ハードウェアクロック
-s –hctosys FROM ハードウェアクロック TO システムクロック
–set –date “2010-01-01 11:11:11”
ハードウェアクロックに任意日時の設定

date [option] -u システムクロックの協定世界時を表示
-s –set “2010-01-01 11:11:11”
システムクロックに任意時刻を設定

timeconfig※redhat系限定
[CUI]で起動し、タイムゾーンを設定可能

リモートマシン間でのファイル転送

scp [[コピー元user@]コピー元host:]コピー元ファイル名 [[コピー先user@]コピー先host:]コピー先ファイル名
#ローカルホストの場合はコピー元のユーザとホスト名を省略可能
-p    :更新時間、アクセス時間、モードを保持
-r    :ディレクトリ内の再帰的コピー
-P    :接続ポートの指定

CPU及びメモリの情報を表示

cat /proc/cpuinfo CPU情報の表示
physical id   :CPUが刺さっているソケット番号
core id   :そのCPUに搭載されているcoreの識別番号
cpu cores   :そのCPUに搭載されているcoreの累計
flags  >
ht   :ハイパースレッディング機能搭載
pae   :32ビット以上の物理アドレスサポート

cat /proc/meminfo メモリ情報の表示(現在のメモリ情報)
MemTotal  :システム全体で利用できる物理メモリの総容量
MemFree  :システム全体で利用できる物理メモリの総容量
Buffers  :ファイルなどのメタデータとして使用している物理メモリの総容量
Cached    :ファイルデータのキャッシュにしようしている物理メモリの総容量
SwapCached  :物理メモリ上にキャッシュされたスワップページの総容量
Active    :最近アクセスしたと思われる物理メモリの総容量
Inactive  :最近アクセスしていないと思われる物理メモリの総容量
Dirty    :ディスクとの同期がとれていない物理メモリの総容量
Writeback  :ディスクへ書き出し中の物理メモリの総容量

ディレクトリのバックアップ

rsync [OPTION] 転送元ファイル ホスト:転送先ディレクトリ
-a    アーカイブモード(-rlptgoDオプション)
-v    転送情報表示(–verbose)
–delete  送信側にないファイルは削除
–exclude=PATTERN  PATTERNに一致するファイルは転送しない
e.g.)PostgreSQLのクラスタバックアップ
rsync -av –delete –exclude=postgresql.conf –exclude=postmaster.pid /data/* host:/data

ネットワークのスイスアーミーナイフ

nc [OPTION] -v VERBOSE(詳細)モード
-u UDPで送受信
-z 接続後何も送受信しない
-e 指定したコマンドにリダイレクト(コンパイル時オプション必須)
e.g.)
nc localhsot 5999 — localhost:5999に接続
nc -l 10000 — 10000ポートをlisten状態に変更
nc -l 10000 -e /bin/sh — 受け取った文字を/bin/shに入力(リダイレクト)

IPCリソース情報の表示

ipcs [OPTION] -a    全てのリソース情報表示(デフォルト)
-m    共有メモリ情報表示
-s    セマフォ情報表示
-q    メッセージキュー情報表示
-i [id]    -[msq]と一緒に指定で、特定情報の表示

RedhatLinuxのバージョンを表示

cat /etc/redhat-release
(自明ですが、redhat系OS(centosもok)に限ります)

ファイルの内容を置換する

sed -i s/[置換対象文字列]/[置換文字列]/g [ファイル名] sed -i s/^.*[置換対象文字列].*$/[置換行]/g [ファイル名] #行置換
#複数スペースをタブに置換
sed -e “s/\s\s*/\t/g”
#設定ファイル等のパラメータ置換
sed -e “s/\([設定パラメータ名]=\).*/\1[設定値]/g” [ファイル名] # fsync=on というパラメータがあれば
# sed -e “s/\(fsync=\).*/\1off/g” [ファイル名] とすることで、
# fsync=off になる。

テキストファイルをソートする

sort [OPTION] -c    ファイルが既にソートされているかチェック
ソートされていなければ1を返却
-m    予めソートされた複数のファイルをマージ
-b    先頭の空白行を無視
-d    英数字,空白のみを使用したソート
-f    小文字を大文字とみなしてソート
-i    ASCIIに含まれない文字は無視
-M    先頭の3文字を月表記とみなしてソート
-n    先頭の数字や記号(+や-)を数値とみなしてソート
-r    逆順ソート
-o file    ソート結果をfileに出力
-t separator  ソートの区切り文字を指定
-u    同じ行が存在した場合はひとつにまとめる
file    ソートするfileを指定
-S    ソートに使用するバッファサイズ[KB]を指定
-T    ソートに使用する中間ファイル出力ディレクトリを指定
-g    strtodで数値変換後にソート(1.0e-34や10e100)がソート出来る

パケットキャプチャを行う

tcpdump [OPTION] [EXPRESSION] -a    ネットワークアドレスをDNS名に変換する
-n    アドレスを名前に変換しない
-r [file]  -wで出力したファイルを読み込む。[file]に-を指定した場合標準入力。
-w [file]  パケット解析を実施せず生のまま[file]に出力する。
-s [size]  キャプチャリングするパケットのサイズ制限を指定。0だと
65535byteで保存する。
例)
$ tcpdump -s 0 -w tcpdump.log src host <接続元ホスト名> and dst port <宛先ポート番号>
<接続元ホスト名>から<宛先ポート番号>に流れる全てのパケットをサイズ最大(65535byte)で
キャプチャし、tcpdump.logに記録する。

ファイルやソケットを使用しているプロセスを特定する

fuser [OPTION] ファイルパス
-a     コマンドラインで渡されたすべてのファイルを表示
-m filename  デバイス名もしくはマウントポイントを指定
-u    それぞれのPIDにプロセスの所有者名を追加
-v    結果の詳細表示
-k    指定したファイルに対してアクセスしているプロセスをkill

ジョブを端末から切り離す

disown %[番号]

コマンドをバックグランドで実行後、jobsコマンドで表示される
番号を%[番号]として指定すれば、端末から当該ジョブが切り離される。

プロセスが使用するCPUを制限・指定する

taskset -cp [cpu番号,…] [PID]

例)
$ taskset -cp 1,3,5,8-10 999
PID999のプロセスが使用するCPUを1,3,5,8,9,10に限定。

ls

ls [option] -l  アクセス権やファイルサイズを表示
–full-time  秒単位での更新時刻も表示
-1 1行1ファイルの形で出力
-t 更新日付順で表示
-r 逆順で表示

IPアドレスを確認する

ip addr

sudo

/etc/sudoersのよく使う書式
## user01がパスワード入力不要でmount/aumountをroot権限で実行できることを許可する。
user01 ALL=(ALL) NOPASSWD:/bin/mount,/bin/umount

https://matome.naver.jp/odai/2141100253646056801
2014年09月30日