入力 | 説明 |
---|---|
Ctrl+A | 行頭に移動 |
Ctrl+E | 行末に移動 |
Ctrl+B | 1文字左に移動 |
Ctrl+F | 1文字右に移動 |
ESC+B | 1単語左に移動 |
ESC+F | 1単語右に移動 |
Ctrl+D, Cltl+H | 一文字削除 |
Ctrl+s | キー入力できなくなったように見える操作 |
Ctrl+q | キー入力できなくなった状態を解除する操作 |
stty stop undefとすればよい
1:12345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6と記述されているので、不要なのをコメントアウトなりすれば多少メモリの節約になる。
expr match "i love nirvana" ".*love" 6当然マッチした場合はNULLが返されて、終了コードは0以外となる
find /path/to \( -path '/path/to/.pythonbrew' -prune -o -path '/path/to/.virtualenvs' -prune \) -o -print
find /path/to/foo -type f -name '*.tmp' -exec rm {} \;などとするが、この場合だと *.tmp のファイルの数だけ rm が実行され、時間がかかる。 (*.tmpが10000個あるとrmが10000回実行されることになる)また、
rm /path/to/foo/*.tmp単純にこれでもよいが、*.tmpのファイル数があまりにも多すぎる場合、
argument list too longとエラーになるその場合は
getconf ARG_MAXfreebsdなら
sysctl -A kern.argmaxで調べられる。で上記の2例のような場合にxargsを使うとよい。findの例だと
find /path/to/foo -type f -name '*.tmp' | xargs -n100 rmこの場合だとxargsはrmの引数を100個受け取ってから実行するようになるので、rmの回数が極端に減る(実行速度も大幅に速くなるらしい)。rmの例の場合のように引数の制限に引っかかることもない。オプション -n(もしくは--max-args=max-args)は引数に受け取る数値。-n1とか指定がない場合は引数は1個ずつとなる。なので
find /path/to/foo -type f -name '*.tmp' | xargs -n1 rmは一番はじめに例にだしたfindの実行例と同じになる。その他xargsを使って並列処理を行ったりすることができたりする。ちなみにxargsした時にどんなコマンドを実行したか見たいときは -t をつければ確認することができる。
-rw-r--r-- 1 root root 2 2009-01-01 19:15 ??????こんなことになってる場合は当然
rm ??????などとしても削除できない。そんなときはinodeを調べて削除する。まずinodeを調べる
ls -i 82170 ??????などとするとinodeがわかるので、あとはfindとxargsを組み合わせて削除する
find -inum 82170 -print0 | xargs -O rm -fとすると削除できる。findの出力オプションはかならず-print0をつけて、xargsで受ける時に-Oオプションをつけること。
# どっかのぱくりです。いい例が思いつかなかった find . -type f -print0 | xargs -0 -i mv '{}' /var/tmp/findでマッチしたファイルが{}の部分で展開され、/var/tmp以下に移動される。って意味になる
cat sample.txt kurt foo bar foo hoge kurt hage bar bar holly kurt upo kurtこんなファイルがあったとして
sort sample.txt | uniq bar foo hage hoge holly kurt upoとしてsortしてuniqを使用すると重複した文字列は一度しか表示されない。もしくは
sort -u sample.txtとしても同じ結果となる
sort sample.txt | uniq -c | sort -nr 4 kurt 3 bar 2 foo 1 upo 1 holly 1 hoge 1 hageとすると思い通りの結果を得ることができる
cat list.txt 1 holly 30 2 oton 58 3 okan 60 4 onii 31 5 tora 5 6 momo 3ID,名前,年齢ごとのデータを記述したファイルがあるとして、年齢で降順sortを行いたい場合は-kでsortを行うフィールドを指定する
sort -nrk 3 list.txt 3 okan 60 2 oton 58 4 onii 31 1 holly 30 5 tora 5 6 momo 3となる
The authenticity of host 'remote server (xxx.xxx.xx.xx)' can't be established. RSA key fingerprint is 77:69:25:f0:96:02:41:0b:bf:c9:88:fb:03:9b:55:44. Are you sure you want to continue connecting (yes/no)?とこういうのが出てくるのだけど、プログラム的にssh接続などをしているとこれが出るとプログラムがそこで止まってしまったりするので何とかしたいっていう場合
if ! grep -q "remote_server" ~/.ssh/known_hosts 2>/dev/null; then # rsa or dsa ssh-keyscan -t dsa "remote_server" >> ~/.ssh/known_hosts fi
ssh -o StrictHostKeyChecking=no -l account -i ~/.ssh/id_dsa remote_server
cat <<EOL > ~/.ssh/config > Host * > StrictHostKeyChecking no > EOLオプション指定しなくても有効になる
ServerAliveInterval 60
# 標準では対話式だけど、コマンド一発でできるように ssh-keygen -t dsa -C "non password key" -N "" -f ~/.ssh/id_dsaこれで~/.ssh 以下に
-rw------- 1 hoge hoge 668 8月 24 20:57 id_dsa # 秘密鍵 -rw-r--r-- 1 hoge hoge 606 8月 24 20:57 id_dsa.pub # 公開鍵というファイルが生成される。生成された公開鍵のほうをパスワードなしでログインしたいサーバのアカウントのホームディレクトリ以下の~/.ssh/authorized_keys に追加する。追加後はid_dsa.pubは必要ないので削除。
ssh -l account -i ~/.ssh/id_dsa remote_server
ssh-keygen -t dsa -C "password key" -N "hogehoge" -f ~/.ssh/id_dsaid_dsa.pubをパログインしたいサーバのアカウントのホームディレクトリ以下の~/.ssh/authorized_keys に追加する。追加後はid_dsa.pubは必要ないので削除。ここは手順は同じ。
ssh -l account -i ~/.ssh/id_dsa remote_server Enter passphrase for key '/home/hoge/.ssh/id_dsa': <- ここにパスワード入力とりあえずパスワード入力することでログインできることは確認。これで一度リモートからはログアウトし、ssh-agentを起動してみる。
ssh-agent bashssh-agentに鍵の情報を覚えさす
ssh-add ~/.ssh/id_dsa Enter passphrase for key '/home/hoge/.ssh/id_dsa': <- ここにパスワード入力 Identity added: /home/hoge/.ssh/id_dsa (/home/hoge/.ssh/id_dsa) # これで再度ssh。パスワード入力なしでいけるはず ssh -l account -i ~/.ssh/id_dsa remote_serverちなみにssh-agentを落とすときは
eval $(ssh-agent -k)これでパスワードありでも無しとおなじような扱いで接続できる
grep Cipher /etc/ssh/ssh_config # Cipher 3des # Ciphers aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc使用できる暗号化の方法とデフォルトがどれになっているかわかる。指定したい場合は
ssh -c aes128-cbc remotehostのようにすればよい。rsync + sshやscpなどの転送速度を気にする場合はcipherの指定をarcfourにすると早くなるようだ。ただし暗号化の強度は落ちるので自己責任。のようだ
tar tf archive.tar hoge.txt hogehoge.txt hogehogehoge.txthogehogehoge.txtだけ取り出したい場合
tar xf archive.tar hogehogehoge.txtというようにアーカイブのあとに取り出したいファイル名を指定する
tar --totals -cpvf archive.tar hogehoge.txt hogehogehoge.txt Total bytes written: 30720 (30KiB, 4.9MiB/s)
tar --totals --preserve -cvT archive.list -f archive.tararchive.listにはファイルリストを一行ずつ記述する
tar -cvX exclude.list -f archive.tar hogehoge.txt hogehogehoge.txt
tar --newer "2008-11-23 18:50:00" -cvf archive.tar hogehoge.txt hogehogehoge.tx
cd /home/hoge tar cvf /backup/hoge.tar file1 file2 dir1 dir2とするのがめんどくさい場合-C, --directoryを指定する
cd /home/hoge tar -C /home/hoge -cvf /backup/hoge.tar file1 file2 dir1 dir2
tar -C /path/to -cpzf - . | ssh account@remote_server "tar -C /path/to xvfp -"これはすぐに展開してしまうパターン。どっちかというとローカルのファイル/ディレクトリをリモートにコピーみたいな感じ。tarballとしてリモートに転送したい。だけど、一度ローカルにtarball作りたくない場合は、
tar -C /path/to -cpzf - . | ssh account@remote_server "cat > /path/hogehoge.tar.gz"とするとよい
ssh account@remote "cd path && tar cpfz - ." > hogehoge.tar.gz
#^M はターミナルで Ctl+v Ctl+m を入力 sed -i 's/^M//g' crlf.txtこれで再度viで対象ファイルを開くと正常に削除されている
/sbin/ifconfig eth0 | grep "inet addr" | sed -e 's/.*inet addr:\([0-9.]*\) .*/\1/'grepで結果を絞ってからsedする。interface部分は適時変更。linuxベースで確認しているので、ifconfigの結果が違う場合は当然使えない
date --date 'yesterday'10日前
date '+%Y-%M-%d %T' --date '10 days ago'10年後
date '+%Y-%M-%d %T' --date '10 years'unixtime
date '+%s'指定した日付のunixtime
date '+%s' -d "2009-02-17 11:51:01"といろいろできるみたい
date --date "@1325809488" "+%Y-%m-%d %H:%M:%S"
date -s '1999-12-31 11:59:59'のようにすると日付変更できる。ただしrootのみ(まあこんなことあんまりせんだろうけど。普通はntpdかntpdateでしょう)
if [ -t 0 ]; then echo "適当に出力 else # 標準入力で受け取ったデータをそのまま出力 cat - fi
if [ -p /dev/stdin ]; then # 標準入力で受け取ったデータをそのまま出力 cat - else echo "適当に出力 fi /dev/stdinのかわりに/proc/self/fd/0, /dev/fd/0 でもいけるかも
file="/path/to/file" if [ -s $file ]; then echo "\$file is exists and not zero length" fi
#hogehogeアカウントが起動している情報を表示する。ただし、一行目(見出し)は非表示 ps -U hogehoge -o 'user,uid,gid,pid,ppid,rss,command' --no-heading # hoge.plというスクリプトが起動している情報を表示 ps -C hoge.pl -o 'user,uid,gid,pid,ppid,rss,command' --no-headers # tree状に全体表示 ps axlf
[-o format] -o オプションを使用すると、出力書式をユーザーが指定するこ と ができます。 出力書式は、空白またはコンマで区切った引数のリストで指定しま す。 各 変数にはデフォルトのヘッダーがあります。等号と新しい ヘッダーのテキストを追加することによって、デフォルト の ヘッ ダーを上書きできます。引数の残りの文字は、ヘッダーテキストと して使用されます。コマンド行で指定した順番でフィールドが書き 込まれ、カラムとして出力されます。フィールド幅は、少なくとも ヘッダーを表示できる幅 (デフォルト値または指定値) がシステム に よっ て選択されます。-o user=, のようにヘッダーテキストが NULL である場合、フィールド幅は少なくともデフォル ト の ヘッ ダーテキストを表示できる幅になります。すべてのヘッダーテキス トが NULL である場合、ヘッダー行が出力されません。 POSIX ロケールでは、次の名前が認識されます。 user プロセスの実効ユーザーID。テキストのユーザーID を取 得 でき、フィールド幅が足りる場合は、テキストのユーザーID になります。そうでない場合は、10 進数の ID に な り ま す。 ruser プロセスの実ユーザーID。テキストのユーザーID を取得 で き、 フィー ルド幅が足りる場合は、テキストのユーザーID になります。そうでない場合は、10 進数の ID に な り ま す。 group プロセスの実効グループ ID。テキストのユーザーID を取得 でき、フィールド幅が足りる場合は、テキストのユーザーID になります。そうでない場合は、10 進数の ID に な り ま す。 rgroup プロセスの実グループ ID。テキストのユーザーID を取得で き、 フィー ルド幅が足りる場合は、テキストのユーザーID になります。そうでない場合は、10 進数の ID に な り ま す。 pid プロセス ID の 10 進数値。 ppid 親プロセス ID の 10 進数値。 pgid プロセスグループ ID の 10 進値。 pcpu 最近のある期間において、使用できる CPU 時間に対して 実 際 に使用された CPU 時間の割合 (単位: %)。「最近」およ び「使用できる CPU 時間」は不定で、場合によって異な り ます。 vsz 仮想メモリー中のプロセスの合計サイズ (単位: キロバイト )。 nice プロセスの、システムスケジューリング優先順位を表す 10 進数値。nice(1) を参照してください。 etime POSIX ロケールにおける、プロセスが開始されてからの経過 時間。書式は次のとおりです。 [[dd-]hh:]mm:ss dd 日 hh 時間 mm 分 ss 秒 dd フィールドの値は 10 進の整数です。hh、mm、ss フィー ル ド は、ゼロによって左揃えされた 2 桁の 10 進整数です。 time POSIX ロケールにおける、プロセスの累積 CPU 時間。書 式 は次のとおりです。 [dd-]hh:mm:ss dd、hh, mm、ss フィールドは、etime と同様です。 etime の説明を参照してください。 tty プロセスの制御端末の名前。書式は who(1) コマンドによっ て使用されるものと同じです。 comm 実行されているコマンドの、文字列としての名前 (argv[0] の値)。 args 文字列としての、コマンドとそのすべての引数。実装によっ てフィールド幅までに切り捨てられることがあります。これ は実装に依存します。この文字列が、コマンドが起動された ときにコマンドに渡された引数であるか、またはアプリケー ションによって変更された引数であるかは、不定です。アプ リ ケーションは、引数リストを変更できて、その変更を ps の出力に反映することに依存しません。Solaris 実装では、 この文字列は 80 文字以内に限定され、コマンドが起動され たときにコマンドに渡された引数となります。 Solaris 実装では、次の名前が認識されます。 f プロセスに関連付けられたフラグ (16 進数、加法的)。 s プロセスの状態。 c スケジューリングのためのプロセッサ利用 (旧仕様) uid プロセスの実効ユーザーID (10 進整数) ruid プロセスの実ユーザーID (10 進整数) gid プロセスの実効グループ ID (10 進整数) rgid プロセスの実グループ ID (10 進整数) projid プロセスのプロジェクト ID (10 進整数) project プロセスのプロジェクト ID (取得できる場合はテキス ト。 そうでない場合は 10 進整数) sid セッションリーダーのプロセス ID taskid プロセスのタスク ID class プロセスのスケジューリングクラス pri プロセスの優先順位 (数値が大きいほど優先順位が高い) opri プロセスの廃止優先順位 (数値が小きいほど優先順位が高い ) lwp lwp ID (10 進数)。1 行に 1 つの進行中の軽量プロセス が 示されます。 nlwp 軽量プロセスの数 psr プロセスまたは軽量プロセスがバインドされているプロセッ サの数 pset プロセスまたは軽量プロセスがバインドされているプロセッ サセットの ID addr プロセスのメモリーアドレス osz 仮想メモリー中のプロセスの合計サイズ (単位: ページ) wchan プロセスが休止中のイベントのアドレス (- の場合、プロセ スは動作中) stime プロセスの開始時刻または開始日。空白なしで出力さ れ ま す。 rss プロセスの常駐の設定サイズ (単位: キロバイト) pmem マシン上の物理メモリーに対する、プロセスの常駐の設定サ イズの割合 (単位: %) fname プロセスの実行可能ファイルのベース名の先頭 8 バイト comm および args だけに、空白文字を含めることがで き ま す。 Solaris 実装の変数およびその他すべての名前には、空白文字を含 めることができません。 POSIX ロケールで使用されるデフォルトヘッダーとそれに対応する 書式指定子は、次のとおりです。 __________________________________________________________________ | 書式 デフォルト | 書式 デフォルト | | 指定子 ヘッダー | 指定子 ヘッダー | | args COMMAND | ppid PPID | | comm COMMAND | rgroup RGROUP | | etime ELAPSED | ruser RUSER | | group GROUP | time TIME | | nice NI | tty TT | | pcpu %CPU | user USER | | pgid PGID | vsz VSZ | | pid PID | | |________________________________|________________________________| Solaris 実装における書式指定子と対応するデフォルト ヘッ ダー は、次のとおりです。 __________________________________________________________________ | 書式 デフォルト | 書式 デフォルト | | 指定子 ヘッダー | 指定子 ヘッダー | | addr ADDR | projid PROJID | | c C | project PROJECT | | class CLS | psr PSR | | f F | rgid RGID | | fname COMMAND | rss RSS | | gid GID | ruid RUID | | lwp LWP | s S | | nlwp NLWP | sid SID | | opri PRI | stime STIME | | osz SZ | taskid TASKID | | pmem %MEM | uid UID | | pri PRI | wchan WCHAN | |________________________________|________________________________| 【使用例】 例 1: ps コマンドの例 example% ps -o user,pid,ppid=MOM -o args 上記のコマンドによって、POSIX ロケールでは以下の内容が出力さ れます。 USER PID MOM COMMAND helene 34 12 ps -o uid,pid,ppid=MOM -o args 切り捨てが発生する可能性があるため、COMMAND の内容は必ずしも 上記の例と一致しません。 【環境】 ps の実行に影響を与える環境変数 LC_CTYPE、 LC_MESSAGES、 LC_TIME、NLSPATH についての詳細は、environ(5) を参照してくだ さい。 COLUMNS 画面の水平方向のサイズとして、システムが決定する値の代 わりに使用する値を定義します。この値により、表示するテ キストカラム数が決まります。正直、オプションが多すぎるので詳細は
/sbin/fuser -u /home/holly/.hoge.pl.swp /home/holly/.hoge.pl.swp: 8372(holly)どのプロセスもつかんでいない場合は何も表示されない
/sbin/fuser -k /home/holly/.hoge.pl.swpデフォルトでシグナルはSIGKILLが送信されるので変更したい場合は
/sbin/fuser -k /home/holly/.hoge.pl.swp -TERMなどと指定する。killするか確認する場合は
/sbin/fuser -i -k /home/holly/.hoge.pl.swp -TERM-iを指定するとkillする前に確認メッセージが表示される
/sbin/fuser -nc tcp 25 USER PID ACCESS COMMAND 25/tcp: root 1541 F.... master-nはtcp/udpなどを指定するためのオプション。-cはマウントポイントおよびそのマウントポイントの下にあるファイルの使用状況を表示。この場合だとpostfixのmasterプロセスが使用していることがわかる
pgrep -u holly -x -l -f "/usr/bin/perl /home/admin/hoge.pl"とする。オプションはこんな感じ
pkill -u admin -x -f "/usr/bin/perl /home/admin/hoge.pl"あいまい指定でもkillできるけど、killしたくないプロセスまでkillしてしまう可能性があるので、この方が確実。pgrepで一度確認するのがよい。
pkill -KILL -u admin -x -f "/usr/bin/perl /home/admin/hoge.pl"のようにkillと同じような指定方法でいい
# test.sh #!/bin/sh date=$(date +%Y%m%d-%H%M%S) echo "now is $date"こんなのに変更した
#test_new.sh #!/bin/sh echo "now is $(date +%Y%m%d-%H%M%S)"変更分の差分をとりたい場合
diff -u test.sh test_new.sh --- test.sh 2008-09-04 00:59:06.000000000 +0900 +++ test_new.sh 2008-09-04 01:01:25.000000000 +0900 @@ -1,4 +1,3 @@ #!/bin/sh -date=$(date +%Y%m%d-%H%M%S) -echo "now is $date" +echo "now is $(date +%Y%m%d-%H%M%S)"とすると差分が表示される。出力形式はいろいろあるが、-nがなんとなくわかりやすい。
diff -u test.sh test_new.sh > test.patchとするとpatchファイルのできあがり。test_new.shを削除したあと
patch -p0 -d . < test.patchとするとtest.shはpatchがあたり、test_new.shとの差分がなくなる
diff -ru dir1 dir2 diff -ru dir1/a/b/hogehoge.txt dir2/a/b/hogehoge.txt --- dir1/a/b/hogehoge.txt 2008-09-04 01:07:38.000000000 +0900 +++ dir2/a/b/hogehoge.txt 2008-09-04 01:08:12.000000000 +0900 @@ -1 +1,2 @@ hogehoge +alalala Only in dir2: aaa.txtオプションに-rを付けると再帰的にdiffしてくれるが差分結果がぞろぞろと出てきてしまうので、
diff -rq dir1 dir2 Files dir1/a/b/hogehoge.txt and dir2/a/b/hogehoge.txt differ Only in dir2: aaa.txtオプションに-qを付けると詳細な差分は表示されなくなる。
diff -ruN dir1 dir2 > dir.patchオプションに-Nを付けると、ディレクトリを比較する際、片方のディレクトリにのみファイルが存在していたらもう片方のディレクトリには同名の空っぽのファイルがあるように動作する。これでディレクトリ単位のpatchファイルを作成可能。戻すときはファイルのpatch手順と同じでよいが、ファイルの追加はされても削除が行われません。ファイルの削除も再現するには以下のように-Eをつける
patch -p0 -d . -E < dir.patch
#-rはディレクトリを再帰的に diff -rq /path/to/foo /path/to/bar Files /path/to/foo/hoge.pl and /path/to/bar/hoge.pl differ Only in /path/to/foo: hage.plFilesから始まっている行は違いのファイル同士。Onlyから始まっているのは片方のディレクトリにしかないファイル
lv -Iej -Ou8 euc.txtよく使うオプション
lv -Iej -Ou8 euc.txt > utf8.txt一括で複数のファイルの文字コードを変換したい場合は
for f in *.txt; do conv=$f.utf8 lv -Ia -Ou8 $f > $conv mv -f $conv $f done
uuidgen a53d7838-3c53-4b02-a98f-b4b0679f3a45これだけでいいんだけど、このうちの先頭8byteだけでいいし、-(ハイフン)はいらない場合は
uuidgen | sed -e 's/-//g' | cut -c 1-8 186ec9d1こんなふうにmd5の結果っぽくなるので、それなりにランダムっぽい文字列を作りたい場合は、perlねたのランダムな文字列を生成したいを見るとよい
# /binに移動 pushd /bin # /usr/binに移動 pushd /usr/bin # /varに移動 pushd /var引数なしで実行した場合は、ひとつ前のディレクトリに戻り、実行時のカレントディレクトリはディレクトリスタックのいちばん前に回される。
dirs /var /usr/bin /bin ~何がうれしいかというと今まで移動したディレクトリの名前が/path/to/long/path/nameと長ったらしい名前だとして、戻りたい場合にcd /path/to/long/path/name/.... などと入力しなくてもディレクトリスタックに移動した場所が保存されているので、簡単に戻ることができる。/usr/binに戻りたい場合はディレクトリスタックインデックスが1なので(配列の添え字の考え方と同じ。前から0番目)
pushd +1とするだけで戻ることができる。
dd if=/dev/zero of=sparse.txt seek=1024 bs=100M count=0これで100GBの穴あきファイルが作成できる。穴あきファイルをlsすると
LANG=C ls -hl sparse.txt -rw-r--r-- 1 root root 100G Dec 1 01:09 sparse.txtといっけん100Gのファイルのようにみえるが
LANG=C ls -hsl sparse.txt 0 -rw-r--r-- 1 root root 100G Dec 1 01:09 sparse.txtブロックサイズを確認するとまったく使用されていないことがわかる。du, dhなどでも同じ結果になる
cat hello.txt hello worldこれをodすると
od hello.txt 0000000 062550 066154 020157 067567 066162 005144 0000014となる。正直よくわからないので
od -tcx1 hello.txt 0000000 h e l l o w o r l d \n 68 65 6c 6c 6f 20 77 6f 72 6c 64 0a 0000014tcx1がおすすめ。どこかでみた。がそのとおり
x[長さ] 16進数表記 d[長さ] 10進数表記 o[長さ] 8進数表記 c 文字表記 (改行コードなどは \r や \n のように表記) a 文字表記 (改行コードなどは CR や LF のように表記)長さはデフォルトで2byteになるので整理すると↓のようになる
-tx1 … 1バイト単位で 16進数表記 -tx2 … 2バイト単位で 16進数表記 -tx4 … 4バイト単位で 16進数表記 -td1 … 1バイト単位で 10進数表記 -td2 … 2バイト単位で 10進数表記 -td4 … 4バイト単位で 10進数表記 -tx … (省略したので) 2バイト単位で 16進数表記 -td … (省略したので) 2バイト単位で 10進数表記
split -l 10 num.txtとする。lsすると
num.txt xaa xab xac xad xae xaf xag xah xai xajと存在している。復元したい場合は
cat xa* > num.txt.concatとするとよい。ハッシュ値をmd5sumで確認すると同じになっていることが確認できる
split -l 30 num.txt split.と指定した場合は
split.aa split.ab split.ac split.adと分割されるようになる
echo -e 'password\ncat /etc/shadow' | sudo -S -ssudoのデフォルト設定だと5分間は一度認証成功するとその後はパスワード聞かれないので、5分以内に2回目の実行をする場合は注意。上記例で実行すると
/bin/bash: line 1: password: command not found uid=0(root) gid=0(root) 所属グループ=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)とコマンドとして認識される
-L --location 指定しなくてもよさそうだが。URLを指定 -O --remote-name remote-nameでローカルに保存する -o --output 保存するファイル名 -s --silent 出力を抑制 --insecure httpsでアクセスする時に怪しい証明書でもエラーにしない -A --user-agent --user 引数なしだと対話形式 <user>を指定した場合は対話形式でパスワード、<user>:<pass> で指定した場合は対話はなく実行 -1/--tlsv1 Use TLSv1 (SSL) -2/--sslv2 Use SSLv2 (SSL) -3/--sslv3 Use SSLv3 (SSL) -d/--data <data> formdataを渡す。こんな感じで。"name=Rafael%20Sagula&phone=3320780" -e/--referer referer
curl -X PUT --data name=kurt --data band=nirvana http://$apiurl/Xオプションでメソッドを指定すればよい。POSTは明示的に指定しなくても--dataがあればPOSTとみなされる
X-Requested-With: HTTP_X_REQUESTED_WITH or XMLHttpRequest or XmlHttpRequestを含んでいれば、xhrな処理をしてくれるはずなので
# cakephpで構築したやつの場合。ログイン認証cookieとxhrなrequest headerを送る。ついでにuseragentもおくる curl -H "Cookie: CAKEPHP=xxxxxxxx" -H "X-Requested-With: HTTP_X_REQUESTED_WITH" -A "Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0" -v -X POST http://$domain/show/:idというふうに-Hにrequest headerを指定する
file=../../../etc/passwd echo $(cd $(dirname $file) && pwd)/$(basename $file)
# -20 とかで指定したい場合は nice -n -20 /path/to/command とする # -nは--adjustment=Nでもよい nice -n10 /path/to/command
renice [adjustment] -p $PIDその他、プロセスに対してではなく
-u $user -g $processgroup || というような指定もできるようだ **ionice 最近知った =|BOX| ionice -c2 -n7 /path/to/command使い方。-nが優先度で数値が大きいほど実行度が後回しになる。scheduling classはよくわからないが、3は他のプロセスがioに負荷を少しでもかけている場合はそれが終わるまで待つらしい。ただしそのプログラムが終わらない。ということになりかねないのであんまりやらないほうがいいような気がする
-n Class data (typically 0-7, lower being higher prio) -c Scheduling class 1: realtime, 2: best-effort, 3: idle -p Process pid -h This help page
rsync --bwlimit=3096 --rsync-path="ionice -c2 -n7 nice -n19 rsync" -ave "ssh -c arcfour" /backup/ remote:/path/to/backup/
# -n 接続元のIPアドレスの名前解決をしない # -x 16進数で表示 # -X ASCIIで表示 # -i dumpするinterfaceを指定 # -s パケットから取り出すデータの長さ。byte指定 tcpdump -nxX -i eth0 -s2000 port 80
tcpdump -nxX -i eth0 -s2000 -w tcpdump-bin.log port 80出力した結果はそのままではよめないので、
tcpdump -n -r tcpdump-bin.logとすると読めるようになるがよくわからないので、調べておく。あまりみることないと思うし
# $hostからの接続でport80なら tcpdump -nxX -s2000 -vv host $host and dst port 80 # $hostへの接続でport80なら tcpdump -nxX -s2000 -vv src host $host and port 80http://www.tcpdump.org/tcpdump_man.htmlをみればわかるが、udpやsubnet単位でのキャプチャも可能