Linuxコマンドに関する便利な使い方やテクニックをここで紹介したいと思います。
コマンドのほかのオプションも知りたいと思いますのでmanコマンドまたはgoogleを利用して調べてください。
1.便利なコマンド
grep
特定の文字列が含まれるファイル名を探す
# CMD
grep -rl 'string' /path/of/directory
# 例
> grep -rl ssl /etc/httpd/conf.d
./a.conf
./b.conf
...
ファイルにある特定の文字列を表示する
# CMD
grep -Po 'regex_string' /path/of/file
# 例
> grep -Po 'ServerName.*' /etc/httpd/conf.d/a.conf
ServerName a.jp
> grep -Po 'ServerName.*' /etc/httpd/conf.d/*
/etc/httpd/conf.d/a.conf:ServerName a.jp
/etc/httpd/conf.d/b.conf:ServerName b.jp
...
tree
ディレクトリだけの構造表示
# CMD
tree -d -L x /path/of/directory
# 例
> tree -d -L 2 /etc/httpd/
/etc/httpd/
|-- conf
|-- conf.d
| `-- ssl
|-- logs -> ../../var/log/httpd
|-- modules -> ../../usr/lib64/httpd/modules
`-- run -> ../../var/run/httpd
readlink
リンク先実質のファイルを探す
# CMD
readlink -f /path/of/link
# 例
> ls -l
a.sql -> testsql.sql
b.sql -> a.sql
testsql.sql <-- これは実質のファイルです
> readlink b.sql
a.sql <-- これはリンクです
> readlink -f b.sql
/root/testsql.sql <-- 実質のファイルが分かります
ps
プロセスの起動日時と稼働時間を表示する
# CMD
ps axfo start,etime,cmd
# 例
> ps axfo start,etime,cmd
STARTED ELAPSED CMD
Jun 20 896-15:21:20 [kthreadd]
Jun 20 896-15:21:20 \_ [migration/0]
Jun 20 896-15:21:20 \_ [ksoftirqd/0]
Jun 20 896-15:21:20 \_ [stopper/0]
...
Nov 07 26-19:06:53 /usr/sbin/httpd
13:00:51 08:01 \_ /usr/sbin/httpd
13:00:52 08:00 \_ /usr/sbin/httpd
13:05:12 03:40 \_ /usr/sbin/httpd
13:06:59 01:53 \_ /usr/sbin/httpd
13:07:00 01:52 \_ /usr/sbin/httpd
13:07:00 01:52 \_ /usr/sbin/httpd
...
top
CPUコア別でCPU使用率を表示する
# CMD
top -c -d 1
topに入ったら1を押します
# 例
top - 13:12:44 up 896 days, 15:25, 1 user, load average: 0.22, 0.37, 0.46
Tasks: 149 total, 1 running, 148 sleeping, 0 stopped, 0 zombie
Cpu0 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu1 : 0.0%us, 0.0%sy, 0.0%ni, 99.0%id, 0.0%wa, 0.0%hi, 0.0%si, 1.0%st
Cpu2 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
...
rpm
パッケージの名前、バージョン、サイズ、説明を表示する
# CMD
rpm -qa --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH} \t%{SIZE} \t%{SUMMARY} \n'| sort
# 例
> rpm -qa --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH} \t%{SIZE} \t%{SUMMARY} \n'| sort
ConsoleKit-0.4.1-6.el6.x86_64 273094 System daemon for tracking users, sessions and seats
ConsoleKit-libs-0.4.1-6.el6.x86_64 22061 ConsoleKit libraries
MAKEDEV-3.24-6.el6.x86_64 227290 A program used for creating device files in /dev
abrt-2.0.8-40.el6.centos.x86_64 771483 Automatic bug detection and reporting tool
...
パッケージの中身を表示する
# CMD
rpm -ql installed_package
rpm -qpl rpm_package
# 例
> rpm -ql vim-common-7.4.629-5.el6.x86_64
/etc/vimrc
/usr/bin/xxd
/usr/share/doc/vim-common-7.4.629
/usr/share/doc/vim-common-7.4.629/Changelog.rpm
...
> rpm -qpl iotop-0.6-2.el7.noarch.rpm
/usr/lib/python2.7/site-packages/iotop
/usr/lib/python2.7/site-packages/iotop-0.6-py2.7.egg-info
/usr/lib/python2.7/site-packages/iotop/__init__.py
/usr/lib/python2.7/site-packages/iotop/__init__.pyc
/usr/lib/python2.7/site-packages/iotop/__init__.pyo
...
パッケージの依存関係を表示する
# CMD
rpm -qR installed_package
rpm -qpR rpm_package
# 例
> rpm -qR python-2.6.6-64.el6.x86_64
/usr/bin/python2.6
libc.so.6()(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libdl.so.2()(64bit)
libm.so.6()(64bit)
libpthread.so.0()(64bit)
libpython2.6.so.1.0()(64bit)
libutil.so.1()(64bit)
python-libs(x86-64) = 2.6.6-64.el6
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PartialHardlinkSets) <= 4.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(VersionedDependencies) <= 3.0.3-1
rtld(GNU_HASH)
rpmlib(PayloadIsXz) <= 5.2-1
> rpm -qpR iotop-0.6-2.el7.noarch.rpm
/usr/bin/python
python
python(abi) = 2.7
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PartialHardlinkSets) <= 4.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(PayloadIsXz) <= 5.2-1
ファイルの属するパッケージを探す
# CMD
rpm -qf /path/of/file
# 例
> rpm -qf /usr/bin/python
python-2.6.6-64.el6.x86_64
2.テクニック
cpコマンドを短くする
# CMD
cp src{,.xxx} == cp src src.xxx
# 例
> cp a{,.bak}
> ls
a a.bak
linkに対してsedを使わない
# 説明
# linkに対してsedを使ったらファイルになります。sedの使用の際にはご注意ください。
# 例
> ls -l
a.txt
b.txt -> a.txt
> cat a.txt
a
> cat b.txt
a
> sed -i '/a/a b' b.txt
> ls -l
a.txt
b.txt
> cat a.txt
a
> cat b.txt
a
b
# 上記の例でa.txtの内容を変更しようとしていましたが、実際変更したのはb.txtでした。
# しかもb.txtがファイルタイプになってしまいました。
# これは要注意です。