tomimemo
linuxメモ
最終更新:
匿名ユーザー
-
view
sed でhogeファイル内の空行を削除してhogehogeとして出力
# sed '/^\r/d' hoge > hogehoge
カレントディレクトリのファイル数を調べる
# find . -type f | wc -l 99 ← 99個のファイルがある
viの使い方
ファイル開きたい場合は
# vi ファイル名
viには編集モードとコマンドモードがある。ファイル開いた時点ではコマンドモード。編集モードに移行する場合は「i」等のキーを押す。以下コマンド一覧。
[終了] :q セーブせずに終了 :q! 変更した行もセーブせずに終了 :w セーブするが終了しない :wq セーブして終了(Shift+ZZでも同じ) [編集モードへ移るためのキー] i 現在のカーソル位置から挿入 R 現在のカーソル位置から置換 A 現在行の末尾に追加 O 現在行の前に行挿入 o 現在行の次に行挿入 [カーソル移動キー] h(←) 左 j(↓) 上 k(↑) 下 l(→) 右 0 行頭へ $ 行末へ [Enter] 次の行の先頭へ w 次の単語へ b 前の単語へ ctrl + f 次画面へ ctrl + b 前画面へ 1G 文頭へ G 文末へ nnG nn行目へ [変更キー] x 1文字削除 dd 1行削除(カット) cw(Change Word) 1語変更 c$ カーソル位置から行末まで変更 dw(Delete Word) 1語削除 d$ カーソル位置から行末まで削除 [検索] /正規表現 前方検索 ?正規表現 後方検索 n 次の候補 N 前の候補 [置き換え] :1,$s/正規表現/置き換え文字列/g 文書内の全ての「正規表現」を「置き換え文字列」に置換 [コピー&ペースト] yy 1行コピー dd 1行カット p ペースト(張り付け) [その他] .(ドット) 直前の変更操作の繰り返し u 直前の変更操作の取り消し(何回でも戻れる) :r xxx ファイル xxx の内容を次の行に挿入 :r! xxx OSのxxxコマンドを実行しその結果を次の行に挿入 :h 日本語マニュアルを表示
viエディタ使用時に行番号を表示させる
viを起動後に行番号を表示させる
viでhoge.txtを開く # vi hoge.txt 以下コマンドを打ち込んでエンターキー :set number
起動と同時に行番号を表示させるには以下のようにホームディレクトリに .exrc ファイルを作成すればOK。
# echo "set number" >> ~/.exrc
シェルスクリプト
例えば、apache子プロセスのinterrの数を表示するシェルスクリプト
# vi test.sh 以下記述。 #!/bin/sh declare -i interrcount interrcount=`ps lax | grep httpd | grep interr -c` echo $interrcount 権限の変更 # chmod u+x test.sh 実行 # ./test.sh
if文の書き方は以下。if文の[]とコマンドの間に半角スペース空けないとエラーになる。しばらくはまった。
if [ コマンド ]; then なにかコマンド elif [ コマンド ]; then なにかコマンド else なにかコマンド fi
apacheが謎のinterr子プロセスを吐き出してサーバ停止になってしまう状況が起きた。今は落ち着いているものの、いつまた起こるかわからないのでシェルスクリプトを使ってプロセスの監視を行うことにした。ファイル名はprocesswatch.sh。
#!/bin/sh # 整数宣言 declare -i interrCount # 無限ループ while true do # psコマンドでhttpdプロセスのinterrの数を取得 interrCount=`ps lax | grep httpd | grep interr -c` # interrの数が30以上だったらapacheを再起動 if [ $interrCount -gt 30 ]; then /usr/local/apache2/bin/apachectl restart fi # 5秒おきに監視 sleep 5s done ---- ファイルここまで 権限の変更 # chmod u+x processwatch.sh バックグラウンドで起動 # ./processwatch.sh & 停止する場合は psコマンドでpid調べてkill。
指定したプログラムのpidを取得するシェルスクリプト。たとえばhttpdプロセスのpidを取得する場合は以下。
#!/bin/sh PID=`/bin/ps -aefw | grep httpd | awk '{print $2}'` echo $PID
↑だと結果が一行に表示されてしまうのでこっちに修正
#!/bin/sh PID=`ps aux | grep httpd | awk '{print $2}'` echo $PID
rsyncによるデータバックアップ
異なるマシン同士で簡単にバックアップを取るコマンドにrsyncというのがある。
以下、rsyncの設定手順。(SSHを使わない場合)
参考 http://www.asahikawahigashi-h.ed.jp/kohmusystem/rsyncd.html
以下、rsyncの設定手順。(SSHを使わない場合)
参考 http://www.asahikawahigashi-h.ed.jp/kohmusystem/rsyncd.html
まず、バックアップしたいファイルがあるサーバの設定。(ここではDBサーバとか)
ログファイルの吐き出し設定。
/etc/syslog.confを編集して以下追記。
/etc/syslog.confを編集して以下追記。
# vi /etc/syslog.conf local5.* /var/log/rsyncd.log
次に、rsyncd.confを以下の内容で作成。(新規で作成)
# vi /etc/rsyncd.conf pid file = /tmp/rsyncd.pid # rsyncデーモンのプロセスID書きこみ場所 syslog facility = local5 # ログ書きこみ場所 read only = false # サーバへのデータ書きこみ許可 [db_backup_module] # rsyncクライアントからアクセスするモジュール名 path=/usr/local/pgsql/data/# バックアップ対象ディレクトリ comment=backup db # コメント。なんでもいい uid = root # このモジュールでデータ転送するときのユーザ名 gid = root # 同じくグループ名 use chroot=false # ファイル転送する前にpathでchrootするかどうか secrets file=/etc/rsyncd.secrets # 認証で使われるパスワードファイル auth users=root # 接続を許可するユーザー名(なんでもいい) hosts allow = 192.168.0.100# 接続を許可するクライアント機のIPアドレス hosts deny = * # 上記IP以外は拒否にする
次に パスワードファイル /etc/rsyncd.secretsを作成。
# vi /etc/rsyncd.secrets root:hogehogepassword
設定ファイルとパスワードファイルの権限を変更。
# chmod 600 /etc/rsyncd.conf # chmod 600 /etc/rsyncd.secrets
rsyncサーバを起動する。ポート873で待ち受け。しばらくdeamonと記述してたせいで、なかなか動かなかったorz
# /usr/bin/rsync rsyncd --daemon --config=/etc/rsyncd.conf --port=873
上記コマンドを/etc/rc.d/rc.localに以下追記して自動起動設定する。
# vi /etc/rc.d/rc.local /usr/bin/rsync rsyncd --daemon --config=/etc/rsyncd.conf --port=873
バックアップファイル保存サーバ(rsyncクライアント)の設定。
まず、バックアップファイル保存ディレクトリの作成。どこでもいい。
# mkdir /backup
rsyncするときに使うパスワードファイルを作成する。
もちろん、上で設定したパスワードと同じにすること。
もちろん、上で設定したパスワードと同じにすること。
# vi /etc/rsyncd.pass hogehogepassword
パスワードファイルの権限を変更。
# chmod 600 /etc/rsyncd.pass
取得除外対象ファイルの作成。別にいらないっちゃいらない。
とりあえずlogファイルは取らないようにしてみる。
とりあえずlogファイルは取らないようにしてみる。
# vi /etc/rsyncd.exclude *.log
ここまでで、とりあえず設定終了。
rsyncクライアントから以下のコマンドを投げてみる。
rsyncクライアントから以下のコマンドを投げてみる。
# rsync --port=873 -avz --password-file=/etc/rsyncd.pass \ --exclude-from=/etc/rsync.exclude \ rsync://root@(DBサーバのIPアドレス)/db_backup_module /backup/
おお、ファイル一覧が表示されて、取れてる取れてる...ちなみにコマンド2回目以降は、新しく追加されたファイルや更新されたファイルのみ勝手に取得してくれるので便利。
ついでにcrontabに登録して、自動でバックアップとる設定にする。ここでは毎日午前3時30分にバックアップを取る。
# crontab -e (1行で書く) 30 3 * * * root /usr/bin/rsync --port=873 -avz --password-file=/etc/rsyncd.pass --exclude-from=/etc/rsync.exclude rsync://root@(DBサーバのIPアドレス)/db_backup_module /backup/
コマンド制覇への道
redhat linux enterprise 3.0インストールメモ
インストールするマシンはDELL PowerEdge SC420(win2000が入っている)。
インストールCD-ROMをマシンに入れて電源ON。いろいろエンターキーを押しまくってGUIベースのインストール画面に到達。言語・マウス・キーボードを設定。
「ディスクパーティションの設定画面」で「自動パーティション設定」を選択したところ「新規ファイルシステム作成のための有効なデバイスが見つかりません」のエラーが出て落ちた。
今度は「ディスクパーティションの設定画面」で「Disk Druidを使用して手動パーティション設定」を選択するが、同じエラーで落ちる。
今度は「ディスクパーティションの設定画面」で「Disk Druidを使用して手動パーティション設定」を選択するが、同じエラーで落ちる。
いろいろ調べていると、どうやらハードディスクがSATAであるのが問題とのこと。DELLのHPに行って、ata_piix-0.93c-1c.tar.gz というドライバをダウンロード。
解凍すると、中に8個のファイル。
ata_piix-0.93c-dd-rhel3-i386-GU1U2.img ata_piix-1.00b-dd-rhel3-x86_64-U2.img ata_piix-0.93c-1dkms.noarch.rpm ata_piix-0.93c-1dkms.src.rpm ata_piix-1.00b-1dkms.noarch.rpm ata_piix-1.00b-1dkms.src.rpm dkms-1.10-1.noarch.rpm README
READMEを読むと、「ata_piix-xxx.imgをフロッピーに作成してなんたら」と書いてあったので、既存で動いているlinuxマシンを使ってフロッピーにimgファイルを作成。一番上のファイルをとりあえず使ってみた。
# dd if=ata_piix-0.93c-dd-rhel3-i386-GU1U2.img of=/dev/fd0
しばらく待つとフロッピーが作成されたのでもう一回DELLマシンを起動、今度は起動するときに linux dd と入力して、ドライバインストールモード?で起動。
fd0とhdaの選択を迫られたので迷わずfd0を選択。作成したフロッピーを入れて「OK」ボタン。Errorになった。何故だorz
今度は ata_piix-1.00b-dd-rhel3-x86_64-U2.img をフロッピーに作成してもう一回チャレンジ。...Error...
またいろいろ調べていくと、どうやらrawriteというwindowsでもimgファイルが作成できるツールがあることを発見。
ftp://ftp.kddlabs.co.jp/pub/Linux/packages/RedHat/redhat/linux/9/en/os/i386/dosutils
こいつを落としてきてc:\aaaというフォルダに配置。ついでにさっき展開したimgファイルも同じフォルダに配置。
ftp://ftp.kddlabs.co.jp/pub/Linux/packages/RedHat/redhat/linux/9/en/os/i386/dosutils
こいつを落としてきてc:\aaaというフォルダに配置。ついでにさっき展開したimgファイルも同じフォルダに配置。
コマンドプロンプトで以下入力。
cd c:\aaa rawrite Enter disk image source file name: xxx.img Enter target diskette drive: A: エンターキー押す
おお、作成されている。
しばらくして作成されたので、再度DELLマシンを linux dd で起動。作成されたフロッピーを入れて「OK」おしたら..何故か今度はerrorにならずインストールされた。何故だ?
再度linuxインストール開始。問題の「ディスクパーティションの設定画面」で「自動パーティション設定」を選択...おお!エラーにならない!
ということで先に進めた。
ということで先に進めた。
コマンド
日本語を扱う
export LANG=ja_JP.eucJP export JLESSCHARSET=japanese または setenv LANG ja_JP.eucJP setenv JLESSCHARSET japanese ※よく分からなかったら両方打ち込む
ファイルをある条件で検索してひっかかったら削除
・/usr/local/hoge/以下のディレクトリ ・拡張子がlogのもの ・最後に手が入った日付が7日前 上記条件の場合、以下のコマンドで対象ファイルを消せる。 # find /usr/local/hoge/* -name "*.log" -atime +7 -exec rm {} \; 削除じゃなくて圧縮の場合は以下 # find /usr/local/hoge/* -name "*.log" -atime +7 -exec gzip {} \;
フロッピーを使う(マウント)
# mount -t vfat /dev/fd0 /mnt/floppy # ls /mnt/floppy マウントしたあとはアンマウントして取り出す。 # umount /dev/fd0
sshを使えるようにする
# /etc/init.d/sshd start
シャットダウン(後、システム停止)
# shutdown -h now
ポートを開ける
rootでログイン # redhat-config-securitylevel-tui カスタマイズを選択 その他のポートにあけたいポート番号を記述->OK ->OK で、OK。
ユーザ追加
# useradd hoge hogeユーザが追加される
ユーザ削除
# userdel hoge hogeユーザが削除される /home 以下のディレクトリも同時に削除したい場合は # userdel -r hoge
hogeユーザのパスワードを変更する
# passwd hoge
iptablesの使い方
redhat-config-securitylevel-tui でポートを空けると楽だけど、iptables使ったほうがいいのかもしれないので、iptables使ったポートの空け方をメモ。
まず、現在のiptablesの内容を保存しておく。
保存しておけばもとに戻せるので。
保存しておけばもとに戻せるので。
ここでは/etc/にiptables.save という名前で保存。 # iptables-save > /etc/iptables.save もとに戻すときは # iptables-restore < /etc/iptables.save
ポートを空ける作業開始。ここではpingとsshの22番とpostgresql用ポートの5432を空ける。まず、ポリシーを設定。
INPUTを全部許す。 # iptables -P INPUT ACCEPT FORWARDは全部無効。 # iptables -P FORWARD DROP OUTPUTは全部許す。 # iptables -P OUTPUT ACCEPT
設定を一旦クリアー。
# iptables -F
ポートの設定。
pingと自端末からの入力を許可 # iptables -A INPUT -p icmp -j ACCEPT # iptables -A INPUT -i lo -j ACCEPT sshを許可 # iptables -A INPUT -p tcp --dport 22 -j ACCEPT postgresqlを許可 # iptables -A INPUT -p tcp --dport 5432 -j ACCEPT TCPの接続開始と応答、FTPデータなどを許可 # iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 他の接続は全て破棄 # iptables -P INPUT DROP
設定を保存する。
# /etc/init.d/iptables save
一応再起動。
# service iptables restart
iptables -L コマンドで有効になっているか確認して終了。
不要なサービスを止める
電源管理ユーティリティ # chkconfig --level 3 apmd off atコマンドで指定した時刻にコマンドを実行する # chkconfig --level 3 atd off かな漢字変換サーバ # chkconfig --level 3 canna off 印刷システム # chkconfig --level 3 cups off # chkconfig --level 3 cups-config-deamon off マウス制御 # chkconfig --level 3 gpm off 外部機器接続時に動く???? # chkconfig --level 3 haldeamon off Internet Intranet Input Method Protocol???? # chkconfig --level 3 iiim off マルチCPU環境で使う 1CPUマシンでは意味なし # chkconfig --level 3 irqbalance off ISDNカード接続用スクリプト # chkconfig --level 3 isdn off 追加もしくは取り外されたハードウェアに関連した設定を変更する # chkconfig --level 3 kudzu off AppleのRendezvousのために利用(internetServer目的なら不要らしい) # chkconfig --level 3 mDNSResponder off ソフトウェア RAID の監視と管理用 # chkconfig --level 3 mdmonitor off NFS、sambaの自動マウント # chkconfig --level 3 netfs off NFSでファイルロックを行うためのサービス # chkconfig --level 3 nfslock off ネットワークアダプタ監視デーモン # chkconfig --level 3 nifd off PCカードのデバイスドライバをロードする # chkconfig --level 3 pcmcia off RPC接続をTCPのポートにマッピングする # chkconfig --level 3 portmap off アップデート情報を一定時間ごとにチェック # chkconfig --level 3 rhnsd off RPCと呼ばれる通信の仕組みで使われる # chkconfig --level 3 rpcgssd off # chkconfig --level 3 rpcidmapd off # chkconfig --level 3 rpcsvcgssd off メール配送(qmailとか使う場合) # chkconfig --level 3 sendmail off X用フォントサーバ # chkconfig --level 3 xfs off 管理下に置かれたサービスの起動などを制御 # chkconfig --level 3 xinetd off
ホスト名の変更(redhat linux)
以下の二種類のファイルを変更
# cat /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost 192.168.0.175 xxxxxxx
# cat /etc/sysconfig/network NETWORKING=yes HOSTNAME=xxxxxxx GATEWAY=192.168.0.1
変更後は、ネットワークデバイスを再起動。
# /etc/rc.d/init.d/network restart
※つうか、# hostname xxxxxxxxx でいいんじゃない?