トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

Linuxコマンドメモ

[カテゴリ:Linux]

メモ

TCPWrapperに対応したサービスの「POP Before」化を実現する
# このスクリプトを使用すると、TCPWrapperに対応するサービスを「POP Before」(POP認証後、接続IPに対し許可を与える)化することが可能になります。
http://codezine.jp/a/article.aspx?aid=155

Linuxセキュリティ入門
# 基礎の基礎シンプルにまとまってる。他のページも参考になる。
http://ash.jp/sec/linux_sec.htm

中規模データ処理で学んだ tips - フリーフォーム フリークアウト
http://d.hatena.ne.jp/cou929_la/20101230/1293723419

ジョブ制御

                      +----------------+     bg %99         
                      |   サスペンド   |------------------------+
                      +----------------+                        |
                          ↑|                                  |
                    Ctrl+Z||fg %99                            |
                          |↓                                  ↓
                      +----------------+     fg %99     +----------------+
 +----標準入出力---→|フォアグラウンド|←--------------|バックグラウンド|
 |                   +----------------+                +----------------+
 ↓                                                             ↑
端末------------------------------------------------------------+
                             command &

ジョブ終了
kill %99

突然回線切断しても作業を再開できるようにするには?

screen使う。

screenで仮想端末を起動
突然回線断しても、
screen -r で再開。

screen -list で現在開いている仮想端末の一覧を表示

パスワード忘れたとき

how to change root password in debian -- Debian Admin
http://www.debianadmin.com/how-to-change-root-password-in-debian.html

ファイルシステムに対するイベントで指定スクリプトを起動する。

Running programs when filesystem events occur
http://www.debian-administration.org/article/Running_programs_when_filesystem_events_occur

コマンドを探す。apropos, man -k

ファイル断片化を調べる

filefrag
hdparm --fibmap

bash

how to

BASH Programming - Introduction HOW-TO
http://www.linux.or.jp/JF/JFdocs/Bash-Prog-Intro-HOWTO.html

command-line-one-liners/README.md at master · arturoherrero/command-line-one-liners · GitHub
https://github.com/arturoherrero/command-line-one-liners/blob/master/README.md

プロセス置換

標準入力をファイルに見立てる。

diff <(echo foo) <(echo bar)

img と img-backup 下のフォルダ構成をdiff

diff <(find img -type d -print) <(cd img-backup; find img -type d -print)

via TIPS &#187; linux
http://www.connect-i.co.jp/tipsblog/?cat=5

bash:昨日と今日の日付文字列(YYYYMMDD)を取得

YYYYMMDD=`date +%Y%m%d`; echo $YYYYMMDD;
YYYYMMDD=`date --date '1 days ago' +%Y%m%d`; echo $YYYYMMDD;

年月日時分秒

date +%Y%m%d%H%M%S

bash:パスとコマンド名を取得

サンプルスクリプト

#!/bin/bash

HOGE="/aaa/bbb/ccc.c"

echo ${HOGE}
echo ${HOGE%/*}
echo ${HOGE##*/}

実行結果

/aaa/bbb/ccc.c
/aaa/bbb
ccc.c

bash:バッククォートと$()は同じか?

ちょっと違う。

[root@v-kizuki-db bin]# echo $(echo '\\\\')
\\\\
[root@v-kizuki-db bin]# echo `echo '\\\\'`
\\
[root@v-kizuki-db bin]#
[root@v-kizuki-db bin]# echo $(echo "\\\\")
\\
[root@v-kizuki-db bin]# echo `echo "\\\\"`
\
[root@v-kizuki-db bin]#

mount.cifs

mount -t cifs "//windows/Share" /mnt -o ip=192.168.0.xx,file_mode=0666,dir_mode=0777 -o rw,user=myuser,password=******,uid=xxxx,gid=xxxx

strace(solarisのtruss相当)

strace /usr/sbin/apache2 -t 2>&1 | grep php
$ strace ls /
execve("/bin/ls", ["ls", "/"], [/* 16 vars */]) = 0
brk(0)                                  = 0x80a8000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f71000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=22643, ...}) = 0

子プロセスも追跡する(-f)

$ sudo sh -c "strace -f php ./mailtest.php > trace.log 2>&1"

各システムコール毎の時間、呼び出し回数、エラー回数の統計を表示(-c)

各システムコールの実行時間を表示(-T)

Troubleshooting Apache using strace LG #132
http://linuxgazette.net/132/vishnu.html

http://202.23.184.254/dia/seminar/2002/pdf/sltrace.pdf

straceを使ったデバッグ | SourceForge.JP Magazine
http://sourceforge.jp/magazine/03/10/28/1054253

ltrace

readelf

ldconfig

ldd

lsof

  • プロセス指定
    • lsof -p 12345
    • lsof -c sshd
  • ポート指定
    • lsof -i:80
    • lsof -i:http
$ sudo lsof -i
COMMAND     PID     USER   FD   TYPE  DEVICE SIZE NODE NAME
sshd        689     root    3u  IPv6 1058582       TCP 192.168.0.225:ssh->192.168.0.4:1356 (ESTABLISHED)
sshd        691     goun    3u  IPv6 1058582       TCP 192.168.0.225:ssh->192.168.0.4:1356 (ESTABLISHED)
apache2    1509 www-data    3u  IPv6  842644       TCP *:www (LISTEN)
:

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

ファイル/ディレクトリを使用しているプロセスを調べる。

$ sudo fuser -v /mnt
                     USER        PID ACCESS COMMAND
/mnt/:               root      11114 ..c.. bash
                     root      11115 ..c.. rsync

さらにlsofのPID指定で詳細を表示してみる。

$ sudo lsof -p 11115
COMMAND   PID USER   FD   TYPE     DEVICE    SIZE       NODE NAME
rsync   11115 root  cwd    DIR       0,18   28672          2 /mnt
rsync   11115 root  rtd    DIR        8,3    4096        128 /
rsync   11115 root  txt    REG        8,3  360020  142150359 /usr/bin/rsync
rsync   11115 root  mem    REG        8,3   42504  403982870 /lib/i686/cmov/libnss_files-2.7.so
rsync   11115 root  mem    REG        8,3   38444  403982859 /lib/i686/cmov/libnss_nis-2.7.so
rsync   11115 root  mem    REG        8,3   87800  403982860 /lib/i686/cmov/libnsl-2.7.so
rsync   11115 root  mem    REG        8,3   30436  403982863 /lib/i686/cmov/libnss_compat-2.7.so
rsync   11115 root  mem    REG        8,3   25700 2013266050 /usr/lib/gconv/gconv-modules.cache
rsync   11115 root  mem    REG        8,3 1075664  939543904 /usr/lib/locale/locale-archive
rsync   11115 root  mem    REG        8,3   14744 1476395313 /lib/libattr.so.1.1.0
rsync   11115 root  mem    REG        8,3 1413540  403982865 /lib/i686/cmov/libc-2.7.so
rsync   11115 root  mem    REG        8,3   33284 1476401130 /lib/libpopt.so.0.0.0
rsync   11115 root  mem    REG        8,3   24800 1476395144 /lib/libacl.so.1.1.0
rsync   11115 root  mem    REG        8,3  113248 1476411207 /lib/ld-2.7.so
rsync   11115 root    0u   CHR      136,1                  3 /dev/pts/1
rsync   11115 root    1u   CHR      136,1                  3 /dev/pts/1
rsync   11115 root    2u   CHR      136,1                  3 /dev/pts/1
rsync   11115 root    3r   REG       0,18    5905    1210639 /mnt/hoge/hoge.txt
rsync   11115 root    4u  unix 0xf7b4c380            1168367 socket
rsync   11115 root    5u  unix 0xf3056500            1168368 socket

ポートを使用しているプロセスを調べる。

$ sudo fuser -nv tcp 80
                     USER        PID ACCESS COMMAND
80/tcp:              root       2192 F.... apache2
                     www-data   4444 F.... apache2
                     www-data   8073 F.... apache2
                     www-data   8662 F.... apache2
                     www-data   8672 F.... apache2
                     www-data   8957 F.... apache2
                     www-data  11709 F.... apache2
                     www-data  11974 F.... apache2
                     www-data  11995 F.... apache2
                     www-data  26730 F.... apache2
                     www-data  26735 F.... apache2

/proc/[pid]/maps

$ cat /proc/[pid]/maps | grep php
40594000-40872000 r-xp 00000000 03:02 27577      /usr/lib/apache2/modules/libphp4.so
40872000-40890000 rw-p 002de000 03:02 27577      /usr/lib/apache2/modules/libphp4.so
40992000-4099c000 r-xp 00000000 03:02 27590      /usr/lib/php4/20020429/mysql.so
4099c000-4099d000 rw-p 0000a000 03:02 27590      /usr/lib/php4/20020429/mysql.so
409df000-409f3000 r-xp 00000000 03:02 62528      /usr/lib/php4/20020429/gd.so
409f3000-409f4000 rw-p 00013000 03:02 62528      /usr/lib/php4/20020429/gd.so
40c52000-40c5a000 r-xp 00000000 03:02 84571      /usr/lib/php4/20020429/curl.so
40c5a000-40c5b000 rw-p 00007000 03:02 84571      /usr/lib/php4/20020429/curl.so
40cc1000-40ce0000 r-xp 00000000 03:02 48240      /usr/lib/php4/20020429/eaccelerator.so
40ce0000-40ce1000 rw-p 0001e000 03:02 48240      /usr/lib/php4/20020429/eaccelerator.so

ls

全プロセスをツリー形式で表示

$ ps -AH fl
F   UID   PID  PPID PRI  NI   VSZ  RSS WCHAN  STAT TTY        TIME COMMAND
4     0     1     0  16   0  1504  472 -      S    ?          0:01 init [2]
1     0     2     1  34  19     0    0 ksofti SN   ?          0:00 [ksoftirqd/0]
1     0     3     1   5 -10     0    0 worker S<   ?          0:00 [events/0]
1     0     4     3   5 -10     0    0 worker S<   ?          0:00  \_ [khelper]
1     0     5     3   5 -10     0    0 worker S<   ?          0:00  \_ [kacpid]
1     0    42     3   5 -10     0    0 worker S<   ?          0:12  \_ [kblockd/0]
1     0    55     3   5 -10     0    0 worker S<   ?          0:00  \_ [aio/0]
1     0   295     3   5 -10     0    0 worker S<   ?          0:10  \_ [reiserfs/0]
1     0  9007     3  15   0     0    0 pdflus S    ?          0:41  \_ [pdflush]
1     0 30654     3  15   0     0    0 pdflus S    ?          0:09  \_ [pdflush]

netstat

-p オプション:各ポートを使用しているプロセスのIDと名称が出力される。

$ sudo netstat -pna
稼働中のインターネット接続 (サーバと確立)
Proto 受信-Q 送信-Q 内部アドレス            外部アドレス            状態        PID/Program name
tcp        0      0 0.0.0.0:995             0.0.0.0:*               LISTEN     2179/inetd
tcp        0      0 127.0.0.1:10025         0.0.0.0:*               LISTEN     22268/ruby1.8
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN     10575/mysqld
tcp        0      0 0.0.0.0:110             0.0.0.0:*               LISTEN     2179/inetd
tcp        0      0 xxx.xxx.0.224:80        xxx.xxx.239.66:3132     SYN_RECV   -
tcp        0      0 xxx.xxx.0.224:80        xxx.xxx.239.66:3133     SYN_RECV   -
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN     2395/master
tcp6       0      0 :::80                   :::*                    LISTEN     27085/apache2
tcp6       0      0 :::22                   :::*                    LISTEN     2410/sshd
tcp6       0      0 :::25                   :::*                    LISTEN     2395/master
:

tcpdump

# /usr/sbin/tcpdump -s 1600 -X port 25
tcpdump: listening on eth0
19:41:31.296100 hoge.com.33520 > mx.xxx.com.smtp: S 1740347565:1740347565(0) win 5840 <mss 1460,sackOK,timestamp 15333691 0,nop,wscale 0> (DF)
0x0000   4500 003c 6196 4000 4006 da9f d2fd 7285        E..<a.@.@.....r.
0x0010   caf8 ee0a 82f0 0019 67bb 98ad 0000 0000        ........g.......
0x0020   a002 16d0 b519 0000 0204 05b4 0402 080a        ................
0x0030   00e9 f93b 0000 0000 0103 0300                  ...;........
19:41:31.302651 mx.xxx.com.smtp > hoge.com.33520: S 1761469806:1761469806(0) ack 1740347566 win 5552 <mss 1400,sackOK,timestamp 452557311 15333691,nop,wscale 0> (DF)
0x0000   4500 003c 0000 4000 3706 4536 caf8 ee0a        E..<..@.7.E6....
0x0010   d2fd 7285 0019 82f0 68fd e56e 67bb 98ae        ..r.....h..ng...
:

apache2.2

組み込まれているモジュールの一覧表示

$ sudo apache2ctl -M
Loaded Modules:
 core_module (static)
 log_config_module (static)
 logio_module (static)
 mpm_prefork_module (static)
 http_module (static)
 so_module (static)
 alias_module (shared)
:

設定の検証

$ sudo apache2ctl configtest
Syntax OK

postfix

現在の動作設定確認

$ sudo /usr/sbin/postconf -n

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
disable_vrfy_command = yes
inet_interfaces = all
local_recipient_maps =
mailbox_size_limit = 0
mydestination = mlgoun.dip.jp, goun.dip.jp, localhost.localdomain, localhost.localdomain, localhost
myhostname = localhost.localdomain
mynetworks = 127.0.0.0/8, 192.168.0.0/8
myorigin = /etc/mailname
recipient_delimiter = +
relayhost =
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
transport_maps = hash:/etc/postfix/transport

中継設定

$ sudo vi /etc/postfix/transport

.hoge.com	smtp:中継smtpサーバ
hoge.com	smtp:中継smtpサーバ

設定を反映

$ sudo postmap /etc/postfix/transport

エイリアス設定

/etc/aliases もしくは /etc/postfix/aliases

$ sudo vi /etc/aliases
$ sudo postalias /etc/aliases

alias db への反映は以下でも可

$ sudo newaliases

メールキュー表示

$ sudo postqueue -p

メールキュー上のメール表示

$ sudo postcat -q キューID

メールキュー削除

$ sudo postsuper -d キューID
$ sudo postsuper -d ALL

メールボックス

mbox形式の場合、/var/mail/ユーザ名 とか

パフォーマンス

vmstat

# vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  1 410420  16928  65420  37172    0    0     4     4    2    0  5  0 94  0
 0  1 410420  15664  70864  37236  604    0  6048    16  399  744  2  3 51 44
 0  1 410452  14044  75048  37200  784   32  6916    44  484  884  1  1 51 46
 0  1 410452  13396  75600  37232  116    0  3484     0  570  867  0  2 51 46
 0  3 416568  13548  78784  37460  388 6116  4308  6116  397  858  1  2 49 49
 2  1 422896  14276  79800  38780 1160 6412  7248  6412  510 1326  5  3 41 51
 0  1 427720  14144  81608  39024  352 4744  2408  4744  376  776  1  0 51 48

サーバ診断:vmstat - Y-110's Wiki:
http://php.y-110.net/wiki/index.php?%A5%B5%A1%BC%A5%D0%BF%C7%C3%C7%A1%A7vmstat

mpstat

# mpstat 1
Linux 2.6.2X (servername)     2010年04月04日  _i686_

14時06分25秒  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
14時06分26秒  all    1.92    0.00    2.40   45.19    0.00    0.96    0.00   49.52    625.00
14時06分27秒  all    1.96    0.00    2.45   50.00    0.00    0.49    0.00   45.10    609.00
14時06分28秒  all    5.71    0.00    1.90   43.33    0.00    0.00    0.00   49.05    403.00
14時06分29秒  all    7.35    0.00    4.41   57.35    0.00    0.00    0.00   30.88    717.00
14時06分30秒  all   12.92    0.00    2.87   44.50    0.00    0.96    0.00   38.76    447.00

dstat

# dstat 1
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw
  5   0  94   0   0   0| 197k  265k|   0     0 |  41B  129B|  15   330
  6   1  32  61   0   0|6424k   13M| 120B  404B|3068k    0 | 253  1021
  7   0  16  77   0   0|6248k 4139k| 285B  404B|2540k    0 | 180   709
 17   3  25  55   0   0|  11M  274k| 258B 5195B|3380k  124k| 232  1328
 20   4  12  64   0   0|  16M 2880k| 299B  790B|5704k 1436k| 383  1674 

hwinfo

goun@dimension8300:~$ sudo hwinfo --short
cpu:
                       Intel(R) Pentium(R) 4 CPU 2.80GHz, 2793 MHz
                       Intel(R) Pentium(R) 4 CPU 2.80GHz, 2793 MHz
graphics card:
                       nVidia GeForce FX 5200 (0x0322)
sound:
                       Creative [SB Live! Value] EMU10k1X
storage:
                       Floppy disk controller
                       Intel 82801EB (ICH5) SATA Controller
                       Intel 82801EB/ER (ICH5/ICH5R) IDE Controller
                       IDE interface
network:
  eth1                 Intel 82562EZ 10/100 Ethernet Controller
network interface:
  eth1                 Ethernet network interface
:

*top

iotop

iftop

lsmod,lspci

shell:メール送信

nkf -j $TEMP_LOG | mail -s "BACKUP NG" root

ファイル/ディレクトリを検索してコマンド実行

find の -exec で処理するケース

find . -maxdepth 1 -type d -exec echo {} \;

xargs に流すケース

find . -maxdepth 1 -type d -print | xargs echo

sudo sh -c "hogehoge"

例えば・・・
root権限で「cat > hoge」を行いたいとき、

$ sudo cat > hoge

と書くと期待した動作をしない。
(sudo cat)の結果を*現行のユーザ権限で( > hoge)してしまうから。

だからといって・・・

$sudo "cat > hoge"

としてもダメ
(cat > hoge)を1パラメータとして処理しようとするから。

正解はこちら。

$ sudo sh -c "cat > hoge"

リソース制限/制御

実行中のプロセスの優先度変更 - renice

renice プロセス優先度(-20〜19) プロセスID
renice +10 19002

cpu使用率を制限する - cpulimit

cpulimit &#8211; Limit the cpu usage of a process -- Debian Admin
http://www.debianadmin.com/cpulimit-limit-the-cpu-usage-of-a-process.html

logger

以下実行すると・・・

logger -t xxx testtest

以下のようなログがsyslogに記録される。

Apr  2 22:05:32 localhost xxx: testtest

diff

diff -r dir1 dir2 ディレクトリの比較(サブディレクトリに潜る)
diff -sr dir1 dir2 同一ファイルの場合、その旨表示する。
diff -Naru dir1 dir2 > dir.diffパッチ作成
patch < dir.diffパッチ適用

apt

説明command
apt-get update
apt-get -s upgrade
apt-cache search [hoge]

rpm,dpkg

説明command
インストール済みの全パッケージ一覧表示rpm -qadpkg -l
パッケージの情報表示rpm -qi [インストール済パッケージ名]dpkg -s [インストール済パッケージ名]
パッケージに含まれるファイルを表示rpm -ql [インストール済パッケージ名]]dpkg -L [パッケージ名] / dpkg -c /var/cache/apt/archives/*.deb
ファイルがどのパッケージに含まれるか表示rpm -qf [ファイル名]dpkg -S [ファイル名]

rpmは-pオプション付けることで、未インストールパッケージを処理対象とすることもできる

etc

共有ライブラリへの依存状況を表示(ldd)

$ ldd /bin/ls
        libtermcap.so.2 => /lib/libtermcap.so.2 (0x4001e000)
        libc.so.6 => /lib/tls/libc.so.6 (0x42000000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

リブート(shutdown -r now)

# shutdown -r now

現在のランレベルを表示(/sbin/runlevel)

$ /sbin/runlevel
N 3

↑1つ前は無し。現在は3の意味

find

find & xargs で -print0, -0 は必須

void GraphicWizardsLair( void ); // いまどきfindとxargsを使う時は-print0と-0を忘れずに
http://www.otsune.com/diary/2007/03/29/1.html

サブディレクトリも含めて最新をファイルを得る

find $DIR -type f | xargs ls -l --time-style=long-iso | sort -k 6,7 | tail -1

サブディレクトリも含めて最新のファイルを調べる | Linux系OSのQ&A【OKWave】
http://okwave.jp/qa/q5421848.html

最終更新時間:2014年06月27日 16時21分40秒