Linux - ntuf/Tips GitHub Wiki

Linuxの基本的な構造
Linuxは大きく以下のような構成になっています:

1.カーネル (Kernel)

Linuxの中心部分で、ハードウェアとソフトウェアの橋渡しをします。
メモリ管理、プロセス管理、デバイス制御、ファイルシステムなど、最も低レベルな処理を担当します。
例えるなら「OSの心臓部」です。

2.ユーザーランド (Userland)

ユーザーやアプリケーションが直接触れる部分で、さまざまなプログラムやライブラリが含まれます。
主な構成要素:
シェル: ユーザーがコマンドを入力して操作するためのプログラム(例: Bash)。
ユーティリティ: ファイル操作、ネットワーク設定などのツール群。
デスクトップ環境: GUIを提供するもの(例: GNOME、KDE)。

3.初期化システム (Init System)

Linuxを起動した際に、カーネルから引き継ぎ、システム全体の準備を行うソフトウェアです。
systemdはこの「初期化システム」の1つとして動作します。

systemdはPID(プロセスID)が1のプロセス。


Linuxのシステムの仕組みをWindowsに例えると、以下のように比較できます。
Windowsを使い慣れている視点で見ると、
Linuxの各部分がどのような役割を果たしているかをイメージしやすくなると思います。

1. カーネル(Kernel)
Linux
Linuxカーネルは、ハードウェア(CPU、メモリ、ストレージ、ネットワークカードなど)と
ソフトウェアをつなぐ、Linuxシステムの中核部分です。
メモリ管理、プロセス管理、ファイルシステム操作などを担当します。
Windows
Windowsでいうと、NTカーネルに相当します。Windowsのカーネルも同様に、
ハードウェアリソースを管理し、アプリケーションが動作できる基盤を提供します。
(Windows11でもwindowsNT系としてNTカーネルで動いている)

2. シェル(Shell)
Linux
シェルは、ユーザーがコマンドを入力してシステムを操作するためのプログラムです(例: Bash、Zsh)。
グラフィカルユーザーインターフェース(GUI)がなくても、シェルだけでシステムを操作できます。
Windows
Windowsでのシェルに相当するのは、コマンドプロンプト(cmd.exe)やPowerShellです。
ただし、WindowsユーザーはGUIを使うことが一般的で、LinuxはCLI(コマンドラインインターフェース)が
中心的な役割を果たします。

3. デスクトップ環境(Desktop Environment)
Linux
Linuxでは、デスクトップ環境がカーネルと分離しており、必要に応じて選択可能です。
例: GNOME、KDE、XFCE、MATEなど。
デスクトップ環境は、アイコン、ウィンドウ、メニューなどのグラフィカルな操作を提供します。
Windows
Windowsでは、**エクスプローラー(Windows Explorer)**がこの役割を担っています。
エクスプローラーは固定的で、Linuxのように別の環境に切り替えることはできません。

4. 初期化システム(Init System)
Linux
Linuxでは、システム起動時にまず**initシステム(例: systemd、SysVinit、Upstart)**が動きます。
起動後、必要なサービス(例: ネットワーク、ログ管理、デーモン)を順に立ち上げます。
Windows
Windowsでは、起動時にサービスマネージャーが働き、バックグラウンドで動作するサービス
(例: Windows Update、プリンタサービス)を管理します。
initシステムとWindowsサービスマネージャーは似た役割を持っています。

5. ファイルシステム(File System)
Linux
Linuxは、さまざまなファイルシステム(例: ext4、XFS、Btrfs)をサポートし、
すべてが1つのディレクトリツリー(/)の下にマウントされます。
例: /home、/var、/etc など。
Windows
Windowsでは、ファイルシステムにNTFSやFAT32が使われます。
ドライブレター(例: C:\, D:\)でファイルシステムを分けて扱う点がLinuxと異なります。

6. ソフトウェアパッケージとインストール
Linux
Linuxでは、ソフトウェアはパッケージ管理システム(例: apt、yum、dnf、pacman)を使ってインストールします。
例: sudo apt install firefox
依存関係も自動で解決されるため、効率的です。
Windows
Windowsでは、ソフトウェアのインストールは主に**インストーラー(.exe、.msi)**を使います。
最近では、WindowsストアやWinget(Windows Package Manager)も登場し、
Linuxに近い形でソフトウェア管理が可能です。

7. ユーザー管理
Linux
Linuxは、マルチユーザーシステムとして設計されており、各ユーザーにホームディレクトリ
(例: /home/username)が割り当てられます。
管理者権限を持つ「rootユーザー」が存在します。
Windows
Windowsでもマルチユーザーシステムですが、各ユーザーのデータはC:\Users\ユーザー名に保存されます。
管理者(Administrator)アカウントがrootに相当します。

8. ログと監視
Linux
Linuxでは、システムログは/var/logに保存され、journalctlなどのツールで確認します。
デーモン(バックグラウンドプロセス)もログを記録します。
Windows
Windowsでは、システムログはイベントビューアで確認できます(例: アプリケーションログ、セキュリティログ)。


free
空きメモリ

df
空き容量
 Disk Free の略

df -i
iノードの確認

du
特定ディレクトリ以下の使用量
du -sk /var/* | sort -nr | head -5   容量順にソートして表示される
 Disk Usageの略

pvdisplay
物理ディスクの空き容量
 物理ボリューム (Physical Volume) をDisplayする略

Listenしているポート一覧
netstat -nlt
 network statisticsの略

プロセス一覧 特定のポートを使用している
  List Open Filesの略
lsof -i:111

プロセス一覧 特定のファイルを使用しているプロセスを表示
lsof /var/log/messages

プロセスが掴んでいるファイル一覧を
lsof -p

rpm
Red Hat Package Managerの略
Red Hat系ディストリビューションで使われるパッケージ管理システム

yum
Yellowdog Updater, Modifiedの略
RPMパッケージを扱うためのツール
sudo yum install

dnf
Dandified YUMの略で、YUMの後継として開発されたパッケージ管理システム

apt
sudo apt install <パッケージ名>
Debian系のパッケージ管理Ubuntuとかrasberrypyとか

ユーザーの作成
sudo useradd -m username
-m: ホームディレクトリを作成する

パスワードの設定
sudo passwd username

グループの作成
sudo groupadd groupname

ユーザーをグループに追加
sudo usermod -aG groupname username
-aG: 補足的なグループに追加(他のグループは維持)


CI/CDが必要になる要因
①開発者の数
 人数が多いほど恩恵が受けられる
②リリース頻度
③デプロイ作業の面倒さ・リスク
 環境が複雑であれば事故が起きやすい
④品質要求の高さ
 CI(自動テスト)の必要性が高まる
⑤コードの寿命
 短い寿命ならいらない
⑥インフラ環境
 クラウド:AWSなど
 IaC(Infrastructure as Code)構成のコード化
 本番/ステージング環境に分かれている
-

■cronの設定
cronをroot権限で開く
crontab -u root -e

crontab -e cronを編集する
crontab -l cronを表示する

毎月10日の午前4時59分に/home/test01/test.shを実行する
59 04 10 * * /home/test01/test.sh
毎週月曜日の9時と12時にdateコマンドの出力結果を/root/prac/date.logに追記する
0 9,12 * * 1 date >> /root/prac/date.log
2時間ごとにdateコマンドの出力結果を/root/prac/date.logに追記する
0 */2 * * 1 date >> /root/prac/date.log
1分毎に日時を対象ファイルに吐き出す
*/1 * * * * date >> /root/prac/date.log

/etc/crontab
システム用。root権限で実行
設定ファイル/etc/crontab

/var/spool/cron/crontabs/[user]
ユーザ用。各ユーザーで利用
設定ファイル/var/spool/cron/crontabs/[user]


『新しいLinuxの教科書』

■Linuxを使う
suコマンド
管理者ユーザになる

シャットダウンコマンド
shutdown -h now hオプションは電源断
ちなみにEC2で実施すると、

shutdown -r now rオプションは再起動

コマンドが見つからない場合は
/sbin/shutdown -h now

grep abc sample.txt | sort
このパイプは入出力プログラム間でやりとりできる

✔ 開始コマンドは stdout を持つもの。
✔ 中継コマンドは stdin を受け取って stdout に出せるもの。
✔ 終端コマンドは stdin を受け取れるもの。
-

■シェルの種類
sh
最も古いシェル。
シェルスクリプトを書く際にはshを利用するのが現在でも一般的
ログインシェルとして使われることはほとんどない

csh
Cシェル。
shと比べて対話型操作ができるようになった
ほとんど使われない

bash
バッシュ。shを基本とした対話型操作を行える。
EC2なんかでもデフォルトのシェル。

tcsh
cshの後継。
FreeBSDでよく使われれる。

zsh
比較的新しいシェル。
人気高い。mac OSではCatalinaがデフォルトのログインシェル。

fish
この中で最も後発。


■コマンドラインの編集
ctrl+B 後退
ctrl+F 前進
ctrl+A 先頭
ctrl+E 末尾
meta(Alt)F 単語ごとに前進
meta(Alt)
B 単語ごとに後退

vscodeでmetaキーを有効にする
VSCodeの設定を開く
メニューバーから「Code」 > 「Preferences」 > 「Settings」を選択するか、Cmd + , を押して設定を開きます。
設定の検索
設定検索バーに「terminal.integrated.macOptionIsMeta」と入力します。
terminal.integrated.macOptionIsMetaの設定を有効にする


Ctrl + s 画面表示をロックする
Ctrl + q 画面表示のロックを解除する

Ctrl + c コマンドの強制終了

Ctrl + l 画面を消去する

bashの補完機能
ec → Tab → echo

コマンド履歴
Ctrl + p, または ↑
Ctrl + n, または ↓

コマンド履歴の検索 インクリメンタル検索
Ctrl + r


■ディレクトリ構造

/bin
Linuxシステムの動作に最低限必要な重要度の高い
実行ファイルを置くためのディレクトリ

/dev
デバイスファイルを置くためのディレクトリ
デバイスファイルは、ハードウェアをファイルとして扱えるように用意されたファイル

/etc
各種アプリケーションの設定ファイルを置くためのディレクトリ
configファイルが置かれる

/etc/ssh/sshconfig ssh接続の設定
/etc/nginx/nginx.conf nginxの設定
/etc/nginx/conf.d/****_nginx.conf nginxの設定
/etc/nginx/ssl/fullchain.pem nginxのsslのpemファイルの置き場

/home
ユーザーごとのホームディレクトリが配置される

/home/ec2-user

/sbin
管理者向けの実行ファイルが配置されている

/tmp
テンポラリ

/usr
各種アプリケーションとそれらのファイルのを置く
内部にサブディレクトリとして、bin,sbin,etcなどを持っている

/var
変化する(variable)データを置くためのディレクトリ
データ、メール、ログなど

■ファイル操作の基本
tab で補完する
cd /usr/lo
cd /usr/local

ls ba*
baで始まるファイルの一覧が出てくる
ls ba?
baと任意の1文字のファイルが出てくる

ls
-l ファイルの属性も表示される
-a 隠しファイルも表示される
-F ファイルのファイル種別も表示される
-w 30 指定桁数で横幅で表示するここでは30
—quote-name

オプションは-aFのように続けて指定もできる

■ファイル操作の基本
コマンド
mkdir
ディレクトリを作成する

rm
削除を実施する

rmdir
空のディレクトリを削除する
空でないと削除できない

rm -r
ディレクトリがからでなくても削除される

touch
空っぽのファイルを作成する

cat
ファイルを表示する

less
ファイルをスクロール表示する
f 1画面下にスクロールする
b 1画面上にスクロールする
/を入力すると一番下の行にカーソルが移動して検索が可能になる、nを押すたびに候補が出てくる
q lessを終了する

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

mv
ファイルを移動する

ln
リンクを張る
ディレクトリに対しては作成できない
異なるディスク間では作成できない
利用方法
 長いパスを省略できる
 異なるバージョンを共存させる

■探す調べる
man
コマンドの使い方を調べる
man cat

which
フルパスを表示する

find ディレクトリ 条件 アクション
ファイル(名)を探す場合条件に以下を入れる
-name,-iname

find . -name file-l.txt -print
アクションは省略しても良い print は最も基本的で省略していい

find . -name ‘*.txt’ -print
や?などのワイルドカードを使用できる。シングルクォーとが必要
(この場合シングルクォーとで囲まないと、
をbashのパス名展開と解釈してしまう)

・ファイル名の種類で探す(-type)
-type f 通常ファイル
-type d ディレクトリ
-type l シンボリックリンク

find . -type d -print
カレントディレクトリの下にあるディレクトリを列挙

・複数の検索条件の指定(-a)
find . -type f -a -name ‘*.txt’ -print
-aは省略可能

locate
パスの一部を指定してファイルを探す
findより高速
インストールされていない場合はインストールが必要
(locate -version コマンドで入っているかを探す)
dnf install mlocate(RedHat系ではmlocate)
sudo apt instaldl plocate (debian系はplocate)
その後
updatedb
を行ってデータベースを作る

lacate [オプション] <検索パターン>
データベースを検索するので高速
データベースを作成した時点でのファイルを検索できる

大文字小文字を区別しない
locate -i notes

ファイル名だけを検索
lacate -b python

複数条件を指定するとor条件になる
locate docs document

複数条件でand条件にする場合
locate -A bash doc

コマンドの使い方を調べる
—help オプション
どのコマンドでも共通

コマンドのマニュアルを参照する
man <調べたいコマンド名>

man -k <キーワード>
キーワードでマニュアルを探す

マニュアルのセクション番号
man <セクション番号> <名前>
man 1 crontab セクション1の(コマンド)のcrontabのマニュアルを表示
セクション番号
1 コマンド
2 システムコール
3 ライブラリ関数
4 デバイスファイル
5 ファイル形式
6 ゲーム
7 その他いろいろなもの
8 システム管理コマンド
9 カーネルルーチン

help <名前>
help cd cd コマンドのマニュアル表示
help help helpコマンドのヘルプを表示

which [オプション] <コマンド名>
Linuxのコマンドはツリーのどこかに存在している
catコマンドは/bin/catにファイルがある
ls -lf /bin/cat
コマンドの場所はパスで指定されている
echo $PATH

which cat
catコマンドのフルパスを表示する
which -a ping
ping コマンドを全てのサーチパスから検索

■テキストエディタ
vim —version
dnf install vim Redhat系 でVim をインストール
sudo apt install vim Debian系でVimをインストール

vimはviの後継
viでもvimを起動できる

vim の終了
:q

ファイルを開く
vim newfile.txt

ファイルの保存
:w

ファイルを保存せず終了
:q!

カーソルの移動
hjkl

文字を1文字削除する
x

文字の入力モードにする [ESCで抜ける]
i

カーソルの位置の右に文字を追加
a

  1. For details see man 4 crontabs
    次の単語の先頭に移動
    w

後方の単語の先頭に移動
b

記号も単語とみなされる
スペース区切りのみを単語の切れ目とするには大文字にする

スペース区切りで、次の単語の先頭へ
W

スペース区切りで、後方の単語の先頭へ
B

行頭への移動
0

行末への移動
$

1行目への移動
gg

最後の行への移動
G

カット = デリート
コピー = ヤンク
ペースト= プット

デリート
d$ 行末までをデリート
d0 行頭までをデリート
x,dl 1文字をデリート

プット

下の行と連結する(一つの行になる)
J

アンドゥ
u

Ctrl + r
リドゥ

検索と置換
/<文字列>
下方向に向かって検索
?<文字列>
上方向に向かって検索

n 次の検索結果に移動する
N 前の検索結果に移動する

%s/ <置換元文字列> / <置換後文字列> /g

vimtutor
vimのチュートリアル、基本を身につけられる

:help
ヘルプコマンド
上下に画面が分割されて、上側の画面にヘルプが表示される

■bashの設定

エイリアスを設定
ls -F
alias ls=‘ls -F’
ls だけでls -Fできる

type ls
lsは’ls -F’ のエイリアスです
type cp
cp /bin /cpです

エイリアスの削除
unalias ls

エイリアスを一時的に無効するように実行するには
フルパスを指定して実行する
/bin/ls

set -o/+ <オプション>
bashの各機能を有効/無効にできる
ignoreeof Ctrl+Dを押してもシェルを終了させない。誤ったキー操作でシェルを終了させない
noclobber 既に存在するファイルをリダイレクトしないで上書き
noglob パス名展開する(*などはシェルに解釈されず、そのまま*となる)

shopt -s/-u <オプション>
autocd ディレクトリ名のコマンドを実行するとそれがcdコマンドの引数に指定されたものとして時効できる
dotglob や?を使ったパス名展開の結果に,.で始まるファイルも含める
cdspell cdコマンド実行時、ディレクトリのちょっとしたミスタイプが自動修正される
globstar パス名展開で
*というパターンを使うと、サブディレクトリまで含めたすべてのファイルにマッチする
histappend bashを終了する時、履歴ファイルにコマンド履歴を追記し、上書きしない
failglob パス名展開で指定したパターンがファイル名にマッチしなかった場合、コマンドを実行せずにエラーとする
lithist 複数行のコマンドを改行を含めてコマンド履歴に保存する。 

シェル変数
<変数名>=<値>
var=‘test variable’
echoコマンド
=の左右にスペースは入れない、変数名がコマンドとみなされてしまう

PS1変数 設定した文字列がそのままプロンプトとして表示される
PS1=’bash> ’
bash>

PS1=’[\u]> ’
プロンプトにユーザー名を表示する
\d 曜日月日形式の日付
\h ホスト名の最初の.までの部分
\H ホスト名
\n 改行
\t HH:MM:SS形式の現在時刻
\u ユーザー名
\w カレントディレクトリ
\W カレントディレクトリの末尾のディレクトリ
\$ rootユーザの場合は、#,それ以外は$
\\ \そのもの

シェル変数のPATHには実体ファイルを探すディレクトリが指定されている
:区切りで連結されている
echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin/:/bin:/sbin

echo $LANG
ja_JP.UTF-8
基本的に日本語環境を指定している場合日本語
local -a
このコマンドでシステムがサポートしている言語の一覧が出てくる
LANG=en_US.UTF-8
これで切り替えられる

他のシェル変数
HISTFILE コマンドライン履歴を保存するファイル名
HISTLILESIZE 保存するコマンドライン履歴の最大行数
HISTSIZE コマンドライン履歴を保持する最大行数

シェルの状態を知るための変数
HOME ホームディレクトリ
SHELL ログインシェルのパス
PWD カレントディレクトリ

type set
type cp

printenv
環境変数の表示

export <シェル変数>
環境変数の設定

LESS=‘—no-init’
export LESS
LESSを環境変数として設定

bashの設定ファイル
基本的に~/.bashrc だけをいじっていればいい

Linuxが設定ファイルを読み込む順番

/etc/profile 最初に読み込まれるファイル
 システム全体で使用するファイル。全てのユーザーに共通して設定する

~/.bash_profile 次に読みこむ(この中で.bashrcを読み込む)
 ログインした時だけ読み込む(例 環境変数)
 各ユーザー個別の設定ファイル 

~/.bashrc さらに次に読み込む 
 bash起動するたびに読み込まれる
 その内容を現在の

cp .bashhrc .bashrc.org
ミスをして消してしまってもバックアップをとっておけばOK

source ~/.bashrc
ファイル内容を即座に読み込んで実行する

■ファイルパーミッション、スーパーユーザー
ファイルにはオーナーが設定されている
オーナーはファイルのアクセス権限を自由に設定できる

touch testfile
ls -l testfile
ファイルのオーナーを確認できる

グループはユーザーの集まり
複数のグループに属することができる
groups コマンド
現在のユーザの所属しているグループの一覧を確認できる

ls -l /bin/cat
ファイルのパーミッションを表示できる
-rwxr-xr-x. 1 root root 54048 6月 10 2014 /bin/cat
rwx とr-xとr-xの3ブロックに分かれる
オーナー グループ その他 の順番
r 読み取り
w 書き込み
x 実行

ls -ld dir1
ディレクトリモ同様にパーミッション表示をできる
r 読み取り -ファイル一覧の取得
w 書き込み -ディレクトリ下のファイルの作成ディレクトリの作成
x 実行 -ディレクトリをカレントディレクトリにする

chmod ファイルモードの変更

chmodの演算子
+ 権限を追加する
- 権限を禁止する
= 指定した権限と等しくする

uオーナー
gグループ
oその他のユーザ
a ugoの全て

chmod u+w file.txt
オーナーの書き込み権限を追加

chmod g-w file.txt
グループの書き込み権限を削除

chmod go=r file.txt
複数のユーザーの権限をまとめて指定

数値によるパーミッションの変更
読み取り4
書き込み2
実行 1
足した値をオーナー、グループ、その他ユーザの順で入れる

chmod 755 file.txt
オーナーフルアクセス
グループは読み込みと実行

スーパーユーザ
一般ユーザでログイン後
su コマンドを実行
スーパーユーザで作業
exitで一般ユーザに戻る

一般ユーザの環境変数を引き継いだままスーパーになると
アプリケーションによってはうまく動作しないことなどがある
su -
でスーパーユーザの環境に初期化できる

sudo コマンド
コマンドを別のユーザで実行する

sudo cat /etc/shadow
スーパーユーザとしてcat できる

ずっとsuを使うのもリスキーなので、 sudoを使うのが一般的

ユーザーにsudoを許可するかは/etc/sudoersファイルで管理されている
cat /etc/sudoers
%wheel ALL=(ALL) ALL
wheelグループのユーザーはすべてのマシンで、すべてのユーザとして、すべてのコマンドを実行可能

書き方を間違えるとどのユーザでもsudo が使えなくなってしまう危険がある
直接テキストエディタで開いて編集はしない

■プロセスとジョブ
ps
現在のターミナルで実行しているプロセスだけ表示
ps xf
現在のユーザが実行しているすべてのプロセス
ps ax
システムで動作しているすべてのプロセス

ls -l / | cat -n | less
生成されるプロセスは3つだがジョブは1つ
ジョブはシェルごとの処理単位

Ctrl+zでジョブを停止

jobs
1
2
1と2のジョブ番号が表示されている

fg %<ジョブ番号>
ジョブをフォアグラウンドにする

bg %<ジョブ番号>
ジョブをバックグラウンドにする
Ctrl+zでジョブを停止させても動くようにする

コマンドラインの末尾に&をつけるとバックグランドジョブになる
cp file1 file2 &

フォアグラウンドのジョブはCtrl+cでジョブを終了
バックグラウンドのジョブは killで終了
kill %1

プロセスの終了もkill を使う
kill <プロセスiD>

ps auxで一覧を表示し
kill でプロセスを削除する

■標準入出力とパイプライン
標準入力 <
catを入力リダイレクトで表示
cat < /etc/crontab
catをファイル指定で表示(同じ動作)
cat /etc/crontab

標準出力 >
ls -l / > list.txt
ls -l の結果をlist.txtに出力する

標準エラー出力
ls /xxxxx
ls: /xxxxxにアクセスできません:そのようなファイルやディレクトリはありません

ls /xxxxx > list.txt
ls: /xxxxxにアクセスできません:そのようなファイルやディレクトリはありません
(標準出力をファイルにリダイレクトしてもエラーメッセージは表示される)

ls /xxxxx 2> list.txt
cat error.txt
ls: /xxxxxにアクセスできません:そのようなファイルやディレクトリはありません
(エラーメッセージをファイルに保存)
標準エラー出力のリダイレクトは2>を使う

ls /xxxxx > list.txt 2> error.txt
実行結果はlist.txtに
エラーメッセージはerror.txtに出力される
(二つのファイルにリダイレクトする)

標準出力と標準エラー出力をまとめる
ls /xxxxx > result.txt 2>&1

・数値の内容
標準入力 0
標準出力 1
標準エラー出力 2

echo 789 >> number.txt
追記リダイレクト(同一ファイル名でも上書き保存されない目的もある)
cat number.txt
456
789 ←追記された

cat < /dev/null
(標準入力を空っぽにする。何も表示されない)
/dev/nullはリダイレクト先としてよく使われる

パイプライン
lsの結果をlessコマンドに送り込む
ls -l | less
コマンド履歴をlessで読む
history | less
3つのコマンドをつなげる
ls -l /etc | cat -n | less
標準エラー出力もパイプラインに送る
ls -l / /xxxxx 2>&1 | less

フィルタ
head /etc/crontab
ファイルの先頭10行目までを表示する

cat そのまま表示する
head 先頭部分を表示する
tail 末尾部分を表示する
grep 指定した検索パターンに一致する行だけを表示する
sort 順番に並べかえる
uniq 重複行を取り除く
tac 逆順に出力する
wc 行数やバイト数を出力する

du -b /bin/* | sort -n | tac | head -n 5
ファイルサイズの大きい上位5つを表示

■テキスト処理
wc <テキストファイルディレクトり>
入力ファイルの行数、単語数、バイト数を数える

sort
テキストファイルの中の並び順をソートする

uniq <テキストファイル>
テキストファイルの中の重複行を省く

cut <テキストファイル>
ファイル内指定した部分を切り出す

tr <置換前の文字> <置換後の文字>
純粋にフィルタとして設計されている
文字を置き換える
例 cat /etc/passwd | tr : , :から,に変換する
文字を削除する
例 cat/etc/passwd | tr -d ‘\n’

tail <ファイル>
ファイルの末尾を表示する
tail /etc/passwd
ファイルの追記を監視する
tail -f <ファイル名>

diff
差分を表示する
diff [オプション] <比較元ファイル> <比較先ファイル>

■正規表現
grep
ディレクトリ・ファイルの文字列を正規表現で検索して表示する
 正規表現での検索も可能
 1文字にマッチ
  grep ‘t.st’ example.txt
 test,tfst,tzstなどの行を含む一行が検索される
エスケープ文字 .そのものにマッチさせる
 grep ‘\.’ example.txt
特定の文字にマッチさせる
 grep ‘t[ef]st’ example.txt
 testまたはtfstにマッチする
 ’[^a]’ aを含まないいずれかの一文字
‘Be*r’ 繰り返しを指定 Br,Ber,Beerにマッチ
‘Be{2}r’ 繰り返しの数を指定Beerにマッチ
‘Ber’

■高度なテキスト処理

sed <テキストファイル>
指定ファイルの中身を置換したり、抽出したりする

awk <テキストファイル>
1つ以上のスペースで区切られた複数列のテキストデータを色々処理する

■シェルスクリプト
■シェルスクリプトの基礎知識
■シェルスクリプトを活用しよう

■アーカイブと圧縮
・tar アーカイブ(一つのファイルにまとめる、圧縮はしない)する。歴史が長い。
tarコマンドはファイルのパーミッション、オーナー、タイムスタンプなどのファイル属性もそのままアーカイブする。
バックアップに適している。
 ・アーカイブ
 tar cf <圧縮ファイル.tar> <ディレクトリ> 
  cはcreate
 ・アーカイブ内容の確認
 tar tf <圧縮ファイル.tar>
  tはlistのt
 ・アーカイブファイルの展開
 tar xf <圧縮ファイル.tar>
  xはextract

 ・アーカイブ(一覧を表示しつつ) でも利用は賛否両論
  tar cvf <圧縮元ファイル> <ディレクトリ>
 ・アーカイブ内容の確認(一覧を表示しつつ) これは良い
  tar tvf <圧縮ファイル>
 ・アーカイブファイルの展開(一覧を表示しつつ) でも利用は賛否両論
  tar tvf <圧縮ファイル>

・gzip
圧縮
 ・gzip <圧縮元ファイル>
  gz形式で圧縮 高速に動作する
 展開
 ・gunzip <ファイル.gz>

・tarとgzipを組み合わせて圧縮する
gzipを使わなくてもtarだけでtar+gzipファイルを作ることができる
zオプションを使う
tar czf <ファイル.tar.gaz> <ディレクトリ>

昔は組み合わせてやっていた
tar cf – dir1 | gzip -c > dir1.tar.gz

・bzip2形式
 bzip2形式で圧縮 圧縮率が高いが時間がかかる
 ・圧縮
  bzip <対象ファイル.bz2>
 ・bzip2の展開
   bunzip2 <対象ファイル.bz2>

・tarとbzipを組み合わせて圧縮する
bzipを使わなくてもtarだけでtar+bzipファイルを作ることができる
jオプションを使う
tar cjf <ファイル.tar.bz2> <ディレクトリ>

・xz形式
 xz形式で圧縮 圧縮率が高いが時間がかかる(さらに)
 tar cJf <ファイル.tar.xz> <ディレクトリ>

・zip

dnf install zip unzip
 パッケージのインストールが必要

zip形式でアーカイブと圧縮を同時に行う
Windows、Macとやりとりする際に有効
zipの圧縮
 zip -r <圧縮ファイル名> <圧縮対象パス>
zip の展開
 unzip <zip名>

 zip -rq <zip名> <ディレクトリ名> 対象ファイル名表示せずにzipファイルを作成
 unzip -q <zip名>  対象ファイル名を表示せずにzipファイルを展開

パスワード付きの圧縮
 zip -er <圧縮ファイル名> <圧縮対象パス>
パスワード付きの展開
 unzip <zip名>
 パスワード入力のプロンプトで入力をする

■ソフトウェアとパッケージ
■RedHat系
dnf install <>
dnf remove <>
dnf search <>
dnf info <>
昔はyum install
yumはサポート終了となったpython2 系で、yum後継のdnfはpython3 系

■Debian系
sudo apt install <>
sudo apt remove <>
debian系 linuxでインストール

ssh <ログイン> @<宛先IPアドレス>
ssh接続

info <コマンド名>
コマンドのドキュメントinfoドキュメントが表示される

⚠️ **GitHub.com Fallback** ⚠️