sharoa’s blog

ただいま勉強中。

前回のブログから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コマンドの詳細をざっくり書きましたが、

今日はその中で ロングフォーマットのファイルタイプとファイルモードについて、

もう少し詳しい情報を書きたいと思います。


前回のブログ

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#○○でいくつかの情報が得られる。(modenlinkなど)

またこれについては次のブログで😀


ただのつぶやき

いつもブログを書くときに思う。

書くの、おそって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

また、以下の機能は実装の対象外。

  • 引数にファイルやディレクトリを指定可能にする。

  • 半角英数字以外のファイル名(ひらがなや漢字など)を持つファイルがあっても表示が崩れない。

  • mac拡張属性(@マークで表示される)に対応。

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

けど、それを乗り越えられたから完成できたのもある。

時間はかかったけどね。

いつか、サクサクっとコーディングできる時が来るのだろうか。。。。

今更ながらだけど。

可愛いと思ってカナヘイさんのデザインに設定していたけど なんか、リンク貼ったりとか こう文字がたくさんあると 読みづらくないか、と気づいてw

ブログのデザインを変えてみた!

前と比べて文字が普通になったから 断然読みやすくなった😆

でも、その分ブログが鮮やかになったw

美味しそうなデザインで、これからは書いていこうと思う。


ただのつぶやき

カナヘイさんがだいぶ好きなので デザインの変更は少し辛いw

お名前.comでドメイン取得したその後。

学習の中で ドメインを取得しないといけなかったので

お名前.comで取得しました✨

※夫はGoogle Domeinsはどうなんだろう、と言っていましたが

学習のカリキュラムの中でお名前.comと書いてあるし、今回はそれに合わせよう、となりました🫣

取得した後、DNS設定なるものをするにあたって こちらに手順をメモメモ。


お名前.comにログインする。

ログインした時のトップ画面?にて

ドメインDNS設定

上のネームサーバの設定より ドメインDNS設定を選択。

DNS設定/転送設定ードメイン一覧

この画面が出たら

設定したいドメインにチェックを入れて

緑の次へをおす。

DNS設定/転送設定ー機能一覧

DNS設定/転送設定ー機能一覧ページより

選択したドメインが合っているか確認した上で

DNS設定の中にある DNSレコード設定を利用する設定するボタンをおす。

DNSレコード設定その1

DNSレコード設定画面にて 再度対象ドメインを確認し

DNSレコード設定その2

下部に進むと、ホスト名などを入れる箇所があり

そこのVALUEに 使ってるサーバーのIPアドレスを入れる。(私なら、さくらのvpsIPアドレス

入力して、追加ボタンを押して確認画面がでてそのまま進めたら

設定は完了。


後に、お名前.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