====== コマンドのメモ書き ====== ===== rpm ===== # rpm -ivh ~.rpm * -i : インストール。 * -U : アップグレード。インストール済みパッケージはアップグレードする。未インストールは、新たにそのパッケージをインストールする。 * -F : アップグレード。インストール済みパッケージはアップグレードする。未インストールは何もしない。 * -v : 操作対象のパッケージ名を表示する。 * -h : 処理の進行状況を「#」記号で表示する。 ===== CentOSのバージョン確認 ===== # cat /etc/redhat-release CentOS release 5.5 (Final) ===== Grep ===== * -i 大文字を小文字を区別しません。 * -n 出力行頭に入力ファイルでの行番号を表示します。 * -v 検索に引っかからなかった行を出力します。 * -R -r ディレクトリ配下のファイルとサブディレクトリも対象にします。 # grep -i exist /var/log/httpd/error_log # grep -r exist /var/log/httpd/ * .svnファイルを除外 # grep -r exist /var/log/httpd/ | grep -v ".svn" ===== sed ===== ファイル内の文字列置換 * ファイル上書き $ sed -i s/[置換対象]/[置換後文字列]/g [ファイル名] * 別ファイルに出力 $ sed -e s/[置換対象]/[置換後文字列]/g [入力ファイル名] > [出力ファイル名] ===== wget ===== ファイルをダウンロードする # wget http://download.url/download.file デフォルトでは、コマンドを実行した場所にダウンロードしたファイルが保存される。 保存先ファイル名を指定して実行 wget -O "/etc/yum.repos.d/glusterfs-epel.repo" "http://download.gluster.org/pub/gluster/glusterfs/3.4/LATEST/CentOS/glusterfs-epel.repo" 保存先を指定して実行(ファイル名はオリジナル) wget "http://download.gluster.org/pub/gluster/glusterfs/3.4/LATEST/CentOS/glusterfs-epel.repo" -P "/etc/yum.repos.d/" ===== 圧縮ファイルを解凍せずに開く ===== # gzip -dc "圧縮ファイル.qz" | less # bzip2 -dc "圧縮ファイル.qz" | less ===== dig ===== IPアドレス<->名前解決を確認する(ドメイン名を問い合わせる) * インストールする # yum -y install bind-utils * 問い合わせる # dig @127.0.0.1 server.example.com ===== ランダムパスワード生成 ===== # yum install expect # mkpasswd 6ln8,seXW # mkpasswd -s 1 -C 2 -d 2 -l 8 q^jPT56v * s:記号 * C:大文字 * d:数字 * l:文字数 ===== ntp 手動時刻合わせ ===== # /usr/sbin/ntpdate -b ntp.nict.jp ===== 指定時間にコマンド実行 ===== # yum install at # /etc/init.d/atd start # at 17:00 at> echo "hello world" at> (ctrl+d押下) job 7 at 2013-06-19 17:00 # atq 7 2013-06-19 17:00 a root # at -c 7 ~省略~ echo "hello world" # atq 7 2013-06-19 17:00 a usu 8 2013-06-19 19:00 a usu # atrm 8 # atq 7 2013-06-19 17:00 a usu ===== 削除できないファイルを削除 ===== 何かの拍子(操作ミス)でできたゴミファイル「#{node.nginx.app_name}」 通常の操作では削除できないので、inodeを指定して削除する # ll 合計 20 lrwxrwxrwx 1 root root 43 8月 7 19:07 2013 #{node.nginx.app_name} -> /mnt/addVol/releases/#{node.nginx.app_name} drwxr-xr-x 2 root root 4096 5月 14 07:12 2013 cgi-bin drwxr-xr-x 3 root root 4096 8月 7 12:57 2013 error drwxr-xr-x 2 root root 4096 5月 14 07:12 2013 html drwxr-xr-x 3 root root 4096 8月 7 12:57 2013 icons inodeを調べる # ls -i 264338 #{node.nginx.app_name} 263824 cgi-bin 263825 error 263850 html 263851 icons inodeを指定して削除する # find . -inum 264338 -exec rm -f {} \; # ll 合計 20 drwxr-xr-x 2 root root 4096 5月 14 07:12 2013 cgi-bin drwxr-xr-x 3 root root 4096 8月 7 12:57 2013 error drwxr-xr-x 2 root root 4096 5月 14 07:12 2013 html drwxr-xr-x 3 root root 4096 8月 7 12:57 2013 icons ===== 改行コードを確認する ===== # cat -v テキストファイル名 行末に「^M」が表示されていれば、改行コード「CRLF(windows形式)」 ===== ログ圧縮等でワイルドカードはループで処理 ===== #!/bin/sh # パラメータ TMP="/mnt/addVol/tmp/" COMPRESS_DAY=`date -d '15 days ago' '+%Y%m%d'` DELETE_DAY=`date -d '91 days ago' '+%Y%m%d'` #echo $TMP echo "===============" echo "COMP:"$COMPRESS_DAY echo "DEL:"$DELETE_DAY echo "===============" ############################################################################### # 圧縮 for txt in $TMP"*_"$COMPRESS_DAY".txt" ; do bzip2 ${txt} done # 削除 for txt in $TMP"*_"$DELETE_DAY".txt.bz2" ; do rm -f ${txt} done ===== ワンライナーでループ ===== 元ネタ for txt in /var/log/httpd/*2013* ; do bzip2 ${txt} done ワンライナーで書き換え(行末の区切りを;でつなげる) for txt in /var/log/httpd/*2013* ; do bzip2 ${txt} ; done ; ===== ワンライナーでIPアドレス取得 ===== 通常 # ip addr show eth1 3: eth1: mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000 link/ether 00:50:56:b6:2e:5c brd ff:ff:ff:ff:ff:ff inet 192.168.10.2/24 brd 192.168.10.255 scope global eth1 inet 192.168.10.4/32 scope global eth1 ワンライナー # x="" ; for IP in `ip addr show eth1 | grep "^ *inet" | sed 's/^ *inet //g' | sed 's/\/.*//g'` ; do x="$x"" ""$IP" ; done ; echo $x ; 192.168.10.2 192.168.10.4 ===== プロセス数取得 ===== e.g. apache httpdの場合 /bin/ps -ef|grep -v grep|grep httpd |wc -l ===== 不正終了などでlockファイルが残った時の対処 ===== # /etc/init.d/mysqld status mysqld dead but subsys locked mysqld は停止していますがサブシテムがロックされています # ll /var/lock/subsys/ ~ -rw-r--r-- 1 root root 0 Sep 6 02:24 mysqld ~ # rm -rf /var/lock/subsys/mysqld ===== 指定階層以下のディレクトリに実行権限をつける ===== # find /path/dir -type d -print | xargs chmod +x ===== apache(シェルのないユーザ)でログイン ===== # su - apache --shell=/bin/bash ===== apacheでsudo ===== ==== ユーザー「apache」でsudoしようとすると、以下のエラーが発生。 ==== sudo: sorry, you must have a tty to run sudo 設定ファイルを書き換えることでsudo可能 # visudo -) Defaults requiretty +) #Defaults requiretty ==== sudoでパスワードを不要にする ==== sudo: no tty present and no askpass program specified # sudo visudo 実行したいコマンドをカンマ区切りで記述 +)apache ALL=(ALL) NOPASSWD: /bin/ls, /bin/chmod または、アリアリ +) apache ALL=(ALL) NOPASSWD:ALL ===== プロセスの現在のメモリ使用量を確認 ===== psコマンドにcオプションをつけて、VSZでソート。 VSZ、RSSからメモリ使用量を確認。 # ps auxc --sort -vsz USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND mysql 17860 3.5 6.8 3063908 267420 ? Sl 11:35 1:51 mysqld nobody 24738 1.9 0.2 203136 11240 ? Ssl 2013 898:00 gmond root 1024 0.0 0.1 197168 4772 ? S 2013 8:41 snmpd root 2019 0.0 0.0 117208 1268 ? Ss 2013 0:36 crond ===== swapの掃除 ===== # swapoff -a && swapon -a ===== 正規表現:ある文字列を含まない ===== ^(?!.*ある文字列).+$ ===== inodeサイズを確認する ===== 通常、ext2/ext3では128byteで、ext4は256byteで管理されます。 # debugfs -R stats /dev/mapper/VGroup00-main_lv00 | grep size debugfs 1.41.12 (17-May-2010) Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize Block size: 4096 Fragment size: 4096 Flex block group size: 16 Inode size: 256 Required extra isize: 28 Desired extra isize: 28 作成時に-Iオプションを指定して任意のサイズに変更することが可能です。 mkfs -t ext4 -I 512 /dev/VGroup00/main_lv00 ===== pgrep、pkillでプロセスを殺す ===== # pgrep -f http 27057 27059 27061 # pgrep -fl http 27057 /usr/sbin/httpd 27059 /usr/bin/logger -t httpd -p local6.info 27061 /usr/sbin/httpd # pkill -f プロセス名 ===== cpコマンドで確認なしに上書き ===== ファイル単位 # cp -f source target ディレクトリ単位 # cp -rf source target ところが、OSによってはディレクトリ単位でコピーしようとすると、1ファイルずつ確認してくる。 これは、エイリアスで「-i(プロンプトを表示する)」オプションが有効になっているため。 # alias alias cp='cp -i' コマンドの頭に 「\」を付けて一時的にエイリアスを無効化して実行する。 # \cp -rf source target ===== findで検索したファイルを削除する ===== # find ./ -name '*.log' | xargs rm ===== 検索結果のファイルの文字列一括置換 ===== grep -rl '置換前文字列' 対象パス | xargs sed -i 's/置換前文字列/置換後文字列/g' ===== ファイルのタイムスタンプを変更する ===== ^ オプション ^ 説明 ^ | -a | 最終アクセス時刻 | | -m | 最終更新日時 | | -t | 日時 [[CC]YY]MMDDhhmm[.ss] | | CC | 年(上2桁、省略可能) | | YY | 年(下2桁、省略可能) | | MM | 月(01-12) | | DD | 日(01-31) | | hh | 時(00-23) | | mm | 分(00-59) | | .ss | 秒(00-59、省略可能) | touchコマンドで現時刻のファイルを作成する。 (ls -lは最終更新日時、ls -luは最終アクセス日時を表示) # touch file.txt # ls -l file.txt -rw-r--r-- 1 root root 0 4月 18 13:20 file.txt # ls -lu file.txt -rw-r--r-- 1 root root 0 4月 18 13:20 file.txt 最終アクセス日時2014年4月1日1時1分に変更 # touch -at 201404010101 file.txt # ls -l file.txt -rw-r--r-- 1 root root 0 4月 18 13:20 file.txt # ls -lu file.txt -rw-r--r-- 1 root root 0 4月 1 01:01 file.txt 最終更新日時2014年4月1日4時1分に変更 # touch -mt 201404010401 file.txt # ls -l file.txt -rw-r--r-- 1 root root 0 4月 1 04:01 file.txt # ls -lu file.txt -rw-r--r-- 1 root root 0 4月 1 01:01 file.txt ===== 日時のファイル名を付ける ===== # touch $(date +%Y%m%d_%H%M%S).txt # ll 合計 1 -rw-r--r-- 1 root root 0 6月 27 21:58 2014 20140627_215822.txt ===== vimエディタで制御文字を入力 ===== Ctrl+V 制御文字 e.g. エスケープ文字を入力 Ctrl+V Ctrl+[ ===== シェルスクリプトでECHOに装飾 ===== echo -e "\e[33m=== TEST ===\e[m" 制御文字のESC(16進数で1b)を挿入できる場合には、「\e」「\033」は不要。 vimで入力する場合、「Ctrl+V ⇒ Ctrl+[ ⇒ [33m」となる。 echo "ESC[33m=== TEST ===ESC[m" カラーコード 2桁の数字の1文字目「3」は文字色を、「4」は背景色を指定。 ^0^1^2^3^4^5^6^7^ |Black|Red|Green|Yellow|Blue|Magenta|Cyan|White| 属性 ^属性番号^attributes^属性^ |1|bold|太字| |2|low intensity|弱強調| |4|underline|下線| |5|blink|点滅| |7|reverse video|反転| |8|invisible text|非表示| e.g. 黄色背景に黒文字強調 echo -e "\e[43;30;1m=== flash ===\e[m" ===== awkで動的な変数を正規表現にセットする ===== 変数を正規表現の検索文字列にしたい場合は、シングルクォート、ダブルクォートで囲む。 awk '$1 ~ /'"$検索文字列変数"'/' ファイル名 $VAL="taro" awk '$1 ~ /'"$VAL"'/' log.txt ===== awkでソートせずに重複行を削除する ===== awk '!a[$0]++' FILE // 行全体で重複を確認、結果は行全体を返す awk '!a[$1]++' FILE // 1項目目で重複を確認して、結果は行全体を返す awk '!a[$6]++{print $6}' FILE // 6項目目で重複を確認して、結果は6項目目を返す 以下の方法もあるが、sortでかなりのコストが必要なので、上の方が効率が良い。 awk '{print $6}' FILE | sort | uniq ===== ファイルを空にする ===== ログファイルなど、ファイルの中身を空にしたいときのコマンド # > file または # : > file ===== findである時期以前を一括圧縮 ===== あるディレクトリについて、その階層のみで、30日以前のファイルを個別にbzipに圧縮する。 # find ./ -maxdepth 1 -mtime +30 -exec bzip2 {} \; ===== cURL ===== ==== ベーシック認証など ==== curl --anyauth --user user:password http://www.example.com/ ==== httpsのエラー無視 ==== curl --anyauth --user user:password http://www.example.com/ ==== ホストヘッダ偽装 ==== curl -H Host:www.example.co.jp http://www.example.com/ ===== tar.bz2の圧縮・解凍 ===== ==== 圧縮 ==== tar cf - /PATH/TO/BACKUP_DIR | bzip2 > /PATH/TO/BACKUP_DIR.tar.bz2 ==== 解凍 ==== time tar jxvf /PATH/TO/BACKUP_DIR.tar.bz2