| Unixコマンド便覧 |
Unixコマンドの便覧を作ってみようと思って始めました。 コマンド便覧というより、このような時はどのコマンドを使えばいいか みたいなの。
| メニュー |
| 現在いるディレクトリを記憶して他のディレクトリに移る(pushd,popd) |
現在いるディレクトリを記憶して他のディレクトリに移るのに便利なコマンドが pushdである。
$ cd /home $ pushd /home/ohmori /home/ohmori /home
一時的に元のディレクトリに戻りたい時は、
$ pushd /home /home/ohmori
で前回のpushdに移動できる。完全に元に戻る時は
$ popd /home
で元に戻れる。
| 一つ前にcdした場所に戻る(cd-) |
一つ前にcdした場所に戻る方法は
$ cd -
でよい。前のcdで移動してくる前のディレクトリに戻れる。
| ディレクトリ構造毎コピーする(tar ,cp -a) |
ディレクトリ構造毎(タイムスタンプや所有者情報もすべて残して)コピーする場合には、二通りの方法がある。 現状のLinuxではcp -aで大丈夫である。
$ cp -a hoehoe /home/mokemoke/
ただし、cpに-aオプションがない場合がある。 そんなときには、tarコマンドの-引数を使って実現できる。
$ tar cf - hoehoe | (cd /home/mokemoke/; tar xvf - )
これでOKである。
単純にcp -Rでコピーしてもタイムスタンプが変わったり、シンボリックリンクが 実体をコピーしたりしてしまうが上記を使えば、問題は解決する。
| ファイルを使用しているプロセスを特定する。(fuser) |
fuserを使うとファイルを使用しているプロセスを特定することができる。
大抵は上記のオプションで足りるでしょう。
$ /sbin/fuser -mv /home
USER PID ACCESS COMMAND
/home/ ohmori 1391 ..c.. bash
ohmori 1422 ..c.. startx
ohmori 1433 ..c.. xinit
ohmori 1443 ..c.. startkde
ohmori 1454 ..c.. kinput2
ohmori 1524 ..c.. kdeinit
ohmori 1527 ..c.. kdeinit
ohmori 1530 ..c.. kdeinit
ohmori 1532 ..c.. kdeinit
ohmori 1543 ..c.. artsd
ohmori 1552 ..c.. kdeinit
ohmori 1553 ..c.. kwrapper
ohmori 1555 ..c.. kdeinit
ohmori 1556 ..c.. kdeinit
ohmori 1557 f.c.. gkrellm
ohmori 1565 ..c.. kdeinit
ohmori 1569 f.c.. gkrellm
$ /sbin/fuser -mu /home
/home/: 1391c(ohmori) 1422c(ohmori) 1433c(ohmori) 1443c(ohmori)
1454c(ohmori) 1524c(ohmori) 1527c(ohmori) 1530c(ohmori) 1532c(ohmori) 154
3c(ohmori) 1552c(ohmori) 1553c(ohmori) 1555c(ohmori) 1556c(ohmori) 1557 15
57c(ohmori) 1565c(ohmori) 1569 1569c(ohmori) 1572c(ohmori) 1574c(ohmori) 1
575c(ohmori) 1578c(ohmori) 1583 1583c(ohmori) 1635(ohmori) 1735c(ohmori) 4
377 4377c(ohmori) 4425 4425c(ohmori) 4426 4426c(ohmori) 4427 4427c(ohmori
) 4428 4428c(ohmori) 4430 4430c(ohmori) 4434c(ohmori) 4436c(ohmori) 4456c
(ohmori) 4482c(ohmori) 4484c(ohmori) 4632 4632c(ohmori) 4661c(ohmori)
| OSの情報を調べる。(uname) |
OSの情報を調べるには、unameを使う。下記のオプションを使うことができる。
-aを使うとすべての情報が表示される。
$ uname -a Linux yari.bigforest.hn.org 2.4.9-31 #1 Tue Feb 26 07:11:02 EST 2002 i686 unknown
| プログラムのダイナミックリンク先を探す。(ldd) |
そのプログラムのダイナミックリンク先を探す方法がある。
$ ldd /usr/bin/sylpheed
libdl.so.2 => /lib/libdl.so.2 (0x4002d000)
libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0x40031000)
libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x4003f000)
libm.so.6 => /lib/i686/libm.so.6 (0x4011d000)
libgdk_imlib.so.1 => /usr/lib/libgdk_imlib.so.1 (0x40140000)
libgtk-1.2.so.0 => /usr/lib/libgtk-1.2.so.0 (0x40165000)
libgdk-1.2.so.0 => /usr/lib/libgdk-1.2.so.0 (0x40294000)
libgmodule-1.2.so.0 => /usr/lib/libgmodule-1.2.so.0 (0x402ca000)
libglib-1.2.so.0 => /usr/lib/libglib-1.2.so.0 (0x402cd000)
libc.so.6 => /lib/i686/libc.so.6 (0x402f1000)
libSM.so.6 => /usr/X11R6/lib/libSM.so.6 (0x4042c000)
libICE.so.6 => /usr/X11R6/lib/libICE.so.6 (0x40435000)
libXi.so.6 => /usr/X11R6/lib/libXi.so.6 (0x4044d000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
上記のように共有ライブラリが表示される。
| ユーザを変更する。(su) |
ユーザを変更するときは、suを使う。
$ su ohmori Password: $
上記だと、.cshrcなどを読まずにユーザ名を変えるので、 パスや環境変数はそのままになる。 "-"をつけると、.cshrcなどを読みこんで普通にログインするのと 変わらない状態に初期化される。
$ su - ohmori Password: $
| ユーザを追加する。(adduser) |
ユーザを追加するときは、adduserを使う。 まずは、adduserでuserを作ります。
# adduser hoge
このときに同時に、/home/hogeというホームディレクトリも作ってくれます。 デフォルトの.bashrcなども作ってくれます。
このままだとpasswordがなくてloginできませんので、 passwdコマンドデフォルトのpasswordを作っておきます。 ユーザ名と同じパスワードでも設定しておけばいい。 ただし、セキュリティを厳しくしなければならないシステムでは それなりのパスワードを設定しておいたほうがいい。 また、即座にユーザ自身でパスワードを変更するようにするべきである。
# passwd hoge Changing password for user hoge New UNIX password: BAD PASSWORD: it is too short Retype new UNIX password: passwd: all authentication tokens updated successfully
ユーザを消したい場合は、deluserを使えばよい。
# adduser hoge
ただし、この場合は、ホームディレクトリは消えないので、 手動で消す必要がある。
| ディスク容量を調べる。(df,du) |
ディスク容量を調べたいときには、dfを使う。
# df Filesystem 1k-blocks Used Available Use% Mounted on /dev/hda6 5162796 1958920 2941620 40% / /dev/hda1 38859 7895 28958 22% /boot /dev/hda7 13005692 2366852 9978172 20% /home none 255920 0 255920 0% /dev/shm
といった感じでfdiskなどで切り分けたdisk毎にでてくる。 このときこのままだと見づらいので、 -hをつけると人に解りやすいように表示してくれる。
# df -h Filesystem Size Used Avail Use% Mounted on /dev/hda6 4.9G 1.9G 2.8G 40% / /dev/hda1 38M 7.8M 28M 22% /boot /dev/hda7 12G 2.3G 9.5G 20% /home none 250M 0 249M 0% /dev/shm
du を使うとディレクトリから下のファイル容量を調べられる。 しかしそのまま使うとディレクトリ内のファイル毎の容量がでてしまうので -sを使うとよい。それから、上記の-hも使うことが可能である。
# du -sh 5.0M . # du -sh /usr/* 122M /usr/X11R6 115M /usr/bin 4.0k /usr/dict 2.1M /usr/doc 4.0k /usr/etc 2.5M /usr/games 4.0k /usr/html 50M /usr/include 38M /usr/java 3.6M /usr/kerberos 623M /usr/lib 2.6M /usr/libexec 33M /usr/local 116k /usr/man 14M /usr/sbin 707M /usr/share 16M /usr/src 0 /usr/tmp
| permissionを与える(chmod) |
よくpermissionを与えてくださいとかありますが、それは chmodコマンドで与えることができます。 permissionの確認は、ls -lででてくる一番左側の部分です。
$ ls -l /home/ohmori 合計 1840 drwxrwxr-x 17 ohmori ohmori 4096 1月 23 22:58 galeon
上記を説明すると赤い最初の部分がディレクトリかファイルかを示す。 2番目の青い部分が、自分に対する属性で、 rが読み込み可能かどうか、 wが書き込み可能かどうか、 xが実行可能かどうかを示す。 3番目のグレーの部分が、グループに対する属性、 4番目の緑の部分が、他人に対する属性である。
属性を変更する場合は、シンボルを使って変更する方法と数字を使って 変更する方法がある。
○ シンボルを使う。
$ chmod [ugoa][+-][rwx]
という書式で、
最初がpermissionを与える相手で
uが自分自身、gがグループ
oが他人、aがすべてのユーザを示す。省略すると
aと同じ意味になる。
次に操作する式となり
+がpermissionを与えるで
-がpermissionを与えない。
次がどの属性を与えるかで
rが読み込み可能属性、
wが書き込み可能属性、
xが実行可能属性である。
例)自分に実行属性を与える。
$ chmod u+x file.c
例)全員に読み込み属性を与える。
$ chmod +r file.c
例)グループとその他の人から書き込み属性をとる
$ chmod go-w file.c
となる。
○ 数字を使う
$ chmod [mode] [file]
modeには数字が入り、rが4 ,wが2,xが1となり、与えたい属性の合計値で 左か順番に自分、グループ、その他で与える。
例) 自分が読み込みと書き込み、その他が読み込みの属性を与える
$ chmod 644 file.c
例) 自分が読み込み書き込み実行、その他が読み込みと実行の属性を与える
$ chmod 755 file.c
ごっそり入れ換えたいときに便利。
○ 再帰的に属性を与える(-R)
ディレクトリに再帰的に属性を与えたい場合がある。 そんな場合はシンボルを使いながら与える方が便利。 なぜならば、数字で与える場合は、さらに下のディレクトリに 間違った属性を与えてしまうから。
$ chmod -R 644 dir/ ×
とすると、ディレクトリの下のディレクトリにも644の属性が与えられてしまう。 ディレクトリは実行属性が必要なので、全てに読み込み属性を与えるときは
$ chmod -R +r dir/
とした方がいい。
| マシンに誰がログインしているか調べる。(who,w,finger) |
whoは誰がログインしているか調べられる
# who ohmori tty1 Feb 3 04:51 ohmori pts/1 Feb 3 00:35 ohmori pts/2 Feb 3 00:46 ohmori pts/3 Feb 3 00:47
wはログインしている人とその人がやっていることを調べられる
# w 12:52am up 5:26, 4 users, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT ohmori tty1 - 4:51am 38:02 0.94s 0.02s /bin/sh /usr/X1 ohmori pts/1 - 12:35am 13:47 0.05s 0.05s bash ohmori pts/2 - 12:46am 5:45 4.51s 0.01s bash ohmori pts/3 - 12:47am 0.00s 0.10s 0.02s w
fingerは引数なしで行なうとログインしている人の情報が得られる。 引数にユーザを指定すると、ユーザの情報が得られる。
# finger Login Name Tty Idle Login Time Office Office Phone ohmori Kenji Ohmori tty1 38 Feb 3 04:51 ohmori Kenji Ohmori pts/1 14 Feb 3 00:35 ohmori Kenji Ohmori pts/2 6 Feb 3 00:46 ohmori Kenji Ohmori pts/3 Feb 3 00:47 # finger ohmori Login: ohmori Name: Kenji Ohmori Directory: /home/ohmori Shell: /bin/bash On since Sun Feb 3 04:51 (JST) on tty1 40 minutes 12 seconds idle On since Sun Feb 3 00:35 (JST) on pts/1 15 minutes 57 seconds idle On since Sun Feb 3 00:46 (JST) on pts/2 7 minutes 55 seconds idle On since Sun Feb 3 00:47 (JST) on pts/3 Mail forwarded to /dev/null No mail. No Plan.
| ファイルがどこにあるか探す。(find) |
ファイル名だけで引っかけたい場合はfind を使えばよい。 find <path> -name "xxx*"といった感じで使う。 locateよりも高度な使い方がいろいろできる。 例えば、最後にアクセスした時間などを利用するなど。 -inameで大文字小文字を区別しない。
# find /usr/ -name "*mozilla*" /usr/share/pixmaps/mozilla-icon.png /usr/share/pixmaps/mozilla-compose-icon.gif /usr/share/pixmaps/mozilla-mail-icon.gif /usr/share/gnome/help/nautilus-release-notes/C/mozilla.html /usr/share/gnome/ui/nautilus-mozilla-ui.xml /usr/share/oaf/Nautilus_View_mozilla.oaf /usr/bin/mozilla /usr/bin/nautilus-mozilla-content-view /usr/lib/mozilla /usr/lib/mozilla/mozilla /usr/lib/mozilla/mozilla-bin /usr/lib/mozilla/run-mozilla.sh /usr/lib/mozilla/searchplugins/lxrmozilla.gif /usr/lib/mozilla/searchplugins/lxrmozilla.src /usr/lib/mozilla/searchplugins/mozilla.gif /usr/lib/mozilla/searchplugins/mozilla.src /usr/include/mozilla /usr/src/redhat/BUILD/skipstone-0.7.8/src/mozilla.cpp # find /usr/ -iname "*xdefault*" /usr/share/doc/vim-common-5.8/syntax/xdefaults.vim /usr/share/doc/xpaint-2.6.1/Doc/sample.Xdefaults /usr/share/vim/vim58/syntax/xdefaults.vim /usr/share/xemacs-21.1.14/etc/sample.Xdefaults /usr/X11R6/man/man3/XDefaultString.3x.gz
locateでファイルがどこにあるか探せる。簡単な検索にはfindよりも使いやすい より高度な検索の場合は、find の方がいいかな? ディレクトリ構造毎引っかかるので、ディレクトリ名が引っかかると とんでもなくいっぱい出てくる。
$ locate xxxx /lib/modules/2.4.9-12/kernel/drivers/scsi/3w-xxxx.o /lib/modules/2.4.7-10/kernel/drivers/scsi/3w-xxxx.o
| 自分のプロセスをすべて表示(ps) |
ps -Afでプロセスすべて表示できます。 grepと併用すれば、自分のプロセスを見ることも可能です。 -w をつければ、途中で切れずにコマンドのすべてを見れる。
$ ps -Af |grep ohmori ohmori 1706 1243 0 Jan24 tty1 00:00:00 -bash ohmori 1743 1706 0 Jan24 tty1 00:00:00 /bin/sh /usr/X11R6/bin/startx ohmori 1750 1743 0 Jan24 tty1 00:00:00 xinit /etc/X11/xinit/xinitrc -- ohmori 1775 1750 0 Jan24 tty1 00:00:00 /usr/bin/gnome-session ohmori 1779 1775 0 Jan24 tty1 00:00:00 /bin/sh /etc/X11/xinit/xinitrc ohmori 1782 1779 0 Jan24 tty1 00:00:00 kinput2 -wnn -wnnenvrc /etc/Free ohmori 1779 1775 0 Jan24 tty1 00:00:00 /bin/sh /etc/X11/xinit/xinitrc $ ps -Afw |grep ohmori ohmori 1782 1779 0 Jan24 tty1 00:00:00 kinput2 -wnn -wnnenvrc /etc/FreeWnn/ja/wnnenvrc -ccdef /usr/X11R6/lib/X11/ccdef/ccde ohmori 1783 1775 0 Jan24 tty1 00:00:00 [kinput2 <defunct>]
| ファイルのリストを表示する。(ls) |
ご存知ファイルリストを表示するコマンド。-aで.*ファイルを表示できる。 -lで詳細情報を表示できる。-hをつけるとファイルサイズとかがK とかMとかついて見やすくなる?
$ ls -al 合計 1840 drwxrwxr-x 3 ohmori ohmori 4096 1月 23 22:51 . drwx------ 38 ohmori ohmori 4096 1月 24 00:34 .. drwxrwxr-x 17 ohmori ohmori 4096 1月 23 22:58 galeon -rw-rw-r-- 1 ohmori ohmori 1865931 1月 23 22:56 galeon.tgz $ ls -alh 合計 1.8M drwxrwxr-x 3 ohmori ohmori 4.0k 1月 23 22:51 . drwx------ 38 ohmori ohmori 4.0k 1月 24 00:34 .. drwxrwxr-x 17 ohmori ohmori 4.0k 1月 23 22:58 galeon -rw-rw-r-- 1 ohmori ohmori 1.8M 1月 23 22:56 galeon.tgz