Category: Linux

Linuxコマンド10選(追記)

身近にLinuxコマンドを習得したいという入門者がいます。私もまだまだLinuxコマンド初心者ではありますが、自分がコマンドを学び始めた頃を思い出して、入門者向けにこれだけは知っておきたいコマンド10選を考えてみました。

ls -la
とりあえずこれが無いと、ディレクトリ内のファイルやサブディレクトリが確認できません。ドットで始まる不可視ファイルもこれで安心。似たようなオプションで、「ls -1」もあります。ハイフンに数字の1です。

cd
change directoryコマンド。カレントディレクトリを変更するために使います。長いパスで行ったり来たりすると鬱陶しくなりますが、「cd -」を知っていると少しだけ幸せになれます。直前のディレクトリに戻れます。cdコマンドのアンドゥみたいなものです。オプションナシで、「cd」だけの実行でホームディレクトリに切り替えるのは定番です。

cp
copyコマンドですが、このオプションはいくつか知っていないと困ることがあります。「-r」オプションでサブディレクトリもコピーしてくれます。「-p」小文字のpですが、所有権を維持してコピーできます。

mv
move移動コマンド。ディレクトリの対象時にもオプション無しで使えます。この点がcpコマンドと統一性がないのがLinuxの良さ?です。またLinuxにはリネームコマンドがないので、「mv file1 file2」とすることで、file1をfile2に名称変更できます。

rm
消去removeコマンドです。これもオプションが重要です。「-r」でディレクトリの消去ができます。「-f」でforce強制削除です。通常は「-i」がデフォルトで指定されていることになっているので、rmコマンドでは対象を消しても良いかどうか確認を促されますが、「-f」では有無を言わさずreturnキーを押した瞬間に消えてしまいます。コマンドラインでは絶対やってはいけないことの一つに「rm -rf /」があります。これはファイルシステムがごっそりと削除されます。多分大抵のシステムではrootアカウントでなければこれは実行できませんが、rmコマンド使用時には念入りに確認してから実行しましょう。

less
moreに対してlessだったという命名だったそうですが、ファイルの中を表示するときに使います。ファイルの中身の文字数が多い場合は、ページ単位で表示するのが便利なので、この点がcatコマンドに対して優れています。ときどきLinuxのディストリビューションによってはlessが入っていない場合もあるので、そのときは使い勝手が似ているmoreを使いましょう。lessで長くなった表示で1行目に移動するのが「gg」とgキーを2回連打します。これに対して最後の行に進むにはshiftキーを押しながら「g」です。

mount umount
リムーバブルメディアをマウントするときなどに使います。Macのように自動的にマウントしてくれないLinuxが多いので、USBで差し込んだだけで使えるとは限りません。しかし、このコマンドを難しくしているのはデバイス名という呪縛です。差し込んだUSBメモリがなんというデバイス名かを知るためには、他のコマンドを叩く必要があります。
私がよくやるのは、USBメモリを差し込んだ直後に、「less /proc/partitions」を実行します。その最後に出ているデバイスが目的のものになりますので、/dev/につづけてそのデバイス名を使います。マウントするときは「mount /dev/sdb1 /mnt」のようにします。「/mnt」がマウントしたいディレクトリです。マウントを解除するためにはこのディレクトリを「umount /mnt」のように指定します。

reboot
何はなくともrebootコマンドです。解説書では「shutdown -r now」なんていう長い入力が必要な方法もありますが、再起動するのなら文字通りのrebootコマンドがお手軽です。接続先のコンピュータが業務用ワークステーションの場合は、reboot後の起動に時間がかかるものもあります。Macのrebootのようにお気軽でないこともあるので注意しましょう。

ssh
セキュア・シェルで他のホストにログインできます。「yamaq@remotehost」のように、@の前にログインするユーザー名を付けて、ホスト名に続けます。または、-lオプションでログインアカウントを指定できます。「ssh -l yamaq remotehost」。以外と便利なのが、リモートホストに対するコマンド実行機能です。「yamaq@remotehost ls -la」こうすると、remotehost上で「ls -la」を実行した結果を、自分のコンピュータ上に表示できます。remotehostのCPUを使うので、自分のリソースは消費しません(笑)。

vi
定番のエディタ・コマンド・スイートです。viだけでも一冊の書籍が出ているくらいで、富士山の樹海のようなコマンドです。さらにviの中でもこれだけは知っておきたいと言う使い方があるのですが、それは別のエントリーにします。emacs 対 viのような対立軸で比較されるケースもありますが、私はなんとなくemacsは取っ付きにくかったのでviに落ち着いています。

まずはこのあたりから使い始めていけばいいと思います。そして自分で不便に感じた点をgoogle検索を使って補っていく、ということを繰り返していけば、そのうちに自分のスタイルができます。その途中でだれか練達者の方に生の声を聞く機会があると一層いいでしょう。

(2010.8.16 09:45 追記)
自分が普段どんなコマンドをよく使うかを集計する方法をgoogle経由でみつけました。こちらの技術志向さんのページに解説されています。参考にさせていただきました。感謝。

history | awk ‘{print $2}’ | sort | uniq -c | sort -rn

今回の10個だけでのコマンド、という趣旨からはズレますが、覚書として。上記のコマンドをコピー&ペーストするときは、「{」「}」の前後をシングルクォートに変更して実行してください。

歴史から理解すると視界がクリアになる

こちらのなぜ,/var や /etc が /etc や /cfg というディレクトリ名ではないのか?は、LinuxやUNIXのディレクトリ階層の由来がわかって、視界がすっきりしました。/varが変数のvariableからの由来で、どうして変数が必要だったかも興味深く読ませていただきました。

新しく学習する対象というものは、それについての周辺事情が把握できていないことが多いので、どうしても丸暗記になりがちです。そのためなかなか自分の頭の中に定着させることが難しくなります。

そんなときにはちょっと回り道のようでも、その対象の歴史や経緯から入るといいのかなあと感じました。本来学校の学習でもこのようなアプローチがいいのでしょうが、特に日本の学校の勉強は受験勉強であって学習ではないので、致し方ありませんね。私がコンピュータ系の書籍で洋書の翻訳版が好きなのは、こんな一見回り道に思えることから解説しているケースがよくあるからです。

私も映像業界を20年以上やっていると、過去からのVTRの変遷などは肌で感じてきたので理解しやすいのですが、最近出てきたHD系のVTRは肌で触れていないのでなんとなく、縁遠く感じてしまいます。

LinkStation LS-WHGLをハックする

Buffalo社製NAS LS-WH1.0TGL/R1を、東芝のREGZAと組み合わせて使っていました。これまではおとなしく(笑)使っていましたが、このテのNASは内部にコンパクトなLinuxが走っているので、ハッキングすることができます。3年くらい前に持っていたNASではこれがうまくできなくて挫折しましたが、今回は簡単に成功したので、それをレポートしておきます。

参考にさせていただいたのはこちらのsakatam blogさんです。情報感謝。まずはこんな便利なサイトからjavaの実行ファイルacp_commander.jarがあるのでダウンロードします。

MacのTerminal.appを起動して、このダウンロードしたファイルをオプションをつけて実行します。末尾のオプションは小文字の「オー」です。Mac OS Xにもjavaコマンドが備わっていたとはオドロキでした。

$ java -jar acp_commander.jar -t NASのIPアドレス -o

there seems to be no existing prefs, write default values
ACP_commander out of the nas-central.org (linkstationwiki.net) project.
Used to send ACP-commands to Buffalo linkstation(R) LS-PRO.
(途中省略)
You can now telnet to your box as user ‘root’ providing no / an empty password.

大体20〜30秒くらい待つと完了しました。これ以降はtelnetでNASに接続できるようになりました。このjavaのツールはNASが再起動すると効力を失うみたいです。そのため恒常的にsshで接続できるように、NASでsshdが起動するようにしておきます。

# vi /etc/init.d/rcS

このファイルrcSの末尾に「/usr/local/sbin/sshd」を追加します。この状態ではrootアカウントにパスワードがありません。そのためsshで接続できないので、

# passwd root

これでrootのパスワードを指定しておきます。念のためrebootしてsshで接続できるか確認しておきましょう。

LinkStation LS-WHGLはDebian系のLinuxだそうですね。私の知識では、apt-getのDebianくらいしか知りませんので、Ubuntuに続いてまたまた別のLinuxにも慣れないといけません(笑)。

NICに最大で254個のIPアドレスを設定する

実際にはこんなにたくさんのIPアドレスを、ひとつのNICに割り当てる必要があるか、というのは横へ置いておきます(笑)。

技術的には、IPアドレスの第4オクテットを、0と255以外の1から254までの設定ができるとのことです。IPエイリアスでifcfg-eth0:0のように設定することはできるのですが、この場合は/etc/sysconfig/network-scripts以下に多数のファイルが出来上がります。そうではなくて単一のファイルifcfg-eth0-range1に、1〜10のように範囲で設定できる方法がカーネルに実装されていることを知りました。

DEVICE=eth0
BOOTPROTO=static
HWADDR=00:04:75:D4:C8:F9
IPADDR_START=192.168.0.6
IPADDR_END=192.168.0.10
CLONENUM_START=1
NETMASK=255.255.255.0
ONBOOT=yes
TYPE=Ethernet

解説はこちらに書かれていますが、設定は簡単ですね。これがどんなときに必要かがさっぱり理解できていないのですが(汗)、またどんなときに役に立つのかがわかりませんが、ご指摘いただけると幸いです。

この設定をすることで、ifconfigコマンドの結果もその数だけリストアプされました。もしかするとCORESERVERなどのレンタルサーバではこんな仕組みを利用しているのでしょうかね?

CentOS5.5でNetatalkをインストール(修正あり)

先日やったばかりですが、CentOS5.5のリリースが来たので、さっそく試しておきました。今回使ったパッケージはCentOS5.4の時と同じバージョンを使いました。OpenSSLとLibgcryptはあらかじめインストールされていたようですが、この二つをインストールしないと、AFPサーバへのアクセス時にはじかれてしまったので、最新版を入れておく意味も含めて、ここでもインストールしました。

OpenSSL(openssl-1.0.0)
Libgcrypt(libgpg-error / libgcrypt-1.4.5)
Berkeley DB(Berkeley DB 4.8.30NC)
Netatalk(netatalk2.1)

ダウンロードしたtarファイルは、/tmpへ解凍しましたので、その場所へcdするところから書いておきました。まずは、OpenSSLです。一般的にConfigure(Cが大文字です)して、make、make installだけです。

# cd /tmp/openssl-1.0.0
# ./Configure
# make
# make install

次はLibgcryptですが、Libgpg-errorが必要なので、これを先にインストールしておきます。

# cd /tmp/libgpg-error-1.8
# ./configure
# make
# make install

続いてLibgcryptをインストールします。

# cd /tmp/libgcrypt-1.4.5
# ./configure
# make
# make install

次がBerkeley DBなのですが、使っているパッケージは同じでも、この点だけCentOS5.4の時と異なりました。configureの引数から「–with-mutex=”x86/gcc-assembly”」は削除しました。付けた場合はこんなエラーがでました。

checking for mutexes… (cached) ”x86/gcc-assembly”
configure: error: Unable to find a mutex implementation

改めてこれでやると問題なくできました。
# ../dist/configure –with-uniquename
# make
# make install

最後にNetatalkです。これはCentOS5.4と同じでOKです。
# ./configure –prefix=/usr/local/atalk –with-bdb=/usr/local/BerkeleyDB.4.8 –enable-redhat
# make
# make install

このあと、「chkconfig atalk on」で恒常的に有効にしておき、atalk関連の設定を好みに合わせて済ませば、「service atalk start」で起動します。とりあえずAFP単体での運用に関しては問題ないようですが、何か見つかれば追ってレポートします。

最後にご注意ですが、ここに書いたようにコピー&ペーストした場合、私の環境ではハイフンが化けてしまいました。configureなどの引数はハイフンが二つ付きます。エラーが出た場合はこの点をご確認ください。

(2010.5.18 16:30 修正)
HATさんにご指摘いただき、GPG周りのインストール手順が変更になりました。

CentOS5.5リリース

yebo blogさんで書かれているように、CentOS5.5のリリース版がダウンロードできるようになっています。公式なリリースアナウンスもこちらで公開されていますね。

つい最近バージョン5.4をインストールしていたばかりなのですが、ちょうど入れ替えの時期なのですね。CentOSはFedoraCoreのように頻繁にアップデートはしないので、安定運用するためにはオススメできるのですが、着実にアップデートしていますね。

目下AFPまわりの検証をしているところで、近々レポートできると思います。

CentOS5.4は2009年の10月末リリースだったようなので、半年ぶりの更新ということですね。

Ubuntu10.04UNEのWiFiでてこずる

先日遊んでいたネットブックに、UbuntuのNetbook Editionをインストールしてみた件をエントリーしました。ネットワーク接続は内蔵のWiFiしかないので、これがつながらないとネットブックとは呼べません(笑)。しかし、これが意外とやっかいでした。

これまでのLinuxでは有線のイーサネットが付いているマシンばかりだったので、ネットワークデバイスを認識させることは不要でした。最近のOSはネット接続を前提としているので、ネットにつながらないとアップデートすらできず、まったく離れ小島状態になってしまいますね。

まずそんなエラーメッセージが出ているかを知るために、dmesgコマンドで見ると、b43のドライバが見つからないことがわかりました。b43は聞きなれないので、さらにlshwコマンドを使うとBroadcomの4312だとわかりました。またdmesgの結果には、親切にその足りないドライバが入手できるURLも出ていました。

そのサイトに行ってソースを持ってきてmake、make installというシナリオが見えてきたのですが、その途中でMD5のエラーが出て途中でストップしてしまいました。Google検索の途中で知ったのですが、どうもUNE10.04では、ネットワークデバイスが認識できないという問題があるようでした。

八方塞がりになったので、手持ちのUSB差し込みタイプのPCI社製のWiFiアダプタを試しに挿し込んでみたところ、簡単に使えるではありませんか。拍子抜けした感があるものの、この状態でハードウエアの認識をさせて必要なソースをネットに見に行ったところで、Broadcom4312のドライバを入手できました。

結果的に見ると、ネットワークデバイスを使えるようにするためには、ネットワークデバイスが動いていないとイケない、ということになり、なんとも渋い展開でした。この先のバージョンで対策されていればいいのですが、有線のネットが無いネットブックでは、これは致命的でした。

私はてこずりましたが、こんな場合にはこうすればいいぞ、みたいな情報をいただけると幸いです。

Aipo5のデータリストア(追記)

CentOSバージョン5.0で運用しているAipo5.0.2.0があり、その環境をCentOS5.4へ移行するのにかなり手こずったので、それに関する結果報告です。

当初Aipoのbinディレクトリにある「restore_handler.sh」スクリプトを使うと難なくリストアができるものと思っていたのですが、そんな簡単なことではなかったわけです。バックアップデータを新しいCentOS5.4サーバにコピーして、単純にこのコマンドを実行するとこんなエラーメッセージが出ました。

version 5.0.2.0
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 5; 2615 16960 SCHEMA public aipo_postgres
pg_restore: [archiver (db)] could not execute query: ERROR: cannot drop schema public because other objects depend on it
HINT: Use DROP … CASCADE to drop the dependent objects too.
Command was: DROP SCHEMA public;
pg_restore: [archiver (db)] could not execute query: ERROR: schema “public” already exists
Command was: CREATE SCHEMA public;
WARNING: errors ignored on restore: 2
Backup Error

PostgreSQLはほとんど初体験に近いので、いろいろコマンドやらを試しましたが結局ダメで、最終的にはユーザコミュニティの情報がヒントになりました。このまま実行したのでは結局またエラーで止まってしまったので、restore_handler.shの中の一部分を修正してみました。

(修正前のオリジナル)
sudo -u $AIPO_POSTGRES_USER $AIPO_HOME/postgres/bin/pg_restore -Fc -c -U $AIPO_POSTGRES_USER -p $port_num $AIPO_HOME/backup/$bg_dir/aipo_db.dump -d org001

(修正後)
sudo -u $AIPO_POSTGRES_USER $AIPO_HOME/postgres/bin/pg_restore -Fc -c -U $AIPO_POSTGRES_USER -p $port_num $AIPO_HOME/backup/$bg_dir/aipo_db.dump

末尾の「-d org001」を削除したのです。org001関連のエラーメッセージが目立ったので、思い切ってデータベースを指定せずにリストアしてみて結果オーライとなりました。通常のリストア時に不具合が出るといけませんから、終了後には元に戻すことをおすすめします。

(2010.5.24 22:34 修正)
この方法でうまくいくこともあるかもしれませんが、ダメな場合はこちらのエントリーも参考にしてみてください。

http://mount-q.com/yamaqblog/?p=7135

Ubuntu Netbook Edition10.04をインストール

手元に使わなくなったHPのネットブックがあったので、最近正式リリースとなったUbuntuのNetbook Editionを入れてみました。ネットブックなので光学ドライブがありませんから、USBメモリにインストールデータ一式をあらかじめコピーしておかねばなりません。

まずはこちらからディスクイメージをダウンロードします。700MB程度でした。次にデータを入れておける容量を持ったUSBメモリを接続しておきます。ディスクイメージをMacのVMware / Windows7でマウントして、その中にあるusb-creator.exeを実行します。すると必要ファイル群のコピーが始まります。私の環境では10分程度かかりました。

注意点として、usb-creator.exeのウインドウでの選択で、「Discraded on shutdown〜」を選択することです。最初はワケもわからずにスライダの方を選択してバーを右いっぱいまで指定してインストールしたところ、起動の途中で止まってしまいました。

実際にインストールが始まると、日本語表示も正常で、期待感があおられました。今回使ったマシンはHP miniの16GB SSDタイプでRAMは1GBです。WiFiの設定などがこの先に待っています。

インストールは無事にいっているようなのですが、WiFiがつながりません。せっかくのネットブックなのに、ネットにつながらないのではまったく使い物になりませんね(笑)。先は長いようです。

CentOS 5.4にNetatalk2.1インストール(修正あり)

最新のFedoraCoreディストリビューションでは、何も意識しなくてもNetatalkはインストールしてくれるようですが、CentOSではそうはいきません。CentOSは進歩はゆっくりしていますが、安定運用するサーバなどでは安心して使えると思っています。そんなCentOSの最新安定版5.4にAppleのAFPサーバを構築するための設定です。

CentOSはGUIを排除して、Baseパッケージだけという素の状態でインストールしました。インストール後に自動的に「/usr/sbin/system-config-network」が起動するので、その中でファイヤーウオールの設定、SELINUXの無効化、無駄なサービスの無効化を行いました。サーバへの接続はsshdが起動しているので、これ以降はssh接続したMac側から行えます。

当初NetatalkとBerkeley DBだけ入れていたのですが、これではゲストアカウントだけからしかAFPサーバに接続できませんでした。そんなときに参考にさせていただいたのはこちら。yamaq blogにもコメントを頂き間違いなどをご指摘いただいたことのあるHATさんのサイトです。情報の更新も活発なようで、Netatalkの構築ではとても信頼できるサイトです。

いろいろ紆余曲折あったのですが、必要なパッケージは下記の通りです。

OpenSSL(openssl-1.0.0)
Libgcrypt(gnupg-1.4.10)
Berkeley DB(Berkeley DB 4.8.30NC)
Netatalk(netatalk2.1)

まずは、OpenSSLからはじめます。解凍したアーカイブファイルを/tmpなどに移動します。その中のopenssl-1.0.0に移動します。OpenSSLは普通のコンパイル設定でした。

# cd /tmp/openssl-1.0.0
# ./Configure
# make
# make install

次にLibgcryptです。ダウンロードしたファイルはgnupg-1.4.10.tar.bz2です。bz2形式なので、tarからの復元はtar jxvf gnupg-1.4.10.tar.bz2ですね。

# cd /tmp/gnupg-1.4.10
# ./configure
# make
# make install

次にBerkeley DBですが、バージョンは4.8.30NCを使いました。Netatalk2.1が必要とするのは4.6以上です。必ずbuild_unixディレクトリに移動してから実行します。オプションが2つ必要でした。

# cd /tmp/db-4.8.30.NC/build_unix
# ../dist/configure –with-uniquename –with-mutex=”x86/gcc-assembly”
# make
# make install

(注意)上記をコピー&ペーストすると、ハイフン「-」二つが変化してしまうことがあるようです。configureの引数はハイフンが二つ必要なので、ご注意ください。

最後にNetatalkです。最終的にatalk一式がインストールされる場所を「/usr/local/atalk」としました。これは好みで変更できます。また-enable-redhatを付けることで、OS起動時のスクリプトなどがmake install時に設置されます。

# cd /tmp/netatalk-2.1
# ./configure –prefix=/usr/local/atalk –with-bdb=/usr/local/BerkeleyDB.4.8 –enable-redhat
# make
# make install

これでインストール作業は完了です。atalkデーモンを起動するために、

# service atalk start

これでアクセスしたアカウントのホームディレクトリに接続できるはずです。別途他のディレクトリにアクセスしたい場合は、設定ファイルApple.defaultの末尾付近にあるチルダ「~」だけのラインを「/SHARE “Public Dir”」などのように指定します。