便利な Linux のコマンド
Linux を利用する上で、知っておくと便利なことをまとめておきます。ここ以外にも「知っていると便利な UNIX のコマンド」も参照してください。
ユーザーの管理
ユーザーのアカウント管理は、ユーザーがシステムを利用できるようにするための重要な作業です。Linux では、ユーザーの管理をユニークな ID (数字)で管理します。その ID に対してアクセス権などを設定することができるようになっています。しかし、利用するユーザーは、その IDに割り当てられたわかりやすいアカウント名を利用します。
コマンド | 説明 | 詳細 |
groupadd | グループの追加 | 新しいグループを作成します。 |
groupdel | グループの削除 | 既存のグループを削除します。 |
useradd | ユーザーの追加 | 新しいユーザーを作成します。ユーザーID、グループ、シェル、ホームディレクトリーなどを設定できます。 |
userdel | ユーザーの削除 | 既存ユーザーを削除します。 |
passwd | パスワードの管理 | ユーザーのパスワードの変更やアカウントの保守が行えます。 |
グループの追加は、原則としてユニークなグループID をもうけてグループ名を指定します。
ユーザーの追加は、原則としてユニークなユーザーID をもうけてアカウント(ユーザー)名を指定します。この際に、所属するグループや利用するシェル、ホームディレクトリーなどを指定することができます。
ユーザーが一時的に不在になるとき、そのアカウントを利用できないようにするには passwd
コマンドを利用します。
# passwd -l shin ← アカウント shin をロック Changing password for user shin Locking password for user shin passwd: Success # # passwd -u shin ← アカウント shin をロック解除 Changing password for user shin Unlocking password for user shin passwd: Success
ユーザーを削除するときは、アカウントを削除するだけでなく作成したファイルや実行されているジョブなどを削除する必要があります。find
コマンドで、削除するユーザーの作成したファイルを検索し削除するかオーナーを変更するか決定します。crontab
コマンドで、削除するユーザーによって起動されるコマンドがあれば停止します。削除するアカウントに対するメールの処理をどうするか判断し、必要なら別のユーザーなどに転送するようにします。
# find / -user shin -print ← アカウント shin 所有のファイルを検索 /home/shin/aaa /home/shin/bbb ... # # crontab -u shin -l ← アカウント shin のジョブをチェック # DO NOT EDIT THIS FILE - edit the master and reinstall. # (/tmp/crontab.2681 installed on Mon May 19 16:31:04 2002) # (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $) 30 23 * * * /usr/local/bin/command-shin # # crontab -u shin -r ← アカウント shin のジョブを削除 # # userdel -r shin ← アカウント shin を削除(ホームディレクトリーも削除)
各ランレベルと起動するサービスの変更
Linuxでは、ランレベルによって起動するサービスと起動しないサービスが分けられています。
ランレベルとは、Linuxの動作モードを表します。Linuxでは、ランレベルがいくつか定義されておりランレベルを変更することによってLinuxの動作を変えることができます。起動時のデフォルトランレベルは、/etc/inittab
に記述されています。
# # inittab This file describes how the INIT process should set up # the system in a certain run-level. ... # Default runlevel. The runlevels used by RHS are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:3:initdefault:
ランレベル | 説明 |
0 |
システムの停止 |
1 |
シングルユーザーモード |
2 |
マルチユーザーモード (NFSマウントなし) |
3 |
マルチユーザーモード (通常 : コンソールログイン) |
4 |
未使用 |
5 |
マルチユーザーモード (通常 : X Window) |
6 |
システムの再起動 |
これらのランレベルに応じた、サービスは /etc/rc.d/rc?.d
(?:ランレベル)
ディレクトリーに登録します。登録するサービスはシェルスクリプトで規定のフォーマット(start, stop といった引数を解釈する)で記述されています。これらの実態を /etc/rc.d/init.d
ディレクトリーに置き、起動したいサービスのリンクを S(start) + 2桁の数字で始まる名前で登録します。逆に終了させたい場合は K(kill) を使用します。2桁の数字は優先順位で、数字の小さいものから実行されます。
# ls /etc/rc.d/rc3.d K05saslauthd K54pxe S10network S55named S90crond K12FreeWnn K70aep1000 S12syslog S55sshd S90xfs K20nfs K70bcm5820 S13portmap S56rawdevices S95anacron K24irda K74ntpd S14nfslock S56xinetd S95atd K25squid K74ypserv S17keytable S60lpd S97rhnsd K34yppasswdd K74ypxfrd S20random S80sendmail S99local K35winbind K95firstboot S24pcmcia S81dracd K50snmpd S05kudzu S25netfs S85gpm K50snmptrapd S08iptables S26apmd S85httpd K50tux S09isdn S28autofs S90canna #
現在のランレベルを変更したい場合、telinit(init)
コマンドを使用します。現在のランレベルを知りたい場合、runlevel
コマンドを使用します。以下の init
コマンドを実行するとシステムが再起動します。
# runlevel N 3 ← 1つ前のランレベルは存在しない(N)、現在のランレベルは3 # init 6
各ランレベルで実行するサービスの変更には、ランレベル別のディレクトリ(/etc/rc.d/rc?.d
)に、起動するサービス(/etc/rc.d/init.d
)のリンクをSで始まる名前で作成するのだが、それを簡単に設定できる chkconfig
コマンドが用意されています。
# chkconfig --list ← すべてのサービスの状態を表示 ntpd 0:オフ 1:オフ 2:オフ 3:オフ 4:オフ 5:オフ 6:オフ syslog 0:オフ 1:オフ 2:オン 3:オン 4:オン 5:オン 6:オフ netfs 0:オフ 1:オフ 2:オフ 3:オン 4:オン 5:オン 6:オフ network 0:オフ 1:オフ 2:オン 3:オン 4:オン 5:オン 6:オフ ... # # chkconfig --list httpd ← httpd の状態を表示 httpd 0:オフ 1:オフ 2:オン 3:オン 4:オン 5:オン 6:オフ # chkconfig --level 2 httpd off ← httpd のランレベル2 でのサービスを停止 # chkconfig --list httpd ← httpd の状態を表示 httpd 0:オフ 1:オフ 2:オフ 3:オン 4:オン 5:オン 6:オフ
このほかに、新しいシステムサービスを追加するには --add
オプションでサービス名を指定し、システムサービスを削除するには --del
オプションでサービス名を指定します。
chkconfig
を使用しても、変更内容がすぐに反映されるわけではありません。service
コマンドを使って、各サービスを起動/停止する必要があります。xinetdが管理するサービスを起動または停止する場合は、service
xinetd restart
コマンドを使用します。
# service httpd stop httpdを停止中: [ OK ] # # service xinetd restart xinetdを停止中: [ OK ] xinetdを起動中: [ OK ]
ログアウトしてもプログラムを実行し続ける方法
ターミナルエミュレータなどでプログラムを実行している場合、そのターミナルエミュレータを終了すると、ターミナルで動作していたプログラムが強制的に終了させられてしまいます。しかし、実行結果が得られるまでに何時間、何日もかかるようなプログラムを実行する場合、ログインしたまま放置しておくのはセキュリティ上問題が生じることがあります。そこで、nohup
コマンドを利用します。nohup
は、HUPシグナルを無視してプログラムを実行し続けるコマンドで、標準出力と標準エラー出力を ./nohup.out
(書き込めない場合~/nohup.out
)に出力します。
# nohup ./mycommand &
なお、途中でコマンドを終了させたい場合は ps
コマンドでプロセスIDを調べ、kill
コマンドでプロセスを中断してください。
複数の階層を持つディレクトリを一度に作成するには
通常、mkdir
コマンドでは存在しないディレクトリの下にサブディレクトリを作成しようとすると、親となるディレクトリがないのでエラーとなってしまいます。しかし、mkdir
コマンドを複数回実行するのは面倒です。そこで、-p
オプションや {}
を指定することで一度に複数の階層を持つディレクトリーを作成することができます。
# mkdir -p parents/{child1,child2}
これで、以下のコマンドを実行したことと同じになります。
# mkdir parents # mkdir parents/child1 # mkdir parents/child2
vi (vim) でカラー表示を無効にする
Red Hat Linuxなどのスクリーンエディタ vi
(vim
)でファイルを開くと、ファイルの種類によってはコマンドや予約語などがカラーで表示されます。しかし、使用しているディスプレイの種類や輝度などによって見にくいことが多々あります。このような場合、カラー表示をオフにします。それには、コマンドモードで以下のようにタイプします。
:syntax off
毎回コマンドをタイプするのが面倒なら、~/.vimrc
に syntax
off
を記述しておくことでデフォルトで off に設定できます。
その他の .vimrc の設定(一部)
コマンド |
説明 |
set number |
行番号を表示 |
set tabstop=4 |
タブ幅を指定(半角4文字) |
set autowrite |
ファイル切り替え操作時に自動保存 |
set autoindent |
上の行のインデント指定を次の行でも引き継ぐ |
set ruler |
ルーラーを表示 |
set nowrap |
折り返し表示しない |
let loaded_matchparen=1 |
括弧の自動マッチングをやめる |
Windowsパーティションの日本語ファイル名を表示する
mount
コマンドを使用する際に、コード変換を指示します。
# mount -t vfat /dev/fd0 /mnt/floppy # ls /mnt/floppy ????.txt # umount /mnt/floppy # mount -t vfat -o iocharset=euc-jp,codepage=932 /dev/fd0 /mnt/floppy # ls /mnt/floppy 漢字.txt
codepageの「932」はシフトJISを表し、iocharsetの「euc-jp」はEUCに変換して表示することを指定しています。
Samba の設定 [/etc/samba/smb.conf(/etc/smb.conf)の編集]
LinuxとSambaのパスワードを同期するには
unix password sync = Yes passwd program = /usr/bin/passwd %u
WindowsからLinux間でのファイル名の文字化けを解消するには
client code page = 932 coding system = euc
client code pageの「932」はシフトJISを表し、coding systemの「euc」はLinuxにコピーしたときにファイル名をEUCに変換することを指定しています。