文書の過去の版を表示しています。
目次
コマンドのメモ書き
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アドレス↔名前解決を確認する(ドメイン名を問い合わせる) [#y87fa8bb]
- インストールする
# 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押下)<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アドレス取得
通常
# 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
不正終了などで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
UUIDによるデバイスのマウント(fstab)
デバイスの接続順、認識順によってデバイス名(sda、sdb、・・・)が変わると、違うディスクにマウントされる、などが発生する場合がある。 UUIDはデバイス(ファイルシステム)に一意なので、そういった意図しないマウントを回避できる。
# blkid /dev/sda1: UUID="b131900c-b600-4622-9210-10d3ccad4b0c" TYPE="ext4" /dev/sda2: UUID="12710fa7-0a2f-47ad-ba75-08eb08ad78fb" TYPE="swap" /dev/sda3: UUID="eaf46321-e5d3-4946-be73-d52c47c3aa9a" TYPE="ext4"
# vi /etc/fstab # # /etc/fstab # Created by anaconda on Tue Jan 8 15:54:25 2013 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # UUID=eaf46321-e5d3-4946-be73-d52c47c3aa9a / ext4 defaults 1 1 UUID=b131900c-b600-4622-9210-10d3ccad4b0c /boot ext4 defaults 1 2 UUID=12710fa7-0a2f-47ad-ba75-08eb08ad78fb swap swap defaults 0 0 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
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'