Hotwireの内部コマンドを試す(UNIX系コマンド編)
一部のコマンドは、コマンドラインシェルの内部コマンドやcoreutilsに含まれる外部コマンドに機能が劣ったり使い勝手が違ったりするのだが、回避する方法はあり、今後のバージョンで改善される可能性もある。
history
履歴を表示する。-cオプションを付けても例外が出るだけで消すことはできない。保存されているファイルは[ホームディレクトリ]/.hotwire/state/history.sqlite。
lsとcd
ファイルとディレクトリのリストをグラフィカルに表示する。-aオプションを付けると、隠しファイル/ディレクトリも出る。ls | filter [絞り込む文字列]
のようにfilterに渡すと、ファイル名からの絞り込みができる。それ以外の属性ではフィルタできない?
リストが出た状態でcdコマンドでディレクトリ移動をすると、リストも移動後のディレクトリのものになる。また、リストの内にディレクトリがある場合、GUIファイルマネージャのようにこれをダブルクリックすることで開くこともできる。ファイルをダブルクリックすると、関連付けされたアプリケーションで開く。リストの項目を右クリックして候補から選択することもできる。
ディレクトリの場合は、ファイルマネージャで開くことができる。ThunarはXfce 4.4のGUIファイルマネージャ。
「cd -」で前のディレクトリ階層に戻ることはできないが、ウィンドウ左下の選択リストから過去にいた階層を選択することで、コマンドを打つことなく簡単に戻ったり進んだりできる。
なお、外部コマンドのlsを実行したい場合は、
sh ls [オプションやファイル/ディレクトリ名など...]
の形で実行する。
rmとゴミ箱
rmで消したファイルは[ホームディレクトリ]/.Trash/以下に移動される。これは[ホームディレクトリ]/.local/share/Trash/の下のものとは別に管理されることに注意。今後[ホームディレクトリ]/.local/share/Trash/に対応されることを期待。デスクトップ環境のゴミ箱では、復元情報を含む.trashinfoファイルが生成されて使用されるため、[ホームディレクトリ]/.Trash/を[ホームディレクトリ]/.local/share/Trash/files/に対するシンボリックリンクにしても、うまくいかない(復元不可)。
別の方法として、デスクトップにゴミ箱のアイコンがあれば、lsの結果からゴミ箱へドラッグ・アンド・ドロップを行うことで、デスクトップ環境のゴミ箱に入れることはできる。
なお、-fなど、オプションの指定はできない。オプションのつもりで付けた文字列はファイル名と解釈され、意図しない動作になる。
mkdir
使い方は/bin/mkdirと似ているが、オプションはなく、付けてもディレクトリ名と解釈されてしまう。例えばmkdir -m 700 test
を実行すると、
- -m
- 700
- test
という3つのディレクトリが作成される。
sh mkdir -m 700 test
とすれば外部コマンドのmkdirが実行され、意図した動作になる。
-mオプションは頻繁には使わなそうだが、存在しない(親)ディレクトリの中にディレクトリを作成する-pは付けたいことがあるかもしれない。しかしその心配はなく、
mkdir a/b/c
を実行すると
sh mkdir -p a/b/c
と同様に、aと、その中のbディレクトリを作成し、その中にcディレクトリを作成してくれるようになっている。
rmdirは内部コマンドにはないため、空のディレクトリを(外部コマンドの)rmdirで消してもゴミ箱には入らない。代わりにrmを使用することを想定しているのかもしれない。
cat
sh echo a | write a.txt sh echo b | write b.txt cat a.txt b.txt | write ab.txt
catで複数のファイルを結合する場合にはwriteに渡す(この後でab.txtの中身を見ると、結合されているのが分かる)。
ファイル内容を見るのにcatを使用することも、外部コマンドのcatと同様にできる。
cat ab.txt
mvとcp
基本的な使い方は同じ*1だが、上書き確認は行わないので注意。mkdir test mv a.txt b.txt test/
この後
mv ab.txt test/a.txt
を実行すると、test/a.txtの内容はab.txtの内容になってしまう。cpで上書きする場合も確認はされない。
また、シェルの展開を利用した
cp file{,.orig}
のような書き方はできない。
cp file file.orig sh cp file{,.orig}
のどちらかで書く。
kill
kill [プロセスID] sh killall [プロセス名]
killは内部コマンドでkillallは外部コマンドだが、どちらも感覚としては普通に使える。-KILLオプションなども付けられる。