Smily Books Blog 2023年7月更新中

らぶらぶLinux「コマンドバージン」のためのシステム管理入門 西村めぐみ(ソシム)

1.操作のための基礎知識
(1)リブート
[Ctrl]+[Alt]+[Del]がデフォルトでは「shutdown -t3 -r now」に割り当て
(ただし、Xは事前に終了するかテキストコンソール上でしか有効でない)
(/etc/inittabのTrapの定義による)

(2)ログアウト
「Ctrl]+[Alt]+[BackSpace]でグラフィカルログイン(Xでのログイン)のログアウト
(ログイン画面も終了したい場合、[Ctrl]+[R])

(3)仮想コンソールの切替
[Alt]+[F1]〜[F6]でテキストコンソール、[Alt]+[F7]でXの画面
(/etc/inittabでgettyのコンソール定義による)

2.実用find
(1)/bin配下のシェルスプリプトサーチ
file /bin/* | grep "shell script" | sed -e "s/:.*//g"

(2)/bin配下のシェルスプリプト内の文字列(continue)サーチ
file /bin/* | grep "shell script" | sed -e "s/:.*//g" | xargs grep "continue"

(3)findによるワイルドカード指定
find /tmp -name "test*"
(必ずシングルもしくはダブルコーテーションで囲む事)

(4)データファイルのみfind
find /tmp -name "test*" -type f

(5)ディレクトリのみfind
find /tmp -name "test*" -type d

(6)30日前に修正したファイルのみfind
find /tmp -mtime 30

(7)過去30日以内に修正したファイルのみfind
find /tmp -mtime -30

(8)30日以上前に修正したファイルのみfind
find /tmp -mtime +30
(過去30日間更新していないファイル)

(9)30日前にアクセスファイルのみfind
find /tmp -atime 30

(10)(コマンド実行時から)30日以上前にアクセスしたファイルを削除
find /tmp -atime +30 -exec rm -i {} \;
(過去30日間アクセスしていないファイルを削除)

(11)(コマンド実行日の0時から)30日以上前にアクセスしたファイルを削除
find /tmp -daystart -atime +30 -exec rm -i {} \;

(12)ファイル名が"*.txt"もしくは"*.doc"のデータファイルのみfind
find /tmp \( -name "*.txt" -o -name "*.doc" \) -type f

(13)ファイル名が"*z*"でかつ"*log*"のファイルのみfind
find /tmp -name "*z*" -a -name "*log*"
(-aは省略可能)

(14)ファイル名が"*.txt"以外のファイルのみfind
find /tmp -not -name "*.txt"

(15)setuid、setgidファイルのみfindしてls表示
find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -lad {} \;
(ビットのOFFは、chmod a-s /bin/pingのように実施)

(16)特定ユーザ所有ファイル検索
find / -user ユーザ名

(17)CD-ROM上のファイル検索
find /mnt/cdrom -name "samba*" -noleaf
(-noleafをつけないと一部のディレクトリ検索できない場合あり)

3.実用grep
(1)文字列mountを含むファイルをgrep
grep -l mount /bin/*

(2)文字列mountを含まないファイルをgrep
grep -vl mount /bin/*

(3)文字列bashもしくはawkgrep
egrep "bash|awk" *
(grep -E、grep -eは用いない方が良い)

(4)文字列Test、test何れもgrep
grep -i test *.txt

(5)/etcディレクトリ配下ファイルで文字列ifconfigのあるファイルをgrep
find /etc -type f | xargs grep -l "ifconfig"
(xargsの方がgrepがファイル数分起動しないので-execより高速)

(6)/etcディレクトリ配下ファイルで文字列ifconfigのある行とファイル名をgrep
find /etc -type f | xargs grep "ifconfig" /dev/null

4.実用du
(1)指定ディレクトリ配下の総容量のみdu
du -s /tmp

(2)指定ディレクトリ配下のディレクトリ毎にdu
du -c /tmp

(3)指定ディレクトリ配下のファイル毎にdu
du -a /tmp

(4)指定ディレクトリ配下のみ(サブディレクトリ含めない)の総容量du
du -sS /tmp

(5)小さいサイズ順でdu
du | sort -n

(6)大きいサイズ順でdu
du | sort -nr

(7)/配下(/は覗く)のディレクトリを大きい順にdu(ただし/proc、/devは覗く)
find / -type d -mindepth 1 -maxdepth 2 | egrep -v "proc\|dev" | xargs du | sort -nr
(上位10番目のみとしたいなら最後に「| head」追加)

5.コマンド、ファイル情報の検索
(1)manのテキスト出力
man awk | col -bfx > awk.txt
(colで制御文字を取り除く)

(2)コマンドのパス情報出力
which grep

(3)コマンドのパスとマニュアル情報出力
whereis grep

(4)コマンドのマニュアル概要
whatis find

(5)ファイルの検索
locate *.txt

6.ハードウェア情報の確認
(1)ネットワークカード動作確認
dmesg | grep eth
(2)SCSIカード動作確認
dmesg | grep scsi
(3)その他システム状況確認
①/procディレクトリ配下のファイル表示
find /proc -type f -maxdepth 1 | sort
もしくは
ls /proc | grep -v "/"
②①で表示したファイルをcat
(cat /proc/cpuinfo等)

7.設定ファイル情報の検索
(1)syslogの付いたスクリプト(シンボリックリンク)ファイルの検索
find /etc/rc.d -lname "*syslog"

(2)カレントディレクトリ内のファイル概要表示
whatis * | grep "("
(/etc配下で行えば設定ファイル概要表示)
(マニュアルは章番号(n)で表示されるため、"("でgrepする)

(3)複数あるファイル検索及び内容一括表示
①locate syslog.conf
(syslog.confに関連する全ファイル名表示)
②less `!!`
(直前に表示されたファイルを全てless)
もしくは
locate syslog.conf | xargs less

(4)キーボード設定内容表示
stty -a

8.ファイルとディレクトリ管理

(1)ファイルを一般ユーザ削除禁止とする
①ファイル書き込み権OFFとしても削除は可能
chmod -w test.txt→rm test.txt(メッセージは出るが削除可能)
②ファイルを格納しているディレクトリの書き込み権OFF(配下にファイルの追加、削除不可)
chmod -w test→testディレクトリ配下のtest.txtの削除不可
(書き込み権OFFディレクトリ作成後にファイル移動できないので注意)
(ディレクトリ=iノードとファイル名を管理していると捉える)

(2)ファイルのサイズ表示
ls -sh

(3)ファイルのタイムスタンプ変更
①現在の日付に変更
touch test.txt
②指定日付に変更
touch test.txt -d 1999/5/1
(時間は0:00になる)
③指定日時に変更
touch test.txt -t 05010315
(5/1の3:15に変更)

(4)ファイル属性変更
①4桁のうち1桁目が4:setuid(実行時に所有者の権限を引き継ぐ)
chmod 4000もしくはchmod u+s
②4桁のうち1桁目が2:setgid(実行時に所有グループの権限を引き継ぐ)
chmod 2000もしくはchmod g+s
③4桁のうち1桁目が1:sticky
chmod 1000もしくはchmod +t
・ディレクトリだと、所有者のみ削除、リネーム可能
(ディレクトリからの一括削除は所有者、ディレクトリ内ファイルの読み書きは一般ユーザOK
とする/tmp等に利用)
・ファイルだと、読込イメージを実行プロセス終了後もスワップ領域に残す
(次回同じファイル利用時の実効速度が速くなる)

(5)深いディレクトリ作成
mkdir -p testdir/tmpa/tmpb/tmpc

(6)コピー元の日付のままコピー
cp -p aaa bbb

(7)シンボリックリンク管理
シンボリックリンクaaa(リンク自体)コピー
cp -d aaa bbb
シンボリックリンクaaaのリンク先(実体)コピー
cp aaa bbb
シンボリックリンク名変更
mv aaa bbb
(この時タイムスタンプは変わらない)
シンボリックリンク先のファイル種類表示
file -L docfile
(docfileがリンクしている実体ファイルの種類表示)

(8)lessの効用(cat、moreとの違い)
①バイナリファイル読込時、警告メッセージ表示
(cat、moreはそのまますぐ表示し、画面が乱れる)
(画面の乱れはresetコマンドで直す)
②圧縮ファイルを解凍しないまま表示可能

(9)実用zip
①圧縮ファイル内検索
zgrep sample bash.txt.gz
(圧縮ファイルのままgrep可能)
②サブディレクトリ配下ファイル全て圧縮
gzip -r test_dir(サブディレクトリ配下ファイル毎に圧縮)

(10)実用tar
①tmp/testdir配下のファイルをファイル名testdir.tarとして相対パスで保存
tar -cvf testdir.tar /tmp/testdir
相対パスtmp/testdirとして保存されるため、同じ場所に展開するには保存時と同じ場所で展開必要)
②展開先ディレクトリを指定して展開
tar -xvf testdir.tar -C /tmp
(/tmpにtestdir.tarを展開)
③tmp/testdir配下のファイルをファイル名testdir.tarとして絶対パスで保存
tar -cvPf testdir.tar /tmp/testdir
絶対パスで展開するには同様にPオプションが必要:-xvPf)
④umaskに従わない(保存時と同じパーミッション)で展開
tar -xpvf testdir.tar -C /tmp

9.ユーザ管理

(1)ホームディレクトリ毎ユーザ削除
userdel -r testuser
ファイルを一般ユーザ削除禁止とする

(2)一時的に特定コマンドだけrootで実行
su -c "vi /etc/group"
(root権限でvi起動され、ファイル編集後元のユーザに戻る)

10.プロセス管理

(1)プロセスの(一時)停止
CTRL+Z
(kill -STOPと同じシグナル送信)
(正確にはジョブの停止)
(通常は1プロセス=1ジョブだが、パイプでコマンドをつなげた場合、複数のプロセス=1ジョブとなる)

(2)プロセスの再開
fg(フォアグラウンド)もしくはbg(バックグラウンド)で再開
(正確にはジョブの再開)

(3)プロセスの停止
CTRL+C

(4)ジョブ番号の確認
jobs
(ジョブ番号はシェル単位でナンバリングされる)

(5)ジョブの終了
kill %1
(ジョブ番号1の終了)

(6)プロセスの親子関係表示
ps f | more

11.ディスク管理

(1)ハードディスクのテスト
mkfs -c /dev/hda1
(パーティション番号付きで指定する)

(2)ファイルシステム作成
mkfs -t ext2 /dev/hda1
(/dev/hda1にEXT2ファイルシステム作成)

(3)ディレクトリの引越し
①引越し不要(再インストール対応)ディレクトリ
/bin、/lib、/dev、/proc、/etc、/root、/sbin

②起動パーティションから移動可能なディレクトリ
/home、/tmp、/usr、/var

12.ファイル引越し手順

(1)新しいパーティションを仮ディレクトリにマウント
mkdir /mnt/tmp
mount /dev/hdb1 /mnt/tmp

(2)/usrをコピー
①cpを使う場合
cp -a /usr/* /mnt/tmp &
cp -a /usr/.* /mnt/tmp &
(アーカイブモードでコピー)
(/usrとしてマウントするので、/usrディレクトリ自体はコピーしない)
(コピー対象ファイルが多いので、バックグラウンドで実行)
(/usrディレクトリ配下のドットファイルは別途コピー)
(/usrディレクトリ配下のサブディレクトリについては別途コピーしなくてもコピーされる)
(画面に状況表示するには-vオプション追加)

②tarを使う場合
cd /usr
tar -cf - * | (cd /mnt/tmp ; tar -xpf - )
もしくは
tar -cf - * | tar -xpf - -C /mnt/tmp
(/usrディレクトリ配下のファイルをアーカイブし、標準出力に書き出し、マウント先に展開)
(アーカイブファイル名を省略すると、テープドライブ(/dev/rmt0)からの入出力となるため、
「-」により標準入出力を指定)

③仮ディレクトリのアンマウント
umount /mnt/tmp

③コピー済みの/usrディレクトリ名を変更
mv /usr /usr.old

④新しいパーティションに/usrマウント
mkdir /usr
mount /dev/hda1 /usr

⑤新/usrディレクトリ内容確認後、旧/usrディレクトリ削除
rm -f /usr.old

⑥fstabに追加したパーティション名で/usrを変更
/dev/hda1 /usr ext2 0 2

12.フロッピーディスク管理

(1)マウント
mount -t msdos /dev/fd0 /mnt/floppy

(2)/etc/fstab設定後のマウント
/dev/fd0 /mnt/floppy ext2 noauto,user 0 0
(user指定で一般ユーザでも手動マウント可能)
mount /dev/fd0

(3)一般ユーザでの読み書き可能とする
usermod -G floppy ユーザ名

(4)ローレベルフォーマット
umount /mnt/floppy
fdformat /dev/fd0H1440
(fd0で不可の場合、fd0H1440もしくはfd0u1440指定)

13.文字コード

(1)改行コード
Linux(UNIX) :LF
DOS/Windows:CR+LF
MacOS :CR
(ASCIIではCR=13(16進数で"0D") 、LF=10 (16進数で"0A")

14.ファイル変換

(1)EUCへの変換
nff -ed test.txt > test.euc
(行末の\r(CR)削除)

(2)シフトJISへの変換
nkf -sc test.txt > test.sjis
(行末に\r(CR) 追加)

(3)複数ファイル一括変更
①for f in *.txt; do
>nkf -ed $f > $f.euc
>done

②for f in *.txt; do
>mv $f $f~
>nkf -ed $f~ > $f
>done
(元のファイルをバックアップした後変換)

③for f in *.txt; do
>nkf -ed $f > `basename $f .txt` .euc
>done
(*.txtファイルを全てEUCとし、ファイル名は*.eucとする)
(basenameにより、ファイル名からディレクトリと拡張子を取り除く)

15.スワップ管理

(1)スワップパーティション作成
①領域作成
mkswap -c /dev/hdb2
(不良ブロックの検査「-c」オプション付加)
(スワップ領域のパーティションはあらかじめfdiskで用意しておく)

②メモリ内のバッファ書き出し
sync

③スワップを有効にする
swapon /dev/hdb2

④/etc/fstab設定で起動時利用可能
/dev/hdb2 none swap sw 0 0

(1)スワップパーティション縮小
①fdisk(dコマンド)で/dev/hdb2削除

②必要なサイズでパーティション再作成

(3)スワップファイル作成
①ファイル作成
dd if=/dev/zero of=/swapfile bs=1024 count=8192
(読み込み元/dev/zeroをブロックサイズ1024、ブロック数8192でswapfileとして書き出し)

②ファイルにスワップ領域作成
mkswap /swapfile 8192

③メモリ内のバッファ書き出し
sync

④スワップを有効にする
swapon /swapfile

(4)スワップファイル領域の削除
①スワップ領域の無効化
swapoff /swapfile

②スワップファイル削除(必要に応じて)
rm /swapfile

③/etc/fstabのスワップファイルエントリ削除

16.モジュール(デバイスドライバ)管理

(1)現在ロードされているモジュール確認
lsmod

(2)モジュールの組み込み/取り消し
insmod モジュール名
rmmod モジュール名

(3)依存関係を自動解決して組み込み
modprobe モジュール名

(4)依存関係を調べてモジュールの設定
depmod -a
(/lib/modules/ディレクトリ配下のモジュール群の依存関係をmodules.depファイルに書き出す)
(新しいモジュールをインストールした場合、手動でモジュール設定必要)

(5)モジュール名のエイリアス、オプション設定
/etc/modules.confまたは/etc/conf.modulesファイルで設定

17.NFS

(1)サーバ設定
①nfsdの起動確認
ps x | grep nfsd

②portmapの起動確認
chkconfig --list | grep portmap
もしくは
service --status-all | grep portmap

③起動していない場合、起動スクリプトに設定

④/etc/exportsにNFSマウントディレクトリ設定
/work 192.168.1.92(ro)
(workディレクトリを192.168.1.92ホストに対し、リードオンリーでマウントさせる)

⑤デーモン再起動
killall -HUP rpc.mountd
killall -HUP rpc.nfsd
もしくは
/etc/rc.d/init.d/nfs restart

(2)クライアント設定
①サーバ側ディレクトリマウント
mount vine:/work /mnt/work
(vineサーバの/workディレクトリを/mnt/workディレクトリにマウント)

(3)NFS時のユーザID
NFSではユーザID単位に権限が同じ扱いとなるため、
/etc/passwd等でユーザのユーザIDが重複していないか確認
(ログインユーザだけでなく、daemon、syncといった管理アカウントのユーザIDも確認)

18.パッケージ入手

(1)近いサイトかどうか確認
/user/sbin/traceroute mirror.nucba.ac.jp

19.パッケージインストール

(1)RPMソースからインストール
①rpm -i alien-6.40-1.src.rpm
SRPMパッケージのインストール)
(/usr/src/redhat/SOURCESにソースのtar.gzファイル展開)

②rpm --rebuild alien-6.40-1.src.rpm
(ソース編集不要の場合)
(RPMパッケージは/usr/src/redhat/RPMS/i386に作成)

(2)RPMからファイル取り出し
rpm2cpio sudo-1.5.6p2-2cl.i386.rpm | cpio -itv
(RPMパッケージ=cpioアーカイブに独自ヘッダ付けたものであるため、rpm2cpioで変換)