早崎トップ 研究(気候気象) 研究(大気汚染) データリスト Linux Tips Mac Tips

AdminCommands

各種管理コマンドのメモ

Linux 管理に際して,自分がよく使う and/or よく忘れるコマンドのメモ. ページが長くなってきたので, セキュリティ対策を新設して移植.

さらに,HDD増設・移設部分も情報量が増えたため,別ページに分離(2016-02-13).

起動できないって時は...

「起動できない」という状況は, 様々な要因で起こりうる. そのため,全てのトラブルの原因をここで挙げるのは無理.個人的によく経験した例を以下に挙げる.

  ファイルシステムをマウントできない

私は何度もやったことがある. 大抵の場合, 『外付けディスク装置を取り外したが,/etc/fstab の書き換えを忘れてた』 というアホな理由がほとんど.

解決するには,トラブル発生時(ブートプロセスの途中で止まるはず)に /etc/fstab を書き換えればよい.

  1. (停止したところで root のパスワード入力,リペアモードに入る)
  2. 以下を実行:
    mount -o remount,rw /   
    ※リペアモードでは read-only でマウントされてるので,書き換え可能にする
    
  3. /etc/fstab 書き換え,不要なマウント情報をコメントアウトするなど修正
  4. exit

こんな単純な事でも,解決方法を知らない or 忘れると, 無駄な時間を使ってしまう.

時刻あわせ (NTP 関連, ntpdate, ntpq; chronyd, chronyc (CentOS 7以後)

  基本情報

時刻の精度が秒単位(ないしそれ未満)で正確であることを期すなら, NTP デーモンを稼働. CentOS 7系では,chronyd デーモンになる. 動作・設定方法は,どこにでも掲載されてる. なお,余計なトラフィックをインターネット上に流さないために, なるべくネットワーク的に近いNTPサーバを使う. もし存在しないのなら,所属部署のネットワーク内で一つ立てるのも良い. たかが個人利用で,クライアント機全てで stratum 1 を参照する必要も無かろう.

毎日起動・停止をするようなPCならば, 起動時などに ntpdate を実行すれば,実用上は十分な精度になる.

強制的に時刻あわせするときには,ntpdate -b サーバ名 で合わせる.例えば以下のサーバ (stratum 2)

 # ntpdate -s -b ntp.jst.mfeed.ad.jp

時刻が大きく(例えば数十秒以上)ずれていて,即時修正したいときは, ntpdate を手動実行.

オプションの意味は以下: ログを syslog に残し(-s),即時修正(-b option; step mode).

 NTP 稼働させる場合のメモ

最近使用しているサーバは以下の通り:

  • ntp1.jst.mfeed.ad.jp
  • ntp2.jst.mfeed.ad.jp
  • ntp3.jst.mfeed.ad.jp

ntpd の稼働状況は ntpq -p にて確認できる.

 CHRONY 稼働させる場合のメモ(CentOS 7系)

  • chronyd の設定,稼働確認するには?
(時刻確認,timedatectl コマンド)
$ timedatectl
      Local time: 水 2019-05-29 12:24:16 JST
  Universal time: 水 2019-05-29 03:24:16 UTC
        RTC time: 水 2019-05-29 03:24:35
       Time zone: Asia/Tokyo (JST, +0900)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a
("NTP synchronized: no" ということは,NTP同期が動いてない...)


$ sudo vi /etc/chrony.conf
(編集.サーバをネットワーク的に近いものに指定)
(今回は職場内部で設定されていたNTPサーバを指定.内部のprivate LAN向けにも公開(allow 以下の文))
-- 修正箇所ここから(サーバ名,公開するサブドメインIP address は,各自の設定を)
server hogehoge.server.jp iburst

allow 192.168.xxx.0/24
-- 

(chronyd の再起動)
$ sudo systemctl restart chronyd

(時刻とNTP同期の確認)
$ timedatectl
      Local time: 水 2019-05-29 12:16:18 JST
  Universal time: 水 2019-05-29 03:16:18 UTC
        RTC time: 水 2019-05-29 03:16:18
       Time zone: Asia/Tokyo (JST, +0900)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a
(今度は "NTP synchronized: yes" に変わった)
(時刻が過去に戻った.これが正確な値)

$ sudo systemctl status chronyd
● chronyd.service - NTP client/server
   Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2019-05-29 12:29:18 JST; 3h 28min ago
     Docs: man:chronyd(8)
           man:chrony.conf(5)
  :
  :
  :
(まだ続くが省略)


(もしboot時から chronyd を起動したかったら enable に)
$ sudo systemctl enable chronyd


(chronyc にて,時刻合わせしてるサーバ情報を確認)
$ chronyc sources

 リンク先

HDD 増設・移設関連

HDD取扱関連メモに移設(2016-02-13).

CentOS の基本的セットアップ関連

  リリース番号・バージョンなどの確認

  • 導入済み CentOS のリリース番号を確認するには?
$ cat /etc/redhat-release
CentOS release 5.6 (Final)

(CentOS 7系列の場合)
$ cat /etc/centos-release
CentOS Linux release 7.1.1503 (Core) 
  • kernel のバージョン番号を確認するには?
$ uname -a
Linux hoge.com 2.6.18-194.32.1.el5 #1 SMP Wed Jan 5 17:52:25 EST 2011 x86_64 x86_64 x86_64 GNU/Linux
  • libc のバージョン番号を確認するには?
(CentOS 5系列の場合)
$ /lib/libc.so.6
GNU C Library stable release version 2.5, by Roland McGrath et al.
Copyright (C) 2006 Free Software Foundation, Inc.
 :
 :
(以下10行あまりのメッセージ続くが,省略)

(バージョン番号だけを表示させる場合)
$ strings /lib/libc.so.6 | grep "GNU C Library" | cut -d, -f1 | awk '{print $7}'


(CentOS 7系列の場合)
$ /lib/libc-2.17.so
GNU C Library (GNU libc) stable release version 2.17, by Roland McGrath et al.
Copyright (C) 2012 Free Software Foundation, Inc.
 :
 :
(以下10行あまりのメッセージ続くが,省略)

(バージョン番号だけを表示させる場合)
$ strings /lib64/libc-2.17.so | grep "GNU C Library" | cut -d, -f1 | awk '{print $9}'
  • kernel & libc のバージョン番号を一度に確認するには?

自分用にコマンド作って,実行可能にしておけばよかろう.

$ cat $HOME/bin/show_version_kernel_glibc
#!/bin/sh

KERNEL_VERSION=`uname -a | gawk '{print $3}'`
GLIBC_VERSION=`strings /lib/libc.so.6 | grep "GNU C Library" | cut -d, -f1 | awk '{print $7}'`

echo "  Kernel vesion = ${KERNEL_VERSION}"
echo "   glibc vesion = ${GLIBC_VERSION}"
unset KERNEL_VERSION GLIBC_VERSION

$ chmod 755 $HOME/bin/show_version_kernel_glibc
$ ~/bin/show_version_kernel_glibc
Kernel vesion = 2.6.18-194.32.1.el5
 glibc vesion = 2.5

  初期設定ウィザード

CentOS初回起動時に実行される初期設定ウィザード「Setup Agent」は,コマンドラインからも実行出来る

  • Authentication
# /usr/sbin/authconfig-tui 
  • Firewall Configulation
# /usr/bin/system-config-securitylevel-tui 
  • Network Configuration
# /usr/sbin/system-config-network-tui 

copied from "http://www.naoyoshi.com/"; written in 15Jan2009 on the web.

  ディスプレイ設定(解像度,ドライバ,デュアルヘッド構成など)

# /usr/bin/system-config-display 

  alternatives コマンド(例: mail transfer agent の切り替え)

postfix と sendmail という2つの mail transfer agent が存在するとき,それを切り替える

# alternatives --config mta

  文字コード変更(UTF8 <=> EUC)

TeX 関連コマンドの対応文字コードがEUCであったため,長らく EUC のままで使っていた. UTF-8 でも TeX を使えるメドが立った(自分が知らなかっただけ)ので,UTF-8環境に移行した(2010年8月に実施).

デスクトップ環境など,日常的な作業環境について変更が必要なのは,以下の2つの設定ファイル.

  • /etc/syconfig/i18n
LANG="ja_JP.EUC-JP"
#LANG="ja_JP.UTF-8"
#LANG="en_US.UTF-8"   # 英語モードの場合
  • ~/.dmrc (GNOME Desktop の文字コード)
[Desktop]
Session=default
Language=ja_JP.eucJP
#Language=ja_JP.UTF-8
#Layout=us   # US配列キーボードの場合
  • ~/.vimrc (vim の個人用設定ファイル)

default からの修正点のみ記す.設定ファイル末尾付近にある, if $LANG=~ "ja.*" 内,文字コード指定部分.自動判別する文字コードの並び順を修正. 正直いって,なんでこういう順序なのか理解できない.試行錯誤しているうちにこれが最も 正常に動作したので,使い続けているだけ. なお,行の開始文字列が(空白以外で)ダブルクオートの場合は, コメントアウト(過去の設定や試行錯誤の名残) を意味する.

if $LANG =~ "ja.*"
  if has("multi_byte")
    "set encoding=japan
    "set termencoding=japan
    set encoding=utf-8
    set termencoding=utf-8
    "set fileencodings=iso-2022-jp,utf-8,utf-16,ucs-2-internal,ucs-2,shift-jis,euc-jp,japan
    set fileencodings=iso-2022-jp,ucs-bom,utf-8,euc-jp,cp932,default,latin1
    "set fileencodings=utf-8,iso-2022-jp,utf-16,ucs-2-internal,ucs-2,shift-jis,euc-jp,japan
  endif
endif

 SELinux の有効化・無効化

getenforce
状態確認
setenforce
setenforce 0 で無効化,setenforce 1 で有効化
  • check SELinux status
[hayasaki@goose ~]: getenforce Enforcing
  • Enabling/Disabling SELinux
$ sudo setenforce 0
$ getenforce
Permissive
$ sudo setenforce 1
$ getenforce 
Enforcing
  • Set startup program for enabling/disabling SELinux
$ sudo vi /etc/sysconfig/selinux 
SELINUX=disabled    # <= Disabled
SELINUX=enforcing   # <= Enabled

 デーモンの停止・再起動

chkconfig (CentOS 5, 6系列)

現在は使ってないので省略(2015-06-18). 古いOSを使わざるをえないときの覚書として記録.

使い方の例は, サーバ監視(hysk), セキュリティ対策メモ(hysk) # サービス停止, proftpdセットアップ(hysk)なども参照.

systemctl (CentOS 7系列)

CentOS 7系列からは systemctl コマンドによる制御. CentOS 5.x & 6.x 系列では,chkconfig コマンドだった.

使い方の例は, セキュリティ対策メモ(hysk) # サービス停止, トラブル解決メモ(hysk) # ネットワーク関連, なども参照.

  • ネットワーク関連

CentOS 7.x 系列で,サスペンド状態からの復帰時に時々ネットワークが正常稼働していないためよく使う (トラブル解決メモ(hysk) # ネットワーク関連).

$ sudo systemctl restart NetworkManager
$ sudo systemctl restart network

起動時のランレベル (run level) の変更. CentOS 7.x 系列では systemctl set-default を使う. それ以前は /etc/inittab を編集していた (add 2019-05-20)

$ sudo systemctl get-default
graphical.target
$ sudo systemctl set-default multi-user.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.

リモートログインするホストの場合,GUIを起動しておく必然性がまったくない. マルチユーザモード (run level=3)に変更しておく.

systemctl は,systemd を制御するためのコマンド. 詳細は man systemctl にて確認. 他の実行例は, セキュリティ対策メモ(hysk)#サービス停止も参照.

systemctl オプション コマンド サービス名

  Kick-start install

概要・作業の流れ

インストール台数が多い場合には,キックスタートインストールが有効. 手動でおこなっていた作業時間を省力化できるので, インストール台数が多くなる程,恩恵が大きくなる.

様々なやり方があるようだが,全てを網羅した解説文を書くのは困難. ここでは,自分が実施予定の kick-start install について記述する. 未検証なので,以下の記述に間違いがある可能性高い.

作業環境(設定の前提条件)は以下の通り:

  • インストール元は,private LAN 内部の anonymous FTP サーバ (サーバ名 haya_ftp, IP: 192.168.0.11 とする)
  • anonymous FTP root は,haya_ftp:/disk01/anonymouf_ftp/ とする
  • USB メモリを bootable にして,インストーラを起動 (CD/DVD メディアを焼くのが面倒&もったいない. また,ながーい目で見れば,消耗品購入の頻度・手間を減らすことが出来る.些細な事ではあるが,事務作業軽減になる)
  • インストールする計算機は,固定IPを割り付ける. 個々のサーバごとに kickstart config. file の中にIPアドレスを直接指定(実際には,シェルスクリプトで半自動大量作成する)

基本手順は以下の通り:

  1. kickstart install の configuration file を用意する
    • 雛型は,別PCでのインストール時に作成されている /root/anaconda-ks.cfg をベースにする
    • kickstart configuration file は, haya_ftp に(一時的に)置く. 本来ならセキュリティ面で問題有りだが, ほぼ個人的な使用のみに限定される private LAN 内なら,まぁいいでしょう
    • ファイル名を ks_server01.cfg とし,anonymous ftp でアクセス可能なディレクトリに置く (haya_ftp でのローカルなパスは/disk01/anonymous_ftp/ISOimage/CentOS/ks/ 以下. anonymouf ftp によるアクセスでは,/ISOimage/CentOS/ks/ 以下として見えているはず)
    • 最初から全てを網羅した kickstart file を用意できると思うな. 「これで完璧」と思っても,必ずミスや不満な点がある. 何度か失敗を繰り返すことで,自分の作業環境に適した configuration を用意できるはず
  2. CentOS installer が入った, bootable USB メモリを用意
    • これは別項参照
  3. USB メモリからの boot 時,インストーラ画面冒頭で下記のように入力
    boot: linux ks=ftp:192.168.0.11:/ISOimage/CentOS/ks/ks_server01.cfg
    
  4. キックスタートの設定ファイルのアドレスを boot 時に指定. これにより,あとは ks_server01.cfg に記述された内容通りに インストール作業が進行する... はず

configuration file 中の root password の暗号化

以下のコマンドを実行

openssl  passwd  -1

パスワード入力(2回)すれば, 暗号化されたパスワード文字列が画面表示される. それを configuration file に copy & paste すればよい.

参考サイト

  • Google にて "centos キックスタート" の2つで検索
  • サーバの構築を簡単にするためのステップ (その3)
    • 今回の作業手順と合致するわけでは無いが,段階的な思考過程を追う・異なるケースでの configuration の修正点などが比較的簡潔にまとまっているので,最初に見るには参考になった.自分でカスタマイズしたい箇所の設定方法などが書いてなかったが,それは別 サイトを参照した

研究室Linux で設定しそうな事柄

プリンタの設定

CUPS を使用. プリンタはネットワーク接続 (IPは仮に 192.168.1.101 とする).

 OKI C5900 の場合

PPDファイルをダウンロードし,適切な場所に手動コピーしておく.

  1. PPDファイルのダウンロード
  2. PPDファイル(gzのまま)を/usr/share/cups/model にコピー
  3. cups の restart
  4. CUPS管理ページにアクセス (自分PCだったら http://localhost:631/admin)
  5. プリンタ追加を実行,LPDで追加 (lpd://192.168.1.101/queue)

 Fuji xerox C2110 の場合

以下の手順(メーカ配布マニュアルより抜粋)どおり

配布されてる rpm を通常手順で rpmインストール,その後 CUPS 管理画面で作業.

  1. rpm のインストール
  2. CUPS 管理画面で「プリンタ追加」
  3. CUPS にて選択する項目を下記に列挙:
    1. 識別名は C2110 とした (任意の名前で良い.しかし,日本語やスペース,特殊記号は使用しない方が良い.トラブルの元になる)
    2. ドライバは lpd://(IP address)/queue
    3. メーカ名は FX を選択.そうすれば,インストールされたドライバがリストに出てくるはず
  4. デフォルトプリンタに設定,プリント標準設定も一部変更(両面印刷,長辺閉じ,ソートあり)
  5. (以下は不要かもしれない.古いメモに残っていたので追記;20110905) xdviで標準プリンタとして使用するための設定を追記. ~/.bashrc に環境変数 PRINTER を設定(export PRINTER=C2110)
Fuji xerox プリンタの Linux用プリンタドライバの探し方

初心者にとって,置き場所が少々わかりにくいと思われる. FUJI XEROX の Linux 版ドライバは, 同社製品情報の「ダウンロード」タブからは辿れなかった. 「商品情報」タブから,必要商品のページにアクセスするのが先.

各商品のweb (DocuPrint C2110 ならば カラープリンタDocuPrint C2110商品情報 ) の右列,「ダウンロード」の「ドライバ & ユーティリティ」 を辿れば見付かるはず.

本ページの更新時点では,バージョン 1.0 (登録日: 2009-04-03)であった(最終確認日: 2011-09-05).

 動作確認済プリンタ

私個人が CentOS 5.x にて動作を確認したプリンタ:

プリンタ型番 メモ
OKI C5900 PPD ファイルを取ってきてコピーしただけ (CentOS 5.2, 5.3, 5.4)
Fuji xerox C2110 rpm ファイルをダウンロード&install . 32-bit版rpmでも x86_64 で使えた (CentOS 5.5, 5.6, 5.8)

/var/spool/clientmqueue/ の肥大化を回避するために

cron の実行結果は,デフォルトだと投入したユーザにメールで知らせる. sendmail などが動いていないと,/var/spool/clientmqueue/ 以下にメッセージが蓄積される.

MAILTO=""

などとしても,メールは来ないがログはたまってしまう.

自分の場合,cron 実行の結果はほとんどチェックしなくてよいものが多いので,ある程度の日数が経過したら /var/spool/clientmqueue/ 以下のファイルを自動削除することにした. 具体的には,以下のシェルスクリプト (ファイル名: cleanup_clientmqueue) を /etc/cron.daily/ 以下に置いて,自動削除させる:

#!/bin/sh

target_path=/var/spool/clientmqueue
find ${target_path} -mtime +30 -exec rm {} \;

... と書いたが,後日 (2010-09-23) になってその機能があるコマンドを発見.その名は /usr/sbin/tmpwatch

/etc/cron.daily の tetex.cron で使っていた.

#!/bin/bash
# Remove TeX fonts not used in 180 days
/usr/sbin/tmpwatch 4320 /var/lib/texmf
exit 0
(180日以上経過した TeX のfontを削除する

自分が知らないだけで, こういうコマンドはちゃんと存在するんですねぇ.さすがだ.

/etc & /var 自動 backup (root のみ)

下記のシェルスクリプト (ファイル名: etc_var_backup) を /etc/cron.daily/ 以下に置いて, /etc & /var 以下をtar にてアーカイブ, /etc & /var とは物理的に異なるハードディスクに自動コピーしている:

#!/bin/sh

backup_path=/data/backup/settings
find ${backup_path} -mtime +1 -exec rm {} \;

##yymmdd=`LANG=C ; \date +"%Y%m%d_%H%MJST"`
yymmdd=`LANG=C ; \date +"%Y%m%d"`
  echo $yymmdd
#  archive /etc
cd /

etc_archive=${backup_path}/etc_${yymmdd}.tgz
tar czf ${etc_archive} etc

#  archive /var
var_archive=${backup_path}/var_${yymmdd}.tgz
tar czf ${var_archive} var

この例の場合は, 作成から丸24時間以上経過したバックアップファイルを削除 (結果的に直近の3日分が保存される)している.

個人ファイルのバックアップなどは, バックアップ(個人用ファイル) を参照.

パッケージ管理関連

複数人でデータ管理

研究室で複数人が共同使用する計算機には, 複数人が利用する大容量データを ある共通ディレクトリ(「データ管理ディレクトリ」と表記; ex. /work/common/ ) 以下に置く場合があるだろう.

その場合,それら複数人の「データ管理者」の誰もが, データ管理ディレクトリ以下に存在する ディレクトリ・ファイルの読み書きが出来れば便利である.

このような設定をするには,下記のような手順をふむとよい.

  1. root にてデータ管理用のグループを作成 (ex. グループ名: data_admin, グループID: 30001). このグループに,データ管理に従事するユーザID (ex. user1, user2)を追記.
    # vi /etc/group
    --- 以下の行を挿入
    data_admin:x:30001:user1,user2
    
  2. データ管理ディレクトリのグループ名・アクセス権の設定
    1. (新規作成の場合)データ管理ディレクトリを作成. root ないし ディレクトリ作成者がグループ名とアクセス権を下記の用に変更.
      # mkdir /work/common
      # chgrp data_admin /work/ftp/pub/common
      # chmod 2775 /work/ftp/pub/common
      
    2. (既存ディレクトリの場合) データ管理ディレクトリ以下に存在するディレクトリを探索, ディレクトリのグループ名とアクセス権を一括変更. 必要ならば,ファイルについてもグループ名とアクセス権を一括変更. See also find コマンドの応用
      # cd /work
      # find ./common -type d -exec chgrp data_admin {} \;
      # find ./common -type d -exec chmod 2775 {} \;
      --- ファイルのグループ名・アクセス権変更
      ----- 注意:ファイルのアクセス権を一括変更する場合,ファイルの種類に注意.
      ----- 下記の例では,全ファイルを 664 にしてしまう.
      ----- ファイルの種類(実行ファイル,データファイルなど)に応じ,適切なモードを設定すること.
      # find ./common -type f -exec chgrp data_admin {} \;
      # find ./common -type f -exec chmod 664 {} \;
      

更新履歴

更新日 内容
2019-05-29 CentOS 7.x 系列での時刻合わせ,ntpd でなく chronyd を使う. いつの間にか時刻が大幅に(10分程度)狂っていることに気付いてなかった...
2019-05-20 CentOS 7.x 系列でのランレベル変更方法の追記.
2016-02-13 id の付替を実施.他ページから参照していた場合,リンク切れするはず.見つけ次第修正.
NAS ボックス(Thecus N7710)関連の追記を機会に, HDD取扱関連メモとして別ファイルに分離.
20??-xx-xx 記述開始日,記録が残ってない.CentOS 5.2 当時の記録があるので,そのくらいには存在してたようだ.