UNIX/Linuxの部屋 コマンド:tr


※空白区切りで AND 検索 (例:「ファイル 削除」)

キーワード tr:   28 件ヒットしました。


コマンド
astrolog 占星術のプログラムらしい
cdcontrol CDプレイヤー
f77 Fortranコンパイラ
kbdcontrol キーボードの種類を決める
listres ウィジェットリソースのリストを表示
strings ファイルから文字列と思われる部分を探して表示する。
strip 実行ファイルからリロケート情報とシンボルテーブルを削除する。
tr 文字の置換を行う
traceroute ネットワークがどのように接続されているか表示する
tree ファイル・ディレクトリをツリー形式で表示する
truss プログラム中のシステムコール呼び出し部分をトレース
xsetroot ルートウィンドウに白黒の画像を張り付ける。

読み方
ditroff (UNIXコマンド) [でぃとろふ] [でぃー・あい・てぃー・ろふ]
troff (UNIXコマンド) [てぃー・ろふ]

設定ファイル
~/.inputrc readline 設定ファイル
~/.netrc ftp 用アカウント情報ファイル
~/.xinitrc X Window System 起動時に実行されるスクリプト

環境変数
DISC cdcontrol が参照する CD のデバイス名

Cシェル変数
ignoreeof Ctrl-D でログアウトしないようにする。

関数
strcat 文字列を連結する
strchr
strcmp 文字列を比較する。
strrchr
strlen
strsep 文字列を区切り文字で分割する
strstr
tcgetattr
tcsetattr

コマンド astrolog 占星術のプログラムらしい

コマンド cdcontrol CDプレイヤー

おそらく FreeBSD にしかないコマンド。CD ドライブを操作できる。

-f dev CD のデバイス名を指定する。
デバイス名は wcd0、cd0、mcd0 など。例えば CD ドライブのデバイスが wcd0 の場合、-f /dev/wcd0 でも -f wcd0 でもよい。
% chmod 666 /dev/wcd0
が必要かも。環境変数 DISC に CD のデバイス名を指定しておくと、-f オプションでいちいちデバイス名を指定する必要がなくなる。
命令
play トラック 指定したトラックから演奏を開始。トラックを省略するとトラック 1 から演奏する
pause 演奏を中断する
stop 演奏を停止する
resume 演奏を再開する
info CDの演奏時間などの情報を表示
volume [0-255] [0-255] 左右のボリュームを設定。ボリュームは0-255で指定
volume mute ボリュームを0にする
volume mono モノラルで出力
volume stereo ステレオで出力
volume left 左チャンネルだけ出力
volume right 右チャンネルだけ出力
eject CD をイジェクトする
引数で命令を書いてもいいし (cdcontrol play 4 など)、引数なしで起動すると対話モードに入るので、そこで命令を書いてもいい。

コマンド f77 Fortranコンパイラ

コマンド kbdcontrol キーボードの種類を決める

コンソールでのキーボードのタイプを決める。普通は /etc/rc.conf に書いた定義を元に、ブート時に /etc/rc.local でキーボードタイプがセットされる。手動で設定したい場合は
% kbdcontrol -l /usr/share/sysconf/keymaps/jp.106x
などとする (一般ユーザでも実行できる)。

この設定は、X Window System 上には反映されない。X のキーボードマップを設定するには、XF86Setup コマンドを使うか、直接 /etc/XF86Config を書き換えること。

コマンド listres ウィジェットリソースのリストを表示

はっきり言って、何のためのコマンドなのかわかりまへん。

コマンド strings ファイルから文字列と思われる部分を探して表示する。

それって何の役に立つんだ、と思うかもしれないが、
  • ソースやマニュアルのないプログラムのオプションを探す
  • ソースやマニュアルのないプログラムのバージョンを調べる
などの用途がある。例えば bind (実行ファイル名は named) のバージョンは、オンラインマニュアルに記述されておらず、-v や --version などのオプションも存在しない。そういうときは
% strings /usr/sbin/named | grep 'named [0-9]'
@(#)named 4.9.7-T1B Wed Jul 22 06:46:59 GMT 1998 ....
named 4.9.7-T1B Wed Jul 22 06:46:59 GMT 1998
などと、バイナリファイルから直接文字列を拾い出すことができる。

-n num 表示する文字列の最低限の長さを指定する。
例えば -n 10なら10文字以上の文字列を拾い出して表示する。デフォルトは4。
-f 拾い出した文字列とともに、ファイル名も表示する。
例えば、どのコマンドかはわからないが `load average' という文字列を含むコマンドを調べたいときは
% strings -f /usr/bin/* | grep -i 'load average'
/usr/bin/top:load averages
/usr/bin/uptime:, no load average information available
/usr/bin/uptime:, load averages:
/usr/bin/w:, no load average information available
/usr/bin/w:, load averages:
とすればよい。-f オプションを付けないと、どのコマンドに含まれている文字列なのかが表示されない。

また、バイナリデータなのかバイナリプログラムなのかわからない、得体の知れないファイルの正体を調べるときにも使われる。file コマンドも併用すべし。

バイナリファイルであっても、テキストファイルのように grep したい場合は、grep -a または grep --text を使うとよいかもしれない。
>> Linuxオンラインマニュアル(man) Linux strings(1)
>> FreeBSDオンラインマニュアル(man) FreeBSD strings(1)
>> Solaris10オンラインマニュアル(man) Solaris10 strings(1)

コマンド strip 実行ファイルからリロケート情報とシンボルテーブルを削除する。

デバッグ用のデータを削除することで、実行ファイルのサイズを減少させることができる。実行形式が strip されているかどうか (=シンボルテーブルが付属しているかどうか) は、file コマンドで調べることができる。
% ls -l a.out
-rwxrwxr-x 1 user user 97583 Apr 24 22:23 a.out
⇒ サイズは 97KB
% file a.out
a.out: FreeBSD/i386 compact demand paged dynamically linked executable not stripped
⇒ not strippedとあるので、シンボルテーブルが付属していることがわかる
% strip a.out
⇒ シンボルテーブルを削除
% ls -l a.out
-rwxrwxr-x 1 user user 32768 Apr 24 22:23 a.out
⇒ サイズが約 1/3 に減少
% file a.out
a.out: FreeBSD/i386 compact demand paged dynamically linked executable
⇒ not stripped という表示がなくなった
実行ファイルのサイズを減らしたいなら、gzexe を使う手もある。
>> FreeBSDオンラインマニュアル(man) FreeBSD strip(1)
>> Linuxオンラインマニュアル(man) Linux strip(1)

コマンド tr 文字の置換を行う

最終更新


tr コマンドは、文字列の置換や削除を行うコマンドである。UNIX・Linux いずれも利用可能なコマンドである。

ファイル sample.txt の 'a' を 'b' に置換するには、
% tr a b < sample.txt
とする。また、
% tr abc def < sample.txt
は、'a' を 'd' に、'b' を 'e' に、'c' を 'f' に置換して表示する。'abc' を 'def' に置換するのではないことに注意。

以下のように a-z などと範囲指定することもできる。
% tr 'a-z' 'A-Z' < file
⇒ 小文字を大文字に変える
% tr 'A-Za-z' 'a-zA-Z' < file
⇒ 小文字を大文字に、大文字を小文字に変換する
% tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ < file
⇒ 小文字を大文字に変換する。このように範囲指定せず、全文字を羅列してもよい。

`\ddd' という形式は、8進数のキャラクタコードを表す。例えば Mac のファイルは改行コードが 0x0D (8進で 015) だが、これを UNIX の改行コード 0x0A (8進で 012) に変換するには、
% tr '\015' '\012' < sample.mac > sample.unix
とすればよい。`\' がシェルに解釈されないように '' で囲むか、重ねて \\ と書くこと。
% tr '\015' '\012' (OK)
% tr \\015' \\012 (OK)
% tr \015 \012 (ダメ)
なお、\r・\n・\t・\b などのコントロールコードを記述することもできる。

tr コマンドのオプション
-d または --delete オプションを付けると、文字を削除することができる。
Windows・DOS の改行コード 0x0D 0x0A を 0x0A に変換するには、
% tr -d '\r' < sample.dos > sample.unix
と書くことができる (改行コード以外の場所に 0x0D が現われない場合)。なお、これは
% tr -d '\015' < sample.dos > sample.unix
と等価である。

-c は、「〜以外」を表す。
例えば
% tr -dc 0-9 < /dev/urandom | fold -w 20 | head -1
は、/dev/urandom から 0-9 以外を削除 (=0-9 のみ残す) する。この行全体では20個のランダムな数字を表示する。

-s または --squeeze-repeats オプションを付けると、連続する文字を 1つの文字にまとめる。
% tr -s ' ' < file
→ 連続する空白をひとつにまとめる
% tr -s '\n' < file
→ 連続する改行をひとつにまとめる (=空行削除の効果がある)

1文字でなく、文字列の置換を行いたいなら、sed や perl を使うこと。また、perl だと強力な正規表現が使えるので、tr でできることでも、全て perl でやってしまうのもよいかもしれない。
>> Solaris10オンラインマニュアル(man) Solaris10 tr(1)
>> FreeBSDオンラインマニュアル(man) FreeBSD tr(1)
>> Linuxオンラインマニュアル(man) Linux tr(1)

コマンド traceroute ネットワークがどのように接続されているか表示する

引数にホスト名や IP アドレスを指定すると、対象ホストまでのルートを調べて表示する。
% traceroute www.jp.freebsd.org
traceroute to www.jp.freebsd.org (211.14.6.xxx), 64 hops max, 40 byte packets
 1  192.168.10.1 (192.168.10.1)  2.350 ms  1.478 ms  1.334 ms
 2  fnbnifxxx.asahi-net.or.jp (211.13.148.xxx)  10.609 ms  3.868 ms  4.364 ms
 3  fnbnip-gexxx.asahi-net.or.jp (211.13.148.xxx)  5.701 ms  4.496 ms  4.971 ms
 4  tkybi1-vxxx.asahi-net.or.jp (202.224.33.xxx)  10.987 ms  9.615 ms  9.447 ms
 5  kddnixxx.asahi-net.or.jp (202.224.32.xxx)  10.926 ms  9.671 ms  9.439 ms
 6  AS9607-xxx.ix.jpix.ad.jp (210.171.224.xxx)  10.889 ms  9.854 ms  10.633 ms
 7  ethernet1-xxx.core03.colo01.bbtower.ad.jp (211.14.3.xxx)  11.117 ms  10.251 ms  10.055 ms
 8  GigabitEthernet0-xxx.edge15.colo01.bbtower.ad.jp (203.141.63.xxx)  11.791 ms  10.740 ms  10.827 ms
 9  FreeBSD.demarc.colo01.bbtower.ad.jp (211.14.4.xxx)  11.273 ms  10.272 ms  10.532 ms
10  updraftxxx.jp.freebsd.org (211.14.6.xxx)  11.131 ms  9.600 ms  10.599 ms

解説
ネットワーク上で送受信されるパケットのヘッダには、TTL というフィールドが存在する。TTL とは Time To Live の略で、そのパケットが「ネットワークで生存できる時間」を表している。TTL はパケットを生成したホストが決定する。

パケットがルータを 1つ通過するたびに TTL の値は 1 だけ引かれていき、TTL が 0 になったら、その時点でパケットを破棄し、生成元のホストに「うちでパケットを破棄しました」という意味の ICMP TIME EXCEEDED というパケットを返す。

traceroute を実行すると、対象のホストの向けて UDP パケットを送信する。一番最初のパケットは、TTL に 1 をセットする。すると、隣接するルータから ICMP TIME EXCEEDED が届くことになる。次に TTL を 2 にして UDP パケットを送信し、その次のルータから ICMP TIME EXCEEDED を受けとる。ICMP TIME EXCEEDED には、どのルータでパケットが破棄されたかという IP アドレスが記録されているので、1つずつ TTL を増やしたパケットを送信すれば、結果としてパケットが通過した経路がわかる。

TTL をひとつずつあげていくと、いつかは UDP パケットが対象のホストに届く。traceroute が送信する UDP パケットはポート番号 33434〜33499 あたりであるが、このポートは大抵の場合は誰も使っていないため、対象ホストから ICMP Port Unreachable というパケットが返される。この ICMP が届けば対象ホストに到達したことがわかるわけだ。万が一 traceroute が使用するポート番号を対象ホストが本当に使用していたら、うまく動作しないと思われる。

TTL は規格上は文字通り「生存可能時間」を表すことになっている。1 つのゲートウェイの通過に 3 秒かかったら、そのゲートウェイでは TTL を -3 しなければならない。しかし現実には秒数に関係なく TTL は -1 される。

traceroute は同じ TTL で UDP データグラムを 3つ送信する。よって、上記の実行例のように
4 tkybi1-vxxx.asahi-net.or.jp (202.224.33.xxx) 10.987 ms 9.615 ms 9.447 ms
と 3パケット分の往復時間が記録されるわけである。

もし ICMP TIME EXCEEDED が返ってこなかった場合は、
6 AS9607-xxx.ix.jpix.ad.jp (210.171.224.xxx) 10.889 ms 9.854 ms 10.633 ms
7 * * *
8 GigabitEthernet0-xxx.edge15.colo01.bbtower.ad.jp (203.141.63.xxx) 11.791 ms 10.740 ms 10.827 ms
とアスタリスクが表示される (3回とも返ってこなかったのでアスタリスクが 3つある)。

失敗例
うまくいかない例も紹介しよう。以下は www.yahoo.co.jp に traceroute した例である。
% traceroute www.yahoo.co.jp
traceroute: Warning: www.yahoo.co.jp has multiple addresses; using 210.81.150.5
traceroute to www.yahoo.co.jp (210.81.150.5), 64 hops max, 40 byte packets
 1  192.168.10.1 (192.168.10.1)  4.380 ms  1.834 ms  1.765 ms
 2  fnbnifxxx.asahi-net.or.jp (211.13.148.xxx)  6.701 ms  5.574 ms  4.869 ms
 3  fnbnip-gexxx.asahi-net.or.jp (211.13.148.xxx)  8.540 ms  6.278 ms  6.345 ms
 4  tkybi1-vxxx.asahi-net.or.jp (202.224.33.xxx)  12.398 ms  12.175 ms  14.541 ms
 5  tkynixxx.asahi-net.or.jp (202.224.32.xxx)  12.803 ms  14.620 ms  10.159 ms
 6  asxxx.nspixp2.wide.ad.jp (202.249.2.xxx)  13.070 ms  10.219 ms  14.613 ms
 7  61.204.214.xxx.bb.t.pwd.ne.jp (61.204.214.xxx)  17.989 ms  11.716 ms  11.519 ms
 8  210.141.225.xxx (210.141.225.xxx)  103.054 ms  13.453 ms  11.172 ms
 9  0.so-xxx-0-0.GW2.TKO6.Alter.Net (210.80.4.xxx)  14.697 ms  11.934 ms  11.025 ms
10  yahoo-jp-gw.aspac.customer.alter.net (210.81.5.xxx)  12.262 ms  15.934 ms  19.889 ms
11  210.81.152.26 (210.81.152.26)  13.477 ms  11.983 ms  11.975 ms
12  * * *
13  * * *
14  * 210.81.150.5 (210.81.150.5)  14.156 ms !X *
15  * * *
16  * * 210.81.150.5 (210.81.150.5)  12.449 ms !X
17  * * *
(略。この間は「*」か210.81.150.5 からの !X のいずれか)
64  * * *
www.yahoo.co.jp に到達できないまま、最大ホップである 64 に到達したため、traceroute は終了してしまった。ホップ 14 や 16 で www.yahoo.co.jp からの応答があるのに traceroute はその時点で終了していないことに注意。ホップ 14 は、ひとつめの結果が「*」、2つめの結果が「210.81.150.5 14.156 ms !X」、3つめの結果が「*」となっている。traceroute は何かしらの異常があった場合、時間の後に「!注釈」というメッセージを表示する。主要な注釈を以下に示す。
! 応答の TTL が 1以下。TTL が不正な ICMP TIME EXCEEDED が返されたということ
!N ネットワーク到達不能 (Network Unreachable: ICMP type3 code0)
!H ホスト到達不能 (Host Unreachable: ICMP type3 code1)
!P プロトコル到達不能 (Protocol Unreachable: ICMP type3 code2)
!S ソースルーティング失敗 (Source Route Failed: ICMP type3 code5)
!F-[MTU値] フラグメンテーションが必要 (Fragmentation Needed and Don't Fragment was Set: ICMP type3 code4)
!X 管理上、通信が禁止されている (Communication Administratively Prohibited: ICMP type3 code13 (code9 かも))
!V ホスト順序違反 (Host Precedence Violation: ICMP type3 code14)
!C 順序カットオフ発生 (Precedence cutoff in effect: ICMP type3 code15)
![コード番号] ICMP type3 code[コード番号] により到達不能 (違うかも)
つまり www.yahoo.co.jp は ICMP type3 code13 を送り返すことで「その通信は管理上禁止している」と通知してきたわけだ。なぜ「*」だったり「!X」だったりするのかはわからない。

オプション
-S パケットのロス率 (何%のパケットが到着しなかったか) を表示する
-w [秒数] UDP パケットの返信を待つ秒数。デフォルトは 5
-q [パケット数] ホップあたりに送信する UDP パケットの数。デフォルトは 3
-m [最大 TTL] 最大の TTL を指定する。デフォルトは 64。小さ過ぎると対象ホストに到達できない
-f [初期 TTL] 最初に送信する TTL を指定する。デフォルトは 1。例えば -f 2 と指定すると、隣接するルータをスキップすることになる
-I UDP でなく、Windows の tracert のように ICMP echo を送信する

Windows では似たようなコマンドが tracert という名前で用意されている。ただし Windows の tracert は UDP でなく ICMP echo を送信することに注意。
>> FreeBSDオンラインマニュアル(man) FreeBSD traceroute(8)

コマンド tree ファイル・ディレクトリをツリー形式で表示する

tree コマンドを使うと、ファイル・ディレクトリをツリー形式で表示することができる。


tree コマンドの基本的な使い方
tree コマンドの引数にディレクトリを渡すことで、下記のようにファイル・ディレクトリのツリー表示を行う。
% tree /usr
/usr/
|-- X11R6
| |-- bin
| | |-- ccmakedep
| | |-- (略)
| | |-- xcursor-config
| | `-- xmkmf
| |-- etc
| | |-- fonts
| | | `-- fonts.dtd
| | `-- rc.d
(略)
12405 directories, 70185 files
下記のように、複数のディレクトリを指定してもよい。
% tree /bin /usr/bin
引数なしで実行した場合は、カレントディレクトリ以下をツリー表示する。

tree コマンドのオプション: 出力対象指定系
  • -a オプション: ドットから始まるファイル (ドットファイル) も出力対象とする。
  • -d オプション: ディレクトリのみ出力対象とする。
  • -L オプション: 何階層目までディレクトリを降りるかを指定する
% tree -L 1 /usr
⇒ -L オプションで、1階層目までしか降りないよう指定
/usr/
|-- X11R6
|-- bin
|-- compat
(略)
|-- share
|-- src
`-- sup

tree コマンドのオプション: 表示系
  • -f オプション: フルパスで表示する
% tree -f /
/
|-- /bin
| |-- /bin/alsaunmute
| |-- /bin/arch
| |-- /bin/awk -> gawk
| |-- /bin/basename
(略)
  • -i オプション: 罫線を表示しない
-f オプションと組み合わせると、find コマンドのような表示となる。
% tree -fi
/
/bin
/bin/alsaunmute
/bin/arch
/bin/awk -> gawk
/bin/basename

tree コマンドのオプション: ファイル情報系
  • -s オプション: ファイル・ディレクトリのサイズを表示する。
% tree -s /
/
|-- [ 4096] bin
| |-- [ 123] alsaunmute
| |-- [ 27776] arch
| |-- [ 4] awk -> gawk
| |-- [ 26264] basename
  • -h オプション: -s と同様にファイルサイズを表示するが、12K・23M・34G などとわかりやすい表示にする
% tree -h /
/
|-- [4.0K] bin
| |-- [ 123] alsaunmute
| |-- [ 27K] arch
| |-- [ 4] awk -> gawk
| |-- [ 26K] basename
  • -u オプション: ファイルオーナーを表示する
% tree -u /
/
|-- [root ] bin
| |-- [root ] alsaunmute
| |-- [root ] arch
| |-- [root ] awk -> gawk
| |-- [root ] basename
  • -g オプション: ファイルグループを表示する
% tree -g /
/
|-- [root ] bin
| |-- [root ] alsaunmute
| |-- [root ] arch
| |-- [root ] awk -> gawk
| |-- [root ] basename
  • -p オプション: パーミッションを表示する
% tree -p /
/
|-- [dr-xr-xr-x] bin
| |-- [-rwxr-xr-x] alsaunmute
| |-- [-rwxr-xr-x] arch
| |-- [lrwxrwxrwx] awk -> gawk
  • -D オプション: タイムスタンプを表示する
% tree -D /
/
|-- [Mar 29 4:17] bin
| |-- [Mar 24 2016] alsaunmute
| |-- [May 11 2016] arch
| |-- [Dec 1 13:09] awk -> gawk
| |-- [May 11 2016] basename
  • --inodes オプション: i-node を表示する
% tree --inodes /
/
|-- [4456449] bin
| |-- [4459639] alsaunmute
| |-- [4456520] arch
| |-- [4456536] awk -> gawk
| |-- [4456550] basename

以下は、i-node・ファイルサイズ・オーナー・グループ・タイムスタンプ・パーミッションを表示した例である。tree コマンドでは、例えば先頭にファイルサイズを、といった指定はできないようである。
% tree --inodes -sugDp /
/
|-- [4456449 dr-xr-xr-x root root 4096 Mar 29 4:17] bin
| |-- [4459639 -rwxr-xr-x root root 123 Mar 24 2016] alsaunmute
| |-- [4456520 -rwxr-xr-x root root 27776 May 11 2016] arch
| |-- [4456536 lrwxrwxrwx root root 4 Dec 1 13:09] awk -> gawk
| |-- [4456550 -rwxr-xr-x root root 26264 May 11 2016] basename

tree コマンドのオプション: ソート順指定
tree コマンドのデフォルトソート順は、ファイル・ディレクトリ名の ASCII 順でソート、である。変更したい場合は以下のオプションを使う。
▷ -t オプション: タイムスタンプの降順でソートする (新しいものが先)
▷ -r オプション: ファイル名の逆順でソートする (Z→A の順)

tree コマンドの文字化け対策
tree コマンドが文字化けする環境があるようだ (当ページ管理人は CentOS 6.8 で確認)。
% tree /
/
├ bin
│??├─ alsaunmute
│??├─ arch
│??├─ awk -> gawk
│??├─ basename
どうやら tree コマンドが locale を使ってよい感じの罫線を出そうとしているらしく、下記のように tree --charset オプションか、locale を C にすることで文字化けを解消できた。
% tree --charset=C /
% env LC_ALL=C tree /

UNIX における tree コマンド
当ページ管理人は、tree コマンドは MS-DOS バージョン4〜5 あたり(?) で登場した TREE.COM が起源だと認識している。一方、伝統的な UNIX には tree というコマンドは存在しなかった。その理由は「find コマンドで用が足りるから」という単純なものであろう。さらに言うと、tree コマンドのように出力内容に縦棒・横棒などが含まれると、人間にとっては見やすいが、パイプ経由で他のコマンドが処理をすることが難しくなってしまう。おおげさに表現するなら、tree は UNIX の思想とも言えるパイプを否定するコマンドと言える。

UNIX 界における tree コマンドの歴史は浅く、2004年ごろ(?) Linux 向けに tree コマンドが開発され、2007年現在では FreeBSD などでも利用可能となっている。しかし Solaris・HP-UX など商用の UNIX においては、ソースからコンパイルしない限り tree コマンドを使うことはできないと思われる。

関連コマンド
tree コマンド以外でファイルの一覧を表示するには、ls コマンドや find を使うとよい。また、stat コマンドでファイルの詳細情報を表示できる。

コマンド truss プログラム中のシステムコール呼び出し部分をトレース

プログラム中で、システムコールを呼び出している部分を表示する。SystemV 系 OS には昔から存在するらしいが、FreeBSD では 3.3-RELEASE で実装された。

アプリケーションがうまく動かないとき、原因を特定するのに非常に便利。「file not found」などというメッセージを表示して終了してしまうプログラムに truss を使うと、どのファイルをオープンしようとしたのかがわかる。

システムコールというのは、マニュアルのセクション2に属する関数群のこと。セクション3の関数はライブラリルーチンなので、truss では表示されない。例えば open は表示されるが fopen は truss では見ることができない、ということ。ただし fopen ライブラリの中から open が呼ばれるので、その情報を見ることができる。

Linux では strace というコマンドで同様の機能が提供されている。
>> FreeBSDオンラインマニュアル(man) FreeBSD truss(1)
>> Solaris10オンラインマニュアル(man) Solaris10 truss(1)

コマンド xsetroot ルートウィンドウに白黒の画像を張り付ける。

扱える画像フォーマットに制限がある。xvを利用した方がいい。
-def デフォルトの背景を張り付ける。

読み方 ditroff (UNIXコマンド) [でぃとろふ] [でぃー・あい・てぃー・ろふ]

"Device Independent TROFF" の略。 "nroff"([えぬ・ろふ]) や "troff" ([てぃー・ろふ]) の流れからいけば [でぃー・あい・てぃー・ろふ] となるところだが、これだけは [でぃとろふ] ともいう。

読み方 troff (UNIXコマンド) [てぃー・ろふ]

設定ファイル ~/.inputrc readline 設定ファイル

行入力支援ライブラリ readline の設定を行う。bash・gdb・bc・ftp など、行入力機能に readline を利用しているコマンドの CUI インタフェースについて、このファイルで設定を行うことができる。

設定を行うには、主に
set 変数名 値
という変数の設定を羅列する。例えば
set editing-mode emacs
とすれば emacs に似たキーバインドが設定される。一方、
set editing-mode vi
とすることで vi に似たキーバインドが設定される。

主な変数
editing-mode
編集モード設定。emacs か vi を設定する。デフォルトは emacs。
emacs とすると emacs に似たキーバインドになり、vi にすると vi に似たキーバインドになる。
completion-query-items
TAB を押下した際、補完候補が少ない場合は補完候補一覧を表示するが、補完候補が多すぎる場合は
% ls /usr/bin/ (TAB を押下)
Display all 417 possibilities? (y or n)
などと全ての選択候補を表示するかどうかをユーザに問い合わせる。completion-query-items は、「補完候補が何個以上ある場合に問い合わせを行うか」を設定する。デフォルトは 100。
expand-tilde
単語の先頭にあるチルダ「~」をホームディレクトリに展開するかどうかを設定する。展開するなら on、展開しないなら off を設定する。デフォルトは off。on の場合は
% ls ~/ (ここで TAB を押下すると)
% ls /home/68user/ (と展開される)
という挙動になる。

コマンドごとの設定
~/.inputrc の内容は、readline を利用するコマンド全てに影響する。もしコマンドごとに異なる設定を行いたい場合は、$if〜$endif を使うとよい。
$if Bash
# パス(PATH)の編集
"\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f"
# 引用符で囲まれた単語を入力するための準備 -- 先頭と末尾の二重引用符
# を挿入して、先頭の引用符の直後に移動
"\C-x\"": "\"\"\C-b"
# バックスラッシュを挿入
# (シーケンスやマクロにおいて、バックスラッシュ・エスケープをテストする)
"\C-x\\": "\\"
# カレントな単語、または、1つ前の単語を引用符で囲む
"\C-xq": "\eb\"\ef\""
# バインドされていない行再表示コマンドにバインディングを追加
"\C-xr": redraw-current-line
# カレント行において変数を編集
"\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="
$endif

# FTP 用
$if Ftp
"\C-xg": "get \M-?"
"\C-xt": "put \M-?"
"\M-.": yank-last-arg
$endif

設定ファイル ~/.netrc ftp 用アカウント情報ファイル

ftp コマンドで ftp://ftp.jp.FreeBSD.org/ に anonymous ログインするには、
% ftp ftp.jp.FreeBSD.org
Name: anonymous
Password: (パスワード=メールアドレス入力)
と認証を行わなければいけない。さらに自分好みの設定にするには (当ページ管理人の場合)、
ftp> binary (バイナリモード)
200 Type set to I.
ftp> hash (1024 バイト転送するごとにマークを表示)
Hash mark printing on (1024 bytes/hash mark).
ftp> prompt (mget でいちいち取得するかどうかを問い合わせない)
Interactive mode off.
とタイプする必要がある。これでは非常に面倒である。

それを自動化するのが ~/.netrc というファイルである。
machine ftp.jp.freebsd.org
login anonymous
password 68user@X68000.startshop.co.jp
と書いておけば、
% ftp ftp.jp.freebsd.org
としただけで自動的にログインが行われる。ftp.jp.NetBSD.og にも同様のことが
したかったら、
machine ftp.jp.netbsd.org
login anonymous
password 68user@X68000.startshop.co.jp
を追加すればよい。

このようにいちいち対象 FTP サーバごとに記述するのが面倒ならば、
default login anonymous password 68user@X68000.startshop.co.jp
と書いておけば、エントリがない場合自動的にこの記述が使われる。ただし、default エントリが現れると ~/.netrc の読み込みがそこで止まってしまうので、必ず default エントリはファイルの最後に書く。

さらに ~/.netrc に
macdef init
binary
hash
prompt
(ここに必ず空行が必要)
と、init というマクロを追加すると、ログイン後に init マクロが自動的に実行される。

なお、~/.netrc は他人が読めないように
% chmod 600 ~/.netrc
としておくこと。

うまく動かない場合は ftp に -d オプションを付けて挙動を観察するとよいだろう。

設定ファイル ~/.xinitrc X Window System 起動時に実行されるスクリプト

startx コマンドで X Window System を起動したときに自動的に実行されるスクリプト。X Window System をインストールしたばかりのときは、~/.xinitrc が存在しないので、代わりに /usr/X11R6/lib/X11/xinit/xinitrc が実行される。自分用のウィンドウ環境を構築したいときは
% cp /usr/X11R6/lib/X11/xinit/xinitrc ~/.xinitrc
% chmod +w ~/.xinitrc
として、~/.xinitrc を編集するとよい。

内容は ~/.xsession と全く同じで構わない。書くべき内容については ~/.xsession を参照。なお、~/.xinitrc は ~/.xsession と違って、
% chmod +x ~/.xinitrc
などと実行属性を付けておく必要はない。

環境変数 DISC cdcontrol が参照する CD のデバイス名

Cシェル変数 ignoreeof Ctrl-D でログアウトしないようにする。

デフォルトでは、何もタイプしていない状態で Ctrl-D を押すとログアウトしてしまう。
% hoge(Ctrl-D)
⇒ hoge から始まるコマンドの一覧を表示
% (Ctrl-D)
exit
⇒ 何もタイプしていない状態だと、Ctrl-D でログアウト

ignoreeof がセットしてあれば Ctrl-D でログアウトしない。普通、補完や文字削除で Ctrl-D を多用するだろうから、操作ミスでログアウトしてしまわないように、ignoreeof をセットしておく方がよい。
% set ignoreeof
⇒ Ctrl-D でログアウトしない
% unset ignoreeof
⇒ Ctrl-D でログアウトする
ちなみに十数回連続で Ctrl-D を押すと、ignoreeof がセットしてあってもログアウトする。どうやら、こういう仕様らしい。

関数 strcat 文字列を連結する

関数 strchr

関数 strcmp 文字列を比較する。

#include <string.h>
char str1[]="abc";
char str2[]="def";
if ( strcmp(str1, str2) == 0 ){
str1とstr2は同じ文字列
} else {
str1とstr2は異なる文字列
}
文字列が一致すると strcmp が 0 を返すことに注意。
if ( strcmp(str1,str2) ){
文字列が一致
}
ではない。

なぜこういう変な仕様かというと、
  • str1 が str2 より (文字コードで比較して) 大きかったら正数を返す
  • str1 が str2 より (文字コードで比較して) 小さかったら負数を返す
  • str1 と str2 が同じなら 0 を返す
と、どちらが大きいかという情報を受け取れるようになっているからである。

よく
if ( ! strcmp(str1, str2) )
if ( strcmp(str1, str2) == 0 )
どちらの書き方がよいかで議論になるが、当ページ管理人は後者を推奨する (前者の書き方も既に慣用句として認められているとは思うが)。「str1 と str2 の差がゼロである」と覚えよう。

関数 strrchr

関数 strlen

関数 strsep 文字列を区切り文字で分割する

ANSI C には含まれていない。

関数 strstr

関数 tcgetattr

関数 tcsetattr

端末情報をセット。
#include <termios.h>
struct termios term;
tcgetattr(0,&term);
term.c_lflag &= ~ICANON;
term.c_lflag &= ~ECHO;
tcsetattr(0,TCSANOW,&term);
カノニカルモードの例。


頑張って書いたおすすめコンテンツ!
クラウドサービス徹底比較・徹底解説