コンテンツにスキップ

01 linux basic command

## ディストリ確認
(debian) cat /etc/issue
(redhat) cat /etc/redhat-release
(Amazon) cat /etc/system-release  ,  cat /etc/os-release


## ハイフン
bash -
標準出力を表す


## ls コマンドで、サブディレクトリまで含めて表示(子ディレクトリまで含めて表示)
ll -d $(find `pwd`)


## tree ツリー
(代用)
pwd;find . | sort | sed '1d;s/^\.//;s/\/\([^/]*\)$/|--\1/;s/\/[^/|]*/|  /g'

## ファイル検索
sudo find / -name "filename" 
locate "filename"   ※updatedb。ファイル名データベースから検索。

sudo find /etc -name "http*" -type f    # (ファイルのみ。ディレクトリは除く。)
sudo find /etc -name "http*" -type f -exec wc -l {} +

#### 10分以内に更新されたファイルを検索
sudo find . -type f -mmin -10

-type ・・・ ファイルタイプ(f:通常ファイル、d:ディレクトリ、l:シンボリックリンク)
-mmin <分> ・・・ 指定した分数より前に更新されたファイル。「-mmin 3」で3分前、「-mmin +3」で3分以上前、「-mmin -3」で3分以内に更新。
-mtime <日数> ・・・・同上


## コマンドAの実行結果を引数にしてコマンドBを実行(xargs)
sudo find /etc -name "http*" -type f | xargs wc -l


## コマンド1が終了したらコマンド2を実行する(実行結果に関わらず)
コマンド1 ; コマンド2 
sleep 5m ; date


## コマンド1を実行しつつコマンド2も実行(バックグラウンドでコマンド1を実行しつつ、コマンド2も実行)
コマンド1 & コマンド2


## コマンド1が正常終了したらコマンド2を実行(コマンド1が正常終了したときのみ、コマンド2を実行)
コマンド1 && コマンド2
cd /home/egawa/ && touch egawa.txt


## コマンド1の結果をコマンド2に渡して実行
コマンド1 | コマンド2
ps aux | grep httpd


## コマンド1が異常終了した時に コマンド2を実行
コマンド1 || コマンド2
cd /home/egawa/abc || mkdir /home/egawa/abc


## 解凍(tar)   解答 回答 展開
tar xzvf asterisk-1.8.8.1.tar.gz


## 圧縮(tar)
tar czvf xxxxx.tar.gz directory

 z - gzip形式を利用
 v - 処理したファイルの一覧を表示
 f - 指定したアーカイブを利用する
 x - アーカイブからファイルを取得する
 c - アーカイブを作成する


## Zipアーカイブ
zip a.zip b.txt
zip -e --password=xxxxx encrypt.zip source.txt     # パスワード付き
zip -r 生成するzipファイル名 zip化するディレクトリ名   #  ディレクトリ単位
unzip -P xxxxx encrypt.zip                         # パスワード付きを展開


#### zip 圧縮・解凍(展開)
zip -r xxxxx.zip directory_name
unzip xxxxx.zip


## ログインユーザ切り替え
su [オプション] [ユーザー名]
 -   環境変数を引き継がずにユーザーを切り替える
 -m  環境変数「USER」と「LOGNAME」を切り替え後のユーザーに引き継ぐ
 -c  ユーザーを切り替えた後で、「-c」の後に記入されたコマンドを実行する

「su」 のみを実行すると、rootユーザとなる。


## マシン起動時に自動的にstart
(例:apache2、mongodb)
sysv-rc-conf apache2 on
sudo sysv-rc-conf mongod on
無ければ先にインストール。    
sudo apt-get install sysv-rc-conf


## ファイルの内容を1画面ごとに表示
~~ | more


## IPアドレス確認
ip a
ifconfig  (inet addr:xxxx の部分)

nm-connection-editor
というコマンドで、グラフィカルになんかいい感じに見れる。


## IPアドレス変更
<Debian>
/etc/network/interfaces    古いシステム?

sudo ifdown eth0
sudo ifup eth0
で、設定を反映。


<Red Hat>
/etc/sysconfig/network-scripts/ifcfg-eth0
                                     (インターフェース名)

<共通?>
新しめのバージョンでは、
nmcli
が使えるみたい。
nmcli device


## デフォルトゲートウェイ確認
ip route show


## DNS確認
cat /etc/resolv.conf


## viを読み取り専用で開く
view <ファイル名>


## debパッケージインストール
dpkg -i <ファイル名>


## シンボリックリンク作成
ln -s <リンク先ディレクトリ名 or ファイル名> <作成するリンク名>

内容確認は ls -l

-fオプション(--forceオプション)
すでに登録名が登録されるものであった場合、登録内容を上書き登録する。

-iオプション(--interactiveオプション)
すでに登録名が登録されるものであった場合、登録内容を上書き登録するか確認する問い合わせがある


## シンボリックリンク削除
unlink <リンク名>


## シンボリックリンクのコピー
ln -s <リンク先ディレクトリ名 or ファイル名> <作成するリンク名>


## ユーザ一覧
cat /etc/passwd

vagrant:x:900:900:vagrant,,,:/home/vagrant:/bin/bash
ユーザ名:x:ユーザID:グループ:コメント:ホームディレクトリ:シェル
(xは、パスワードが必要という意味)


## グループ一覧
cat /etc/group
グループ名:x:グループID:グループ所属のユーザ名
(xは、グループログインにパスワードが必要という意味)


## 自分が所属しているグループの確認
groups


## chmodメモ
ugo                      rwx     a全ユーザ
ユーザ  グループ  その他

パーミッション  ファイル所有ユーザ  グループ  ファイルサイズ  最終更新日  ファイル名
-rwxr-x--x 1 vagrant vagrant 0 Aug 11 10:21 bbb.sql


|  ls -lでの表示  |  意味                                          |
|:----------------|:-----------------------------------------------|
|  -              |  通常のファイル(Regular File)                |
|  d              |  ディレクトリ                                  |
|  l              |  シンボリックリンク                            |
|  c              |  キャラクタ型デバイスファイル(特殊ファイル)  |
|  b              |  ブロック型デバイスファイル(特殊ファイル      |


rwx ・・・ ファイル所有ユーザのアクセス権
r-x ・・・ グループに所属しているユーザのアクセス権
--x ・・・ その他のユーザのアクセス権


(その他ユーザに読み込み権限を追加)
chmod o+r bbb.sql


(サブディレクトリを含めて変更)
sudo chmod -R 777 app


## 所有者変更
sudo chown vagrant:vagrant filename

(例)
sudo chown ec2-user:ec2-user ./ -Rf

-f
Don't report any failure to change file owner or group, nor modify the exit status to reflect such failures.

-R
Change the user ID and/or the group ID for the file hierarchies rooted in the files instead of just the files themselves.



## シンボリックリンクの場所を調べる
readlink phpunit


## ログの確認
/var/log/messages
lessよりもtailコマンドが便利


## 行数・単語数を取得(正確な数字ではない?)
wc /var/log/syslog.1
行数、単語数、バイト数


## テキストの中身を検索
grep wordddd *
grep -r SEARCH_TEXT *

grep 'etc' /var/log/syslog.1
grep (etc|cd|root) /var/log/syslog.1
grep -E -R "(etc|root|report)" /var/log/syslog.1
grep --include='*.js' -r option * | grep type


-E  検索に正規表現を使う
-r  サブディレクトリも含めて検索
-R  サブディレクトリ、シンボリックリンク先も含めて検索
-n  行番号を表示
-dskip   grep: XXX: Is a directory  といった行をカット
--include='*.js'    ファイル名を指定

色々と参考になるもの
https://wa3.i-3-i.info/word11252.html


## 圧縮したテキストも検索
zgrep


## 先頭1行を出力
head -n 1 user_info.rb >> aaa.txt


## 環境変数を表示
printenv

特定の環境変数を確認(例:APP_ENV)
printenv APP_ENV

環境変数をセット
export APP_ENV="local"

環境変数を削除
unset NAME


## パスを確認するだけなら、これでOK
echo $PATH

(追加例。「$PATH:/usr/pgsql-9.6/bin」を追加。)
export PATH=$PATH:/usr/pgsql-9.6/bin

/usr/local/sbin
/usr/local/bin
/usr/sbin
等はデフォルトで入ってる。


## set
http://linuxcommand.org/lc3_man_pages/seth.html

set - Set or unset values of shell options and positional parameters.

-e  Exit immediately if a command exits with a non-zero status.
-x  Print commands and their arguments as they are executed.


## リモート端末のファイルをコピー
(下記は ec2への接続)
scp -i secret_key.pem ec2-user@hostname:/home/ec2-user/file_name.txt ~/


## リモート端末のディレクトリをコピー
(下記は ec2への接続)
scp -r -i secret_key.pem ec2-user@hostname:/home/ec2-user/dir_name/ ~/


## 中身ごとディレクトリを中身削除
rm -rf


## ログインユーザ確認
whoami 


## 現在の作業をバックグラウンドに移動
[ctrl] + z
復帰する場合
fg


## 画面を分割して作業
<tmux>
無ければ apt-get や yum でインストール。
起動後
[ctrl] + B → [Shift] + 2

・フォーカス画面の切り替え 
[ctrl] + B → 矢印キー
分割を解除
分割された画面にて exit


## Windowsのメモ帳チックなエディタ起動
gegit


## 再起動
sudo shutdown -r now


## 文字コードを識別
file -i <FILE-NAME>
nkf -g <FILE-NAME>
※半角英数のみで構成されたファイルの場合、「ASCII」と推測される。


## 文字コード変換
nkf -e file.txt > euc.txt
nkf -w --overwrite readme.txt
nkf -Ew 対象ファイル

ファイルの文字コードを指定する 
J … JIS
E … EUC-JP
S … SJIS
W … UTF-8
変換後の文字コードを指定する  
j … JIS
e … EUC-JP
s … SJIS
w … UTF-8


## 失敗したコマンドを強制的に実行
--force
--f
とかで、強制インストール/アンインストール(エラーを無視して実行)できるオプションがある。


## プロセス
ps aux
 a … 端末を持つすべてのプロセスを表示
 u … 実行ユーザ名や実行ユーザのIDのプロセスを表示
 x … 制御端末の無いプロセスを表示

ps afu
 ツリー上に見る

<コマンド例>
ps aux | grep odoo


## kill
kill -9 <PID>
9:Killシグナルによるプロセスの終了
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230806/?rt=nocnt

(コマンド名が分かっている場合、この書き方でもOK)
killall bash


## 終了コード
echo $?

(例:テスト実行コマンド)
php artisan test --testsuite=Unit

0 - 成功
0以外 - 失敗



## 接続端末のデバイスファイル名を表示
tty


## curl
https://curl.se/docs/manpage.html
https://www.mit.edu/afs.new/sipb/user/ssen/src/curl-7.11.1/docs/curl.html



curl -X POST http://kakiaaa.herokuapp.com/challenge_users -d name=tanaka -d email=tanaka@gmail.com  


curl -X POST [url] -d "name=hoge"
curl -X POST [url] -d "name=hoge&age=20"


#### ステータスコードのみを取得
curl -s {https://lolipop.jp/manual/tos/?} -o /dev/null -w '%{http_code}\n'

 -w (write out)で http_code を指定しつつ、
 -o (output)で、不要な情報は /dev/null にでも捨てる。
 -s (silent)を指定して「進捗どうですか?」を表示しないようにする。

 -k    sslエラーを無視

#### ヘッダ情報を取得
curl -I https://admin.dummy.localdev/

-I  Fetch the headers only!


### ヘッダ情報を表示(ALL)
curl -i http://challenge-your-limits.herokuapp.com/call/me
curl -i https://geoapi.heartrails.com/api/json


「Access-Control-Allow-Origin:*」とかみたい場合、こっち。


### <使用例>
curl -k -s https://localhost:44364/api/Products/3 | python -m json.tool

-k    sslエラーを無視
-s    silent
JSON は、より適切に表示するため、Python の json.tool モジュールに送信されます。
 
-S(-sS):  --show-error  <進捗はいらないけどエラーは表示したい>  -S オプションは -s オプションと併用することが前提のオプションで、進捗は表示されないけどエラーは表示されるようになる。


curl -v -k \
    -H "Content-Type: application/json" \
    -d "{\"name\":\"Plush Squirrel\",\"price\":0.00}" \
    https://localhost:44364/api/Products


-d は、HTTP POST 操作を意味し、要求本文を定義します。
-H は、要求本文が JSON 形式であることを示します。 ヘッダーの値で、既定のコンテンツ タイプ application/x-www-form-urlencoded がオーバーライドされます。


-L, -location
要求したページにリダイレクトが掛かっていた場合に追従する。この時要求がPOSTメソッドだった場合GETに変えられてしまうので変えられたくない場合は -post301, -post302, -post303等のオプションを併用する。


-v, -verbose
処理状況の更なる詳細や説明を出力させます。


-f, --fail          Fail silently (no output at all) on HTTP errors


#### BASIC認証
-u user:password


#### curl を使ってグローパルIPアドレスを確認
curl ifconfig.io


#### 日本語 Unicode エスケープ
echo -en "$(curl -s https://dev-api.example.com/api/report/personal/38)"

-e interprets escapes
-n suppresses the newline


{"message":"\u8a31\u53ef\u3055\u308c\u3066\u3044\u306a\u3044\u65b9\u6cd5"}
↓
{"message":"許可されていない方法"}

https://stackoverflow.com/questions/8795702/how-to-convert-uxxxx-unicode-to-utf-8-using-console-tools-in-nix


サービスから使用
https://www.oh-benri-tools.com/tools/programming/unicode-escape-unescape


PHP で使用する場合、json_decode を使用。

______________________________________________________________

## cd
cd     ホームディレクトリに戻る
cd -  1つ前に戻る


## ファイルサイズ確認
ls -lh


## 容量確認
https://xtech.nikkei.com/it/article/COLUMN/20060227/230748/

[du]
-h  容量を適当な単位で表示する
-s  引数で指定したファイルやディレクトリの総計を表示する

<ディレクトリ>
du -sh <dir_name>

<ファイルも>
du

<ドライブ単位>
df -hT
( /dev を確認 )

<ディレクトリごと>
du -h
(調べたいディレクトリで実行)

<深さを指定して調査>
du -h --max-depth 3

<300MB以上のファイルを表示>
find . -size +300M | xargs ls -l | sort -rn


## zip化
zip -r "yyyymmdd.zip" *


## メモリ利用率を確認
free -m


## マシン情報を確認
cat /proc/cpuinfo


## 画面クリア
Ctrl + l(エル)


## 日付確認
date


## タイムゾーンを日本に設定
sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime


## 日付修正(手動  )
sudo date -s "2018/09/27 09:39:00"


## タイムゾーンの確認
timedatectl

UTC(協定世界時)
JST(日本標準時)


## ズレた日付の修正
sudo yum -y install ntpdate  
sudo ntpdate ntp.nict.jp  


## リダイレクト
echo "date" > cmd.txt
echo "free" >> cmd.txt


## echo
-n    改行しない
-e    エスケープ有効(echo -e "a\tb")


## ファイルの内容をコマンドに渡す
bash < cmd.txt

(結果を別ファイルに保存)
bash < cmd.txt > result.txt


## 起動サービス(デーモン)確認
CentOS6    chkconfig --list
CentOS7    systemctl list-unit-files -t service



## service(centOS 6 まで)
(nginxが起動しているかどうか確認)
service nginx status


## systemctl(centOS 7 以降)
(nginxが起動しているかどうか確認)
systemctl status nginx




## エイリアス
alias  # 引数なしで実行すると、一覧を確認
alias apast='sudo systemctl restart httpd.service'

unalias apast  # 削除


## エイリアスを保持
sudo vi ~/.bashrc
alias apast='sudo systemctl restart httpd.service'


## エイリアスを作成(max)
vi ~/.bashrc
alias ll='ls -la'


vi .bash_profile
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi


source ~/.bashrc


### 再読み込み
source ~/.bashrc
source ~/.bash_profile


## エイリアスを保持(zsh)
vi ~/.bashrc

alias ll='ls -la'
export PATH=$HOME/.nodebrew/current/bin:$PATH
export DOCKER_CONTENT_TRUST=1

source ~/.zshrc


## 一般的な変数
COMMON_NAME=www.google.co.jp

echo $COMMON_NAME


## ポートの空きを確認
nmap <HOSTNAME>


## ping:ポート番号を指定
ping にそういうオプションは無いんで、代わりにこれで。

nc -v -w 1 <IP address> -z <port>
nc -v -w 1 10.0.1.45 -z 5432


## どのサービスがポートを使用しているかチェック
sudo lsof -i :5432
※sudo を付けないと、表示範囲に違いが出る

<ssコマンド>
ss


### TCP/IP通信の状態を調べる(どの IPアドレスと接続しているか通信状態を表示できる)
<netstat は、CentOs7からは非推奨?>
sudo netstat --help

### 待ち受け中のポートを表示
sudo netstat -putan
sudo netstat -putan | grep 80(port)


sudo netstat -anp
sudo netstat -ltup4


-a  すべての接続とリッスン ポートを表示
-l  Listenしているポートのみ表示
-t  TCPを表示
-u  UDPを表示
-n  ポートやホストを数値で表示
-p  ポートを開いているプロセスを表示(sudo)
-4  IPv4のみ
-6  IPv6のみ


# 起動中のサービスの一覧を表示 (--all を付けると全サービス)
systemctl -t service

## ファイアウォール(Ubuuntu) Debian
ufw enable                ufwを有効化
ufw disable               ufwを無効化
ufw status                ufwの状態とルールを表示
ufw status verbose        ufwの状態とルールを表示
ufw allow [xxx]           ポートを開くルールの追加
ufw delete allow [xxx]    不要なルールを削除する
ufw app list              アプリケーションの一覧表示
ufw help                  ヘルプ表示

<設定例>
sudo ufw default deny
sudo ufw allow 80
sudo ufw enable
sudo ufw reload


## ファイアウォール(CentOS) RedHat
※未検証
sudo systemctl start firewalld
sudo systemctl enable firewalld
firewall-cmd --set-default-zone=public
firewall-cmd --add-port=80/tcp --zone=public --permanent
firewall-cmd --add-port=22/tcp --zone=public --permanent
firewall-cmd --remove-port=80/tcp --zone=public --permanent
firewall-cmd --reload


## httpdデーモン再起動(CentOS7)
sudo systemctl start httpd
sudo systemctl start httpd.service


## httpdデーモン起動確認(CentOS7)
[vagrant@user ~]$ ps aux | grep http
root     10502  0.0  1.1 249308 11624 ?        Ss   12:49   0:00 /usr/sbin/httpd
apache   10519  0.0  0.7 249308  7352 ?        S    12:49   0:00 /usr/sbin/httpd
apache   10520  0.0  0.7 249308  7344 ?        S    12:49   0:00 /usr/sbin/httpd
apache   10521  0.0  0.7 249308  7344 ?        S    12:49   0:00 /usr/sbin/httpd
apache   10522  0.0  0.7 249308  7344 ?        S    12:49   0:00 /usr/sbin/httpd
apache   10523  0.0  0.7 249308  7344 ?        S    12:49   0:00 /usr/sbin/httpd
vagrant  10626  0.0  0.0 107484   920 pts/0    R+   12:50   0:00 grep http



## ファイアウォール起動確認(CentOS7)
systemctl status firewalld.service
firewall-cmd --state


https://qiita.com/kenjjiijjii/items/1057af2dddc34022b09e





## ファイアウォール(共通。古い書き方)
【iptales】

(全てのフィルターを消去)
sudo iptables --table filter --flush

(インバウンドを全て不許可、アウトバウンドと中継は全て許可)
sudo iptables --policy INPUT DROP
sudo iptables --policy OUTPUT ACCEPT
sudo iptables --policy FORWARD ACCEPT

(許可するポートを設定)
sudo iptables --append INPUT --protocol tcp --match state --state NEW --dport 22 --jump ACCEPT
sudo iptables --append INPUT --protocol tcp --match state --state NEW --dport 80 --jump ACCEPT

(ループバック(内部同士の通信)は許可)
sudo iptables --append INPUT --in-interface lo --jump ACCEPT

(通信確立と、確立済みの通信に関連する内容も許可)
sudo iptables --append INPUT --match state --state ESTABLISHED,RELATED --jump ACCEPT

(ICMP を許可)
sudo iptables --append INPUT --protocol icmp --jump ACCEPT

(保存)
sudo iptables-save -c
「service iptables save」は古い書き方?エラー出た。

(内容確認)
sudo iptables --list

(全削除)
sudo iptables --flush

## アクセスログの確認
<Debian>
/var/log/auth.log

<RedHad>
/var/log/secure


less /var/log/auth.log


## http(apache)ログの確認(例)
(圧縮されたファイルの中身を見る)
/var/log/httpd
zcat error_log*gz | grep -e "May 31"

cat access_log | grep -e 14.3.75.116 -e 49.239.65.139 | grep delete |grep -v GET
cat access_log | grep -e 49.106.211.219 | grep "24/Jun"
cat access_log | grep -e 49.106.211.219 -e 49.106.211.219
zcat error_log*gz | grep -e 114.157.38.153
zcat error_log*gz | grep -e "Jun 24" | grep -e 49.106.211.219
zcat access_log*gz | grep -e 114.157.38.153 -e 49.106.211.219 -e 49.106.213.212 -e 49.98.88.145 -e 49.96.22.136 | grep -v GET
cat error_log | grep 114.157.38.153




## アクセス状況を動的に見る
tail -F /var/log/auth.log


## postfix (メールサーバ)
systemctl status postfix.service

systemctl stop postfix 
systemctl disable postfix 


## rpm
sudo rpm -ivh https://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm

e - 削除


## cp
cp -a basefile targetfile

-a  更新時刻などもコピー元と同じになる。(属性もコピー元と同一)
-r

## ハッシュ値を算出
md5sum <ファイル名>
sha1sum
sha256sum
sha512sum

この値が同一かどうかで、ファイルが同一かどうかを調べることができる。


## ファイル比較
diff -ru <ファイル1> <ファイル2>

r  --recursive
u  --unfied


(使用例)
diff -ru ~/.ssh/config ~/.ssh__bk_20220415__/config
diff -ru ~/.ssh/id_rsa ~/.ssh__bk_20220415__/id_rsa
diff -ru ~/.ssh/id_rsa.pub ~/.ssh__bk_20220415__/id_rsa.pub
diff -ru ~/.ssh/known_hosts ~/.ssh__bk_20220415__/known_hosts


## ネットワーク帯域チェック(どのプロセスやサービスが一番ネットワークに負荷をかけているかチェック)
nethogs


## 通信相手のコンピュータとの通信料を調べる
iftop


## 備考
init.d スクリプト     古いバージョン
service コマンド      やや古めの環境
systemctl コマンド    systemd 採用環境


## quota (クォータ)機能
quota 機能とは、一般ユーザが作成できる「ファイル数」および「ブロック数」の合計をユーザごとに制限する機能です。  
この機能により、個々のユーザのファイルシステム資源の浪費を防止することができます。


[root@users694 ~]# quota -u main.jp-castle2
Disk quotas for user main.jp-castle2 (uid 790327):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sdd1 4279900  10485760 10485760          149330  150543  150543
[root@users694 ~]#


## パスワード生成
brew install pwgen
sudo apt-get install pwgen

pwgen

(16桁のパスワードを1つ)
pwgen 16 1
https://qiita.com/speg03/items/ec404c217e417160e2d5



## graceful  (apache再起動)
/etc/init.d/httpd configtest
/etc/init.d/httpd graceful


## ファイルを空にする
: > access_log             # サイズが0になる。

echo '' > access_log       # これだとサイズが0にならない。


現在のシェルを確認

echo $SHELL

ただし、この環境変数を設定しないシェルもありそれほど信頼できない。 その場合、以下のコマンドで表示できることも。

echo $0

使用可能なシェルの一覧を表示

cat /etc/shells

シェルを変更

bash → zsh に変更する場合、以下のコマンド

chsh -s /bin/zsh

bin/sh

bash のシンボリックリンク

https://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html
-c オプション - コマンドが string から読み込まれます。 string の後に引き数があれば、これらは 位置パラメータ (positional parameter: $0 から始まるパラメータ) に代入されます。

→ 引数が必要な時に使え、って事?

sh

最も基本的なシェル

シェルの種類

https://xtech.nikkei.com/it/article/COLUMN/20080919/315097/
シェルは大きく分けて,sh系(sh,ksh,bash,zsh)とcsh系(csh,tcsh)の2種類がある。

シェル 特徴
sh 最も基本的なシェル。ここから bash や ksh に派生。
bash 多くの Linux ディストリのデフォルト
ksh bash と親が同じらしい
ash 軽量。組み込み Linux に採用。Docker ベースイメージによく使われる Alpine もこれ。Bashより機能が少ない。
dash Debian系で使われる軽量 shell。
zsh Catalina 以降の Mac のデフォルト
fish 凄いらしいけど、あんま使ってない。
csh C言語に似てる。
tcsh csh から派生

シェル実行時のエラー

bash-4.2# ./server-setup
bash: ./server-setup: /bin/bash^M: bad interpreter: No such file or directory

改行コードの差異によるもの

cat -e <対象のファイル>
改行が「^M$」となっている。

sed -i 's/\r//' <対象のファイル>

DNS_command

https://kakisoft.github.io/MiscellaneousDocs/InfraAndEnv_Tool_Service/DNS/DNS_command/

yum

https://kakisoft.github.io/MiscellaneousDocs/Linux/centos_memo/

ssh

Move to MyDevEnv