「Linux/雑記」の版間の差分
提供: Wikinote
< Linux
細 (→すべてのプロセスの top 情報を表示する) |
(→ioctl() の使い方) |
||
行47: | 行47: | ||
* 基本的には、<code>fd = open()</code> して <code>ioctl(fd, ''request'', ...)</code> して <code>close(fd)</code> という流れ。 | * 基本的には、<code>fd = open()</code> して <code>ioctl(fd, ''request'', ...)</code> して <code>close(fd)</code> という流れ。 | ||
* <code>''request''</code> は、<code>man ioctl_list</code> から探す。引き数の型も書いてあるので、これを参考にする。 | * <code>''request''</code> は、<code>man ioctl_list</code> から探す。引き数の型も書いてあるので、これを参考にする。 | ||
− | * | + | * サンプルコード: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 | ||
=== タイマについて === | === タイマについて === |
2009年4月5日 (日) 23:29時点における版
目次
覚え書き
未分類の覚え書き。
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
から探す。引き数の型も書いてあるので、これを参考にする。 - サンプルコード: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
タイマについて
- jiffies 変数
- タイマ割り込みの回数を記録する。jiffies_64 の下位 32 ビットが jiffies。グローバルタイマ割り込みハンドラ do_timer() にてインクリメントされる。
- HZ マクロ
- 1 秒間に発生するタイマ割り込みの回数。RHEL では 1000、SLES では 250
- xtime 変数
- 1970/01/01 からの経過時間。グローバルタイマ割り込みハンドラ do_timer() にて進められる。
/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 アプリ) が使う