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/

Vimの基本操作についてのまとめ

Vimとは?

高機能なテキストエディタ。 キーボードのみで操作されることを前提としていて、キーボードのみですべての操作が可能になっている。状況に応じてモードを使い分けることでテキストを編集していき、小さなコマンドの組み合わせをその場で作ることによってさまざま様な機能を実現する。

Vimの起動方法

作業したいディレクトリに移動し、vimを入力

$ cd 作業したいディレクトリ
$ vim

既にファイルがある場合は

$ vim index.html

Vimの基本操作

モード切替 Vimは複数のモードを用いてテキストの編集を行う 主なモードは4つ

モード 概要
ノーマルモード 起動時のモード
カーソル移動やテキストの削除、コピー、ペーストなどの簡単な指示を行う
他のモードでescを押すとノーマルモードに戻る
インサートモード 実際にテキストを入力するモード
ノーマルモードでi,a,o,Oなどを入力するとインサートモードになる
ビジュアルモード テキストを選択するだけのモード
ノーマルモードでvなどを入力するとビジュアルモードになる
コマンドモード ファイルを開いたり、検索・置換などの指示を行うモード
: , / , ? などを入力するとコマンドモードになる

ノーマルモード

コマンド 動作
h 左に移動
j 下に移動
k 上に移動
l 右に移動
0 行の先頭に移動
$ 行末に移動
w 単語の先頭に移動
e 単語の終わりに移動
gg テキストの最上部に移動
G テキストの最下部に移動
(n)G (n)行目に移動 例: 327G (327行目に移動)
ctrl G 現在カーソルのある行を確認できる
x 1文字削除
dw, de カーソル位置から単語部分を削除
d$ カーソル位置から行末まで削除
dd 行を削除(切り取り)
(n)dd n行削除
u 前の動作を取り消し
U 行全体の動作を取り消し
ctrl R 取り消しの取り消し
% 対応するかっこに移動

インサートモード

コマンド 動作
a カーソル位置の後からインサートモード
i カーソル位置の前からインサートモード
A 行末からインサートモード
R 入力した文字が置き換わる(置換)
o 下の行でインサートモード
O 上の行でインサートモード
ce 単語が削除されインサートモードになる
cc 行全てが削除されインサートモードになる
c$ カーソル位置以降が削除されインサートモードになる

ビジュアルモード

コマンド 動作
v カーソル位置から選択開始
V 行全てを選択

選択後はyでコピー可能

ペーストはp

コマンドモード

コマンド 動作
:q 実行中のタブを閉じる
:w 上書き保存
:wq 上書き保存して終了
:q! 強制終了
/検索ワード 該当ワードが前から検索される(nで次のワード)
?検索ワード 該当ワードが後ろから検索される(nで次のワード)

参考

vimtutor

https://qiita.com/JpnLavender/items/fabcc79b4ab0d52e1f6d

https://zenn.dev/mo_ri_regen/articles/vim-four-modes

https://kitsune.blog/vi-summary#コマンドモードの操作方法

プロになるためのWeb技術入門を読んで

導入

この記事では、「プロになるためのWeb技術入門」という書籍を読了した感想とまとめを共有します。 この書籍はWebアプリケーション開発に関する基本的な概念から、HTTPプロトコル、セキュリティまで幅広いトピックをカバーしています。

各章について

1〜2章:Webアプリケーションの本質とWebの進化ついて Webの進化史が掘り下げられ、Web技術の変遷について理解を深めることができます。

3章:HTTPプロトコルについて HTTPに関する基本的な内容が解説されています。Web通信の基本的なプロトコルであるHTTPについての理解が深まります。

4章:Webアプリケーションの進化について Webアプリケーションのセキュリティと機能向上に向けた発展が説明されています。

5章:Webアプリケーションを構成する要素について Webサーバ、データベースサーバ、アプリケーションサーバなどの役割について詳しく説明され、Webアプリケーションが動作する仕組みが解説されています。

6章:Webアプリケーションの効率的な開発に必要な仕組みについて サーブレットJSPの連携によるデザインとロジックの分離、アーキテクチャの必要性、およびフレームワークの役割について書かれており、Webアプリケーションの設計と開発の重要性について理解が深まります。

7章:Webアプリケーションのセキュリティについて Webアプリケーションの安全性を確保するための基本的なガイドラインを学べます。

用語

ステートフル

システムやプロトコルがクライアントとサーバー間で状態情報を保持すること。 前のリクエスト情報を引き継ぎ、どのような状態かを保持している。

ステートレス

システムやプロトコルがクライアントとサーバー間で状態情報を保持しないこと。 HTTPはステートレスなプロトコル。 前回の要求は引き継がれず、関連性は保持されない。

リクエス

クライアントからサーバに対する要求。

レスポンス

サーバからクライアントに対する応答。

Webアプリケーション(サーバ)とブラウザ(クライアント)間で情報のやり取りを保持できるようにする仕組み。 ウェブサイトを再訪問したときに、Cookieによって利用者の情報がウェブサイト側に伝えられる。ECサイトなどにおいてログイン情報、クレジットカード情報など記憶しておくこともCookieで可能になる。

プロトコル

ネットワーク上でデータを通信するための手順や規約。 HTTPやFTPなど。

ポート番号

TCP/IP通信において、 コンピュータが通信に使用するプログラムを識別するための番号。 16ビットで0~最大65535までの数で表される。 代表的なものだとウェルノウンポート番号があり、よく利用される特定のアプリケーション用に予約(0~1023)されている。 HTTP:80番、HTTPS:443番など

所感

Web開発の基礎知識を身につけることができる書籍だと感じました。 分かりやすい説明と具体的な例が含まれ、図や絵と共に紹介されているので初学者にわかりやすいです。 ただ、6 章に関しては、Javaの知識があるとよりわかりやすいし、他の言語でもいいのでMVCモデルについて理解している状態で読んだ方がよりわかりやすく感じると思いました。(超初学者だと厳しいかも?)

参考

プロになるためのWeb技術入門 小森 裕介 (著)

初学者の私が他のプログラミングスクールからHappinessChainに乗り換えたワケ

はじめに

私はプログラミングの学習を6月に始めました。

HappinessChainへの入校は8月27日からなので、入校から約3週間が経過したことになります。

 

HappinessChainに入るまで

他のスクールで受講していました。

そのスクールに不満があったから乗り換えたわけですが、あまり悪口は書きたくないのでこの記事で批判的なことは言わないように控えます。

 

HappinessChainに入る決断をした理由は、他のスクールで受講していた時に残念だなあと思った部分が改善されそうと感じたからです。

以下にその理由をご紹介します。

 

主要な理由2つ

  1. それぞれの課題に対してプロのコードレビューが提供される
  2. ロードマップが明確に定義されている

 

まず1つめについてです。

プロのエンジニアが私たちの課題に対してコードレビューを行ってくれる点は非常に魅力的でした。

以前の私は、課題を実施して解答を見ると自分のコードと違う箇所があり、挙動は問題なさそうだけど大丈夫だろうか?と不安に思うことがよくありました。

しかし、HappinessChainでは現役のエンジニアが私たちのコードをチェックしてフィードバックをくれる流れになっています。

(まだコードレビューが必要な課題に入っていないので体験はしていませんが。。)

これにより、自分のスキルを向上させる方向性を正確に把握できます。

 

次に2つめについてです。

HappinessChainはロードマップを提供しており、それに沿って学習を進めることができます。

私のような知識不足の学習者はロードマップ通りに進めることに強い安心感があります。

初学者は何を学び、どの順番で進めるべきか迷うことがよくありますが、このスクールではその不安が解消されます。

このロードマップに従うことで、自己学習に対する自信がつくはずだし、それは成長スピードに寄与する部分が大きくなるはずです。

 

他にも理由がある

  • 学べる技術が多い、モダンな技術も学べる
  • とにかくインプットが多い(やるべき教材がたくさん!でもそれは当たり前ですよね)
  • インプットしたらアウトプットの流れができている(アウトプットを必ず提出する必要があるため理論だけでなく実践力も養える)
  • 月額制、入会金なしで他のスクールと比較して費用対効果が高い(現在は入会金ありに変更)
  • 現役エンジニアの方も受講生として在籍しており、スキルアップに熱心
  • スクールの宣伝にお金(広告費)をかけずX(旧Twitter)の投稿だけでここまでのスクール生徒数に(私もCEOゆうだいさんの投稿に共感して入校したクチです)
  • Xに投稿する内容は技術系のことを投稿した方がいいというポリシーに共感
  • 英語力向上を推しているところに共感

 

たくさん羅列してしまいましたが、上記の内容もスクールに入るきっかけとなった理由です。

理由の一つのSNSの投稿内容についてもその通りだなと思いました。

SNSポートフォリオの一つだと考えると、今日はディズニーランドに行きました!の投稿なんて採用担当の人に見せる必要はないなと感じたし、私はHappinessChainに入ってから毎日SNSにその日の勉強内容を投稿していますが、企業の採用の方からDMやいいね、フォローをいただきます。

SNSが採用につながる場というのを肌で感じたことも要因の一つです。

 

最後に

正直に言うと、スクール先輩方の日報を見ていると、私がまだ理解できない課題やトピックがたくさんあります。不安です。

私にはわからないことだらけで、こんな難しいことをこの先やるのか。。とも思います。

でもロードマップ通りに努力して頑張れば自分もそのレベルに到達できるのではないかという期待も感じています。(もちろん不安の方が大きい!)

今、私には 頑張る か 死ぬほど頑張る かの選択肢しか残されていません。

だからこそ諦めずに毎日努力を続ける決意で進めていきます。