前回のブログから1ヶ月以上あいてたよ、反省。
タイトルそのまんまですw
lsコマンドが終わってから、
次はwcコマンドのプログラムを考えないといけなかったんだけど
wcコマンドが難しすぎて いろいろ考えていたら
ブログのことなんて忘れていた😂
wcコマンドのポイントも書きたいな〜と思いつつ、
次にも進みたいな〜とか。
そんなこんなしてたら 子供が体調不良で家にいることが多くなり
3週間くらいちゃうかな〜 ほんとあまり何もできなかった😭
やっと今週頭から登園してくれていて まだ鼻水でよるけど、咳がおさまってくれただけでもだいぶまし。
でも、
でもでも、
なんだか今度は私が怪しい。。。。
時々咳き込んじゃうし、 鼻水も出てきた!!
いや〜〜〜〜〜〜😱😱😱😱
とりあえず、漢方飲んで 大人しくしておこう。
勉強はするけどね🤫
lsコマンド / File::Stat#modeを使って記号表記を目指そう。
lsコマンドのことを忘れないために、 続けてlsコマンドについて記します📝
lsコマンド / ロングフォーマットのファイルタイプとファイルモードとはなんぞや?
の最後の方にも書いたが、
ファイルモードってls -l
を実行したから
drwxr-xr-x
といった記号表記で表してくれているけど、
そのコマンドのプログラムを作ろうと思ったら、
記号表記にするための何かが必要になる。
そこで
File::Stat#mode
を使う🙂
(例)
fs = File::Stat.new('dir') p fs.mode #=> 16877 p fs.mode.to_s(8) #=> "40755" p fs.ftype #=>"dir"
(例)を参照に、
File::Stat#mode
はファイルモードを10進数の数値で返してくれる。(16877)
これを記号表記drwxr-xr-x
にするための、意味のわかるものにするために
fs.mode.to_s(8)
で8進表記の文字列に変換する必要がある。("40755")
fs.ftype
を実行するとファイルタイプを教えてくれる🤓("dir")※余談
ちなみに
File::Stat.new('dir')
は
File.lstat('dir')
という方法でもインスタンスが作れるが
挙動が異なる場合があるので使うときは注意が必要。
8進表記の文字列がわかったら
それを元に記号表記に変換していく作業が必要となる。
☆目指すところ☆
8進表記の40755
を記号表記drwxr-xr-x
にする。
その前に、
8進表記で、最初が0の場合だと省かれて5桁になる。
40755
も本来なら040755
と表して欲しいところだが、
File::Stat#mode
が整数を返してきて、それをto_s(8)
したところで、
最初が0だったらそりゃ表示されない。🙃
なので、プログラムを作る時にこの8新表記を5桁のままでいくか、あえて6桁にするか、
そこは個々の好みだと思う。(ちなみに私は6桁にした🤫)
8新表記の意味
それぞれ下記の意味を持つ。
- 1~2桁目:ファイルタイプ
- 3桁目:特殊権限
- 4桁目:所有者の権限
- 5桁目:グループの権限
- 6桁目:その他のユーザの権限
(例)の040755
を参照すると(6桁で考えるため0を足している🙇♀️)
ファイルの種類 | 特殊権限 | 所有者の権限 | グループの権限 | その他のユーザの権限 |
---|---|---|---|---|
04 | 0 | 7 | 5 | 5 |
d | 各組のx部分 | rwx | r-x | r-x |
1. 1~2桁目:ファイルタイプ
8進表記の1~2桁目はファイルタイプを表す。
それぞれの対応は以下である。
8進表記 | 記号表記 | ファイルタイプ |
---|---|---|
01 | p | FIFO(名前付きパイプ) |
02 | c | Character special file(キャラクタデバイス) |
04 | d | Directory(ディレクトリ) |
06 | b | Block special file(ブロックデバイス) |
10 | - | Regular file(通常ファイル) |
12 | l | Symbolic link(シンボリックリンク) |
14 | s | Socket link(ソケット) |
7種類のファイルタイプがあるけど、
d
と -
と l
が大体のメインどころみたい。
3桁目:特殊権限
8進表記の3桁目は特殊権限を表す。 それぞれの対応は以下である。
8進表記 | 記号表記 | 特殊権限 |
---|---|---|
0 | なし | なし |
1 | tまたはT | スティッキービット |
2 | sまたはS | SGID |
4 | sまたはS | SUID |
4〜6桁目:ファイルモード(各権限)
ファイルモードには「読み込み」「書き込み」「実行」の3種類の権限がある。
そして、それぞれの権限は 3桁の2進表記の各桁に対応づけられていて、
権限のあるなしを0か1かで判断している。
8進表記 | 2進表記 | 記号表記 | 権限 |
---|---|---|---|
0 | 000 | - | なし |
1 | 001 | x | 実行 |
2 | 010 | w | 書き込み |
4 | 100 | r | 読み込み |
この3種類の権限は同時に持つことができるため、
それによって以下のパターンが考えられる。
8進表記 | 2進表記 | 記号表記 | 権限 |
---|---|---|---|
0 | 000 | --- | なし |
1 | 001 | --x | 実行 |
2 | 010 | -w- | 書き込み |
3 | 011 | -wx | 書き込み、実行 |
4 | 100 | r-- | 読み込み |
5 | 101 | r-x | 読み込み、実行 |
6 | 110 | rw- | 読み込み、書き込み |
7 | 111 | rwx | 読み込み、書き込み、実行 |
ファイルの権限は所有者、グループ、その他のユーザ の3組に分かれているため、
それぞれの組に対して上記の8通りの権限が割り当てられる。
上記の内容から(例)の8進表記040755
を改めて読み解くと
ファイルはディレクトリー、特殊権限はなし、
所有者が読み込み・書き込み・実行の権限を持ち(rwx
)
グループが読み込み・実行の権限を持ち(r-x
)
その他のユーザが読み込み・実行の権限を持つ(r-x
)
ということになる。
上記の内容が分かれば、 (例)とは違う8進表記や記号表記が表示されても、
それぞれの意味など理解ができるかと思う。
ただのつぶやき
lsコマンドでこのロングフォーマットのところは
ほんと、念入りに調べた。
とてつもなく疲れたのも覚えてる。
とりあえず、lsコマンドについてはこれで終わり。
次のカリキュラムはwcコマンドやねん。
考える前から頭痛くなりそう🫠
lsコマンド / ロングフォーマットのファイルタイプとファイルモードとはなんぞや?
先日、lsコマンドの詳細をざっくり書きましたが、
今日はその中で ロングフォーマットのファイルタイプとファイルモードについて、
もう少し詳しい情報を書きたいと思います。
前回のブログ
(例)
drwxr-xr-x 14 name staff 448 1 24 16:10 dir
上記の、drwxr-xr-x
について
改めて説明すると、
これはロングフォーマットと呼ばれるもので、
10桁で成り立っており、
1桁目はファイルタイプ、2桁目〜はファイルモードである。
ファイルタイプの種類は7つある。
ファイルモードは
r
:読み込みw
:書き込みx
:実行-
:権限なし
この中の3文字❌(カケル)以下の3組
- 所有者
- グループ
- その他のユーザ
で表示される。
(例)のdrwxr-xr-x
で考えると
1桁目がd
なのでディレクトリで
2桁目〜が、rwx
:所有者は読み込み・書き込み・実行の全てを許可、
r-x
:グループは読み込み・実行を許可、
r-x
:その他のユーザーも読み込み・実行を許可
という意味になる。
なお、ファイルモードを表す記号には前述のr
w
x
-
以外に、
特殊権限というものを表す記号もある。
- スティッキービット:
t
またはT
:3組目の3文字目(その他のユーザの実行権限) - SGID:
s
またはS
:2組目の3文字目(グループの実行権限) - SUID:
s
またはS
:1組目の3文字目(所有者の実行権限)
そして、一つのファイルに同時に複数の特殊権限を付与することはできないそう🙅♀️
特殊権限の記号の小文字・大文字の違いは
それぞれの特殊権限が設定されていて、
併せてそれぞれの組(オーナーやグループやその他のユーザ)の実行権限を持つか持たないか、で
持つ場合は小文字、持たなければ大文字。
(例2)
drwxr-xr-t 2 name staff 64 3 6 15:23 stickybit drwxr-xr-T 2 name staff 64 3 6 15:20 not_stickybit -rwxrwsr-- 1 name staff 0 3 6 15:29 sgid -rwxrwSr-- 1 name staff 0 3 6 15:27 not_sgid -rwsr--r-- 1 name staff 0 3 6 15:22 suid -rwSr--r-- 1 name staff 0 3 6 15:15 not_suid
以上がファイルモードとファイルタイプの詳細になる。
ただ、
ls -l
を実行した時に(例)のdrwxr-xr-x
と表示をしてくれるけど
このコマンドのプログラムとして考えた時に
(例)のような記号表記にするためには他にも必要なものがある。
そこで使うのは
File::Stat#mode
これ!!
File::Stat#○○
でいくつかの情報が得られる。(mode
やnlink
など)
またこれについては次のブログで😀
ただのつぶやき
いつもブログを書くときに思う。
書くの、おそってw
Markdownにまだ慣れていない、というのもあるけど
まとめながら書くと、日報同様本当に遅いw
もうちょっとサラッと書けるようになりたいな。
lsコマンドを作るんだ。
今習っているFBCのカリキュラムの中で 「lsコマンドを作る」というものがあり、
本日無事に全ての項目のOKをもらったので
サクッとまとめたものをブログに記しておこうと思う。
1.lsコマンドって??
lsコマンドは、ファイルやディレクトリの情報を表示するもの。
「list segments」の略。
ls
と打つと、現在いるディレクトリのファイルやフォルダを一覧表示してくれる、これが基本の動作。
そこにオプションが多く存在する。
(ただ、FBCのカリキュラムでは-a
-r
-l
の3つのオプションのみ。)
2.オプションについて
- オプション
-a
⇨よく使うオプションの一つ。
⇨ファイル名の先頭にピリオド(.
)があるファイルも表示してくれる。
- オプション
-l
⇨こちらもよく使うオプションの一つ。
⇨l
はlongなフォーマットの意味。各ファイルのロングフォーマットを表示してくれる。
⇨上のオプション-a
と一緒に使ったりする。( -la
とか)
- オプション
-r
⇨逆の順番で表示してくれる。
3.実装したい内容
- オプションなし
⇨横に最大3列を維持して表示。 ※下記参照
(ファイルの並び順は列ごとに辞書式順序にソートされる)
⇨カレントディレクトリの内容を表示。
- オプション
-a
⇨ファイル名の先頭に.
があるファイルも含めて表示。
- オプション
-l
⇨1行目にディレクトリ内の各ファイルのブロック数の合計を表示(total 数値)
⇨2行目以降に各ファイルのロングフォーマットを表示。
- オプション
-r
⇨逆順での表示。
※ ファイルの並び順。
# OKパターン 0 4 8 1 5 9 2 6 3 7 # NGパターン 0 1 2 3 4 5 6 7 8 9
また、以下の機能は実装の対象外。
4.ロングフォーマットについて
オプションの-l
を指定した時に
total
の下(2行目以降)に
表示される(例)のような形式をロングフォーマットという。
(例)
drwxr-xr-x 14 name staff 448 1 24 16:10 dir
ロングフォーマットの情報(詳細)は以下の7個。
①ファイルタイプとファイルモード
(例)の中ではdrwxr-xr-x
この部分に当たる。
10桁あり、1桁目がファイルタイプで、2桁目〜がファイルモード。
(この詳細はここで書くととてつもなく長くなるので 別のタイミングでブログにまた書きたいと思う。)
②ハードリンク数
(例)の中で14
の部分。
ファイルのハードリンク数を表示 (シンボリックリンクはカウントされない)
③所有者名
(例)の中でname
の部分。
ファイルの所有者名を表示。
④グループ名
(例)の中でstaff
の部分。
ファイルの所有グループ名を表示。
⑤ファイルサイズ
(例)の中で448
の部分。
ファイルサイズをバイト単位で表示。
(ただし、ファイルがキャラクタデバイスまたはブロックデバイスの場は
ファイルサイズの代わりにデバイス番号を16進数で表示する。)
⑥タイムスタンプ
(例)の中で1 24 16:10
の部分。
ファイルの最終更新時刻を表示。
表示形式は、デフォルトだと<月> <日> <時間>
だが
最終更新時刻が6ヶ月以上前または未来の日付の場合は <月> <日> <年>
と表示する。
⑦ファイル名
(例)の中でdir
の部分。
ファイル名を表示。
もし、ファイルがシンボリックリンクの場合は、リンク先のパスも表示する。
ただのつぶやき
前回から日にち結構あいてた。 なかなか続けて書けていないのはよくないな。
まぁ、でもこれも慣れ、ということで
そういえば、これを書いてたら
あーこうだったな〜とすごく辛かった時期を思い出して
(一番最初のオプションなしもだいぶ辛かったし、オプションの-l
も辛かった)
嫌になったw
けど、それを乗り越えられたから完成できたのもある。
時間はかかったけどね。
いつか、サクサクっとコーディングできる時が来るのだろうか。。。。
お名前.comでドメイン取得したその後。
学習の中で ドメインを取得しないといけなかったので
お名前.comで取得しました✨
※夫はGoogle Domeinsはどうなんだろう、と言っていましたが
学習のカリキュラムの中でお名前.comと書いてあるし、今回はそれに合わせよう、となりました🫣
取得した後、DNS設定なるものをするにあたって こちらに手順をメモメモ。
お名前.comにログインする。
ログインした時のトップ画面?にて
この画面が出たら
設定したいドメインにチェックを入れて
緑の次へをおす。
DNS設定/転送設定ー機能一覧ページより
選択したドメインが合っているか確認した上で
DNS設定の中にある DNSレコード設定を利用するの設定するボタンをおす。
下部に進むと、ホスト名などを入れる箇所があり
そこのVALUEに 使ってるサーバーのIPアドレスを入れる。(私なら、さくらのvpsのIPアドレス)
入力して、追加ボタンを押して確認画面がでてそのまま進めたら
設定は完了。
後に、お名前.comに登録したアドレスに
DNSレコード設定 完了通知
が届きます📧
なんならDNSレコード設定の時に
ネームサーバーを変更するの箇所にチェックを入れていたら
これも後にネームサーバー情報変更 完了通知
が届きます📧
意外に早く変更通知が来たかも。
そんなことよりも、
DNS関連機能の設定:DNSレコード設定|お名前.com Navi ガイド|ドメイン取るならお名前.com
ここにきちんとやり方載ってたわ😂
ただのつぶやき
連日ブログを書いてみた。 ほとんどめもがわりだけど。 でも、こういうのでいいのかもな。 ダメならなんか指摘くるだろう(人任せw)
nginxの起動やらなんやら。
今日はnginx
の起動とか
その他諸々、何かあった時のためのメモがわり。
学習の一環で、
nginx
をインストールすることになったんだけど
色々調べていたら
起動方法がいくつか見つかった!
sudo systemctl start nginx
sudo service nginx start
sudo /etc/init.d/nginx start
(この3個目のやつは、一番初めに参考にしていたブログに記載されていたもの。 でも日付見たら2014年とかだった。古いよね、それって。)
もしかしたら起動の実行コマンドってこれ以外にもあるかもしれない??😳
ただ、どうも今は
systemctl
を使うのが主流っぽい?🤔
ちなみに、
nginx
について
動いているかの確認方法
sudo systemctl status nginx
停止方法
sudo systemctl stop nginx
再起動方法
sudo systemctl restart nginx
もう、そのまんまって感じね。
ただのつぶやき
毎日書いて慣れないと。と 思ってはいるものの、 なかなか難しいところではあって。。。
学習について書きたいことがある時はいいけど、 正直ない時はどうしたら?と。
何気ない日常でもええんかな。まとまりのなりブログになりそうだけどw