ディレクトリ移動を少し楽にする

なにか作業をしていて、複数のディレクトリ間を行き来することがちょこちょこあり、その際に便利そうなものを見つけたので少しメモ。

$OLDPWD

作業していて、直前にいたディレクトリに戻る場合、それが1つ上のディレクトリだったら../で済むんですが…
そうでない場合、長いパスを打ったりするのが面倒。
そこで覚えておくと便利なのが$OLDPWD
直前にいたディレクトリを記憶している変数。簡単な使い方は下のとおり。


user@host:~$ tmp
~/tmp
user@host:~/tmp$ cd $OLDPWD
user@host:~$

cd -

と、紹介しておきながら、$OLDPWDってこれも結構打つのが面倒ですね…(・ω・`)
が、また便利なものがあって、 "cd -" とすれば "cd $OLDPWD"と同じ操作ができます。


user@host:~$ cd tmp
user@host:~tmp$ cd -
/home/user/
user@host:~$

pushd, popd

上の2つだと、直前のディレクトリしか記憶できないので、3以上のディレクトリを移動しながら作業しないといけない場面では少し使い勝手が悪いです。
その場合はpushd, popdコマンドを使うのがいいです。
簡単に使い方を示しておきます。


user@host:~$ pushd /etc/httpd/conf/
/etc/httpd/conf ~
user@host:/etc/httpd/conf$ pushd ~/public_html/cgi-bin/
~/public_html/cgi-bin/ /etc/httpd/conf ~
user@host:~/public_html/cgi-bin$ popd
/etc/httpd/conf ~
user@host:~$ popd
~
user@host:~$ popd
bash: popd: directory stack empty
user@host:~$
ちなみに、dirsコマンドを使うとディレクトリスタックに積まれているディレクトリを見ることができます。
オプション無しだと、pushd,popdのときと同じく、空白区切りで出力されますが、

$ dirs -l
とすると、1行ごとの出力になるので、こちらのほうが見やすいと思います。

Windwos上でLinuxのGUIアプリケーションを表示

ネットワーク経由で別のリモートマシン上のアプリをローカルマシンから起動して、そのアプリの画面をローカルでみることがLinuxではできるらしい。
これはWindwosからもできるらしいので試してみた。

Windowsには最初Xサーバがないので入れないといけない。
導入の参考にしたサイト:
SOURCEFORGE.JP:「Ximg」のインストールと基本設定、使い方
インストールと設定あたりは参考サイトを見てもらうとして…。

Ximgを起動するし、タスクトレイにXming Serverが表示されることを確認。

っと…その前に、Teratermの設定を変更する必要がある。
Teratermを起動。
新しい接続の画面が表示されたら一度キャンセル、
メニューバー>設定>SSH転送 を開く。
SSHポート転送という画面が表示されるので、
[一番下のXクライアントアプリケーションの転送]のなか、[リモートのアプリケーションをローカルのXサーバに表示する]にチェックを入れる。
これだけではまだ設定が保存も、反映もされていないようなので、設定を保存する。
メニューバー>設定>設定の保存 を開く。
デフォルトで入力された名前のまま保存する。
さらに、設定を反映させるためにTeratermを再起動する。
これで準備は完了。
Teratermを起動したら、リモートマシンに接続する。
リモートマシンにインストールされているアプリケーションをコマンドから呼び出すとアプリケーションの画面が手元に表示される。
例えば、firefoxを呼び出すなら

$firefox
とすればいい。
端末を他のことに使いたいなら
$firefox &
としておけば、firefox起動後、別の作業を続けることもできる。


GUI画面を転送したくない場合はTeratermの設定でいれたチェックを外すか、Ximgを終了させておけばいい。
そうでないと毎回画面を転送して起動する。
#emacsだと -nwオプションで端末内にemacs起動できる

Teratermのみでファイル転送

授業で使う資料などが置かれていたり、作ったプログラムやレポートを置きにいったりで大学のファイルサーバをよく使う。
教えられた方法は[Windows+R]キーからファイルサーバにつないでエクスプローラで表示したりする方法。
最近減ったような気はするものの、エクスプローラで繋ごうとすると応答なしになってエクスプローラ再起動が必要なことがちょこちょこある。
Teratermでscpを使えることと、ローカルファイルをサーバに置きに行くことができるのは既に知っていたので、逆に、サーバからローカルにファイルを取ってくる方法がないかを調べてみるとあったのでメモしておく。


Teratermを起動して、ファイルサーバにログインする。
目的のファイルがあるディレクトリまで移動する。

readlink -f <ファイル名>
で、ファイルのフルパスを取得し、範囲選択しておく。
メニューバー>ファイル>SSH SCPを開く
中間線で上下に分かれているが、下半分を使う。(上半分はローカルからリモートにファイルを置きに行く時に使う)
From欄でペーストする。
To欄には、ファイルの保存先をフルパスで入力する。
[Receive]を押す。
小さなウィンドウが起動して、ファイルが転送される。(サイズの小さなファイルならひょうじされないかもしない)


以上が手順。

エクスプローラで固まるのが嫌な人は使ってみてはどうでしょうか。
#teraterm使うのに抵抗のある人が多そうやから誰も使わんとは思うけど

変換,無変換キーにCtrlを、ひらがなカタカナキーにAltを割り当てる。

windowsではツール使ってレジストリ書き換えでやっていたこの割り当てをubuntuの方でもやってみた。
xmodmapコマンドを使うとできるそうな。
ってことで、とりあえずxmodmapを実行してみる。

$xmodmap
そうすると、こんなのが返ってきた。

xmodmap: up to 5 keys per modifier, (keycodes in parentheses):

shift Shift_L (0x32), Shift_R (0x3e)
lock
control Control_L (0x25), Control_L (0x42), Control_R (0x69)
mod1 Alt_L (0x40), Alt_R (0x6c), Meta_L (0xcd)
mod2 Num_Lock (0x4d)
mod3
mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf)
mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)

なんかいろいろあるけど、今回関係するのはcontrolとmod1の部分のみ。
それ以外は調べてもない(・ω・;)

controlはctrl、mod1がAltのこと。
その右側にあるのは、割り当てられているキーってことということでよさそう。

で、実際に変更してみる
~/.xmodmapを作成


add control = Muhenkan
add control = Henkan

add mod1 = Hiragana_Katakana

を追加する。
$xmodmap ~/.xmodmap
を実行して、適用してやると、設定が反映される。
適当なところで変更できているか確認。
ついでに、さっきの
xmodmap
をもう一度実行してみると…

xmodmap: up to 5 keys per modifier, (keycodes in parentheses):

shift Shift_L (0x32), Shift_R (0x3e)
lock
control Control_L (0x25), Control_L (0x42), Henkan_Mode (0x64), Muhenkan (0x66), Control_R (0x69)
mod1 Alt_L (0x40), Hiragana_Katakana (0x65), Alt_R (0x6c), Meta_L (0xcd)
mod2 Num_Lock (0x4d)
mod3
mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf)
mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)

と、変更した箇所が追加されていて、変更できていることが確認できる。


変更できたことを確認していると気づいたことがひとつ…。
無変換、変換、ひらがなカタカナキーをそれぞれCtrl,Altに割り当てたので、
当然、無変換、変換、ひらがなカタカナキーは潰れる、というかそのキーとして働かなくなる、無効になると思っていた。
が、emacs上で無変換キーを単体で押すとと表示される。
しかも押したままにするととなる。
と…いうことは…無変換キー潰れてない!?
で、割り当てた他のキーも試したみると、単体で押したとき、押し続けたとき両方共、無変換と同じように、単体では、割り当てる前のキー。押し続けると、割り当てたあとのキー+割り当てる前のキーとして表示された。


まぁ…割り当てる前のキーが使えたところで、使わないキーだから割り当てることにしたので…
あまり使いどころはないのだけど…

Linuxでファイル検索のコマンド

まだまだ全然使ってないのに、おいたファイルの在り処だとか、
DLしてきたファイルの在り処がわからなくなるので、
ファイルを探してくれるコマンドがないのか調べてみた。
調べると2つ見つかったので、どんな違いがあるのかなぁとさらに調べたので、ちょこっとメモしておく。

見つかったコマンドは、『locate』と『find』
locateは作成されたデータベースから指定された名前のファイルを探す。
データベースの更新は1日に1回程度とのこと。
データベースを更新するには

# updatedb
を実行。

find は指定したディレクトリ以下で、指定した名前のファイルを探す。
locateと違い、指定したディレクトリ以下のファイルを全部検索するので動作には時間がかかるのとこと。

なにか探すときは、基本的にlocateを使ってようかなぁ。
見つからなかったり、足りなかったらデータベースの更新して、
再度locateでいいかなぁ

Ubuntu入れてからやってみたこと

ほとんど自分のためのメモ書きになる気がするが一応ブログの形で残しておく。

学校用のノートPCのHDDを250GBのものに取り替えて、windows7professionalとubuntu10.04をインストールした。
windowsの方は学校指定で使うソフトをとりあえず入れただけな感じ。
Ubuntuの方を何が出来るのかなぁとか調べつつちょこちょこいじってみた。

最初に変更したのはOSの起動順序。
PC立ち上げると、UbuntuWindowsのどっちを起動するかを選択する画面が出てくる。
この時にUbuntuがデフォルトで選択されていて、自分で選択してやらないと一定時間後に、
Ubuntuが起動する。
Windowsを起動するためには、その一定時間内にWindowsをわざわざ選択してやらないといけない。
これはさすがに不便なので、デフォルトの選択をWindowsにしたい。
調べてみると、Ubuntu側のブートローダGRUBでなにかいじればいいらしいことがわかり、
/boot/grub/menu.lst
を開いて、なにかしら修正すればいいらしいので、開いてみると空…。
調べても上のを修正する以外の方法がなかなか見つからないので、結局ソフトを入れて対処した。
StartUp-Manager
ブラウザからインストールできるので、これをインストール。
システム > システム設定 > StartUp-Manager を開き、
[起動オプション]タブの[デフォルトのオペレーティングシステム] を Windows7 に変更して解決。
再起動して確認してみると、ちゃんとデフォルトの選択がWindwos7になっていて一安心。

その後はとりあえずエディタ、emacsvimを入れた。
emacsは、研究室のサーバにちょこっと設定をつくってみていたので、
それを取ってきて、install-elispとauto-installが機能するところまでは設定。

zshシェルの設定ファイルもちょこっと書いていたのがあったから取ってきたものの、
それを使うとインストールされていないコマンドを使ったときに、
「コマンドがないよ」って言われるだけになる。
それに比べて、デフォルトのbashだと関連しそうなコマンドを示して、apt-get install **** 
といった具合にインストールコマンド?まで示してくれるのがありがたい。
なのでとりあえずbashのままで…とってきたzshの設定ファイルには当分眠っていてもらうことになりそう…

一応GUI操作でできる設定ツールみたいなのも入れたけど、あんまり使った覚えが無いので特に書かないでおく。

他にも変えたり追加したところはあるけど全部書くと長くなるのでとりあえずここまでにして、
また続きを書くことにする。

Unless文

Ruby文法最速マスターを読んでいて、知らなかったことをちょこっとメモ

Unless文はif文の逆で、指定した条件に偽を返す場合に中身の処理をする。とのこと

…ということは、…


if 条件式
# 処理無し
else
# 処理
end
と、書いていたところは

unless 条件式(上と同じ)
# 処理
end
こうすればよかったのか!!