タイトル/名前 | 更新者 | 更新日 |
---|---|---|
技術/UNIX/端末やターミナルの文字化け対処(clear,reset,stty sane,tput,ncurses) | msakamoto-sf | 2013-12-31 13:00:24 |
技術/Linux/CentOS/network-scripts | msakamoto-sf | 2013-12-15 23:59:10 |
技術/Linux/RPMコマンドメモ(実践レベル) | msakamoto-sf | 2013-12-15 23:26:54 |
技術/Linux/RPMコマンドメモ(パッケージ作成など) | msakamoto-sf | 2013-12-15 21:12:32 |
技術/Linux/RPMコマンドメモ(入門レベル) | msakamoto-sf | 2013-12-15 21:12:14 |
日記/2013/12/14/たまには昔の自分に甘えても | msakamoto-sf | 2013-12-14 23:49:34 |
技術/Android/LogAndLogLevelTips | msakamoto-sf | 2013-12-04 00:02:43 |
技術/Linux/dpkg,aptコマンドメモ1 | msakamoto-sf | 2013-11-24 23:08:35 |
日記/2013/11/12/2013-11-04-10 高野山・京都のお寺・友人の結婚式参列 | msakamoto-sf | 2013-11-12 18:51:05 |
Java/Tuning/GC | msakamoto-sf | 2013-10-20 20:36:07 |
ちょっと気になりまして、以下の記事に便乗してみました。
戻す方法として
echo ^[c
が紹介されてるわけですが、元記事ではこれを"clear2"にalias設定してまして、これがちょっと気になりました。
「clearコマンドと "echo ^[c" って何が違うの?」
というところですね。で、しかもはてブコメントを見てみますと"reset"コマンドでOK、というのもありました。他にも"stty sane"というのも出てきてます。
ちょっと確認してみます。
いずれも端末の設定や制御に絡んできてます。特にclear/resetのtput(1)というのは、以下で実験しているCentOS6系ではncursesが提供しているコマンドになりますのでドンピシャです(rpm -ql ncurses)。なおCentOS6系のncursesは 5.7 のバージョンになりまして、terminfoは "/etc/terminfo/" 以下ではなく、 "/usr/share/terminfo" 以下にありました(rpm -ql ncurses-base)。
ではtputってなんだろう?というところですが、以下の記事が参考になりそうです。
つまり、本来は端末ごとに制御コードが微妙に異なっていて統一されていないところを、terminfoというデータベースで共通の属性名にmappingされるようにしたことで、そうした端末ごとの細かい差異は気にせず、抽象化された属性名だけで操作できるようになりました、ということですね。多分。
あと参考になりそうなのはこの辺でしょうか。Linuxのncursesなら"terminfo"、BSD系だと"termcap"という名前の場合もあるようです。
どんな属性名で共通化されているか?それについてはterminfo(5)のmanページで確認できます。clear, reset コマンドで使われているのを拾い上げてみますと・・・
$ man 5 termifno Variable Cap-name TCap Code Description clear_screen clear cl clear screen and home cursor (P*) exit_alt_charset_mode rmacs ae end alternate char-acter set (P) meta_off rmm mo turn off meta mode exit_underline_mode rmul ue exit underline mode reset_1string rs1 r1 reset string reset_2string rs2 r2 reset string reset_3string rs3 r3 reset string
詳細は置いておくとして、resetだと上記すべてをtputで使ってますので、なんとなーく「色々不用意にONになっちゃったものをOFFにして、あとリセットできるものはリセットしておく」みたいな心意気を感じ取れますね。
実際の制御コードはどうなっているのでしょうか?CentOS6系でのterminfoを確認してみましょう。今回はCentOS 6.3で、ncurses系は以下のパッケージがインストールされてる状態で実験しています。
$ rpm -qa | grep ncurses | sort ncurses-5.7-3.20090208.el6.x86_64 ncurses-base-5.7-3.20090208.el6.x86_64 ncurses-devel-5.7-3.20090208.el6.x86_64 ncurses-libs-5.7-3.20090208.el6.x86_64 ncurses-static-5.7-3.20090208.el6.x86_64 ncurses-term-5.7-3.20090208.el6.x86_64
まず、今ログイン中の端末の種類を確認します。WindowsのCygwinが提供しているmintty上でsshログインしているためか、"cygwin"であることを確認できました。
$ echo $TERM cygwin
では、これに対応するterminfoファイルを探してみます。といっても/usr/share/terminfo/の下で、端末種類の頭文字でまずディレクトリが分けられてるのですぐに見つかります。
$ ls -l /usr/share/terminfo/c/cygwin -rw-r--r--. 1 root root 1529 Aug 19 2010 /usr/share/terminfo/c/cygwin $ file /usr/share/terminfo/c/cygwin /usr/share/terminfo/c/cygwin: Compiled terminfo entry
"Compiled terminfo entry" と出てしまいまして・・・これだと専用のバイナリファイルになってますので、元々の人間が読める定義ファイルになってないようです・・・。
"/etc/terminfo/"は今回の環境では空っぽでしたので、ちょっと元の定義ファイルがわかりませんね。ncurses系パッケージはフルで入れてますので、ソースRPM見てみないとわからないかもしれません。
・・・が、最新かどうかはわからないのですが、おおよそどんな感じになっているのかは以下のサイトからDLして確認できました。
上のサイトから"terminfo"のりんくをクリックしてtermtypes.ti.gzをDLしたら展開します。termtypes.tiをテキストエディタで開いてみると、"clear"などtputの引数に対応する実際の制御コードの定義が確認できます。
... ansi+erase, clear=\E[H\E[J, ed=\E[J, el=\E[K, ...
ただやっぱりこれが最新かどうかはわからないですし、ソースRPM展開して確認するのもいい加減面倒くさくなってきましたので、straceコマンドで見れるか試してみましょう。straceはプログラムのシステムコールと、もしファイルのI/Oがあればその中身も多少は見れる便利なデバッグツールです。まだ入れてない人は "yum install strace" で入れて下さい。
まずclearコマンドを試してみます。そのまま "strace clear" すると、clearコマンドが出力する制御コードで端末がクリアされてしまってstraceの出力が見れないという情けない状態になりますので、clearコマンドの出力をファイルにリダイレクトします。
※以下、Linuxのシステムコール系の関数の話が何の前提も無く出てきますが、一応コメントは入れますので、なんとなく「terminfoのファイルを読み込んで、cygwinの端末だとあーいう制御コードがclearに割り当てられるんだなー」というのを感じ取ってくれればまずはOKかと。
$ strace clear > clear.dat execve("/usr/bin/clear", ["clear"], [/* 24 vars */]) = 0 (しばらくは実行ファイルを実行する準備部分はスルー) (ここから、cygwin端末に対応するterminfoファイルを開き、中身を読み取ります。) access("/etc/terminfo/c/cygwin", R_OK) = -1 ENOENT (No such file or directory) stat("/usr/share/terminfo", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 access("/usr/share/terminfo/c/cygwin", R_OK) = 0 open("/usr/share/terminfo/c/cygwin", O_RDONLY) = 3 read(3, "\32\1!\0\25\0\17\0}\1\237\2cygwin|ansi emulatio"..., 4097) = 1529 close(3) = 0 (ioctl(1)の第一引数が2=stderrなので、これは・・・なんでしょうかね。標準エラー向けに何かしてるのかな?) ioctl(2, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 ioctl(2, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 ioctl(2, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 ioctl(2, TIOCGWINSZ, {ws_row=30, ws_col=140, ws_xpixel=1120, ws_ypixel=510}) = 0 (これもよくわかりませんが、大筋には影響しないと思うのでスルーします) fstat(1, {st_mode=S_IFREG|0664, st_size=0, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f932a679000 (ここが、write(2)の第一引数=1、つまり標準出力に制御コードを出力しているところになります。 write(1, "\33[H\33[J", 6) = 6 exit_group(0) = ?
実際にclearコマンドの出力をリダイレクトしたデータファイルを覗いてみます。
$ hexdump -C clear.dat 00000000 1b 5b 48 1b 5b 4a |.[H.[J| 00000006
→
1b 5b 48 = ESC [ H = \33[H 1b 5b 4a = ESC [ J = \33[J
となり、write(2)で標準出力に書き出しているものと一緒ですね。
resetはどうでしょうか?
$ strace reset > reset.dat →なんか標準エラーも細工してるようでstraceの出力が崩れたので省略 $ hexdump -C reset.dat (空っぽ) →標準出力は細工してないようなので、標準エラーをファイルにリダイレクトしてみる。 $ reset 2>reset.dat $ hexdump -C reset.dat 00000000 72 65 73 65 74 3a 20 73 74 61 6e 64 61 72 64 20 |reset: standard | 00000010 65 72 72 6f 72 3a 20 49 6e 61 70 70 72 6f 70 72 |error: Inappropr| 00000020 69 61 74 65 20 69 6f 63 74 6c 20 66 6f 72 20 64 |iate ioctl for d| 00000030 65 76 69 63 65 0a 0a |evice..| 00000037 →stat(2)かioctl(2)か何かでファイルディスクリプタの種類を判別しているっぽい・・・。 そういえば、straceって "-o" オプションでログファイルに書き出せるんだった。 $ strace -o reset.log reset $ more reset.log ... ioctl(2, TIOCGWINSZ, {ws_row=30, ws_col=140, ws_xpixel=1120, ws_ypixel=510}) = 0 ioctl(2, SNDCTL_TMR_STOP or TCSETSW, {B38400 -opost isig icanon echo ...}) = 0 write(2, "\33", 1) = 1 write(2, "c", 1) = 1 ## →上のと合わせれば "ESC c" になる! write(2, "\33", 1) = 1 write(2, "]", 1) = 1 write(2, "R", 1) = 1 write(2, "\r", 1) = 1 nanosleep({1, 0}, 0x7fff2074f680) = 0 ioctl(2, SNDCTL_TMR_STOP or TCSETSW, {B38400 opost isig icanon echo ...}) = 0 ...
resetの場合は標準エラーの方に制御コードを送ってる様子を確認できました。しかもその中には、便乗元の記事にある "ESC c" の制御コードも(多分)含まれてるのを確認できました。
ただ、clearもresetも、tput(1)を起動している様子は確認できませんでした。stringsコマンドでバイナリ中の文字列も抜き出してみたんですが、tputs(man 3 curs_terminfo) は見つかったものの、tputは見当たらず。
$ strings /usr/bin/clear ... tputs ... $ strings /usr/bin/reset ... tputs ...
lddで依存関係を見てみますと、ncurses-libsの提供している /lib64/libtinfo.so.5.7 に依存しています。
$ ldd /usr/bin/clear linux-vdso.so.1 => (0x00007fffaddff000) libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f12c5d2d000) libc.so.6 => /lib64/libc.so.6 (0x00007f12c599a000) /lib64/ld-linux-x86-64.so.2 (0x00007f12c5f53000) $ ldd /usr/bin/reset linux-vdso.so.1 => (0x00007fff35bff000) libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007fdcc5130000) libc.so.6 => /lib64/libc.so.6 (0x00007fdcc4d9d000) /lib64/ld-linux-x86-64.so.2 (0x00007fdcc5356000) $ ls -l /lib64/libtinfo.so.5 lrwxrwxrwx. 1 root root 15 Nov 24 18:21 /lib64/libtinfo.so.5 -> libtinfo.so.5.7 $ rpm -qf /lib64/libtinfo.so.5.7 ncurses-libs-5.7-3.20090208.el6.x86_64
ということで、恐らくCentOS6系のclear/resetコマンドは、tputを呼び出す方式ではなく、ncursesに依存してそちらのtputs()関数を呼び出す方式になっていると思われます。
大体気になっていた点で押さえられるところは押さえられた気がしますので、一旦まとめます。
いや~、端末制御コードのエスケープシーケンス一つからここまで話が膨らみまして、大変面白いですね~。
なお、以下に今回実験したCentOS6での各種パッケージバージョン情報を記載します。
$ rpm -qa | grep ncurses | sort ncurses-5.7-3.20090208.el6.x86_64 ncurses-base-5.7-3.20090208.el6.x86_64 ncurses-devel-5.7-3.20090208.el6.x86_64 ncurses-libs-5.7-3.20090208.el6.x86_64 ncurses-static-5.7-3.20090208.el6.x86_64 ncurses-term-5.7-3.20090208.el6.x86_64 $ rpm -qf /usr/bin/clear ncurses-5.7-3.20090208.el6.x86_64 $ rpm -qf /usr/bin/reset ncurses-5.7-3.20090208.el6.x86_64
・・・clearもreestも、ncursesパッケージ提供だったんですね。そりゃ、わざわざtputをexecする必要も無いわけだ・・・。
"/etc/sysconfig/network-scripts/ifcfg-xxxx" を始めとするネットワーク設定について。
cursesを使ってGUI的なUIでインターフェイスやDNSの設定が可能。
(CentOS6の場合)
"/etc/sysconfig/network-scripts/" 以下のファイルはinitscriptsパッケージに含まれている。このパッケージは他にも"/etc/sysconfig/" 以下のファイルも提供している。
そのため、initscriptsパッケージに sysconfig 以下のファイルの書式説明一式が集約されたドキュメントファイルが同梱されていて、manページではなくそちらを参照すると良い。
$ rpm -ql initscripts | grep sysconfig.txt /usr/share/doc/initscripts-9.03.31/sysconfig.txt $ less /usr/share/doc/initscripts-9.03.31/sysconfig.txt ... /etc/sysconfig/network-scripts/ifcfg-<interface-name> and /etc/sysconfig/network-scripts/ifcfg-<interface-name>:<alias-name>: The first defines an interface, and the second contains ...
CentOSの公式ドキュメントも参考になるが、ネットワーク設定が済んでいない状態だとオンラインドキュメント自体にアクセス出来ない場合もある。
パッケージに含まれるオフラインドキュメントの場所を知っておいて損はないだろう。
2009年11月現在、メジャーなLinuxディストリビューションではyumやaptが整備されているとはいえ、ある程度はRPMを触れないと楽しくないので、自分用にメモ。
技術/Linux/RPMコマンドメモ(入門レベル) でも簡単にまとめているが、もう少し詳細にまとめておく。
CentOS5.2, RPM 4.4.2 で動作確認しており、本文も同左のmanページを元にしている。
RPMパッケージを作成する時の注意点とか、RPMで"/"(root)ディレクトリを変更してRPMの使うDBの構築やパッケージのインストールを行う場合の自分用メモ。
なお動作検証は CentOS 5.2, RPM 4.4.2 で行っている。
$ whereis perl perl: /usr/bin/perl /usr/share/man/man1/perl.1.gz $ which perl /usr/bin/perl
$ rpm -qf /usr/bin/perl perl-5.8.5-8
$ rpm -qi perl Name : perl Relocations: (not relocateable) Version : 5.8.5 Vendor:.... ...
$ rpm -ql perl /usr/bin/a2p /usr/bin/c2ph /usr/bin/cpan /usr/bin/dprofpp ...
RPMファイルについて調査したい場合は次のようにする。
$ rpm -qpi ****.rpm
$ rpm -qpl ****.rpm
その他、依存性を無視して -i, -U を使用したい場合、--nodeps や --force などが使用できる。
良いよね?
いや決して過去の自分のoutputに甘えて心を慰めるとかそんなワケ無いから!単なる承認欲求に基づく「俺ってこんなに苦労してたんだぜ。スゲーだろ?|д゚)チラッ」というだけだから!
はてダ使ってた時にわざわざ "鬱エントリ" つけたのもあるので注意。(じゃぁ書くなよと怒られそう)
http://d.hatena.ne.jp/msakamoto-sf/20080908
http://d.hatena.ne.jp/msakamoto-sf/20080911/1221139291
あ~、あの地獄(主観)の頃のか。あれは、自分が自分の中で作り上げた地獄の中で苦しんでただけだった。
そう、今は言えるけれど、渦中に居た当時はそこまで客観視できるわけがなかった。
http://d.hatena.ne.jp/msakamoto-sf/20091017/1255790996
"開発現場で一度は耳にする「何で聞いてくれなかったの!?」なんて台詞は二度と聞きたく無い。 - ぐらめぬ・ぜぷつぇんのはてダ"
これは、転職した先で「やっちまった」話。今だったら、どうだろう?
http://www.glamenv-septzen.net/view/608
"日記/2010/03/07/「銀の弾丸」が無くても狼男を倒せる世界へ - Glamenv-Septzen.net"
冒頭はまじめにTDDとかアジャイルの話してますが、本題はその後という。
2010年の1月から無職になり、3ヶ月くらいだらだらとして、ようやくエンジンがかかり始めた頃のエントリー。仏教に触れたこともあり、「何もしない時間を過ごす」ことを試してみようとしたが、結果としては「自分は何もすることが無いと、何をやり始めるのだろうか?」という人生の根源に関わるテーマに対して一つの答えを見つけることが出来た超重要イベントの1年間だった。
http://d.hatena.ne.jp/msakamoto-sf/20100815/1281808194
"派遣PGの感じる「怒り」をデコンパイルしてみた - ぐらめぬ・ぜぷつぇんのはてダ"
今でも時々はてブされる記事(ドヤァ・・・)。それだけ、辛い思いをしているエンジニアは多いのだろう。
辛い世界を作り上げているのは自分の心の中で、世間は自分が求めるほど美しくなくて、美しくないのが当たり前で、それでもナントカ世界は回ってる。
(ンなこと今更言われなくてもわかってるよ、というのも、今でも自分自身例外とはいえない、人間の一面ではあります。)
環境を動かすのはとても大変でエネルギーは要るし、ロジックと熱情の両方を長期間維持して人を感化して、やり逃げも出来ない。
だからまずは自分のものの見方を変えたほうが安上がりなのだけれど、それも精神的な負担が半端無い。真面目な人は特に。
なぜ自分はこんなに辛いのか?どうあれば、辛くなくなるのか?周りに絶望しているが、では周りがどうあれば自分は幸せなのか?自分が感じるやるせなさ、絶望、無力感、冷めた感情は、こころとして感じられる一番表層の部分なので、対症療法だけでなく、その裏側に潜り、条件反射で絶え間なく湧き上がる情動と感情の渦に潜って、それが感じられなくなるくらいの深さまでいって、自分の根っこを見つけ出す(ドヤァ)。
http://www.glamenv-septzen.net/view/883
"日記/2010/12/31/2010年のまとめ - Glamenv-Septzen.net"
仕事として社会還元の成果はゼロだった1年。
しかし、純粋にアウトプットの「質」で言えば、30年を越えたこれまでの人生中、今のところ2010年が最大値。
次点が現職に就いた 2011年~2012年の激動の2年。
正直、もう1度あの2010年を繰り返したとしても、同じだけの質と量をアウトプット出来るかまるで自信がない。
とはいえ、もう3年が経ち、考え方も興味も変化している。
2010年の自分に甘えることはできるし、2010年の成果に対してドヤ顔することは今でも出来るが、せっかくエキサイティングな現場に居るので、今の現場ならではの、さらにエキサイティングな作品や成果を築きたいところであります!
・・・ただ、腰が重いのに諦めが悪くて、「時間ないし~」とずるずると延ばした挙句、賞味期限が切れた頃に一歩一歩ヒタヒタとスニーキングして、時代遅れになったころに「獲ったど~~!!」とドヤ顔するのが自分の典型的な・・・というか2010年の成果の内訳なので、この特性をどうやって会社組織に活かすのが目下、頭の使いドコロであります!
android.util.Logでログレベルの調整が分かりづらかったのでメモ。
公開されている資料をベースに、自分がつまずいた箇所を抜書きしました。
参考:
Debian, Ubuntu系のdpkgとaptコマンドのメモ。Ubuntu10.04 LTSにて確認。
参考:
・インストール済みのパッケージ一覧。
$ dpkg -l
・あるファイルを含んでいるパッケージはどれか。
$ which python /usr/bin/python $ dpkg -S /usr/bin/python python-minimal: /usr/bin/python
フルパスでなくても良い。
$ dpkg -S stdio.h libc6-dev: /usr/include/bits/stdio.h libstdc++6-4.4-dev: /usr/include/c++/4.4/tr1/stdio.h libc6-dev: /usr/include/stdio.h perl: /usr/lib/perl/5.10.1/CORE/nostdio.h
・そのパッケージの情報を表示する。
$ dpkg -s python-minimal Package: python-minimal Essential: yes Status: install ok installed ...
・そのパッケージが提供しているファイルの一覧を表示する。
$ dpkg -L python-minimal /. /usr /usr/bin /usr/bin/pycompile /usr/bin/pyclean ...
・".deb"ファイルの情報を表示する。
$ cd /var/cache/apt/archives $ dpkg -I php5-cli_5.3.2-1ubuntu4.9_i386.deb # 大文字の"I" new debian package, version 2.0. size 2817008 bytes: control archive= 1530 bytes. 1626 bytes, 26 lines control 181 bytes, 3 lines md5sums 307 bytes, 19 lines * postinst #!/bin/sh 166 bytes, 18 lines * postrm #!/bin/sh 133 bytes, 11 lines * prerm #!/bin/sh Package: php5-cli Source: php5 Version: 5.3.2-1ubuntu4.9 Architecture: i386 ...
小文字の"-l"(エル)だとインストールしたパッケージの一覧になってしまうので注意。
・".deb"ファイルの提供するファイル一覧を表示する。
$ dpkg -c php5-cli_5.3.2-1ubuntu4.9_i386.deb drwxr-xr-x root/root 0 2011-05-02 18:00 ./ drwxr-xr-x root/root 0 2011-05-02 17:58 ./etc/ drwxr-xr-x root/root 0 2011-05-02 17:58 ./etc/php5/ drwxr-xr-x root/root 0 2011-05-02 18:00 ./etc/php5/cli/ drwxr-xr-x root/root 0 2011-05-02 17:59 ./usr/ drwxr-xr-x root/root 0 2011-05-02 18:00 ./usr/bin/ -rwxr-xr-x root/root 7467156 2011-05-02 18:00 ./usr/bin/php5 drwxr-xr-x root/root 0 2011-05-02 17:59 ./usr/share/ drwxr-xr-x root/root 0 2011-05-02 17:58 ./usr/share/man/ drwxr-xr-x root/root 0 2011-05-02 18:00 ./usr/share/man/man1/ -rw-r--r-- root/root 3229 2011-05-02 17:59 ./usr/share/man/man1/php5.1.gz drwxr-xr-x root/root 0 2011-05-02 17:59 ./usr/share/lintian/ drwxr-xr-x root/root 0 2011-05-02 17:59 ./usr/share/lintian/overrides/ -rw-r--r-- root/root 318 2011-05-02 17:59 ./usr/share/lintian/overrides/php5-cli drwxr-xr-x root/root 0 2011-05-02 18:00 ./usr/share/doc/ drwxr-xr-x root/root 0 2011-05-02 17:59 ./usr/lib/ drwxr-xr-x root/root 0 2011-05-02 17:59 ./usr/lib/php5/ drwxr-xr-x root/root 0 2011-05-02 17:59 ./usr/lib/php5/20090626+lfs/ lrwxrwxrwx root/root 0 2011-05-02 18:00 ./etc/php5/cli/conf.d -> ../conf.d lrwxrwxrwx root/root 0 2011-05-02 18:00 ./usr/share/doc/php5-cli -> php5-common
・設定ファイル、ディレクトリなど
/etc/dpkg/dpkg.cfg : 設定ファイル /var/lib/dpkg/available : 利用可能なパッケージ /var/log/dpkg.log : ログファイル
・利用可能なパッケージを探す。
$ apt-cache search ^php5 dwoo - PHP5 template engine libgv-php5 - Php5 bindings for graphviz php5-adodb - Extension optimising the ADOdb database abstraction library php5-auth-pam - A PHP5 extension for PAM authentication ...
・利用可能なパッケージの情報を取得する。
$ apt-cache show php-pear Package: php-pear Priority: optional Section: php Installed-Size: 2600 Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> Original-Maintainer: Debian PHP Maintainers <pkg-php-maint@lists.alioth.debian.org> Architecture: all Source: php5 Version: 5.3.2-1ubuntu4.9 ...
・パッケージの「仮」インストールを行なってみる("-s" or "--dry-run"オプション)。
$ sudo apt-get install --dry-run php5-cli Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: php5-common Suggested packages: php-pear php5-suhosin The following NEW packages will be installed: php5-cli php5-common 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst php5-common (5.3.2-1ubuntu4.9 Ubuntu:10.04/lucid-updates) Inst php5-cli (5.3.2-1ubuntu4.9 Ubuntu:10.04/lucid-updates) Conf php5-common (5.3.2-1ubuntu4.9 Ubuntu:10.04/lucid-updates) Conf php5-cli (5.3.2-1ubuntu4.9 Ubuntu:10.04/lucid-updates)
・パッケージをダウンロードするだけで、インストールはしない("-d", "--download-only")。
$ sudo apt-get install -d php5-cli Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: php5-common Suggested packages: php-pear php5-suhosin The following NEW packages will be installed: php5-cli php5-common 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Need to get 3,363kB of archives. After this operation, 8,610kB of additional disk space will be used. Do you want to continue [Y/n]? Get:1 http://us.archive.ubuntu.com/ubuntu/ lucid-updates/main php5-common 5.3.2-1ubuntu4.9 [546kB] Get:2 http://us.archive.ubuntu.com/ubuntu/ lucid-updates/main php5-cli 5.3.2-1ubuntu4.9 [2,817kB] Fetched 3,363kB in 7s (429kB/s) Download complete and in download only mode ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <- インストールまでは実行していない。
デフォルトでは"/var/cache/apt/archives/"に保存される。
・(まだインストールしていないパッケージも含めて)あるファイルを含むパッケージを探す。
事前に"apt-file"パッケージをインストールしておくこと。
$ dpkg -l | grep -i ruby | wc -l 0 $ apt-file search /usr/bin/ruby libglade2-ruby1.8: /usr/bin/ruby-glade-create-template libruby1.8-dbg: /usr/lib/debug/usr/bin/ruby1.8 libruby1.9: /usr/lib/debug/usr/bin/ruby1.9 libruby1.9.1-dbg: /usr/lib/debug/usr/bin/ruby1.9.1 ruby: /usr/bin/ruby ruby-prof: /usr/bin/ruby-prof ruby1.8: /usr/bin/ruby1.8 ruby1.9: /usr/bin/ruby1.9 ruby1.9.1: /usr/bin/ruby1.9.1 sloccount: /usr/bin/ruby_count
・ソースコードのURIを表示する。
$ apt-get source --print-uris libpng Reading package lists... Done Building dependency tree Reading state information... Done Need to get 693kB of source archives. 'http://us.archive.ubuntu.com/ubuntu/pool/main/libp/libpng/libpng_1.2.42-1ubuntu2.2.dsc' \ libpng_1.2.42-1ubuntu2.2.dsc 1939 MD5Sum:77bdd4a86079d816f208d23e6a56d8e8 'http://us.archive.ubuntu.com/ubuntu/pool/main/libp/libpng/libpng_1.2.42.orig.tar.bz2' \ libpng_1.2.42.orig.tar.bz2 670811 MD5Sum:9a5cbe9798927fdf528f3186a8840ebe 'http://us.archive.ubuntu.com/ubuntu/pool/main/libp/libpng/libpng_1.2.42-1ubuntu2.2.debian.tar.bz2' \ libpng_1.2.42-1ubuntu2.2.debian.tar.bz2 20532 MD5Sum:f0eb3be297e03dd258d73c36bb3dff8d
・ソースコードをカレントディレクトリにダウンロードする。
$ apt-get source --download-only libpng Reading package lists... Done Building dependency tree Reading state information... Done Need to get 693kB of source archives. Get:1 http://us.archive.ubuntu.com/ubuntu/ lucid-updates/main libpng 1.2.42-1ubuntu2.2 (dsc) [1,939B] Get:2 http://us.archive.ubuntu.com/ubuntu/ lucid-updates/main libpng 1.2.42-1ubuntu2.2 (tar) [671kB] Get:3 http://us.archive.ubuntu.com/ubuntu/ lucid-updates/main libpng 1.2.42-1ubuntu2.2 (diff) [20.5kB] Fetched 693kB in 5s (125kB/s) Download complete and in download only mode
・設定ファイル・ディレクトリなど
/etc/apt/sources.list : リポジトリのリスト /etc/apt/apt.conf : 設定ファイル /var/cache/apt/archives/ : ダウンロードしたパッケージの保存先
$ apt-file search xxxxx
→ ファイル名をもとに、そのファイルを提供しているパッケージを検索してくれる。
11/04 - 10にかけて、高野山参拝・京都のお寺参拝・友人の結婚式参列をしてきました。
11/01-03の社内研修での合宿で、なぜか風邪をひいてしまったようで、体調不良を薬で抑えこんで巡ってきました。
GC(Garbage Collection)のチューニング関連のメモ
日本語資料
Java5 - 6での基本
Java6 - 7での基本と、Java7になって本格的に導入されたG1(Garbage First) GCの解説
G1GCのOracle本家ドキュメント