UNIX・Linux・ノウハウ集 (1)

私は実はオープン系、Web系のSEをしておりまして、UNIXやLinuxに触れる機会が豊富です。
実際、私が借りているサーバ(このページのファイルを置いているサーバ)もLinuxです。
ここでは、UNIXやLinuxでプログラムするときに便利なコマンドをリストアップしていきます。

  1. ダンプリスト
  2. MS−DOSなどでよくお世話になったダンプツール、実はLinuxにもあるようです。

    【動作確認環境】
    Red Hat Enterprise Linux ES release 4 / FreeBSD 4.8-RELEASE-p3
    vi test
    
    Test-\r^MTest-\n
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    test.txt: unmodified: line 1
    
    od -Ax -tx1 -v test
    0000000    54  65  73  74  2d  5c  72  0d  54  65  73  74  2d  5c  6e  0a
    0000010

  3. nヶ月後の日付をファイル名に含むファイルの存在チェック
  4. たとえば、2006年12月に 2007年3月を示す「3ヶ月後の日付をファイル名に含むファイル」をチェックするには、 以下のようにします。
    FreeBSDの場合、-vスイッチで、本日日付から相対的に移動させる期間を指定して 時刻を表示させることができるので、「3ヶ月後」を示す "+3m" を -v スイッチの後ろにつけます。
    RedHatの場合、-dスイッチでそれに近いことをすることができます。 具体的には、"-d '3 months'" などのようにします。

    【動作確認環境】
    Red Hat Enterprise Linux ES release 4 / FreeBSD 4.8-RELEASE-p3

    以下では、主にFreeBSDでの使い方について解説します。

    SHELL=/bin/csh
    
    FILENAME=`date -v+3m '+%Y%m'`.txt
    
    if [ -f ${HOME}/testdir/${FILENAME} ]; then
    
        echo ファイル \'${FILENAME}\' が見つかりました
    
    fi
    
    

    この -v スイッチを活用すると、シェル上で日付を扱ういろいろなことができそうです。

    以下に -v スイッチで使用できる時間単位を挙げておきます。

    【例】
    date 2006年 12月 5日 火曜日 12時50分52秒 JST
    date -v+1y 2007年 12月 5日 水曜日 12時50分52秒 JST
    date -v+2m 2007年 2月 5日 月曜日 12時50分52秒 JST
    date -v-3w 2006年 11月14日 火曜日 12時50分52秒 JST
    date -v-5d 2006年 11月30日 木曜日 12時50分52秒 JST
    date -v+20H2006年 12月 6日 水曜日 08時50分52秒 JST
    date -v+25M2006年 12月 5日 火曜日 13時15分52秒 JST
    date -v+30S2006年 12月 5日 火曜日 12時51分22秒 JST

    このような複合もできるようです。

    date 2006年 12月 5日 火曜日 12時58分57秒 JST
    date -v+1y -v+2m -v-3w -v-5d -v+20H -v+25M -v+30S 2008年 1月11日 金曜日 09時24分27秒 JST

    また、日付の特定の箇所を数値で置き換えるように指定することもできます。

    【例】 2006年 12月 5日 火曜日 12時17分27秒 での実行例
    2000年のの今日の日付を取得する。 date -v0y 2000年 12月 5日 火曜日 12時17分27秒 JST
    3ヵ月後の1日の日付を取得する。 date -v+3m -v1d 2007年 3月 1日 木曜日 12時17分27秒 JST
    2ヵ月後の末日の日付を取得する。 date -v+3m -v1d -v-1d 2007年 2月28日 水曜日 12時17分27秒 JST
    3ヵ月後の末日の日付を取得する。 date -v+4m -v1d -v-1d 2007年 3月31日 土曜日 12時17分27秒 JST

    ただし、Red Hat では、-v スイッチは無いようです。
    その代わり、-d スイッチである程度のことができます。
    【制約条件】
    現在のところ、日付の特定の箇所を数値で置き換えるような指定方法は見つかっていません。
    また、複合条件は組み合わせによっては誤動作を起こすので、差し控えたほうがよいでしょう。
    何かよい方法がありましたら、ご連絡を賜りたく存じます…。
    date 2006年 12月 5日 火曜日 13:00:46 JST
    date -d '1 year ago' 2005年 12月 5日 月曜日 13:00:46 JST
    date -d '9 months' 2007年 9月 5日 水曜日 13:00:46 JST
    date -d '10days ago' 2006年 11月 25日 土曜日 13:00:46 JST
    date -d '15 hours ago' 2006年 12月 4日 月曜日 22:00:46 JST
    date -d '20 minutes' 2006年 12月 5日 火曜日 13:20:46 JST
    date -d '50 seconds' 2006年 12月 5日 火曜日 13:01:36 JST
    date -d '1 year 10 days' 2007年 12月 15日 土曜日 13:00:46 JST
    date -d '1 year ago 10 days ago' 2007年 11月 25日 日曜日 13:00:46 JST ← 1 years ago なのに…
    date -d '1 year ago 3 months 10 days ago' 2007年 2月 23日 金曜日 13:00:46 JST ← 1 years ago なのに…


Back「プログラミング・ノウハウ集」に戻る
Topトップページに戻る