Unixコマンド便覧

Unixコマンドの便覧を作ってみようと思って始めました。 コマンド便覧というより、このような時はどのコマンドを使えばいいか みたいなの。

戻る

メニュー
現在いるディレクトリを記憶して他のディレクトリに移る(pushd,popd)

現在いるディレクトリを記憶して他のディレクトリに移るのに便利なコマンドが pushdである。

$ cd /home
$ pushd /home/ohmori
/home/ohmori /home
 	

一時的に元のディレクトリに戻りたい時は、

$ pushd
/home /home/ohmori
 	

で前回のpushdに移動できる。完全に元に戻る時は

$ popd
/home
 	

で元に戻れる。

TOPへ 戻る

一つ前にcdした場所に戻る(cd-)

一つ前にcdした場所に戻る方法は

$ cd -
 	

でよい。前のcdで移動してくる前のディレクトリに戻れる。

TOPへ 戻る

ディレクトリ構造毎コピーする(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でコピーしてもタイムスタンプが変わったり、シンボリックリンクが 実体をコピーしたりしてしまうが上記を使えば、問題は解決する。

TOPへ 戻る

ファイルを使用しているプロセスを特定する。(fuser)

fuserを使うとファイルを使用しているプロセスを特定することができる。

-m
そのファイルシステム上のすべてのプロセスを表示する
-u
ユーザ名を表示する
-v
詳細に表示する。
-k
そのファイルを使用しているプロセスをkillする。-signalで signalを変更できる。

大抵は上記のオプションで足りるでしょう。

$ /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)
 	

TOPへ 戻る

OSの情報を調べる。(uname)

OSの情報を調べるには、unameを使う。下記のオプションを使うことができる。

-m,--machine
ハードウエアのタイプを表示する。例えばi386など
-n,--nodename
ネットワークのホスト名を表示する。
-r, --release
OSのリリースを表示する。2.4.9-31など
--s, --sysname
OSの名称を表示する。Linux,SunOSなど
-v
OSのバージョンを表示する。

-aを使うとすべての情報が表示される。

$ uname -a
Linux yari.bigforest.hn.org 2.4.9-31 #1 Tue Feb 26 07:11:02 EST 2002 i686 unknown
	

TOPへ 戻る

プログラムのダイナミックリンク先を探す。(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)
	

上記のように共有ライブラリが表示される。

TOPへ 戻る

ユーザを変更する。(su)

ユーザを変更するときは、suを使う。

$ su ohmori
Password:
$
	

上記だと、.cshrcなどを読まずにユーザ名を変えるので、 パスや環境変数はそのままになる。 "-"をつけると、.cshrcなどを読みこんで普通にログインするのと 変わらない状態に初期化される。

$ su - ohmori
Password:
$
	

TOPへ 戻る

ユーザを追加する。(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
	

ただし、この場合は、ホームディレクトリは消えないので、 手動で消す必要がある。

TOPへ 戻る

ディスク容量を調べる。(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
	

TOPへ 戻る

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/

とした方がいい。

TOPへ 戻る

マシンに誰がログインしているか調べる。(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.

TOPへ 戻る

ファイルがどこにあるか探す。(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

TOPへ 戻る

自分のプロセスをすべて表示(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>]

TOPへ 戻る

ファイルのリストを表示する。(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

TOPへ 戻る


Kenji Ohmori
Last modified: Tue May 31 02:00:24 JST 2005