/mnt/data/skymonitor には,岡山大学で撮影した空の写真が置いてある.
まずはディレクトリを見てみる
$ cd /mnt/data/skymonitor $ ls 2016 2017 2018 2019
なんの説明もないが,写真は撮影した年ごとに分けて保存されていると,なんとなく予想される.
$ cd 2019 $ ls 01 02 03 04 05 06 07 08 09
月ごとに分けられているっぽい.
$ cd 07 $ ls
さらに日ごとに分けられているようだ.
$ cd 20190725 $ ls
ファイル名を見ると,撮影日時がファイル名になっているらしい(ということくらいは,説明がなくてもわかって欲しい).
JPEG形式の画像は display コマンドで見ることができる
$ display 201907250000.jpg
ファイル名から深夜0時の写真と予想され,開いてみると夜の空っぽい画像が出てくる.中央やや右に写っている白い点は星(よく見ると他にもいくつか星が写っている).画面の下の方は白っぽくなっているのは,雲が出ているため(たぶん).左上にある数字は撮影の日付と時刻を表している(たぶん).違う時刻の写真も開いてみる.
$ display 201907251500.jpg
いろんな時刻の写真を見てみると,この日は午前中は曇っていて,午後はだんだん雲が少なくなっていったことがわかる.
ちなみに,20:13に撮影された画像には流れ星が写っている.
ファイル名から想像するに,写真は1分おきに撮影されている.ということは,このディレクトリには1440枚の写真が保存されていると考えられる(1440がどこから出てきたかわかりますよね? 1日は24時間,1時間は60分,なので1日は24x60=1440分).実際に1440枚の写真があるのかどうか数えてみる.
1440個も数えるのは面倒だと思う.そう思うのは正しい(というか,面倒だと思わない人はたぶん何か間違っている).面倒なことは機械にやってもらったらよい.
まず,練習.
$ cd /mnt/data/skymonitor $ ls 2016 2017 2018 2019
このディレクトリにはファイルが4つある.
$ ls | wc -l 4
ここではパイプという技を使って,ふたつのコマンドを接続している.上の例では,最初に ls というコマンドでファイルの一覧を出力し,その出力をパイプ(|)によって wc -l というコマンドに渡している.wc -l は数を数える(正確には行数を数える)コマンドである.
$ cd 2019 $ cd 07 $ ls | wc -l 31
7月は31日まであるので,31個のファイル(ディレクトリ)があることが期待され,実際に31個あると確認することができる.
ディレクトリ 20190725 にあるファイルの数を数えてみる.
$ cd 20190725 $ ls | wc -l 1442
予想は1440だが,実際には1442となった. ファイルの一覧をもう一度見てみる.
$ ls
いちばん後ろに TempCPU.txt という名前のいかにも写真ではない感じのファイルがある.これは観測装置のCPU温度を記録したファイルで,たしかに写真のファイルではない.
あともうひとつ,写真じゃないファイルがあるのだが,それは簡単には見つからないかもしれない.ファイル数が多くなると,ls でファイルの一覧を表示したとき,画面に全てのファイル名を表示しきれなくなることがある.そういうときは,パイプを使って less につなぐ.
$ ls | less
less は1ページに収まらないデータを,1ページずつ表示してくれる.「スペース」キーを押すと次ページを表示,「Q」を押すと終了する. less を使ってよく見ると,20190725.mp4 というファイルがあるとわかる.これは1日の間に撮影された静止画をつなげて作った動画のファイル(mp4形式)である.
ということで,写真のファイルは全部で1440枚あることが確認できた.
ちなみに,写真のファイルは拡張子(ファイル名の最後(.の後ろ)に付く文字列)がjpgになっている. 後述するワイルドカードを使うと,以下で拡張子がjpgのファイルの数を数えることができる.
$ ls *.jpg | wc -l 1440
「*」や「?」はワイルドカードと呼ばれ,特殊な機能な持つ. ファイル名を指定するときに * や ? を使うと,以下の規則に従って展開される.
ワイルドカードを使うことで,複数のファイルをまとめて指定して処理することができる.
再び,ファイルの数を数えてみる. 2019年7月25日の12時10分台(12:10-12:19)に撮影された写真の数を数える.
$ cd /mnt/data/skymonitor/2019/07/20190725 $ ls 20190725121*.jpg 201907251210.jpg 201907251213.jpg 201907251216.jpg 201907251219.jpg 201907251211.jpg 201907251214.jpg 201907251217.jpg 201907251212.jpg 201907251215.jpg 201907251218.jpg
時刻を表す下4桁のうち,12時10分台は最初の3桁が121となり,最後の1桁はどんな数字でもよい.どんな数字でもよいという部分をワイルドカードに置き換えることで,12時10分台に撮影された全てのファイルを指定している.
10個くらいであれば人力で数えてもよいが,いちおう機械に数えてもらう.
$ ls 20190725121*.jpg | wc -l 10
同様にして,12時台(12:00-12:59)に撮影されたファイルは,以下のようにして数えたらよい.
$ ls 2019072512*.jpg | wc -l 60
以下の例は何を数えることになるか考えてみる. 予想が正しいかどうか確認する.
$ ls 20190725*10.jpg $ ls 20190725*10*.jpg
空の写真は電気仕掛けで自動的に撮影している. 正しく動作すれば毎日1440枚の写真が撮影されるが,正しく動作しないこともある. 例えば,2019年7月26日は1116枚しか撮影されていない.
$ cd /mnt/data/skymonitor/2019/07 $ ls 20190725/*.jpg | wc -l 1440 $ ls 20190726/*.jpg | wc -l 1116
どこで欠測したのか調べてみる. ファイルの一覧を表示して,隅から隅まで見ればどの時刻で欠測したのかわかるが,面倒なことは機械にやらせるという方針で,機械を使ってて探してみる. 例えば
$ ls 20190726/2019072600*.jpg | wc -l 60
0時台は60枚の写真が撮影されており,欠測はないとわかる. 一方
$ ls 20190726/2019072612*.jpg | wc -l 38
ということで,12時台は60未満であり,欠測したことがわかる.
少ない手数で欠測した時刻を調べる方法を考えるのもいいかもしれない. ちなみに,2019年7月23日にも欠測がある. どの時刻で欠測したのか調べてみる.
ファイルのコピーは
$ cp file1 file2
これは,カレントディレクトリにある file1 という名前のファイルのコピーをつくり,それに file2 という名前をつけてカレントディレクトリに格納する. file1 という名前のファイルが存在しなければ
cp: file1: No such file or directory
とメッセージが表示されて,失敗する.
ファイルが存在していても,コピーできるとは限らない. 例えば,
$ cd /mnt/data/skymonitor/2019/07/20190725 $ cp 201907252013.jpg meteor.jpg cp: cannot create regular file 'meteor.jpg': Permission denied
これは,カレントディレクトリ(/mnt/data/skymonitor/2019/07/20190725)にある201907252013.jpg というファイルのコピーを,カレントディレクトリにmeteor.jpgという名前で作る,というコマンドであるが,Permission denied と言われて,コピーを作ることに失敗している. コピーが作成されていないことを確認する.
$ ls
これは,カレントディレクトリにファイルを作成する権限がないために生じた結果である. ディレクトリのパーミッションを確認する
$ ls -l /mnt/data/skymonitor/2019/07
何も知らなくても,なんとなく george が所有者であるとわかるだろう.
自分が所有者のディレクトリにコピーをつくってみる. まず,ホームディレクトリが自分の持ち物であることを確認する.
$ cd /home $ pwd $ ls -l
コピーをホームディレクトリに作成してみる.
$ cd $ pwd $ ls
ホームディレクトリに meteor.jpg が存在しないことを確認したら(meteor.jpgが存在しているなら,次のコマンドはmetor.jpgを別の名前に置き換えて実行する),
$ cp /mnt/data/skymonitor/2019/07/20190725/01907252013.jpg meteor.jpg $ ls
meteor.jpg が作られたことを確認する. meteor.jpg がコピーであることを確認するなら,
$ display /mnt/data/skymonitor/2019/07/20190725/01907252013.jpg $ display meteor.jpg