Technical Knowledge
目次
- Linux
- 再帰的に同名のディレクトリを削除する。
- 特定の文字にマッチした行だけ tail で表示する。
- HDD の容量を調べる。
- ctrl + alt + del でのシャットダウンを制御する。
- ポートを開いてるプロセスを調べる。
- ファイルを使用しているプロセスを調べる。
- ハードウェアリソースの状況を調べる。
- プロセスが使っている動的ライブラリを調べる。
- ライブラリのシンボルの一覧を取得する。
- 共有ライブラリの動的リンカの名前を取得する。
- Runlevel.
- ssh, scp 等の接続が遅い。
- ISO イメージ操作。
- コンソールのキーマップを変更。
- カーネルのアップデート。
- fdisk 後デバイスファイルが存在しない。
- cat でファイルを作成する。
- デバイスにラベルをつけてマウントする。
- 起動時のカーネルオプションを確認する。
- netstat -nap でプロセス名が「-」になっている。
- DHCP クライアントの設定。
- rsh の許可設定。
- 時刻合わせ。
- ローカルポートの範囲を取得する。
- ハイフンから始まるファイル名等を扱う。
- PCI バスのデバイスの一覧とドライバを表示する。
- ls で日本語ファイル名を表示する。
- デバイスファイルのメジャー、マイナー番号一覧を表示する。
- カーネル起動パラメータを表示する。
- mail コマンドで from を指定する。
- システムリソースの使用状況を見る。
- grep の色付き結果を less で表示する。
- 大量 swap 後に swap 領域を解放する
- CentOS
- ArchLinux
Linux
[OS]
再帰的に同名のディレクトリを削除する。
# find ./ -type d -name CVS -exec rm -rd {} \;
or
# find ./ -type d -name CVS -print | xargs rm -rd
特定の文字にマッチした行だけ tail で表示する。
# tail -f ファイル | grep パターン
HDD の容量を調べる。
–h オプションで単位が見やすくなる。
# df -h
ctrl + alt + del でのシャットダウンを制御する。
- /proc/sys/kernel/ctrl-alt-del を編集。
- /etc/sysctl.conf を編集。
ポートを開いてるプロセスを調べる。
# lsof # fuser -n [tcp/udp] ポート番号
ファイルを使用しているプロセスを調べる。
# fuser ファイルパス
ハードウェアリソースの状況を調べる。
# sar # vmstat # iostat # ipcs # free
プロセスが使っている動的ライブラリを調べる。
/proc/プロセス ID/maps の中に、メモリ状態が表示される。
ライブラリのシンボルの一覧を取得する。
# nm -A --defined-only lib*.{a,so}
共有ライブラリの動的リンカの名前を取得する。
# readelf -l バイナリファイルパス | grep interpreter
Runlevel.
/etc/inittab 参照。
現在の Runlevel を確認するには
# runlevel
Runlevel | 内容 |
---|---|
0 | シャットダウンシーケンスの開始。 |
1 | シングルユーザーモード(管理者モード:以外のログインは不可)。O/S等のメンテナンス時に使用。 |
2 | マルチユーザモード(NFSなし)。ログイン画面はCUI(テキストの画面)。 |
3 | フルマルチユーザモード( 2 + NFS ) |
4 | 未使用(独自のrunlevel設定可)。PlamoLinux の場合、xdm(X Display Manager)の X-window only で起動。 |
5 | X11の使用。 |
6 | リブート。 |
ssh, scp 等の接続が遅い。
クライアントの名前解決ができないため。hosts の設定もしくは DNS の設定を行う。
ISO イメージ操作。
イメージを作成。
マウントせずに
# dd if=/dev/cdrom of=/tmp/label.iso
イメージを読み込み。
# mount -t iso9660 -o loop /tmp/label.iso /mnt/cdrom
コンソールのキーマップを変更。
/usr/lib/kbd/keymaps や /usr/share/kbd/keymaps 以下のキーマップを指定する。
# keyload jp106
カーネルのアップデート。
新しいカーネルソースを展開。
# cd /usr/src # tar xvf linux-Version.tar.gz # make mrproper
元のコンフィグファイルをコピー。
# cd linux-Version # cp /boot/config ./.config
元のコンフィグファイルを元に再設定。
# make oldconfig
コンフィグファイルの追加設定。
# make menuconfig
同バージョンでの再コンパイル時はバージョン名の変更。
変更前 変更後 VERSION = 2 VERSION = 2 PATCHLEVEL = 6 PATCHLEVEL = 6 SUBLEVEL = 23 SUBLEVEL = 23 EXTRAVERSION = EXTRAVERSION =test コンパイル。 2.4 の場合(make bzImage, make modules を個別に実行と同じ)
# make dep # make
make オプション
オプション 内容 mrproper 現在のコンフィグレーションファイル .config と、前回のカーネルコンフィグレーションで生成されたすべてのファイルを削除して初期状態に戻す。トーバルス氏が、欧州で知られている Mr.Proper というクリーニング製品の名前にちなんで付けたとのこと。 config 設定項目1つ1つについて、順番に対話的に尋ねてくる、最もシンプルな形式。 menuconfig curses ライブラリを利用した、端末ベースのメニュー形式のインターフェイス。 xconfig Qt ベースの GUI ツール。 gconfig Gtk ベースの GUI ツール。 oldconfig 既存の .config をデフォルトとして、新しい定義が必要な項目がある場合のみ、尋ねてくる。 defconfig arch/$ARCH/defconfig をデフォルトとして、.config を生成する。 dep dep は dependency の意味で、プログラムの依存関係を記述する .depend ファイルと、ヘッダファイル間の依存関係を記述する .hdepend ファイルを、この手順で前もって作成しておく。 depend dep と同じ。 bzImage bzImage を作成。 zImage zImage を作成。 modules modules を作成。 無し make bzImage、make zImage あるいは make modules を実行と同じ。 modules_install /lib/modules/カーネルバージョン(例:/lib/modules/2.6.23.1-42.fc8)ディレクトリを作成し、その下にサブディレクトリに分類してカーネルモジュールをコピーする。また、モジュールのパスと、モジュールの依存関係を記述したmodules.dep ファイルを生成する。 install このコマンドは /lib/modules/カーネルバージョン(例:/lib/modules/2.6.23.1-42.fc8)ディレクトリを参照するので、make modules_install を実行しておく。/boot の下に bzImage を vmlinuz としてコピーし、System.map をコピーし、 initrd を生成する。また、/boot/grub/grub.conf に新しく生成したカーネルのエントリを追加する。 headers_check カーネルヘッダインストールチェック。 headers_install カーネルヘッダーインストール。 インストール。
# make modules_install # make install
ブートローダが LILO の場合、/boot/map ファイルを更新する。
# /sbin/lilo
fdisk 後デバイスファイルが存在しない。
再起動が必要。 再起動で udev により作成される。 手動で行う場合、/dev/sda5 を作成。
# ls -la /dev/sda? brw-r----- 1 root disk 8, 1 Apr 29 1995 /dev/sda1 brw-r----- 1 root disk 8, 2 Apr 29 1995 /dev/sda2 brw-r----- 1 root disk 8, 3 Apr 29 1995 /dev/sda3 brw-r----- 1 root disk 8, 4 Apr 29 1995 /dev/sda4 # mknod /dev/sda5 b 8 5 # chown root.disk /dev/sda5 # chmod 0640 /dev/sda5
cat でファイルを作成する。
環境変数を展開する。
# cat > /tmp/file1 <<EOM echo $PATH; EOM
環境変数を展開しない。
# cat > /tmp/file1 <<'EOM' echo $PATH; EOM
デバイスにラベルをつけてマウントする。
CentOS 系
現在つけられているラベルを確認。
# ls /dev/disk/by-label
ラベルを作成。
# e2label デバイス名 ラベル名 # e2label /dev/hda1 /boot
現在つけられているスワップラベルを確認。
# cat /proc/swap
スワップにラベルを作成。
# mkswap -L ラベル名 デバイス名 # mkswap -L SWAP /dev/hda2
fstab の設定。
LABEL=/boot /boot ext3 defaults 1 2 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 LABEL=SWAP swap swap defaults 0 0
起動時のカーネルオプションを確認する。
# cat /proc/cmdline
netstat -nap でプロセス名が「-」になっている。
portmap による割り当てポートのため。NFS 等で使用されている。
# rpcinfo -p
DHCP クライアントの設定。
DHCP での取得に失敗し eth0 の読み込みができない場合。
# /sbin/dhclient # ifconfig eth0
DHCP での取得に失敗し eth0 の読み込みができない場合。
/etc/dhclient.conf を設定。
rsh の許可設定。
rsh 接続の許可設定。
/etc/hosts.equiv に許可するホスト名とユーザを記入する。
root での接続の許可設定。
# echo rsh >> /etc/securetty # rsh を追加
時刻合わせ。
# ntpdate NTPサーバ
the NTP socket is in use, exiting が出る場合
–u オプションを使用
# ntpdate -u NTPサーバ
または、サービスを一時停止する。
# service ntpd stop # ntpdate time-nw.nist.gov # service ntpd start
ハードウェア時計を設定。
# hwclock --systohc
ローカルポートの範囲を取得する。
# cat /proc/sys/net/ipv4/ip_local_prot_range
ハイフンから始まるファイル名等を扱う。
フルパスや、「./」を使用した相対パスにする。
# rm ./-file
「–」を付ける。
# rm -- -file # grep -- '-Wall' file
PCI バスのデバイスの一覧とドライバを表示する。
# lspci -vvx # lsmod
ls で日本語ファイル名を表示する。
# ls --show-control-chars
デバイスファイルのメジャー、マイナー番号一覧を表示する。
# less /usr/src/linux/Documentation/devices.txt
カーネル起動パラメータを表示する。
# less /usr/src/linux/Documentation/kernel-parameters.txt
mail コマンドで from を指定する。
— -f オプションを使用する。
# mail to@example.com -- -f from@example.com
システムリソースの使用状況を見る。
ネットワーク
# dstat -n 5
grep の色付き結果を less で表示する。
- grep に -—color=always を指定
- less に -R を指定
# grep --color=always ... | less -R
大量 swap 後に swap 領域を解放する
- swapoff でメモリに移動
- swapon でスワップを有効にする
- メモリが足りない場合、swapoff が失敗するのでプロセス終了等でメモリを解放する
# swapoff -a # swapon -a
CentOS
[ディストリビューション]
バージョンを確認。
# cat /etc/redhat-release
ArchLinux
[ディストリビューション]
コマンドがどのパッケージに含まれるか分からない。
pkgtools を使用して探す。
ifconfig を探す場合
# pacman -S pkgtools # pkgfile --update # pkgfile -s ifconfig core/net-tools