はじめに
manコマンドとは『コマンドのレファレンスマニュアルを表示する』ためのコマンドです。(Linux基本コマンド [man]コマンド(基本編より))
例えばls
というコマンドの意味を知りたければ、
$ man ls
これでマニュアルページがターミナル上に表示されます。
(qキーで抜ける、vimと同じくjキーで下にkキーで上にスクロールする。また/文字列パターン
で文字検索も出来ます。)
Linux/Unix力を伸ばすにはこうしたドキュメントを読んでコマンドを身に染み込ませる必要があると筆者も常々思っているのですが、英語で知らないことを学ぶのは中々ツライものです。
これに対してJMプロジェクトというLinux 関連のマニュアルページの日本語ページを翻訳・公開してくれているサイトがあります。
※日本語されていないコマンドも多々あります。(T_T)
本記事では
- (1)JMプロジェクトの日本語リファレンスを
jman
という新しく作ったコマンドで読めるようにする - (2)
man
コマンドでは同じ環境下でも英文リファレンスを変わらず読めるようにする
ということをやっていきたいと思います。
ちなみにMacOSのバージョンは下記の通り
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.15.7
BuildVersion: 19H15
※本記事はZennの方にも筆者本人が転載済です。加筆/修正はしばらくは両方で行います。
groffのインストール
groffとは雑に言えば「テキストを処理して整形するプログラム」のこと。
下記のようにMacに最初から入ってはいるが、
$ groff -v
GNU groff version 1.19.2
$ which groff
/usr/bin/groff
Homebrewで最新版にしよう。
$ brew install groff
$ groff -v
GNU groff version 1.22.4
$ which groff
/usr/local/bin/groff
manの設定を変更
設定ファイルはMacでもLinuxと同様に/etc配下に
$ sudo vi /etc/man.conf
# 95-96行目あたりの下記をコメントアウトして
JNROFF /usr/bin/groff -Tnippon -mandocj -c
# 代わりにこれを
JNROFF /usr/local/bin/groff -Dutf8 -Tutf8 -mandoc -mja -E
# 105-106行目あたりの下記2つをコメントアウトして
PAGER /usr/bin/less -is
BROWSER /usr/bin/less -is
# 代わりにこれを
PAGER /usr/bin/less -isr
BROWSER /usr/bin/less -isr
JM Projectから日本語manページをダウンロードしてくる
※最新版はここでチェックの上、curl1コマンドでダウンロードしてみてください。
ちなみにcurlコマンドとは様々なプロトコル(HTTPやFTPなど標準はHTTP1.1)でファイルをダウンロード/転送するコマンド。今回はダウンロードに使用しています。
$ cd ~/Downloads
$ curl -O http://linuxjm.osdn.jp/アーカイブ名
-- 例
$ curl -O http://linuxjm.osdn.jp/man-pages-ja-20201215.tar.gz
※-oは標準出力に代わって、出力をファイル file へ書き込むことオプション
※-Oも標準出力に代わって、出力をファイル file へ書き込むことオプションだがリモートファイルと同じ名前でローカルのファイルが作られる
ファイルを解凍します。
$ tar xfz アーカイブ名
-- 例
$ tar xfz man-pages-ja-20201215.tar.gz
-- ちゃんと解凍されてますネ
$ ls | grep man
man-pages-ja-20201215
man-pages-ja-20201215.tar.gz
※tarとは「アーカイブファイル”を作成/展開するコマンド」です。2
続いて、解凍したディレクトリに移動して、makeを実行します。3
$ cd man-pages-ja-20201215
$ ls
INSTALL Makefile README manual script
$ make config
Install directory [/usr/share/man/ja_JP.UTF-8] ?: /
=> /usr/local/share/man/ja_JP.UTF-8(/usr/local/share/manを見ればわかるがすでにmanの説明ファイルが置かれている)
compress manual with..
0: none
1: gzip
2: bzip2
3: compress
=> 0(圧縮方法を効かれているので圧縮しないを選択)
uname of page owner [root] ?:
=>Macのユーザー名(homebrewを使っていないならrootで良い)
group of page owner [root] ?:
=>admin(homebrewを使っていないならwheelで良い)
All OK? (Yes, [C]ontinue / No, [R]eselect) :
=>c(問題なければc、やり直ししたければrを回答。)
[INSTALL PACKAGE SELECTION]
->全てYしてEnterでおk
All OK? (Yes, [C]ontinue / No, [R]eselect) :
->c
[RESOLVE CONFLICTS]
->全て0してEnterでおk
All OK? (Yes, [C]ontinue / No, [R]eselect) :
->c
creating installation script...done
now you can "make install" as user root.
$ make install
日本語、英語のman記事を同じ環境で
~/.bashrc
に下記を追記
alias man='env LANG=C man'
alias jman='env LANG=ja_JP.UTF-8 man'
これでmanを日本語にしたい時はjman
コマンドを使用することが出来る。またman
コマンドを使えば従来どおり英文リファレンスを読むことが出来る。
ただし、日本語化されていないコマンドはjman
でも英文リファレンスが出る。
※LANG=Cの意味については【Linux入門】ローカライゼーションのためのロケール情報設定方法を参照すること。
ちなみにデフォルトでの表示を日本語で、英語表示はeman
という風にするには、
alias eman='env LANG=C man'
alias man='env LANG=ja_JP.UTF-8 man'
こぼれ話
- gitのようなhomebrewで後から入れた方を使っているコマンドの場合
/usr/local/share/manに入っていることに注目。ユーザーはMacのユーザー名、グループはadminとなっている。
$ which git
/usr/local/bin/git
$ man -w git
/usr/local/share/man/man1/git.1
$ ls -l /usr/local/share/man/man1/git.1
lrwxr-xr-x 1 Macのユーザー名 admin 47 12 10 02:03 git.1 -> ../../../Cellar/git/2.29.2/share/man/man1/git.1
※gitは元から入っているがhomebrewで入れたものをPATHを通して使っている場合上記のようになる。treeコマンドとかでも一緒。
※vimは元から入っているがhomebrewで入れれば、日本語manページが表示されるようになる。
- lsやcdのような元から入っているコマンドの場合
いずれも/usr/share/下のディレクトリにあります。またユーザーはroot、グループはwheelとなっている。
$ which ls
/bin/ls
$ man -w ls
/usr/share/man/man1/ls.1
$ ls -l /usr/share/man/man1/ls.1
-rw-r--r-- 1 root wheel 17047 2 29 2020 /usr/share/man/man1/ls.1
$ which cd
/usr/bin/cd
$ man -w cd
/usr/share/man/man1/builtin.1
$ ls -l
-rw-r--r-- 1 root wheel 8714 2 29 2020 /usr/share/man/man1/builtin.1
参考
-
curlについては(1)Client URL What does curl stand for?(カールとは何の省略なのか?)や(2)curlコマンドの使い方15選を参照してみてください。 ↩
-
ディレクトリ圧縮はtar cvf、解凍はtar xvfです。 ↩
-
プログラムをコンパイルするためののコマンド。どのソースコードをどのようにコンパイルすれば良いかを判断し、コンパイルに必要なコマンドを実行してくれます。makeを使うにはMakefileと呼ばれるファイルが必要となる。
Makefileはコンパイルされるソースコードの依存関係や、コンパイルに必要なコマンドなどの情報が書かれている。 ↩