LPIC あずき本v5.0 ch9 管理タスク

LPICLinux勉強メモ

出典: 

ユーザーとグループの管理

ユーザーアカウントと/etc/passwd

  • ユーザーアカウント情報は/etc/passwdファイルにプレーンテキストで保存されている

    • /etc/passwd-とかがあったりする。バックアップ?
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
...
wand:x:1000:1000:wand,,,:/home/wand:/bin/bash
...
  • <ユーザ名>:<暗号化されたパスワード>:<UID>:<GID>:<GECOS>:<ホームディレクトリ>:<デフォルトシェル>

    • ユーザ名

      • ユーザの名前やプログラム名
      • unique
    • 暗号化されたパスワード

      • 現在ではシャドウパスワードが使用されているため’x’
    • UID

      • User ID
      • 0: root
      • 1-99: システム管理用
      • 1000または500-: 一般ユーザ用

        • ディストリにより異なる
        • 手元のUbuntuでは1000
    • GID

      • Group ID
      • プライマリグループ(基本グループ)のID

        • ファイルやディレクトリを作成したとき、所持グループとしてデフォルトで適用されるもの
    • GECOS

      • コメント

        • ユーザのフルネーム
        • 部屋番号やビル名
        • オフィスの電話番号
        • その他コンタクト先(FAX番号とか)
      • GEneral Comprehensive Operating System からきている
    • ホームディレクトリ

      • ユーザのホームディレクトリの絶対パス
    • デフォルトシェル

      • ユーザがログインしたり新たにシェルを開いた際に起動されるシェルの絶対パス
      • ログインを想定しない場合/bin/falseとか/sbin/nologinとか
      • /bin/false/sbin/nologinとの違い
/bin/false /sbin/noloin
Telnet接続 x x
SSH接続 x x
FTP接続 x o
SFTP接続 x x
シェルの実行 x x
  • /etc/passwdはroot:root所有だが一般ユーザでも読み取り可能
ls -l /etc/passwd
-rw-r--r-- 1 root root 2372  2月 24 20:04 /etc/passwd
  • cf. /etc/shadowはroot:shadow所有で、一般ユーザ読み取り不可能
ls -l /etc/shadow
-rw-r----- 1 root shadow 1308  2月 24 20:04 /etc/shadow
  • シャドウパスワード

    • 誰でも読み取り可能な/etc/passwdにパスワード情報を格納することはセキュリティ上危険

      • 暗号化されているとはいえ、時間をかければ解読可能
    • root(とshadowグループ所属者)しか読み取りできない/etc/shadowにパスワード情報を格納するようになった

グループアカウントと/etc/group

  • グループの設定は/etc/groupに保存されている
root:x:0:
daemon:x:1:
bin:x:2:
...
wand:x:1000:
sambashare:x:128:
docker:x:999:wand
  • <グループ名>:<暗号化されたグループパスワード>:<GID>:<グループメンバー>

    • グループ名
    • 暗号化されたグループパスワード
    • GID

      • Group ID
    • グループメンバー

      • このグループをサブグループ(参加グループ)とするユーザー
      • ユーザ名を,区切り

コマンドを用いたユーザーとグループの管理

  • GUIでも可能
  • しかしディストリ非依存なCUIを覚えよう

useraddコマンド

-c コメント, --comment=コメント

  -c, --comment COMMENT         新アカウントの GECOS フィールド
  • GECOSコメントフィールドを指定

-d パス, --home-dir=パス

  -d, --home-dir HOME_DIR       新アカウントのホームディレクトリ
  • ホームディレクトリを指定

-g グループ名/GID, --gid=グループ名/GID

  -g, --gid GROUP               新アカウントの主グループの名前または ID
  • プライマリグループを指定

    • --gidでもグループ名指定できる
    • passwdにはGIDが記入される

-G グループ名/GID, --groups=グループ名/GID

  -G, --groups GROUPS           新アカウントの補助グループのリスト
  • サブグループを指定する
  • 複数指定するときは,区切り
sudo useradd --groups=wand,docker hoge
cat /etc/passwd
cat /etc/group
...
+ hoge:x:1001:1001::/home/hoge:/bin/sh
- wand:x:1000:
+ wand:x:1000:hoge
  sambashare:x:128:
- docker:x:999:wand
+ docker:x:999:wand,hoge
+ hoge:x:1001:

-s パス, --shell パス

  -s, --shell SHELL             新アカウントのログインシェル
  • デフォルトシェルを指定する
  • システムアカウントや、ログインを想定しないアカウントでは/bin/false/sbin/nologin

-D, --defaults

  -D, --defaults                useradd のデフォルト設定を表示または変更
  • デフォルトの設定値を表示または設定する
useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/sh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=no

-m, --create-home

  -m, --create-home             ユーザのホームディレクトリを作成する
  • ホームディレクトリを自動的に作成する

    • Debian GNU/Linuxなどでは、本オプションをつけないと自動作成されない
    • Ubuntuもそうでした

ホームディレクトリのデフォルトシェル

  • ホームディレクトリ生成時、.bashrcとかも自動配置したい
  • /etc/skel/以下に雛形を配置しておく
ls -lA /etc/skel
-rw-r--r-- 1 root root  220  5月 18  2017 .bash_logout
-rw-r--r-- 1 root root 3771  5月 18  2017 .bashrc
-rw-r--r-- 1 root root  807  4月  5  2018 .profile
-rw-r--r-- 1 root root 8980  4月 20  2016 examples.desktop
  • zsh使いなら.zshrcとか置いてあげる

usermodコマンド

  • 既存のユーザアカウントを変更
  • だいたいuseraddとおなじ

【備忘録】プライマリグループを変更したら、過去に作成したファイルの所有グループも変わった話

  • 昔、プライマリグループをdockerグループにしてしまったwandユーザについて下記コマンドを実行
sudo usermod -g wand -G docker wand
  • やや時間がかかった
  • wand:dockerで作成したファイルが全部wand:wandになっていた
-rw-r--r-- 1 wand wand 45180  2月 25 23:35 ch1.md
-rw-r--r-- 1 wand wand  9999  3月 31 20:56 ch11.md
...

-L, --lock

  -L, --lock                    このユーザアカウントをロックする
  • パスワードをロックして一時的に無効化する

    • 【補】/etc/shadowにて、暗号化パスワードの先頭に!がつくよう
  • 長期休暇中などに使う

-U, --unlock

  -U, --unlock                  このユーザアカウントのロックを解除する
  • パスワードのロックを解除する

    • 【補】パスワードのなき場合、怒られる
passwd: パスワードをアンロックするとパスワードのないアカウントができます。
このアカウントのパスワードをアンロックするには usermod -p でパスワードを
設定すべきです。

userdelコマンド

  • ユーザアカウント消す
  • ホームディレクトリ等も消すなら-r, --remove

passwdコマンド

  • パスワード変更
  • パスワードは/etc/shadowに格納されている
  • /etc/shadowは640, rootしか書き換えできない
  • しかしpasswdコマンドはroot所有でSUIDが付与されている
ls -l $(which passwd)
-rwsr-xr-x 1 root root 59640  1月 26  2018 /usr/bin/passwd
  • rootの権限で実行されるため、一般ユーザも自分のパスワードを変更できる
  • cf. usermod-pオプションによるパスワード変更はrootユーザしか行使できない

    • SUIDが付与されていないから
ls -l $(which usermod)
-rwxr-xr-x 1 root root 121920  1月 26  2018 /usr/sbin/usermod

-l, --lock

  -l, --lock                    指定アカウントをロックする
  • パスワードをロックして一時的に無効化する

-u, --unlock

  -u, --unlock                  指定アカウントのロックを解除する
  • パスワードのロックを解除する

groupaddコマンド

  • グループ作る

groupmodコマンド

  • group情報変更する

-g GID, --gid=GID

  -g, --gid GID                 グループの ID を GID に変更します
  • GIDを変更する

-n グループ名, --new-name=グループ名

  -n, --new-name NEW_GROUP      名前を NEW_GROUP に変更する
  • グループ名を変更する

groupdelコマンド

  • グループ消す
  • そのグループをプライマリグループとするユーザが居る場合、削除不可 能

    • 無所属ユーザが生まれる可能性があるから
groupdel wand
groupdel: ユーザ 'wand' のプライマリグループは削除できません。

idコマンド

  • ユーザが所属しているグループを調べられる

    • UID
    • GID
    • サブグループのGID
id wand
uid=1000(wand) gid=1000(wand) groups=1000(wand),999(docker)
  • groupsにはプライマリも含まれるみたい

getent

getent --help
使用法: getent [OPTION...] database [key ...]
管理データベースからエントリを取得します。
  • LDAP: Lightweight Directory Access Protocol

    • 「ディレクトリサービス」へのアクセス時に用いられるプロトコル

      • いろいろ一元管理

        • ユーザ情報
        • グループ情報
        • コンピュータ情報

シャドウパスワード

  • 現在、/etc/passwdの暗号化パスワードカラムにはxが入る

    • root:root 644
    • プロンプトの表示、ls -lコマンド等のために640にはできない
  • 代わりに/etc/shadowの第2列に保存される

    • root:shadow 640
    • 【補】ロック中は暗号化パスワード先頭に!がつく

ジョブスケジューリング

  • メンテ作業

    • バックアップ
    • ログファイルの管理
  • 自動化してシステム管理コスト下げる
  • cron: 定期実行
  • at: 一回限り

cron

  • 構成

    • crondデーモン
    • crontabコマンド
  • crondは1分ごとにcrontabファイルを調べる

ユーザーのcrontab

  • /var/spool/cron/ディレクトリ以下に置かれる
  • エディタで直接編集してはいけない
  • crontabコマンドで編集する

    • SGIDが設定されており、crontabグループ所属ユーザとして実行される
ls -l $(which crontab)
-rwxr-sr-x 1 root crontab 39352 11月 16  2017 /usr/bin/crontab
  • /var/spool/cron/crontabs/はスティッキービットが立っている

    • 誰でもファイル・ディレクトリを書き込めるが、所有者しか削除できないやつ
sudo ls -ld /var/spool/cron/crontabs/
drwx-wx--T 2 root crontab 4096  4月 12 19:37 /var/spool/cron/crontabs/
  • この下に各ユーザのファイルを配置していく感じになる

-e

	-e	(edit user's crontab)
  • エディタを使ってcrontabファイルを編集する
export EDITOR=emacsclient
crontab -e
  • 環境変数EDITORで指定のエディタでcrontabファイルを編集する
  • /tmp/crontab.Ndp3fo/crontab
  # Edit this file to introduce tasks to be run by cron.
  # 
  # Each task to run has to be defined through a single line
  # indicating with different fields when the task will be run
  # and what command to run for the task
  # 
  # To define the time you can provide concrete values for
  # minute (m), hour (h), day of month (dom), month (mon),
  # and day of week (dow) or use '*' in these fields (for 'any').# 
  # Notice that tasks will be started based on the cron's system
  # daemon's notion of time and timezones.
  # 
  # Output of the crontab jobs (including errors) is sent through
  # email to the user the crontab file belongs to (unless redirected).
  # 
  # For example, you can run a backup of all your user accounts
  # at 5 a.m every week with:
- # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
+ 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
  # 
  # For more information see the manual pages of crontab(5) and cron(8)
  # 
  # m h  dom mon dow   command
no crontab for wand - using an empty one
Waiting for Emacs...
crontab: installing new crontab
  • crontabs以下にwandファイルができている
sudo ls -la /var/spool/cron/crontabs/
drwx-wx--T 2 root crontab 4096  4月 12 19:46 .
drwxr-xr-x 3 root root    4096  1月  8  2018 ..
-rw------- 1 wand crontab 1087  4月 12 19:46 wand

-l

	-l	(list user's crontab)
  • ユーザのcrontabファイル編集
# Edit this file to introduce tasks to be run by cron.
# 
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# 
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# 
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command

-r

	-r	(delete user's crontab)
  • けす

-i

	-i	(prompt before deleting user's crontab)
  • 消す時確認
crontab -ri
crontab: really delete wand's crontab? (y/n)
  • きえる
sudo ls -la /var/spool/cron/crontabs/
drwx-wx--T 2 root crontab 4096  4月 12 19:54 .
drwxr-xr-x 3 root root    4096  1月  8  2018 ..

-u

	crontab [ -u user ] [ -i ] { -e | -l | -r }
  • ユーザ指定(rootユーザで実行時のみ)

書式

# m h  dom mon dow   command
  • min

    • 0-59
  • hour

    • 0-23
  • day of month

    • 1-31
  • month

    • 1-12
    • jan-dec
  • day of week

    • 0-7
    • Sun-Sat
  • command
15 23 * * * /usr/local/bin/backup

毎日23:15に実行

0 9,12 * * 1 /usr/local/bin/syscheck

毎週月曜の9時と12時

0 */2 * * * /usr/local/bin/syscheck
  • 剰余群みたいなかんじ
  • 2時間ごと

システムのcrontab

  • /etc/crontab
ls -l /etc/crontab
-rw-r--r-- 1 root root 722  8月 21  2017 /etc/crontab

/etc/crontab

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user	command
17 *	* * *	root    cd / && run-parts --report /etc/cron.hourly
25 6	* * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6	* * 7	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6	1 * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
  • userカラムがある

    • システム用のだから
  • /etc/cron.*/ディレクトリ以下のファイルを呼び出す
ls /etc/cron.*
/etc/cron.d:
anacron  php  popularity-contest  sysstat

/etc/cron.daily:
0anacron      cracklib-runtime  man-db              sysstat
apport        dpkg              mlocate             ubuntu-advantage-tools
apt-compat    google-chrome     passwd              update-notifier-common
bsdmainutils  logrotate         popularity-contest

/etc/cron.hourly:

/etc/cron.monthly:
0anacron

/etc/cron.weekly:
0anacron  man-db  update-notifier-common
  • daily,hourly,monthly,weekly

【参考】run-parts

  • 指定したディレクトリ下のスクリプトや実行ファイルを実行するコマンド

【補】anacron

  • スケジュールされた時間にシステムがOFFの場合、システムがONになった時点でタスクを実行してくれるらしい

    • 通常5分後
    • cf. cronは実行してくれない
  • 1日1回以上の頻度

    • 分とか時とかはむり
  • 管理者のみ設定可能

atコマンド

  • 構成

    • atdデーモン
    • atコマンド
  • 手元のUbuntuには入っていなかった
オプション 説明
at -d atrmのエイリアス
at -r atrmのエイリアス
at -l atqのエイリアス
at -f ファイルパス STDINではなくファイルからジョブ指定
コマンド 説明
atrm 予約中のジョブをジョブ番号で指定して削除
atq 予約中のジョブを表示
  • ジョブつくる

    • ^D(<EOT>)で入力終了
$ at 5:00 tomorrow
warning: commands will be executed using /bin/sh
at> /usr/local/sbin/backup
at> <EOT>
job 1 at Sat Apr 13 05:00:00 2019
  • ジョブみる
atq
1	Sat Apr 13 05:00:00 2019 a wand
  • ジョブけす
atrm 1
atq
  • RDMSの自動増加キーよろしく、ジョブ番号は戻らないよう
$ at noon tomorrow
warning: commands will be executed using /bin/sh
at> /bin/sh
at> <EOT>
job 2 at Sat Apr 13 12:00:00 2019
  • けす
at -d 2

日時指定書式の例

指定日時 書式
午後10時 22:00, 10pm
正午(12:00) noon
真夜中(0:00) midnight
今日 today
明日 tomorrow
3日後 now + 3days
2週間後の22:00 10pm + 2weeks
  • 過去の時刻を指定すると怒られる
at midnight today
at: refusing to create job destined in the past

cronとatのアクセス制御

  • ユーザー単位で利用制限を実施できる

共通

  • ホワイトリスト優先

    • allowファイルがあれば、そこに記述されたユーザのみが利用可能
  • 次いでブラックリスト

    • allowファイルがなく、denyファイルがあれば、そこに記述されていない全ユーザが利用可能

cronのアクセス制御

  • /etc/cron.allow, /etc/cron.deny
  • 両方無い場合、誰でも利用できる

atのアクセス制御

  • /etc/at.allow, /etc/at.deny
  • 両方無い場合、rootのみが利用できる
  • デフォルトでは、空の/etc/at.denyが置かれ、全ユーザがatコマンドを利用できるようになってるらしい

    • 手元の環境では空ではなかった
ls -l /etc/at.deny 
  • root:daemon 640
-rw-r----- 1 root daemon 144  2月 20  2018 /etc/at.deny
sudo cat /etc/at.deny
alias
backup
bin
daemon
ftp
games
gnats
guest
irc
lp
mail
man
nobody
operator
proxy
qmaild
qmaill
qmailp
qmailq
qmailr
qmails
sync
sys
www-data

systemdによるスケジューリング

  • タイマーUnit
  • 種類

    • モノトニックタイマー

      • 「システム起動10分後に実行、以降1週間ごとに実施」
    • リアルタイムタイマー

      • 「毎日午前4時に実行」
  • /etc/systemd/system/以下に拡張子.timerでファイル生やす
  • スケジュールの確認
systemctl list-timers
NEXT                         LEFT          LAST                         PASSED       UNIT                         ACTIVATES
Fri 2019-04-12 21:09:00 JST  3min 11s left Fri 2019-04-12 20:39:41 JST  26min ago    phpsessionclean.timer        phpsessionclean.service
Fri 2019-04-12 22:01:18 JST  55min left    Fri 2019-04-12 21:05:38 JST  10s ago      anacron.timer                anacron.service
Sat 2019-04-13 01:02:15 JST  3h 56min left Fri 2019-04-12 11:29:18 JST  9h ago       apt-daily.timer              apt-daily.service
Sat 2019-04-13 05:51:58 JST  8h left       Fri 2019-04-12 17:10:04 JST  3h 55min ago motd-news.timer              motd-news.service
Sat 2019-04-13 06:33:38 JST  9h left       Fri 2019-04-12 06:50:54 JST  14h ago      apt-daily-upgrade.timer      apt-daily-upgrade.service
Sat 2019-04-13 17:23:02 JST  20h left      Fri 2019-04-12 17:08:28 JST  3h 57min ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Mon 2019-04-15 00:00:00 JST  2 days left   Mon 2019-04-08 00:57:00 JST  4 days ago   fstrim.timer                 fstrim.service
n/a                          n/a           Fri 2019-04-12 16:54:32 JST  4h 11min ago ureadahead-stop.timer        ureadahead-stop.service

8 timers listed.
Pass --all to see loaded but inactive timers, too.
  • スケジュールの削除はstopサブコマンド
systemctl stop lpic.timer
  • 書式はman 7 systemd.timeで確認可能

    • セクション7: 「その他」
  • systemd-runコマンド

    • より簡単にスケジュールを予約するやつ
  • サービスの実行ログはjournalctlコマンドで確認する

    • -u: Unit指定
journalctl -u apt-daily.service
...
 4月 12 00:35:19 wand-ThinkPad-X240s systemd[1]: Starting Daily apt download activities...
 4月 12 00:35:33 wand-ThinkPad-X240s systemd[1]: Started Daily apt download activities.
 4月 12 11:29:18 wand-ThinkPad-X240s systemd[1]: Starting Daily apt download activities...
 4月 12 11:29:19 wand-ThinkPad-X240s systemd[1]: Started Daily apt download activities.

ローカライゼーションと国際化

  • ローカライゼーション(localization)

    • ソフトウェアのメニューやメッセージを利用者の地域や国に合わせること

      • 言語
      • 通貨単位
      • 日付の書式
  • 国際化(internationalization, i18n)

    • ソフトウェアを最初から多言語・他地域対応するように作ること

ロケール

カテゴリ

  • 主なもの
環境変数 説明
LC_CTYPE 文字の種類やその比較・分類の規定
LC_COLLATE 文字の照合や整列に関する規定
LC_MESSAGES メッセージ表示に使用する言語
LC_MONETARY 通貨に関する規定
LC_NUMERIC 数値の書式に関する規定
LC_TIME 日付や時刻の書式に関する規定
LANGUAGE 複数一括設定(:区切り)、最高優先度
LC_ALL 一括設定、高優先度
LANG 一括設定、低優先度
  • localeのマニュアルで調べられる
  • 優先度

    • GNU gettext
    • LANGUAGE最優先

      • ただしLC_ALLLANGも必要(他ライブラリで使用するため)
      • スイス人なら

        • export LANGUAGE=sv:de
        • export LANG=sv_SE
    • LC_ALLが設定されていれば、全カテゴリでその値が使用される
    • LANGが設定されていれば、全カテゴリでその値が使用されるが、個別のカテゴリの設定で上書きできる

ロケール名

  • 書式 <言語名>_<国家もしくは地域名>.<文字コード>
  • 主なもの
ロケール名 説明
C, POSIX 英語
ja_JP.utf8(ja_JP.UTF-8) 日本語/Unicode
ja_JP.eucJP 日本語/EUC-JP
ja_JP.shiftJIS 日本語/シフトJIS
en_US.utf8 英語(米)/Unicode

localeコマンド

  • 現在のロケール設定の確認
locale
LANG=ja_JP.UTF-8
LANGUAGE=
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=

-a, --all-locales

  • 利用可能なロケール全表示
locale -a
C
C.UTF-8
POSIX
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IL
en_IL.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
ja_JP.utf8

-m, --charmaps

  -m, --charmaps
                             利用可能なキャラクタマップ名を書き込む
  • 文字コードのこと
locale -m | head -5
ANSI_X3.110-1983
ANSI_X3.4-1968
ARMSCII-8
ASMO_449
BIG5

一時的に変更

  • シェル変数一般で使える機能
LANG=C man ls
  • lsのマニュアルを英語で表示

文字コード

  • 多くのディストリの標準はUTF-8
  • iconv

    • 変換
  • つかえるやつ一覧
iconv -l
The following list contains all the coded character sets known.  This does
not necessarily mean that all combinations of these names can be used for
the FROM and TO command line parameters.  One coded character set can be
listed with several different names (aliases).

  437, 500, 500V1, 850, 851, 852, 855, 856, 857, 858, 860, 861, 862, 863, 864,
  865, 866, 866NAV, 869, 874, 904, 1026, 1046, 1047, 8859_1, 8859_2, 8859_3,
  8859_4, 8859_5, 8859_6, 8859_7, 8859_8, 8859_9, 10646-1:1993,
...
  • 変換
  -f, --from-code=NAME       元のテキストのエンコーディング
  -t, --to-code=NAME         出力用のエンコーディング
iconv -f eucjp -t utf8 report.euc.txt > report.utf8.txt
  • 標準出力に書き出されるのでリダイレクト

    • -o FILE, --output=FILE でファイルに書き出すこともできる
  • ファイルの文字コードが不明な時はnkf -g ファイル名

タイムゾーン

  • 日本はUTCより9時間早いとかそういうやつ
  • /usr/share/zoneinfo/ディレクトリ以下のバイナリファイルに格納されている
ls /usr/share/zoneinfo/
Africa      Cuba     GMT+0      Kwajalein  Poland     WET
America     EET      GMT-0      Libya      Portugal   Zulu
Antarctica  EST      GMT0       MET        ROC        iso3166.tab
Arctic      EST5EDT  Greenwich  MST        ROK        leap-seconds.list
Asia        Egypt    HST        MST7MDT    Singapore  localtime
Atlantic    Eire     Hongkong   Mexico     SystemV    posix
Australia   Etc      Iceland    NZ         Turkey     posixrules
Brazil      Europe   Indian     NZ-CHAT    UCT        right
CET         Factory  Iran       Navajo     US         zone.tab
CST6CDT     GB       Israel     PRC        UTC        zone1970.tab
Canada      GB-Eire  Jamaica    PST8PDT    Universal
Chile       GMT      Japan      Pacific    W-SU
  • /etc/localtimeにコピーすることでタイムゾーン設定

    • シンボリックリンクでも可
ls -l /etc/localtime
lrwxrwxrwx 1 root root 30  2月 24 03:32 /etc/localtime -> /usr/share/zoneinfo/Asia/Tokyo
  • 環境変数TZでも設定可

    • 手元の環境では未設定だった
printenv TZ
export TZ='Asia/Tokyo'
  • この値を全ユーザで利用するには/etc/timezoneファイルに記述する
ls -l /etc/timezone
-rw-r--r-- 1 root root 11  2月 24 03:32 /etc/timezone

/etc/timezone

Asia/Tokyo
  • 上記の値はtzselectコマンドで生成できる

    • 対話的にタイムゾーン文字列を取得
  • tzconfig

    • /etc/localtime, /etc/timezoneまとめて変更
    • 最近のディストリでは使用できないらしい
tzconfig
WARNING: the tzconfig command is deprecated, please use:
 dpkg-reconfigure tzdata
  • 代わりにdpkg-reconfigure tzdataを使用する(Debian系)