2014年7月21日月曜日

【Linux】文字コードや改行コードを変換して上書きする.【nkf】

文字コードや改行コードを変換するときは nkf コマンドを使用する.

$ nkf オプション input.txt > output.txt

主なオプションは以下の通り.

【文字コード】
-e        :EUC-JPコードに変換する.
-j        :ISO-2022-JPコードに変換する.
-s        :Shift_JISコードに変換する.
-w        :UTF-8コードに変換する.

【改行コード】
-Lm       :CRに変換する.   (Mac OSの標準)
-Lu       :LFに変換する.   (UNIX系のOSの標準)
-Lw       :LF+CRに変換する.(Windowsの標準)

【その他】
-g        :現在の文字コードを判別する.
--overwite:上書きする.



(例)文字コードを Shift_JIS に変換する
$ nkf -s hoge.txt > fuga.txt

(例)改行コードを CF に変換する
$ nkf -Lm hoge.txt > fuga.txt

(例)文字コードを自動判別する
$ nkf -g hoge.txt

(例)文字コードを UTF-8 に,改行コードを LF に変換し元のファイルを上書きする.
$ nkf -w -Lu --overwrite hoge.txt

(誤)--overwriteを使わずに,入出力に同じファイル名を指定すると,空ファイルになるので注意.
$ nkf -w -Lu hoge.txt > hoge.txt

2014年7月20日日曜日

【Linux】重複したファイルを探して削除する.

iTunesのライブラリを整理していたら,操作を誤ってしまい大量の重複ファイルができてしまった.

(参考画像)


いつもだったら,find と grep の合わせ技で削除していくところだが,今回はファイル数が膨大なので,万が一ミスして必要なファイルまで削除してしまったら大変なことになる.

そこで,今回は fdupes という重複ファイルを見つけ出すプログラムを利用した.

使い方は非常に簡単で,以下のように打つと,次から次へとチェックし,

$ fdupes -r ~/Music

終了すると重複ファイルリストを一気に出力する.なお,r は再帰的に検索するオプション.

出来上がったリストをひと通りチェックし問題がなさそうだったら,次はいよいよ削除する.

$ fdupes -r ~/Music | grep 1.mp3$ | sed s/" "/"\\\\\\\\ "/g | xargs rm

出力の加工にはおなじみの sort コマンドや,uniq コマンド,grep コマンドなど適宜使用する.

ここではまず ***1.mp3 というファイル名のものを抽出するために grep コマンドを使用し,
さらに「スペース」を「バックスラッシュ2個+スペース」に変換するために sed コマンドを使用した.

fdueps は find などに比べればとても低速だが,ファイルサイズや,md5ハッシュ値を用いて
重複ファイルを抽出するので,間違いが起きる心配がなく,非常に有用なプログラムと言えそうだ.

作者様に感謝である.

2014年7月6日日曜日

Raspberry Pi で LDAP サーバーを構築する.

Raspberry Pi で LDAP サーバーを組んだので手順を記す.

下記エントリーにおいて 14. まで終了した状態から始める.
WM×LI: Raspberry Pi の初期設定(備忘録)

1. ssh でログイン
@client $ ssh pi@192.168.100.2

2. slapd 及び ldap-utils をインストールする.
pi@hoge ~ $ sudo apt-get install -y slapd ldap-utils
途中,管理者用のパスワードを尋ねられるので,あらかじめ考えておく.

3. slapcat コマンドで現在の状態を確認する.
pi@hoge ~ $ sudo slapcat

4. 以下の内容で,taro.ldif という名前のファイルを作成する.
dn: uid=taro,dc=co,dc=jp
objectClass: inetOrgPerson
objectClass: posixAccount
sn: Yamada
cn: Taro Yamada
uid: taro
uidNumber: 1001
gidNumber: 1001
loginShell: /bin/bash
homeDirectory: /home/taro

5. taro ユーザを追加する.
pi@hoge ~ $ ldapadd -x -W -D cn=admin,dc=co,dc=jp -f taro.ldif
x : SASL認証の代わりに簡易認証を使用する.
W : 対話形式でLDAPのパスワードを認証する.
D : LDAPの識別名(DN)を指定する.
f : ファイルを指定.
6. taro ユーザにパスワードを設定する.
pi@hoge ~ $ ldappasswd -x -W -S -D cn=admin,dc=co,dc=jp uid=taro,dc=co,dc=jp
S : 対話形式でパスワードを設定する.
7. 再び slapcat コマンドを実行し,taro ユーザが追加されたことを確認する.
pi@hoge ~ $ sudo slapcat

8. 作成したユーザを利用するため,libnss-ldapd をインストール
pi@hoge ~ $ sudo apt-get install -y libnss-ldapd

途中, LDAPサーバーのURIを聞かれるので,
ldap://localhost/
とする.さらに LDAPルックアップ の選択画面になるので,全てチェックする.

9. 以下の一行を /etc/pam.d/common-session に追加する.
session required pam_mkhomedir.so umask=0022 skel=/etc/skel
これにより,ログイン時にホームディレクトリが存在しなければ,自動的に作成されるようになる.

10. su コマンドで taro ユーザになる.
pi@hoge ~ $ su taro

無事にログイン,ホームディレクトリの作成が完了すれば設定は全て終了.

taro ユーザを使えるクライアントを増やしたいときは,クライアント上で 8. 以降を実行する.

その際,URI は localhost ではなく,LDAPサーバーのIPアドレス(192.168.100.2)を指定する.



なお,ここに示したのは必要最低限の設定.
実際に組織レベルでLDAPを構成するには,以下の記事を参考されたし.

Raspberry Pi で LDAP サーバーを組む.その2