「達人に学ぶDB設計 徹底指南書 初学者で終わりたくないあなたへ」を読んで

はじめに

「達人に学ぶDB設計 徹底指南書 初学者で終わりたくないあなたへ」を読了したのでその感想をまとめます。

良かったところ

  • 図の解説が適切なタイミングで挿入されていたので理解の助けになると同時に、初学者の私にとってわかりやすく感じる部分が多々ありました。
  • 設計のバッドノウハウアンチパターンに関する記載は、非常に参考になりました。自分が避けるべき落とし穴や注意点を学ぶことができました。

学んだこと

学んだことをNotionにてまとめています。

mammoth-penalty-977.notion.site

難しかったこと

  • 「初学者で終わりたくない」という表題通り、SQLの基礎をすでに習得している人を対象としている印象を受けました。初学者にとっては、少し難解な内容かもしれないと感じました。
  • 最終章で取り上げられている木構造については、正直なところ、一読しても理解するのが難しかったです。ただし、将来的に必要になる可能性もあるため、参考になると思いました。
  • 筆者が非正規化に関して原則的に許容しないスタンスを取っている一方で、切羽詰まった時には最後の手段として非正規化も辞さないと記載されている点について、少し困惑しました。

以上が、感想になります。本書を1日で読破したというコメントを見かけましたが、私自身は1週間ほどかかってしまいました。技術書の読み方についてもう少し考えていきたいと思います。

スッキリわかるSQL入門を読んで

はじめに

「スッキリわかるSQL入門」を読了したのでその感想をまとめます。

良かったところ

  • Web上で環境が提供されているため、実際に手を動かしながら学習することが容易でした。これは非常に良い点だと感じました。
  • SQLに関する内容だけでなく、正規化やER図についても軽く触れられており、基礎的な知識を増やすことができました。
  • 各章には小さな演習問題もあり、学んだ知識を振り返るのに役立ちました。

学んだこと

学んだことをNotionにてまとめています。

mammoth-penalty-977.notion.site

難しかったこと

  • ドリルとして200問以上の問題が用意されているのはとても良いと感じました。ただ、解答にはSQL文が羅列されているだけであり、学習者にとっては理解しにくい部分もありました。解き方や考え方などが記載されていると、より理解力が高まると思います。
  • 第12章の正規化については、私の理解力の限界もあって、一通り読み進めるだけの感じになりました。正規化は重要な要素だと感じていますが、自分が実際にテーブル設計に取り組むとなると、まだまだ十分に使いこなせないため、他の学習書を使ってさらに理解を深めたいと思っています。

以上が、「スッキリわかるSQL入門」に対する私の感想です。
この本を通じて、SQLの基礎知識を習得することができましたが、まだまだ学ぶべき点も多いと感じています。
今後もSQLの学習を継続し、実践的なスキルを身につけていきたいと思います。

【Ruby】optparseについて

optparseとは

optparseは、コマンドラインのオプションを取り扱うためのライブラリです。
コマンドを実行するとき、”-a”(任意の文字)のようにオプションを指定することができる。
また、Ruby標準ライブラリの一部のため、インストールなどは不要で簡単に利用できます。

基本的な使用例

1 optpaseをrequireする

require 'optparse'

2 OptionParserオブジェクトoptを生成する

opt = OptionParser.new

3 オプションを取り扱うブロックをoptに登録する

opt.on('-a') {|v| p v }

onメソッドはオプションを定義し、引数が指定されたときの処理をブロックで記述する。
ブロックの引数にはオプションが指定されたことを示す true が渡される。
onメソッドが呼ばれた時点ではブロックは実行されず、登録のみが行われる。

4 opt.parse(ARGV) でコマンドラインを実際にparseする

opt.parse!(ARGV)

parseメソッドが呼ばれた際に、コマンドラインにオプションが指定されていればブロックが実行される。

require 'optparse'
opt = OptionParser.new

opt.on('-a') {|v| p v }
opt.on('-b') {|v| p v }

opt.parse!(ARGV)
p ARGV


$ ruby sample.rb -a foo bar -b baz
# => true
     true
     ["foo", "bar", "baz"]

オプション

OptionParser自体は、どのオプションが指定されたかを記憶しないため、その後の処理でオプションによる条件を使用する場合は、別にコンテナ格納する必要がある。

require 'optparse'

# OptionParser インスタンスの生成
opt = OptionParser.new

# オプションに対するパラメータを格納するハッシュ
params = {}

# -a オプションの処理
opt.on('-a') { |v| params[:a] = v }

# -b オプションの処理
opt.on('-b') { |v| params[:b] = v }

# コマンドライン引数の解析
opt.parse!(ARGV)

# 解析結果の表示
p ARGV
p params


$ ruby sample.rb -a foo bar -b baz
# => ["foo", "bar", "baz"]
     {:a=>true, :b=>true}

ロングオプション

ショートオプションの他にロングオプションも定義できる。 onメソッドでオプション定義するときにショートオプションと一緒にロングオプションとして渡したい値を指定する。

require 'optparse'
opt = OptionParser.new

opt.on('-a', '--foo') {|v| p v }
opt.on('--bar') {|v| p v }

opt.parse!(ARGV)
p ARGV

$ ruby sample.rb -a foo bar --bar baz
# => true
     true
     ["foo", "bar", "baz"]

プロを目指す人のためのRuby入門を読んで

はじめに

Rubyの有名な技術書「プロを目指す人のためのRuby入門」を読了したのでその感想を書きます。

良かったところ

解説が丁寧でわかりやすいです。
各章で例題が配置されている点、現場目線で注意書きがされているのがありがたいなと感じました。 (例えば、現場ではXXは滅多に使わず、XXXをよく使います。といった感じで記載してくれている。)
筆者の人柄や気遣いが伝わる書籍でした。

学んだこと

6章

  • ハッシュの展開(**)
    • **をハッシュの前につけるとハッシュリテラル内で他のハッシュの要素を展開できる
h = { us: 'dollar', india: 'rupee' }
{ japan: 'yen', **h } #=> {:japan=>"yen", :us=>"dollar", :india=>"rupee"}

mergeメソッドも同じ働き

h = { us: 'dollar', india: 'rupee' }
{ japan: 'yen' }.merge(h) #=> {:japan=>"yen", :us=>"dollar", :india=>"rupee"}
  • ハッシュの擬似キーワード引数

ハッシュを受け取ってキーワード引数のように見せる

def buy_burger(menu, options = {})
  drink = options[:drink]
  potato = options[:potato]
  # 省略
end

buy_burger('cheese', drink: true, potato: true)
# buy_burger('cheese', { drink: true, potato: true })と同じ
# 最後の引数が {}の時だけ省略可能

’擬似’キーワード引数だと、未定義のキーワードでもエラーにならない。

buy_burger('fish', salad: true)

ただし未定義の’キーワード引数’だとエラーになる。

def buy_burger(menu, drink: true, potato: true)
  # 省略
end

# saladとchickenは無効なキーワード引数なのでエラーになる
buy_burger('fish', drink: true, potato: false, salad: true, chicken: false)
#=> ArgumentError: unknown keywords: salad, chicken

エラー回避(任意のキーワード引数が必要の場合)は**を使う

**引数

def buy_burger(menu, drink: true, potato: true, **others)
  # othersはハッシュとして渡される
  puts others
  # 省略
end
#=> {:salad=>true, :chicken=>false}

呼び出し元の引数で設定する例

params = {drink: true, potato: true}
buy_burger('fish', params)
#=>エラー

# **を使う
buy_burger('fish', **params)

7章

  • self.nameと@nameを基本的に同じという理解
  • privateメソッドになるのはインスタンスメソッドのみでクラスメソッドはprivateにならない
  • .freezeは、オブジェクトを変更不可能にするメソッドで、対象のオブジェクトは後からの変更が禁止される(エラー)。文字列や配列などのミュータブルなオブジェクトに対して使用され、不用意な変更を防ぐのに役立つ。
  • ダックタイピングとはオブジェクトの型やクラスよりも、その振る舞いや機能が重要であるプログラミングスタイルのこと

8章

  • モジュールの用途
    • 名前空間の作成
    • ミックスイン
    • 特異メソッドの追加
    • モジュール関数の提供
  • Enumerable モジュールは、配列やハッシュなど繰り返し処理を行うクラスにincludeされるモジュール
  • Comparable モジュールは、クラスに対して比較演算子<, <=, ==, >=, >)を可能にするモジュール

9章

  • 例外処理の構文
begin
 # 例外が起きうる処理
rescue
 # 例外が発生した場合の処理
end
  • 例外自身もオブジェクトとなる
    • 例えばmessageメソッド、backtraceメソッドなどがある
  • 情報を取得したい場合の構文
begin
 # 例外が起きうる処理
rescue => 例外オブジェクトを格納する変数
 # 例外が発生した場合の処理
end

例文

begin
  1 / 0
rescue => e
  puts "エラークラス: #{e.class}"
  puts "エラーメッセージ: #{e.message}"
  puts "バックトレース -----"
  puts e.backtrace
  puts "-----"
end

省略形としてeやexを使用することが多い

  • クラスを指定して補足する例外を限定させることも可能
begin
 # 例外が起きうる処理
rescue 補足したい例外クラス
 # 例外が発生した場合の処理
end

例文

0で徐算した場合に発生するZeroDivisionError

begin
  1 / 0
rescue ZeroDivisionError
  puts "0で除算しました"
end
#=> 0で除算しました

ZeroDivisionError以外のエラーが発生した場合はどうなるかと言うと例外は捕捉されない=プログラムが以上終了する

以下は、ZeroDivisionErrorを記載しているコードで存在しないメソッドを呼び出した例

begin
  # NoMethodErrorを発生させる
  'abc'.foo
rescue ZeroDivisionError
  puts "0で除算しました"
end
#=> NoMethodError: undefined method `foo' for "abc":String
  • 例外クラスにも継承関係がある
    • 全ての例外クラスはExceptionを継承している
  • rescue節に指定しない場合はStandardErrorとそのサブクラスが捕捉される。 その場合特殊なエラー(Nomemory ErrorやSystemExit)などは捕捉されない
  • 例外処理よりも条件分岐を使うべし
  • 例外が発生してもしなくても必ず実行したい処理がある場合はensureに記載
begin
 # 例外が発生するかもしれない処理
rescue #(※rescueは任意なので書かなくても問題ない)
 # 例外発生時の処理
ensure
 # 例外の有無に関わらず実行する処理
end
  • 例外が発生しなかった場合の処理はelseに記載
  • 例外処理にも戻り値があり、正常処理の場合はbegin内の最後、例外発生時はrescueの最後が戻り値になる

10章

  • yieldを使うと渡されたブロックを実行する ブロックに引数を渡したり、ブロックの戻り値を受け取ったりができる
  • yieldとブロックでやり取りする引数は個数の過不足に寛容
  • ブロックを引数として受け取る場合は引数名の前に&をつける ブロックを実行するときは.callを使う
def メソッド(&引数)
    引数.call
end
  • Procオブジェクトを作る方法
    • Proc.new
    • procメソッド
    • 構文 - >
    • lambdaメソッド

11章

  • パターンマッチとは「データ構造による条件分岐」「構成要素の取り出し」という要素を備えた機能とのこと。 条件分岐などの用途で使われる。
case 式
in パターン1
  パターン1にマッチした時の処理
in パターン2
  パターン1にマッチせず、パターン2にマッチした時の処理
else
  パターン1,2にマッチしなかったとき
end
  • ver3.0から正式に導入された

12章

  • エラーが発生するとバックトレースが出力される
    • 実行環境によって表示形式が変化する
    • 下に行くほどエラーが古い(上のエラーが新しい呼び出し)
  • よく発生する例外
    • NameError
      • 未定義のローカル変数や定義を呼び出したとき
    • NoMethodError
      • 存在しないメソッドを呼び出そうとしたとき
        • メソッド名違い
        • privateメソッドをクラス外から呼び出したとき
        • レシーバの型が想定していた型と異なるとき
        • レシーバが想定と違いnilのとき
    • ArgumentError
      • 引数の数が違ったとき、期待値ではなかったとき
    • SyntaxError
      • 構文エラー、endやカンマに過不足がある時など
  • デバッグでプログラムの途中経過を確認
    • printデバッグ
      • printメソッドをプログラムに埋め込んで、プログラムを実行し、ターミナルに出力される値を確認して不具合の原因を探る
    • logger.debugでデバッグ情報をログに出力する
    • デバッガ(debug.gem)を使う
      • プログラムを1行ずつ実行しながら変数の中身を確認したり、実行される条件分岐を確認したりできる
  • その他トラブルシューティング
    • irb上で簡単なコードを動かす
    • ログを調べる
    • 公式ドキュメントやリファレンスを読む
    • issueを検索する
    • ライブラリのコードを読む
    • テストコードを書く
    • (警戒しながら)ネット情報を参考にする
    • パソコンの前から離れる
    • 誰かに聞く

13章

  • 日付、時刻
    • Timeクラス
      • 組み込みライブラリのためrequireの必要なし
    • Dateクラス
      • require必須
  • ファイルやディレクト
    • Fileクラス、Dirクラス
      • 組み込みライブラリのためrequireの必要なし
  • Rake
    • Rubyで作られているビルドツール、「何かしらのまとまった処理」を簡単に実行するためのツールとして使われる
task :hello_world do
  # ブロックの中がタスクとして実行される処理になる
  puts 'Helloc'
end
$ rake hello_world
Hello, world!
  • gemとBundler
    • Rubyのライブラリはgemという形式でパッケージングされる 作成したgemはRuby.Gems.orgにてアップロード、インストールできる
      # fakerというgemをインストールする場合
      $ gem install faker
      $ gem install faker -v 2.16.0
    
    • Bundlerを使うと1つのコマンドで大量のgemをどの環境でも同一のバージョンでインストールすることができ、PJでgemが統一される
    • Gemfile.lock
      • Bundlerで管理すべきgemとそのバージョン番号が記載されている
      • Bundle installすると自動的に作成される

難しかった所

初心者向けではないと本に記述されている通り、全体的に私には難しい技術書でした。
6章まではわかりやすく、理解も大丈夫そうでしたが、7章以降どんどん難しくなってきたので「無理に全部理解しようとせず、頭の中にインデックスを作る読書スタイルに切り替えてもOKです」という筆者の言葉通りに読み進めました。
正直、読了後の自身の理解度は5割に満たないように思いますが、今後課題などを進めていく時にまたこの本を振り返れるようにしたいと思います。

GitHub Pagesを使ってWebページを公開する方法

GitHub Pages

GitHub Pagesは、GitHubが提供する無料のホスティングサービスでユーザが簡単に無料で(静的な)Webページをインターネット上に公開できるサービスです。

ページ公開の流れ

  1. GitHubで新規アカウント作成
  2. GitHubで新規リポジトリ作成
  3. ウェブサイトのファイルを作成しアップロード(プッシュ)
  4. GitHub Pagesの設定
  5. ウェブサイトの確認

手順

1 . GitHubで新規アカウント作成

初めに、GitHubアカウントを作成します。 既にアカウントを持っている場合は、次に進んでください。

2 .新しいリポジトリを作成

GitHubで自分のページへ遷移。
右上にあるプラスボタンからNew repositoryをクリック

new_repo

Create a new repository画面で、Repository nameを任意名称で入力します。
無料プランではPublicにしないとGitHub Pagesの設定ができないため、Publicのままにします。

create_repo

ページ下部にある、Create repositoryボタン(緑色)を押して、リポジトリを作成します。

その後、以下の画面へ遷移します。
赤枠で囲ってある部分のURLを後ほど使用します。

3 . ローカルで任意のフォルダを作成する。

$ mkdir test_web_dir

# 作成したフォルダ内に移動
$ cd test_web_dir

#リポジトリの初期セットアップ
$ git init

# git initの実行後に、.gitフォルダが作成される

4 . 新しくファイルを作成する

htmlファイルやcssファイルなどを作成する

5 . 作成したファイルをリポジトリにコミットする

$ git add .

$ git commit -m "first commit"

6 . リモートリポジトリにプッシュする

# 現在のローカルリポジトリに指定したリモートリポジトリを追加
# originの部分は好きな名称をつけて問題ない
$ git remote add origin https://github.com/ユーザ名/test_web.git

# masterブランチからmainへ名称変更
$ git branch -M main

$ git push -u origin main

7 . GitHubへアクセスして設定する

当該リポジトリでSettingsをクリックする

Pagesをクリック

mainブランチに変更し、Saveボタンをクリック

数分待ち、ページリロードするとアドレスが表示される

GitHub Pagesへアクセスして確認する
※エラーが出てページが見れない場合はURLにフォルダ名、htmlファイル名を指定すると確認可能になる。
ex) https://ユーザ名.github.io/test_web/index.html

9月のプログラミング学習振り返り

8/27からHappinessChainというプログラミングスクールで勉強中です。

9月の振り返りを行いました。

9月の合計学習時間

125h

学習内容

  • Progate
    • 合計8コース完了
  • ブログ開設
  • Web技術の基本
    • 書籍1冊読了
    • 記事作成
  • Vim
    • 動画教材1本視聴完了
    • 記事作成
  • Linux
    • 動画教材1本視聴完了
    • 教材読了
    • 記事作成
  • Git&Github
    • 動画教材1本視聴完了
    • 基本操作の確認完了
  • HTML&CSS

    • 動画教材1本視聴中
  • その他

    • SNSで毎日勉強内容を投稿

KPT

振り返り手法の一つ、KPTで毎月の学習振り返りをしたいと思います。

Keep = 継続 = 良かったこと

Problem = 問題点 = 改善が必要なこと

Try = 挑戦 = 次に取り組むこと

Keep

  • 毎日勉強時間を作った
  • GithubSNSでデイリーレポートを毎日投稿
  • コード記載時はvimを使用していて慣れてきている

Problem

  • Progateは一度やっているにも関わらず、完了させるのにスピードが遅かった(だれていた)
  • 圧倒的に学習時間が足りていない
  • gitのまとめ記事を書きたかったが時間がなく書けていない
  • 英語の勉強をスタートできなかった

Try

  • 10月からは英語学習にも取り組む
  • 10月の学習時間は155時間に設定
  • カリキュラム外で技術書を購入してインプットする

所感

Problemが多い1ヶ月となった印象です。

毎日スクールのロードマップに沿って勉強を進めてきましたが、まだまだ時間を費やして学習できると考えています。

10月はHTLM/CSS、Docker、Rubyまでカリキュラムを進める目標で頑張っていく。

とにかく、時間をかけてコツコツ頑張るしかないと思ってます。

10月の目標合計時間

  • 毎日5h × 31日で155hを目指します!

Linuxコマンドの基本操作まとめ

Linuxとは

Linuxは、オープンソースUnixオペレーティングシステムの一つ。 多くのディストリビューションと呼ばれるバリエーションがあり、それぞれ異なる機能やパッケージを提供している。 安定性、セキュリティ、柔軟性に優れ、特にサーバー環境で広く使用されている。

Linuxコマンドとは?

Linuxコマンドは、Linuxオペレーティングシステムを操作するためのテキストベースのコマンドラインユーティリティ。 Linuxコマンドライン環境を使用することで、ファイルとディレクトリの操作、プロセスの管理、システム設定の変更など、さまざまなタスクを実行できる。 Linuxコマンドはターミナルウィンドウを通じて入力され、テキストベースの応答を提供する。

以下に、よく使用される基本的なLinuxコマンドを紹介します。

cd(Change Directory)

ディレクトリを移動するコマンド 例:

$ cd <ディレクトリ名>

実行結果:

ozri@OzrinoMacBook-ea ~ % cd Documents
ozri@OzrinoMacBook-ea Documents %

pwd(Print Working Directory)

現在のディレクトリ(currentディレクトリ)が表示される 例:

$ pwd

実行結果:

ozri@OzrinoMacBook-ea Documents % pwd
/Users/ozri/Documents

ls(List)

例:

$ ls

実行結果:

ozri@OzrinoMacBook-ea Documents % ls
Chap        Picture     Ruby_practice   app     js_practice
HTMLtest    Rails_practice  Todo        docker      rails_docker

オプション:

ls -a

隠しファイルを含むすべてのファイルとディレクトリを表示する。 隠しファイルはファイル名が.で始まるもの。

ls -l

各ファイル、フォルダの詳細情報を表示する

mkdir(Make Directory)

例:

$ mkdir <ディレクトリ名>

実行結果:

ozri@OzrinoMacBook-ea Documents % mkdir TEST1
ozri@OzrinoMacBook-ea Documents % ls
Chap        Picture     Ruby_practice   Todo        docker      rails_docker
HTMLtest    Rails_practice  TEST1       app     js_practice

オプション: -p 復数階層のディレクトリを1回で作成できる

ozri@OzrinoMacBook-ea Documents % mkdir -p TEST2/2023/09

rmdir(Remove Directory)

空のディレクトリを削除する 例:

$ rmdir <ディレクトリ名>

実行結果:

ozri@OzrinoMacBook-ea Documents % rmdir TEST1
ozri@OzrinoMacBook-ea Documents % ls
Chap        Picture     Ruby_practice   Todo        docker      rails_docker
HTMLtest    Rails_practice  TEST2       app     js_practice

オプション: -i 対象ファイルを本当に削除してよいか、確認のための問い合わせをします。誤って削除することを防ぐために利用される。処理を行なうときの確認

cat(Concatenate)

ファイルの中身を表示する 例:

$ cat <ファイル名>

実行結果:

ozri@OzrinoMacBook-ea Todo % cat index.html

オプション:

cat -n

行番号が表示される

less

ファイルの中身をスクロール表示する 中身が長いファイルの時に良い 例:

$ less <ファイル名>

実行結果:

ozri@OzrinoMacBook-ea Documents % less index.html
コマンド 動作
f 一画面下にスクロール
b 一画面上にスクロール
j 一行下にスクロール
k 一行上にスクロール
q lessコマンド終了
/ 下に向かって検索
? 上に向かって検索
n 次の検索結果へ移動
N 前の検索結果へ移動

tail

ファイルの終わり部分を標準出力する オプションをつけない場合は末尾から10行を出力 例:

$ tail [オプション]<ファイル名>

実行結果:

ozri@OzrinoMacBook-ea Documents % tail example.txt
1から
222
3
4
5
6
7
8
9
10
ozri@OzrinoMacBook-ea Documents %

touch

空のファイルを作成する 例:

$ touch <新規ファイル名>
$ touch <新規ファイル名 1><新規ファイル名 2>

実行結果:

ozri@OzrinoMacBook-ea Documents % touch README.md

rm(Remove)

ファイル、ディレクトリを削除する 完全削除されるので気を付けること 例:

$ rm <ファイル名>
$ rm <ファイル名1><ファイル名2>
$ rm -r <ディレクトリ名>

実行結果:

ozri@OzrinoMacBook-ea Documents % rm README.md
ozri@OzrinoMacBook-ea Documents % rm -r TEST2

ディレクトリを削除する時は-rオプションをつける

mv(Move)

ファイルの移動、ファイル名をrenameする 例:

$ mv <古いファイル名><新しいファイル名>
$ mv <ファイル名><移動先ディレクトリ/>
$ mv <ディレクトリ名><移動先ディレクトリ/>

実行結果:

ozri@OzrinoMacBook-ea TEST2 % mkdir dir
ozri@OzrinoMacBook-ea TEST2 % touch file
ozri@OzrinoMacBook-ea TEST2 % mv file file1
ozri@OzrinoMacBook-ea TEST2 % mv file1 dir/

cp(Copy)

ファイル、ディレクトリをコピーする 例:

$ cp <ファイル名><コピー後のファイル名>
$ cp <ファイル名><コピー先ディレクトリ名/>
$ cp -r <ディレクトリ名><コピー後のディレクトリ名/>

実行結果:

ozri@OzrinoMacBook-ea TEST2 % mkdir dir
ozri@OzrinoMacBook-ea TEST2 % touch file
ozri@OzrinoMacBook-ea TEST2 % cp file new_file
ozri@OzrinoMacBook-ea TEST2 % cp file dir/
ozri@OzrinoMacBook-ea TEST2 % cp -r dir new_dir

その他: ディレクトリをコピーする時は-rオプションを使用する

ファイルやディレクトリにリンクを作成する これは、他のファイルやディレクトリを参照する仕組みで、Windowsのショートカットのようなイメージ * ハードリンク:同じデータを複数の場所で参照するために使用。元のファイルを削除しても消えない * シンボリックリンク:別のファイルやディレクトリを参照する。リンク先がファイルの実体なので元のファイルを削除すると参照不可になる

例:

$ ln <リンク元ファイル名><リンク名>
$ ln -s <リンク元ファイル名><リンク名>

実行結果:

ozri@OzrinoMacBook-ea TEST2 % touch file
ozri@OzrinoMacBook-ea TEST2 % ln file file_hard
ozri@OzrinoMacBook-ea TEST2 % ln -s file file_symbolic
ozri@OzrinoMacBook-ea TEST2 % echo "hello" > file
ozri@OzrinoMacBook-ea TEST2 % ls
file        file_hard   file_symbolic
ozri@OzrinoMacBook-ea TEST2 % rm file
ozri@OzrinoMacBook-ea TEST2 % cat file_hard
hello
ozri@OzrinoMacBook-ea TEST2 % cat file_symbolic
cat: file_symbolic: No such file or directory

find

ファイルがどのディレクトリにあるかの検索 例:

$ find パス -name <ファイル名>

実行結果:

ozri@OzrinoMacBook-ea TEST2 % find . -name '*file*' -print
./file_hard
./file_symbolic

chmod(Change Mode)

ファイルやディレクトリのパーミッションを設定する 例:

$ chmod [ugoa][+-=][rwx]<ファイル名>

実行結果

$ chmod u+x file.txt
$ chmod 755 file.txt
記号 内容
u 所有者権限
g グループ権限
o その他のユーザ権限
a 全ユーザ権限
+ 権限追加
- 権限削除
= 記述権限

ファイルのパーミッション確認

ozri@OzrinoMacBook-ea TEST2 % ls -l
-rw-r--r--  1 ozri  staff  6  9 21 21:17 file_hard

[rw-] [r--] [r--]の3塊で分けて読む[オーナー][グループ][その他] ※パーミッションには記号がある(r:read, w:write, e:execute)

chown(Change Ownership)

ファイルの所有者を変更する 例:

$ chown 所有者 <ディレクトリ名 or ファイル名>

実行結果:

$ ozri@OzrinoMacBook-ea TEST2 % chown newowner index.html

ps(Process Status)

実行中のプロセスを表示する PID:プロセスID CMD:実行中のコマンド 例:

$ ps
$ ps aux

実行結果:

ozri@OzrinoMacBook-ea TEST2 % ps
  PID TTY           TIME CMD
75684 ttys002    0:00.34 -zsh
76579 ttys003    0:00.14 -zsh

オプション: aux:全ユーザのプロセスを詳細情報を併せて表示

kill

ジョブやプロセスを終了させるコマンド フォアグラウンドのジョブはCtrl+Cで終了するが、停止中やバックグラウンドのジョブはkillコマンド 例:

$ kill %<ジョブID>
$ kill <プロセスID>
$ kill <シグナル名><プロセスID>

実行結果:

ozri@OzrinoMacBook-ea / % sleep 100 &
[1] 93197
ozri@OzrinoMacBook-ea / % jobs
[1]  + running    sleep 100
ozri@OzrinoMacBook-ea / % kill %1
ozri@OzrinoMacBook-ea / %
[1]  + terminated  sleep 100
ozri@OzrinoMacBook-ea / % jobs
ozri@OzrinoMacBook-ea / %

参考

https://www.udemy.com/course/unscared_linux/

https://linuc.org/textbooks/linux/