Linuxゲリラ戦記

コマンドに別名をつけてみよう。

左を向いているペンギンみたいなキャラクター、ナックス

28..bashrcファイルのaliasで遊んでみる

ナックス「はい。というわけで今回は前回教えたnanoエディタを使ってLinuxの設定ファイル、.bashrcファイルをちょっとだけいじってみたいと思います」

デビー君「むむむむむむ無理じゃないかな?ぼぼぼぼぼ僕まだ基本的なコマンドしか知らないし」

ナックス「そんなにビビらなくても……。今回試しにいじるのは、Linuxの重要な部分というよりも、もうちょっと『初心者が初めて設定ファイルをいじるにはちょうどいいかな』みたいなやつをいじるので大丈夫です」

デビー君「そ、そうなのか。ちょっぴりドキドキ」

ナックス「さて!今回いじる設定ファイルはLinuxの設定ファイルというよりも正確にはシェルのひとつ、bashの設定ファイルです!」

デビー君「バッシュ?……っていえばバスケットシューズの略だよね!」

ナックス「違うわ!このボケナスがー!……というようなやりとりを10.現在動いているプログラムを全て表示。pstreeコマンドでちょっとだけやりました」

ナックス「まず、シェルの話からしましょう。Linuxは、大きくわけて二つの部品から出来ています。それは『カーネル』と『シェル』です」

ナックス「『カーネル』はハードウェア……つまり、あなたのパソコンの電源やキーボードを認識して、ソフトウェア(プログラムとか)との橋渡しをするLinuxの根幹ともいえる部分です。例えば、キーボードを押せば画面に押したキーの文字が表示されますね?これはカーネルのお陰なのです。正確に言えば、Linuxとは『カーネル』の部分のことのみを指して言います」

ナックス「ただしカーネルはあくまで『ハードウェア』と『命令』との橋渡しであり、命令そのものを行うわけではありません。命令を行うのは人間(や、人間が作ったプログラム)。つまりLinuxを操作しているあなたです。cdコマンドやlsコマンドなどで指示を出しているあなた。いつも何気なく使っている『CUI環境』。この部分が『人間』と『命令』との橋渡しをおこなっている『シェル』と言われる部分です」

ナックス「『シェル』にはcshやzshなど多数の種類がありますが、今日ほとんどのLinuxディストリビューションが標準で採用しているシェルがbashなのです」

デビー君「へー。じゃあ、bashが一番高性能なシェルってこと?」

ナックス「いいえ。Linux初心者の方は『標準でインストールされているソフトが一番性能が良いはずだ』とよく誤解されていますが、標準でインストールされているソフトは『高性能だから』というよりは『クセが無く、シンプルで、ほとんどの人が操作に違和感を感じないから』という理由の方が多いです。『シンプル』と『高性能』はノット イコールです。ちなみに最強のシェルはzshだと言われていますが、これは設定ファイルをいじくりまくって最強のシェルに仕上げていくタイプなので、設定ファイル等の書き方に慣れていない人はまだ手出ししても最強感が分からないかもしれません(ただ、nanoを教えたので、ググりながらやればzshの設定ファイルもいじれると思います)」

ナックス「ちなみにシェルもyumコマンドやapt-getコマンド、aptitudeコマンド,Synapticsなどから普通にインストール出来ます。Linuxに慣れてきたら他のシェルを使ってみるのもまた一興」

ナックス「というわけで今回はbashの設定ファイル、.bashrcをいじるぞ!ってことです」

デビー君「はーい」

ナックス「まず、CUI環境を立ち上げます」

デビー君「立ち上げました」

CUIを立ち上げよう

ナックス「今回はホームディレクトリでlsコマンドに-aオプションをつけた ls -a を実行します」

$ ls -a

デビー君「-aオプションは新登場だね」

ls -aコマンドを使おう

デビー君「げ。今まで作成したことがないファイルやディレクトリが表示されている……。こ、こいつは……ウィルス?」

ナックス「いいえ。これらは隠しファイルや隠しディレクトリです。lsコマンドに-aオプションをつけることで隠しファイルや隠しディレクトリを表示することが出来ます。隠しファイルや隠しディレクトリの多くは、あるプログラムに対する設定ファイルや、設定ファイルに関連するもの等などです。ウィルスではないのでご安心を」

デビー君「へー。なんか全部名前の最初に.(ドット)がついてるね」

ナックス「そうなんです。実は隠しファイルや隠しディレクトリを作成するのに難しい操作は必要なく、名前の一番最初にドットマークをつけるだけでいいんです」

デビー君「なんだか安易だなー」

ナックス「まぁまぁ。さて、表示されているファイル名の中に.bashrcファイルはありますか?」

デビー君「えーっと……あ、あった!」

ナックス「あるユーザーのホームディレクトリに存在する設定ファイルは、基本的にそのユーザーにのみ適用される設定ファイルです。故に、rootユーザーにならなくても一般ユーザーから設定ファイルをいじることが出来ます」

デビー君「へー。そうなんだ」

ナックス「『自由にいじっても良いよー。失敗しても、困るのはあなただけだしー』ということですね。さて、.bashrcファイルをいじるまえに念のためにcpコマンドでバックアップファイルを作っておきましょう。名前はbackup_bashrcにでもしておきますか(別に他の名前でも良いです)」

$ cp .bashrc backup_bashrc

.bashrcのバックアップファイルを作成しよう

デビー君「な、なんか『バックアップ』なんて専門用語を使うから、難しいコマンドでも使うのかと思ったけど普通にcpコマンドなんだね……」

ナックス「そうです。もし設定ファイルの書き換えに失敗して『なんかもう訳が分からん!!』っていう状態になってしまった場合は以下のようにすれば元の状態に戻せます」

$ cp backup_bashrc .bashrc

デビー君「え?名前を元の.bashrcに戻しただけ……?」

ナックス「そうですよ?いじる前の状態をバックアップしているので、これだけでいじる前の設定ファイルに戻せるのです」

デビー君「いや、でも設定ファイルってそもそもどうやって認識してるの?例えば今回いじる設定ファイルの名前は.bashrcだけど、どこかのプログラムに『bashの設定ファイルは.bashrcだー!』って設定されていて、そいつを複雑な操作を駆使しながら設定ファイルを書き換えて、設定ファイルを再設定して……みたいなイメージだったんだけど?」

ナックス「いいえ。難しく考えすぎです。『bashの設定ファイルは.bashrcです』。これ以上の難しい知識は一切必要がありません。大事なのはこのプログラムの設定ファイルの名前は○○だなという知識だけです。例えば『今回のls -aコマンドで.bashrcファイルが無い!bashを使っていることは確かなのに……』って涙目になっているそこのあなた。解決策は簡単です。『.bashrcという名前のファイルを新しくホームディレクトリに作成する』。これだけで、他に何も設定しなくても次回からその.bashrcに設定された設定がbashに適用されます」

デビー君「いいの、そんなんで?設定ファイルって、結構大事なファイルなんじゃないの?」

ナックス「良いのです。Linux最強説を唱える方の中には理由の一つとして『設定ファイルで設定をいじるのが簡単だから』ということを挙げる方が多くいます。初心者はLinuxに何やら難しい印象を受けている方が多くいて、それはLinuxを広めようとする方々のアピール不足なのも理由なのですが、実は設定ファイルなんてのはめっちゃ簡単です。レンジで五分です」

デビー君「へー。そうなんだ」

ナックス「さて。バックアップも出来たところで.bashrcファイルをいじりましょう。既にあるファイルをnanoエディタでいじる場合は以下のようにコマンドを打ちます」

$ nano 編集したいファイル名

ナックス「つまり今回はこうです」

$ nano .bashrc

nanoで.bashrcを編集する

ナックス「さて、めっちゃ文字が書いております。ちなみに私が使っているLinuxディストリビューションのデフォルトの.bashrcを例として載せておきます(Debianテスト版(squeeze)のデフォルトの.bashrc)。ちなみに、私の設定ファイルとまったく違う内容でも問題ないです。これは単なる一例です。たとえあなたの.bashrcが何も書いていない白紙でも、今回の解説では全く問題ないです」

デビー君「うぉーい!!簡単って嘘じゃん!!めっちゃ難しそうじゃん!!」

ナックス「あっはっはっはっは……。確かに。『レンジで5分』とか言ってすみません。これは確かに初心者は引くね。責任持って切腹いたす!」

デビー君「切腹しないで!中途半端に終わらないできちんと教えてよ!」

ナックス「一見難しそうですが英語が読めれば楽勝です

デビー君「そんな身も蓋もないこと言うなよ!」

ナックス「おっけーおっけー。ひとつずつご説明致しましょう。まず基本的に設定の命令は一行で指示します

デビー君「いやいやいや。複数行に渡って難しそうなことが書いてあるって!!」

ナックス「そうですね。これは『一行に一つの命令を書いて』『それをたくさん指示している』と考えてください。命令自体は一行にひとつです。例外もありますが」

デビー君「ふーん」

ナックス「で!行の一番最初に#のマークがついている行があるでしょ?」

ナックス「例えば私の場合だと一番最初の行の
# ~/.bashrc: executed by bash(1) for non-login shells.
とか二行目の
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
とか三行目の
# for examplesとか」

デビー君「ほとんどの行がそうだよ?」

ナックス「行の最初、すなわち行頭に#がついているのは命令ではなく、コメントアウトと呼ばれるものです。設定自体にはなんの影響も与えません。例えば『#このファイルはbashのための設定ファイルだよ』とか『#この下の行を書き換えれば設定を変えられるよ』とか、文字通りコメントしているのです。英語で」

デビー君「へー。じゃあ、例えば『#やーい、おまえんち、おばーけ屋敷ー』とか『#生きろ そなたは美しい』とか書いても、まったく問題が無いわけ?』」

ナックス「そうです。まったく問題がありません」

ナックス「というわけで今回は一番下にaliasという設定を追加します」

デビー君「つ、ついに書き換えるのか……。一番下っていうのは何か特別な意味があるの?」

ナックス「いや、特に意味はありません。まぁ、設定を間違えたら一番下の自分が書いた設定を消すだけで直せるし、わかりやすくていいかなーと思って」

デビー君「ふーん。で、エイリアスって何?」

ナックス「aliasとは、コマンドに別の名前をつけることです」

デビー君「別の名前?」

ナックス「そうです。例えば、lsコマンドを使った場合、デビー君の使っているLinuxディストリビューションでは結果に色はつきますか?」

デビー君「え?うん、ディレクトリとかファイルとか色分けされて見やすくなってるよ?」

ナックス「実は、普通にlsコマンドを使うと色がつかないのが普通です。色をつけるためには、正確にはls --color(またはls --color=auto)とコマンドを打たなければなりません。しかし、多くのLinuxディストリビューションでは.bashrcに次のようなaliasを書いて、lsコマンドだけでls --colorとなるように設定されています」

alias ls='ls --color'

もしくは

alias ls='ls --color=auto'

ナックス「どうでしょう。なんとなくイメージつかめました?」

デビー君「あー。確かに。なんとなくイメージできる」

ナックス「『lsコマンドで色がつかない』とお困りの方は上記の設定を.bashrcに書き込んでみてください。また『一般ユーザーでlsコマンドすると色がつくのにrootユーザーですると色がつかないんだよなー』っていう人はrootユーザーのホームディレクトリの.bashrcにaliasの設定が書かれていないのです。su -コマンドをすると、rootユーザーになると同時に、自動的にrootユーザーのホームディレクトリにも移動しているので、そこの.bashrcにaliasを設定してみてください。」

ナックス「さて、今回は.bashrcの一番下に、以下のように書いてみましょう」

# 下記は私が書き足したよーん
alias osakana='cd'

独自のaliasを追記する

ナックス「一応『実際のファイルを見ないとビビる』っていう方のために、実際に上記の私のファイルに付け足してどんなかんじになったかがこちらの.bashrcに自分で独自のaliasを付け加えたよです」

デビー君「あれ?日本語使って良いの?」

ナックス「コメントアウトになら日本語を使用しても大丈夫です。設定その物に日本語を使うのは『おそらく大丈夫だが、微妙』と言っておきましょう。できればalias お魚='cd'にしてみたいですが、もし何かあったら嫌な方はやめておいてください」

デビー君「はーい」

ナックス「さて、Ctrlキーを押しながらOキーを押して保存」

.bashrcを保存する

ナックス「ファイル編集時は名前を変えなくても既にその名前が入力されていますので、そのままEnterキー」

.bashrcの保存が完了しました

ナックス「Ctrlキーを押しながらXキーを押してnanoを終了します」

nanoを終了する

ナックス「さて。設定を反映させるには、bashを一度閉じて再度起動する必要があります。が、Linuxそのものを再起動する必要はありません。普通にCUI環境を閉じて、再度CUI環境を開きましょう」

ナックス「さて。先ほどcdというコマンドに別名、osakanaを設定しました。osakanaという名前でcdコマンドのように使うと、自由にディレクトリを行き来できます。こんな感じです」

osakanaコマンドが使える

デビー君「おー。すごい!」

ナックス「ちなみに、osakanaという別名はつけたものの、cdコマンドも普通に使えます」

cdコマンドも使える

ナックス「どうでしたか?設定ファイルいじり初体験の感想は」

デビー君「難しかったような……。難しくなかったような……」

ナックス「ちくしょう。設定いじりは簡単と言うイメージを与えたかったのに。Debianの初期設定ファイルのせいで……。Debianのバカバカバカバカバカバカ!」

デビー君「か、簡単だったよ!?めちゃくちゃ簡単だった!」

ナックス「本当ですか?まぁ、いろいろとコマンドに別名をつけて楽しんでみてください。ただし!aliasは使い方によっては危険です」

デビー君「え?どこが?」

ナックス「例えば alias cd='rm *'とか」

デビー君「死ぬね。死人が出るね」

ナックス「alias ls='rm /*'とか」

デビー君「世界が破滅するね」

ナックス「今回作成したaliasのosakanaコマンドも、特に今後使う予定は無いので、必要が無い方は設定した箇所を消しておいてください。今回書き加えた箇所を消して、bashを再起動すればosakanaコマンドは使えなくなります。バックアップファイルで.bashrcを上書きしてしまっても構いません」

デビー君「で、次回は何を教えてくれるの?」

ナックス「そうですな。実は以前のエロ画像も名前の最初に.をつけることで簡単に隠せるのですが、根本的な解決策として次回はファイルやディレクトリのアクセス権限の話をしましょう(29.ファイルのアクセス権限を変更しよう。chmodコマンド)」