# rpm -ivh ~.rpm
# cat /etc/redhat-release CentOS release 5.5 (Final)
大文字を小文字を区別しません。
出力行頭に入力ファイルでの行番号を表示します。
検索に引っかからなかった行を出力します。
ディレクトリ配下のファイルとサブディレクトリも対象にします。
# grep -i exist /var/log/httpd/error_log
# grep -r exist /var/log/httpd/
# grep -r exist /var/log/httpd/ | grep -v ".svn"
ファイル内の文字列置換
$ sed -i s/[置換対象]/[置換後文字列]/g [ファイル名]
$ sed -e s/[置換対象]/[置換後文字列]/g [入力ファイル名] > [出力ファイル名]
ファイルをダウンロードする
# 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
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
# /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押下)<EOT> 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 addr show eth1 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> 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
# /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
# su - apache --shell=/bin/bash
sudo: sorry, you must have a tty to run sudo
設定ファイルを書き換えることでsudo可能
# visudo -) Defaults requiretty +) #Defaults requiretty
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
# swapoff -a && swapon -a
^(?!.*ある文字列).+$
通常、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 -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 -f source target
ディレクトリ単位
# cp -rf source target
ところが、OSによってはディレクトリ単位でコピーしようとすると、1ファイルずつ確認してくる。
これは、エイリアスで「-i(プロンプトを表示する)」オプションが有効になっているため。
# alias alias cp='cp -i'
コマンドの頭に 「\」を付けて一時的にエイリアスを無効化して実行する。
# \cp -rf source target
# 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
Ctrl+V 制御文字
e.g. エスケープ文字を入力
Ctrl+V Ctrl+[
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 '$1 ~ /'“$検索文字列変数”'/' ファイル名
$VAL="taro" awk '$1 ~ /'"$VAL"'/' log.txt
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
あるディレクトリについて、その階層のみで、30日以前のファイルを個別にbzipに圧縮する。
# find ./ -maxdepth 1 -mtime +30 -exec bzip2 {} \;
curl --anyauth --user user:password http://www.example.com/
curl --anyauth --user user:password http://www.example.com/
curl -H Host:www.example.co.jp http://www.example.com/
tar cf - /PATH/TO/BACKUP_DIR | bzip2 > /PATH/TO/BACKUP_DIR.tar.bz2
time tar jxvf /PATH/TO/BACKUP_DIR.tar.bz2