「Linux/雑記」の版間の差分
細 (→覚え書き) |
(→覚え書き) |
||
行1: | 行1: | ||
== 覚え書き == | == 覚え書き == | ||
未分類の覚え書き。 | 未分類の覚え書き。 | ||
+ | |||
+ | === tar で必要なファイルのみを抽出 === | ||
+ | |||
+ | 以下のようなファイルがあるとして、hoge だけを抽出したければ | ||
+ | |||
+ | [hagio@localhost ~]$ tar tzf test.tar.gz | ||
+ | dir1/ | ||
+ | dir1/hoge | ||
+ | dir1/fuga | ||
+ | dir2/ | ||
+ | dir2/fuga | ||
+ | [hagio@localhost ~]$ tar xzf test.tar.gz *hoge | ||
+ | [hagio@localhost ~]$ ls | ||
+ | dir1 test.tar.gz | ||
=== locate 用データベースから除外 === | === locate 用データベースから除外 === |
2009年6月23日 (火) 16:44時点における版
覚え書き
未分類の覚え書き。
tar で必要なファイルのみを抽出
以下のようなファイルがあるとして、hoge だけを抽出したければ
[hagio@localhost ~]$ tar tzf test.tar.gz dir1/ dir1/hoge dir1/fuga dir2/ dir2/fuga [hagio@localhost ~]$ tar xzf test.tar.gz *hoge [hagio@localhost ~]$ ls dir1 test.tar.gz
locate 用データベースから除外
locate でファイルを検索する際、updatedb にて作成されたデータベースが用いられる。 テンポラリファイルや、バックアップファイルなどを検索する必要はないので、 これらを除外しておけば無駄がなくなると思われる。
# vi /etc/updatedb.conf PRUNEFS = "auto afs iso9660 sfs udf" ★PRUNEPATHS = "/afs /media /net /sfs /tmp /udev /var/spool/cups /var/spool/squid /var/tmp"
ここに除外するディレクトリを追加すれば良い。
ビープ音がうるさい
# vi /etc/inputrc set bell-style none
date コマンドについて
しょーもないけど覚え書き。ntp の実験なんかで時刻を書き換えたい場合、
# date --set "10 seconds ago"
といった書き方ができる。時刻を進めるには、ago の反対が必要… かと思っていろいろ調べていたが見つからない。
# date --set "10 seconds"
で 10 秒後に進められるじゃん orz
ちなみに、hwclock コマンドも同様のフォーマットが利用可能だ。
# hwclock --set --date "10 sec ago"
top について
top の man ページは読みづらいので、あまり読みたくない。
すべてのプロセスの top 情報を表示する
通常は画面に収まるだけのプロセスの情報しか表示されないが、すべてを出力することもできる。
# top -bn 1
-
-b
- バッチモード。テキストに出力する場合はこれを使う。
-
-n number
- 出力する回数を指定する。
激速 top
# top -d 0.01
-
-d ss.tt
- 出力する間隔を指定する。マニュアルには、小数点以下は 1/10 秒と書いてあるが、1/100 秒までいけるようだ。よって、0.01 が最速で、Celeron 1.80 GHz だと 40 % 程度の CPU 時間を消費する。かるーく負荷をかけたいときなんかには、調節ができて便利。(ぇ
telnet-server について
telnet サーバの立ち上げかたと、ハマったところ。
-
/etc/xinetd.d/telnet
中のdisable = yes
をno
にする-
chkconfig telnet on
でもよい
-
-
/etc/init.d/xinetd restart
で xinetd を再起動する (これがわからずハマった…)
以下のようなエラーが出て接続できない場合
Trying 192.168.1.1... Connected to server. Escape character is '^]'. getaddrinfo: localhost Name or service not known Connection closed by foreign host.
/etc/hosts に 192.168.1.1 server.hagio.org
を追加するとよい。
ホスト名 "server" だけではダメで、FQDN にしたら接続できた。要するに、hostname コマンドの出力結果を貼付ける。
これも数時間ハマった。なぜこうしないといけないのかは不明なので、そのうち調査する。
BIOS のバージョンや HW 情報を得るには
# dmidecode
これもよく忘れる…。
パーティションテーブルの変更をカーネルに知らせるには
# partprobe
これ、よく忘れる上に Web で検索しにくいのだよ。でっかいクワガタを捕まえた気分 (謎)。
カーネル引き数を知るには
$ cat /proc/cmdline
ioctl()
の使い方
- 基本的には、
fd = open()
してioctl(fd, request, ...)
してclose(fd)
という流れ。 -
request
は、man ioctl_list
から探す。引き数の型も書いてあるので、これを参考にする。 - サンプルコード:setro.c - RO (リードオンリー) フラグをセットする
#include <stdio.h> #include <fcntl.h> #include <linux/fs.h> int main(int argc, char* argv[]) { int fd, res, flag; if (argc != 3) { printf("Usage: setro DEVICE RO_FLAG\n"); return 1; } if ((fd = open(argv[1], O_RDWR)) < 0) { perror("open() failed"); return 1; } flag = (int) *argv[2] - '0'; if ((res = ioctl(fd, BLKROSET, &flag)) < 0) { perror("ioctl() failed"); close(fd); return 1; } close(fd); return 0; }
実行例:/dev/sda1 (/boot) をリードオンリーにする。
[root@centos52 ~]# umount /boot ★いったんアンマウント [root@centos52 ~]# ./setro /dev/sda1 1 ★リードオンリーにセット [root@centos52 ~]# mount /boot mount: ブロックデバイス /dev/sda1 は書き込み禁止です、読込み専用でマウントします [root@centos52 ~]# umount /boot [root@centos52 ~]# ./setro /dev/sda1 0 ★リードオンリーを解除 [root@centos52 ~]# mount /boot
/etc/sysconfig/i18n
について
- 読み込まれる場所
-
/etc/rc.d/rc.sysinit
(rhgb 利用時のみ?) -
/etc/init.d/functions
→/etc/profile.d/lang.sh
-
/etc/init.d/firstboot
-
-
SUPPORTED
はsystem-config-language
(GUI アプリ) が使う
その他
リダイレクトの謎
リダイレクトの動きを確認するために、標準出力と標準エラーに文字列を吐くプログラムを書いた。
[hagio@lab ~]$ cat > stdout.c #include <stdio.h> int main(void) { fprintf(stdout, "stdout\n"); fprintf(stderr, "stderr\n"); return 0; }
これを普通に実行すると、もちろん stdout が先に出力される。
[hagio@lab ~]$ cc -o stdout stdout.c && ./stdout stdout stderr
しかし、標準出力と標準エラーを同じファイルにリダイレクトすると…
[hagio@lab ~]$ ./stdout > test 2>&1 [hagio@lab ~]$ cat test stderr stdout
なぜ逆転する?? とりあえず、ltrace を取ってみる。
[hagio@lab ~]$ ltrace -tt -o ltrace.log ./stdout > tmp 2>&1 [hagio@lab ~]$ cat tmp stderr stdout [hagio@lab ~]$ cat ltrace.log 20:03:34.192236 __libc_start_main(0x80483d4, 1, 0xbf80f644, 0x8048450, 0x8048440 <unfinished ...> 20:03:34.192460 fwrite("stdout\n", 1, 7, 0x5de4c0) = 7 20:03:34.193010 fwrite("stderr\n", 1, 7, 0x5de560) = 7 20:03:34.193327 +++ exited (status 0) +++
ちゃんと "stdout" を書き出す方が先に呼び出されている。しかし、strace を取ってみると…
[hagio@lab ~]$ strace -tt -o strace.log ./stdout > tmp 2>&1 [hagio@lab ~]$ tail -n 4 strace.log 20:05:49.658550 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f62000 20:05:49.658611 write(2, "stderr\n", 7) = 7 20:05:49.658907 write(1, "stdout\n", 7) = 7 20:05:49.658993 exit_group(0) = ?
うむむむむ、これは何か「エラーは早く表示すべき」みたいなバイアスがかかってるのか…。 glibc が怪しいので、ソースでも見てみるか。