【書式1】日付を返す date オプション... "+ 書式指定" 【例】既定の形式で日付情報を出力 shell> date 2009年 5月 7日 木曜日 11:19:45 JST 【例】"2010/01/01 01:02:03" の形式で日時情報を出力 shell> date "+%Y/%m/%d %H:%M:%S" 2010/01/01 01:02:03 【例】"2010/01/01 01:02:03 JST(+0900)" の形式で日時情報を出力 shell> date "+%Y/%m/%d %H:%M:%S %Z(%z)" 2010/01/01 01:02:03 JST(+0900)
オプション
-d, --date=文字列
$ echo -n '現在: ';date; \ > echo -n '現在から1秒後: ';date -d '1 second'; \ > echo -n '2016/4/1から1秒後: ';date -d '2016/4/1 1 second'; \ > echo -n '現在から2秒前: ';date -d '2 seconds ago'; \ > echo -n '現在から3分後: ';date -d '3 minute'; \ > echo -n '現在から4分前: ';date -d '4 minute ago'; \ > echo -n '現在から5時間後: ';date -d '5 hour'; \ > echo -n '現在から6時間前: ';date -d '6 hour ago'; \ > echo -n '現在から7日後: ';date -d '7 day'; \ > echo -n '現在から8日前: ';date -d '8 day ago'; \ > echo -n '現在から9週間後: ';date -d '9 week'; \ > echo -n '現在から10週間前: ';date -d '10 week ago'; \ > echo -n '現在から11ヶ月後: ';date -d '11 month'; \ > echo -n '現在から12ヶ月前: ';date -d '12 month ago'; \ > echo -n '現在から13年後: ';date -d '13 year'; \ > echo -n '現在から14年前: ';date -d '14 year ago' 現在: 2016年 4月 12日 火曜日 16:24:18 JST 現在から1秒後: 2016年 4月 12日 火曜日 16:24:19 JST 2016/4/1から1秒後: 2016年 4月 1日 金曜日 00:00:01 JST 現在から2秒前: 2016年 4月 12日 火曜日 16:24:16 JST 現在から3分後: 2016年 4月 12日 火曜日 16:27:18 JST 現在から4分前: 2016年 4月 12日 火曜日 16:20:18 JST 現在から5時間後: 2016年 4月 12日 火曜日 21:24:18 JST 現在から6時間前: 2016年 4月 12日 火曜日 10:24:18 JST 現在から7日後: 2016年 4月 19日 火曜日 16:24:18 JST 現在から8日前: 2016年 4月 4日 月曜日 16:24:18 JST 現在から9週間後: 2016年 6月 14日 火曜日 16:24:18 JST 現在から10週間前: 2016年 2月 2日 火曜日 16:24:18 JST 現在から11ヶ月後: 2017年 3月 12日 日曜日 16:24:18 JST 現在から12ヶ月前: 2015年 4月 12日 日曜日 16:24:18 JST 現在から13年後: 2029年 4月 12日 木曜日 16:24:18 JST 現在から14年前: 2002年 4月 12日 金曜日 16:24:18 JST
年度内年月を示す6桁の数値を表示させる例:
$ i=0;while [ $i -le 11 ];do date -d "2015/04/01 $i month" '+%Y%m';i=`expr $i + 1`;done 201504 201505 201506 201507 201508 201509 201510 201511 201512 201601 201602 201603
-f, --file=ファイル名
-r, --reference=ファイル名
-R, --rfc-2822
-R, --rfc-3339=TIMESPEC
書式指定
分類 | 指定 | 内容 | 値の範囲、例 |
---|---|---|---|
世紀 | %C | 西暦/100を2桁表示 | 00-99 |
年 | %Y | 西暦を4桁表示 | 2012 |
%y | 西暦の下2桁表示 | 00-99 | |
月 | %B | 地域設定に応じた完全月名 | January |
%b,%h | 地域設定に応じた省略月名 | Jan | |
%m | 月を2桁表示 | 00-12 | |
日 | %d | 日付を2桁表示 | 01-31 |
%e | 日付を表示(1桁の前は空白がつく) | 1-31 | |
%j | 年通算日付を表示(1桁の前は0がつく) | 001-366 | |
曜日 | %A | 地域設定に応じた完全曜日名 | Monday, 月曜日 |
%a | 地域設定に応じた省略曜日名 | Mon, 月 | |
%w | 曜日番号 | 0が日曜日、1が月曜日、...、6が土曜日 | |
時 | %H | 24時制の時を2桁表示 | 00-23 |
%I | 12時制の時を2桁表示 | 00-11 | |
%k | 24時制の時を表示(1桁の前は空白がつく) | 0-23 | |
%l | 12時制の時を表示(1桁の前は空白がつく) | 0-11 | |
分 | %M | 分を2桁表示 | 00-59 |
秒 | %S | 秒を2桁表示 | 00-59 |
時刻 | %R | "%H:%M "(時:分 )と同じ | 12:34 |
%T | "%H:%M:%S "(時:分:秒 )と同じ | 12:34:56 | |
%c | 地域設定に応じた時刻日付表示 | 金 1/13 13:41:37 2012, Fri Jan 13 13:41:37 JST 2012 | |
%D | "%m/%d/%y "(月/日/西暦下2桁)と同じ | 01/13/11 | |
時間帯 | %z | "-/+"+"zzzz"(zは数字)の形式の時間帯(RFC-822形式) | +9000 |
%Z | 時間帯名(なければ空) | JST |
引数が指定され、かつその先頭が ‘+’ で始まっておらず、かつ実行者が適切な権限を持っていれば、 date はシステムの時計を引数で指定された時刻・日 付に設定する。 --date および --set の両オプションは、このような引数と一緒に用いることはできない。 --universal オプションをこのような引数とともに用 いると、指定した時刻・日付が (地方時ではなく) 協定世界時のものになる。
【書式2】日付を設定 date オプション... + 書式指定 日付 【例】システム時間を 2010年3月3日 10:00:00 に設定する shell> date 030310002010.00 2010年 3月 3日 水曜日 10:10:00 JST
日付の書式は"MMDDhhmmCCYY.ss"。
MM | 月 |
DD | 日(月内通算) |
hh | 時 |
mm | 分 |
CC | 西暦の上2桁(省略可能) |
YY | 西暦の下2桁(省略可能) |
ss | 秒(省略可能) |
表示書式はロケール設定に依存するが、環境変数LANGの値を変更するなどしてロケール設定を変更して表示書式を変更することができる。またdateコマンド実行時、一時的にロケールを変更するにはdateコマンドの前にロケール指定をつける[7]。
$ date 2012年 9月 19日 水曜日 18:23:12 JST $ LANG=C date Wed Sep 19 18:23:17 JST 2012
RHEL 7/CentOS 7ではより詳細な日付情報が表示できる timedatectl というコマンドがある14_1。
$ timedatectl Local time: 火 2019-03-26 10:14:45 JST Universal time: 火 2019-03-26 01:14:45 UTC RTC time: 火 2019-03-26 01:14:45 Time zone: Asia/Tokyo (JST, +0900) NTP enabled: yes NTP synchronized: yes RTC in local TZ: no DST active: n/a
date
コマンドなどの出力内容は言語設定によって変化する。環境変数LANGの値を変更することで言語設定は変更できる。英語なら「LANG=C」、日本語UTF-8なら「LANG=ja_JP.UTF-8」を実行すればいい[12]
【例】 $ who user pts/1 2010-10-28 12:00 (123.4.56.178) $ who am i user pts/1 2010-10-28 12:00 (123.4.56.178) $ id uid=501(user) gid=501(user) 所属グループ=501(user)
コマンドの前、最後の引数の後の空白は無視される。コマンドと引数、または引数間では区切り文字と見なされる
引数内に空白を含める際、文字列は'(シングルクォート)、"(ダブルクォート)のどちらかで囲む。なお、クォート内に変数があった場合、前者なら変数名そのまま、後者なら変数を設定されている値に置き換える。
【例】 $ hoge='foo';echo '$hoge';echo "$hoge" $hoge foo
`
(バッククォート)は、複数の引数をとるコマンドの引数に別のコマンドの返り値を利用したい場合(引数1つならパイプ(|)でOK)。
パイプ(|
)はあるコマンドの出力結果を別の入力として渡す。
渡される側のコマンドは子プロセスシェルとして呼び出されるため、渡される側のコマンド内で変数を操作してもコマンドが終われば元に戻ってしまう[1]。whileなどループ処理で変数を変更する場合などに注意が必要。
プロセス置換(<()
)はコマンドの出力結果をファイルとして扱えるようにする[2]。
$ diff <(echo "hoge") <(echo "hoge2") 1c1 < hoge --- > hoge2
ファイルにコマンドの実行結果を出力するにはリダイレクト(>
)を用いる。出力先が既に存在した場合は、既存のものが消去され上書きされる。追記したい場合は>>
を用いる。
【例1】カレントディレクトリにある、拡張子htmlのファイル名一覧をls.txtというファイルに出力する(既存上書き)。 ls -l *.html > ls.txt 【例2】例1と同じ(但し、既存追記) ls -l *.html >> ls.txt
なお、上記事例で該当ファイルがない場合エラーとなるが、エラーメッセージは標準ではファイルに出力されず、標準出力(画面)に出力される。標準エラー出力もファイルに出力するには、2>&1
を後に指定して、標準エラー出力(2番出力)も標準出力(1番)と同じものにする。
【例3】例1でエラーもファイルに出力 ls -l *.html > ls.txt 2>&1
出力を捨てるにはリダイレクト先として/dev/null
を指定する。
【例4】カレントディレクトリにある、拡張子htmlのファイル名一覧を画面に出力。エラーは出力しない。 ls -l *.html 2>/dev/null 【例5】カレントディレクトリにある、拡張子htmlのファイルがなかった時のエラーのみ画面に出力。 ls -l *.html 1>/dev/null
なお、入出力装置(ファイルディスクリプタ)のうち3つはシステムに予約されている。0番は標準入力(Standard Input、通常はキーボード)、1番は標準出力(Standard Output、通常はディスプレイ)、2番は標準エラー出力(Standard Error Output、通常はディスプレイ)[9]。
スクリプトで出力を全てログに書き出す場合など、都度リダイレクト先を書かなくても、リダイレクト先を一時変更してしまう方法もある[10]。
# 標準出力、標準エラー出力をそれぞれ3番と4番のデスクリプタにバックアップ exec 3>&1 4>&2 # 標準出力のリダイレクト先をfooというファイルに変更し、標準エラー出力もそれに合わせる exec 1>foo 2>&1 # ... # 標準出力、標準エラー出力を元に戻す exec 1>&3 2>&4
コマンドの末尾に「&
」(アンパサンド)を記すとコマンドがバックグラウンドで実行される。実行完了までに時間のかかるスクリプト等を実行する場合、この処置を行うとスクリプト等が終了するのを待つことなく実行中に他の操作ができる。
$ ./heavy_script.sh & [1] 12345 $ ps ax | grep heavy_script 12345 pts/1 R 0:39 /bin/sh ./heavy_script.sh 12346 pts/1 S+ 0:00 grep heavy_script $ # 実行が終わると、その旨通知される(何か他のコマンドを実行するか、または単にエンターを入力する) [1]+ Done ./heavy_script.sh
nohup
コマンドはハングアップシグナルを無視してコマンドを実行する。これによりログアウトした後もバックグランドでコマンドを実行し続けることができる。但し、コマンドを自動的にバックグランドに送る訳ではないので、バックグラウンドで実行するにはコマンドラインの末尾に ‘&’ をつけて、ユーザーが明示的にバックグラウンドへ送る指定をする必要がある。
【書式1】
nohup コマンドや引数
【書式2】標準出力に使用方法のメッセージを出力して正常終了する。
nohup --help
【書式3】標準出力にバージョン情報を出力して正常終了する。
nohup --vertion
【例】./hoge.sh をバックグラウンドで実行(./hoge.log へエラーも含めて出力)
nohup ./hoge.sh > ./hoge.log 2>&1 &
出展:man nohup (GNU Shell Utilities 2.1 18 June 2002)
nice
コマンドは優先順位を指定してコマンドを実行する。BSD版とGNU版で挙動や指定方法が異なる。[3][4][5][6]。
【書式1】優先度を変更して指定したプログラムを実行する (BSD版) nice -n 優先度増加量 実行プログラム名 実行プログラムの引数... (GNU版) nice オプション 実行プログラム名 実行プログラムの引数... 【書式2】(GNU版のみ)自身が継承したスケジューリング優先度を表示 nice 【書式3】(GNU版のみ)簡単なヘルプを表示して終了する nice --help 【書式4】(GNU版のみ)バージョン情報を出力して終了する nice --version
また、renice
コマンドで実行中プロセスの優先順位の変更することができる[11]
【書式】ホームディレクトリへ移動 cd cd ~ ※引数無指定時の挙動がMS-DOSのcdとは異なる(MS-DOSはカレントディレクトリを表示するだけ) 【書式】1つ前のディレクトリに戻る cd - 【書式】指定したディレクトリに移動 cd パス
ESCを長押しすると以下のような表示が出る。
$ Display all 3268 possibilities? (y or n)
ここで y を入力するとコマンドリストが表示される。
ワイルドカードを使って条件に合うファイルを全て指定することができる。
$ ls 1.txt abc.jpg 123.txt $ ls ?.txt 1.txt $ ls *.txt 1.txt 123.txt
{ } で囲んだ中にファイル名をコンマ区切りで列挙し複数ファイルを指定することができる。
alias
はコマンドの別名を登録したり、登録情報を表示したりする。オプション指定をデフォルトで付けることなどに使える。
このコマンドの指定は既定の設定では非対話的シェルでは適用されない。shopt
を使ってexpand_aliases
の設定を有効にすれば適用されるようになる。
【書式】登録されている別名設定を表示する alias 【例】 $ alias alias ls='ls --color=tty' alias vi='vim' 【書式】別名を登録 alias 別名='元のコマンド' 【例】cpコマンドでファイルを複製する際、既存であれば実行してよいかの確認を常に行うようにする alias cp='cp -i'