Linux便利コマンド一覧


# ルートユーザ切り替えコマンド
 ```
sudo su -
 ```

# サーバーのサービスの有効無効などの状態を確認
 ```
【CentOS】
systemctl list-unit-files
 ```

# ネットワーク設定 自動接続有効化
 ```
【CentOS】
ens0s3 (DHCP)
nmcli c up enp0s3
nmcli c mod enp0s3 connection.autoconnect yes

 ```




# log  確認コマンド
 ```
tailコマンドにオプション {-f}を付けてソフトを動かす。
これで、動かしているソフトの状態を確認しながら、見ることができる

tail -200f ここに見たい場所を記載する（基本的にはlogファイルが置いてある場所）
使用例
tail -200f /var/log/messages


tail -200f /var/log/apache2/error.log
 ```



# 差分を確認
 ```
diff ファイル1 ファイル2
 ```
ファイル1 と ファイル2 の内容の差分が表示されます。
 ```
cmp ファイル1 ファイル2
 ```
ファイル1 と ファイル2 の内容をバイト単位で比較し、異なる箇所を表示します。
 ```
sdiff ファイル1 ファイル2
 ```
sdiff コマンド: 2つのファイルの内容をサイドバイサイドで表示し、差分を強調します。

 ```
vimdiff ファイル1 ファイル2
 ```
Vimエディタの差分表示モードが起動し、ファイル1 と ファイル2 の差分を確認することができます。


# 並び変え ソート
 ``` 
-n	データを文字ではなく、数値として並び変える
-r	降順にデータを並び変える
-u	重複を排除して並び変える
-f	大文字と小文字を区別なく並び変える
-b	先頭に挿入されている空白を無視して並び変える
-k	キーを指定して並び変える（下記「-t」と併用）
-t	区切りの文字を指定する（下記「-k」と併用）



sort -k 並べ替えに使う列番号 -t 区切りに使うキー文字 ファイル名
例
sort -k 2 -t , example_2.csv

 ```

# tree コマンドが無い環境で tree コマンドを実現
 ```
pwd;find . | sort | sed '1d;s/^\.//;s/\/\([^/]*\)$/|--\1/;s/\/[^/|]*/|  /g'
 ```

# 自分の入力したコマンドの確認　０表示ならOK　それ以外の数値がでたらエラー

 ```
echo $?

プロセスが開いているファイルを表示
オプション	意味
-P		ポート番号をサービス名に変換しない
-c		プロセス名を指定する
-i		ネットワークソケットファイルを表示する
-n		IPアドレスを表示する（名前解決しない）
-p		プロセスIDを指定する
例）
ポート番号を指定する
lsof -i:80
複数のオプション使用
lsof -i -n -P
 ```

# 検索
 ```
-type f
ファイルのみを検索対象とします。検索対象にディレクトリを含めたくない場合に使います。
ディレクトリのみを対象とする場合は、-type dとします。



find 検索対象のディレクトリ -name 検索対象のファイル -type f -print0 | xargs -0 grep 検索したい文字列

例1. カレントディレクトリ配下の「foo*」ファイル内に「hoge」が含まれているものを検索する
find . -name 'foo*' -type f -print0 | xargs -0 grep hoge
 ```

# すべてのファイルの一覧が表示される。
 ```
find /
#####特定のファイル名で検索したい場合
find / -name "検索キーワード"
find . -name "検索キーワード"
#####ルートディレクトリからマシン内の全ファイルの一覧を表示する
find / -print
find /root -name "*.txt"
#####カレントディレクトリ以下の全ファイルの一覧を表示する
find . -print
#####カレントディレクトリ以下の全ファイルの一覧を表示する
find /usr/local -print

 ```

# bosyu.csvファイル読込み行数を検索
 ```
任意の変数=`cat /ファイルパス/ファイル名 | wc -l`
 ```

# 該当箇所削除

 ```
##and検索
grep スタートの検索文字列.*終わりの検索文字列 ファイル名
	
##or検索
grep –e 検索正規表現１ –e 検索正規表現２ ファイル名

##複合パターン
grep -e "スタートの検索文字列.*終わりの検索文字列"  -e "スタートの検索文字列.*終わりの検索文字列" ファイル名
 ```

# 指定した文字列を「含む行」を抽出するコマンド
 ```
cat ファイル名 | grep "単語"
	複数
cat ファイル名 | grep ""単語１|単語２|単語3"

指定した文字列を「含まない行」を抽出するためのコマンド
cat ファイル名 | egrep -v "単語"
	複数
cat ファイル名 | egrep -v "単語１|単語２|単語3"
 ```

# ファイル解凍
 ```
フォルダー内のtarファイルを全て解凍
find ./ -type f -name "*.tar" | xargs -n 1 tar xvf

フォルダー内の.gzファイルを全て解凍
find ./ -type f -name "*.gz" -exec gunzip {} \;
 ```

# 戻り値を判定 - logファイル作成時使用
 ```
if [ $? -ne 0 ]; then
  エラー処理
fi
 ```

# 現在、実行しているプロセスを確認
 ```
netstat -anp | grep (ポート番号記載)

ps -a

ps aux | grep httpd

ps aux | grep "調べたいプロセス"

 ```

# Linuxでプロセスを終了させるコマンド
 ```
主なシグナル
1	SIGHUP	再起動
6	SIGABRT	中断
9	SIGKILL	強制終了
15	SIGTERM	終了
17	SIGSTOP	停止
18	SIGCONT	再開

例kill -9 プロセスID

代表的なポート番号とプロトコル
TCP 20 : FTP (データ)
TCP 21 : FTP (制御)
TCP 22 : SSH
TCP 23 : Telnet
TCP 25 : SMTP
UDP 53 : DNS
UDP 67 : DHCP（サーバ）
UDP 68 : DHCP（クライアント）
TCP 80 : HTTP
TCP 110 : POP3
UDP 123 : NTP
TCP 443 : HTTPS
WELL KNOWN PORT NUMBERS 0~1023

 ```
# バックアップ・コピー cpコマンド
 ```
ファイル名に日付＿時間を付けてコピーする
cp -p a.txt a.txt.`date "+%Y%m%d_%H%M%S"`
 ```

# rsync 高速なファイル同期（バックアップ）を行う
 ```
rsync [オプション] コピー元 コピー先

rsync -av /tmp/from/ /tmp/to/

[オプション]
-a	コピー元のディレクトリを再帰的にオーナー・グループ・パーミッション・タイムスタンプをそのままコピーします。オプション -rlptgoD と同じです。
-g	グループをそのままコピーします。
-l	シンボリックリンクをそのまま（ターゲットの指定を変えずに）コピーします。
-o	オーナーをそのままコピーします。
-p	パーミッションをそのままコピーします。
-r	ディレクトリ内を再帰的にコピーします。
-t	タイムスタンプをそのままコピーします。
-u	コピー元とコピー先を比較し、追加・更新されたファイル・ディレクトリのみをコピーします。
-v	コピーしているファイル名やバイト数などの情報を表示します。
-z	通信を圧縮します。
-4	IPv4を使用します。
-6	IPv6を使用します。
--delete	コピー元にない（削除された）ファイルをコピー先で削除します。コピー元とコピー先を同期します。
 ```

# 世代管理バックアップ(shell)rsync使用例
 ```
BASEDIR="/backup" 
LATESTBKUP=$(ls $BASEDIR | grep backup- | tail -n 1) 
rsync -avh --link-dest="$BASEDIR/$LATESTBKUP" /usr/local/tomcat85 "/backup/${BACKUP}"
#３日前のデータを削除
find /backup  -name "backup-$(date +%Y%m%d -d '3 day ago')" | xargs rm -rf
 ```



# 世代管理バックアップ(shell)rsync未使用
 ```
(rm コマンドを使用しえローテーションで行う)

### ローテーション実行 ###
	if [ -d ${BK_DIR3} ] ; then
		/bin/rm -rf ${BK_DIR3}
	fi
	if [ -d ${BK_DIR2} ] ; then
		/bin/mv ${BK_DIR2} ${BK_DIR3}
	else
		/bin/mkdir ${BK_DIR3}
	fi
	if [ -d ${BK_DIR1} ] ; then
		/bin/mv ${BK_DIR1} ${BK_DIR2}
	else
		/bin/mkdir ${BK_DIR2}
	fi
	if [ -d ${BK_DIR} ] ; then
		/bin/mv ${BK_DIR} ${BK_DIR1}
	else
		/bin/mkdir ${BK_DIR1}
	fi
	if [ -d ${BK_DIR3} ] ; then
		/bin/mv ${BK_DIR3} ${BK_DIR}
	fi
 ```

# 容量確認コマンド
ディレクトリ　全体の容量
 ```
sudo du -h --max-depth=0 

 ```


ディレクトリの容量が大きい順に表示
 ```
du -h --max-depth=1 | sort -rh
 ```


# cron 設定
 ```
cronの設定ファイル表
毎分、以下の設定ファイルの内容に変更がないかを確認し、変更があった場合には反映して実行。

ﾌｧｲﾙ/ﾃﾞｨﾚｸﾄﾘ名			利用者		主な用途
/var/spool/cron/user	全ﾕｰｻﾞ		ユーザの自動タスク設定ファイル

/etc/crontab			root		毎時、毎日、毎月、毎週の自動タスクのメイン設定ファイル
/etc/cron.hourly		root		毎時実行される自動タスク設定ファイルを置くディレクトリ
/etc/cron.daily			root		毎日実行される自動タスク設定ファイルを置くディレクトリ
/etc/cron.monthly		root		毎月実行される自動タスク設定ファイルを置くディレクトリ
/etc/cron.weekly		root		毎週実行される自動タスク設定ファイルを置くディレクトリ
/etc/cron.d				root		上記以外の自動タスク設定ファイルを置くディレクトリ

##自動起動(0時に起動)

crontab -e
0 0 * * * /root/rsync.sh
 ```

# [サービスの自動起動設定の一覧確認コマンド]
 ```
 設定確認全て
systemctl list-unit-files --type=service

 設定確認任意
systemctl list-unit-files -t service | grep サービス名

 設定確認
systemctl list-unit-files -t service

 自動起動on
systemctl enable サービス名.service

 自動起動off
systemctl disable サービス名.service

起動
systemctl start app

停止
systemctl stop app

再起動
systemctl restart app

リロード
systemctl reload app

自動起動を設定する
systemctl enable app

自動起動を無効にする
systemctl disable app

ステータスの表示
systemctl status app

アクティブかどうかの確認
systemctl is-active app

自動起動の設定確認
systemctl is-enabled app
 ```

PostgreSQL を起
 ```
pg_ctl -w start
 ```

# Apache Tomcat 起動します。
 ```
/usr/local/tomcat/bin/catalina.sh start
/usr/local/tomcat/bin/catalina.sh stop
 ```

# date	日時の比較 
 ```

diff=$(expr `date -d"${today}" +%d` - `date -d"${ans}" +%d` / 60 / 60 / 24)
echo ${diff}
 ```

# 複数のファイル名を一括変更するコマンド
 ```
rename 置換する文字列 置換後の文字列 ファイル名 ファイル名２ ...
 ```

# 削除方法一覧
 ```
文字列の削除
sed -e 's/変更前の文字列//g' ./data.txt > ./data-new.txt

sed -i -e /’削除対象の文字列’/d （ファイル名）

sed -e "s/text//"

行頭にtextがあった場合削除
sed -e "s/^text//"                   

行末にtextがあった場合削除
sed -e "s/text\$//"       

特定のディレクトリ以下全てを削除
find ディレクトリパス/. -type f -name '*.ファイル名' | xargs /usr/bin/perl -pi -e "s/変更前文字列//g"

拡張子が log のファイルだけ削除  logの部分は変更可能
find -name "*.log" -exec rm {} \;

行番号で指定した行を削除
sed '行番号d' in.txt

例3行目を削除
sed '3d' in.txt 
 ```

# 削除
 ```
すべてのファイル
rm *

ファイル名の一部を指定して削除
rm test*.dat

rm -f *.csv
rm -f *.csv.gz
 ```

# 過去データ削除
 ```
30日以上前のディレクトリを強制削除
find ./aaa -type d -mtime +30 | xargs rm -fr

n日前より古いファイルをまとめて削除してみる
find /root/test/ -mtime +2 -exec rm -f {} 
 ```

# Windows10 PowerShell使用   置換・変更・削除
 ```
Get-ChildItem | Rename-Item -NewName { $_.Name -replace '置換前の文字','置換後の文字' }

サブディレクトリも含めて一括置換
Get-ChildItem . -include *.検索k文字 -Recurse -Force  | Rename-Item -NewName { $_.Name -replace '.置換前の文字','.置換後の文字' }

Get-ChildItem . -include *.webp -Recurse -Force  | Rename-Item -NewName { $_.Name -replace '.webp','.jpg' }
 ```

# フォルダ内ファイル名を一括置換
 ```
rename 置換する文字列 置換後の文字列 ファイル名 ファイル名②…

find ./ -type f | sed 'p;s/aaa/bbb/' | xargs -n2 mv

ファイルの拡張子などで条件を絞って全置換するには find を使う。
find . -name "*.txt" | xargs sed -i 's/置換前/置換後/g'

カレントディレクトリ配下の全ファイルの文字コードを一括変換
find . -type f -name "*.（変更したい拡張子）" -exec nkf -wd --overwrite {} \;

/usr/bin/perl -pi -e "s/置換前文字列/置換後文字列/g" /ファイルパス

 ```

# 特定のディレクトリ以下全てを置換
 ```
find ディレクトリパス/. -type f -name '*.ファイル名' | xargs /usr/bin/perl -pi -e "s/変更前文字列/変更後文字列/g"

カレントディレクトリ配下の全ファイルの文字コードを一括変換
find . -type f -name "*.（変更したい拡張子）" -exec nkf -wd --overwrite {} \;

/usr/bin/perl -pi -e "s/置換前文字列/置換後文字列/g" /ファイルパス

以下使用例
find /var/www/html/kankou/event/. -type f -name '*.html' | xargs /usr/bin/perl -pi -e "s/<!-- event shimekiri02 shell  -->//g"

 ```



# 文字列連結
 ```
ループを用いて文字列を連結する

for x in `cat os.txt`
do
 concat="$concat $x"
done
echo $concat
 ```

# shellでperlコマンドを使用記載方法#

 ```
perlで文字列置換
perl -e 
/usr/bin/perl -e
-eはオプション

/usr/bin/perl -pi -e "s/置換前文字列/置換後文字列/g" /ファイルパス
 ```


# 計算式や論理式を評価する
 ```
コマンド実行例
expr 100 + 20
（100と20を足した結果を出力）（画面1）

expr 100 "*" 20
（100と20を掛けた結果を出力）

expr 100 / 3
（100を3で割った結果のうち整数部分のみを出力）
 ```


# エラー発生時 ログ確認場所

 ```
var/log/messages
一般的なログ。サービス起動時の出力など

/var/log/secure
認証、セキュリティ関連のログ

/var/log/maillog
メール関連のログ

/var/log/dmesg
カーネルが出力したメッセージのログ。ハードの故障の際にはこちら。

/var/log/httpd
WEBサーバに関連のログ

 ```


# カーネル、OS情報の表示

 ```
hostnamectl

 ```


# ホスト名の変更
 ```
再起動すると元に戻る。
設定ファイルとしては/etc/hostnameがあるが、ここが反映されません。

hostname ホスト名

オプション
-a	ホストの別名（alias）があれば表示する
-d	NSドメインの名前を表示する
-f	FQDN（Fully Qualified Domain Name）を表示する
-A	全てのFQDN（FQDNs）を表示する
-i	ホストのIPアドレスを表示する。設定時も使用可能
-I	全てのアドレスを表示する
-s	短い形式のホスト名（最初のドットまでの名前）を表示する
-y	NISドメイン名を表示する。設定時も使用可能
-v	起こっていることを逐一表示する（verboseモード）
-F	新しいホスト名を指定したファイルから読みこむ（「#」から始まる行はコメント扱い）


恒久的に変更する場合
hostnamectl set-hostname --static ホスト名
 ```

# 全てのサービス一覧
 ```
定義されているサービスを全て見たい場合

systemctl list-unit-files --type=service
systemctl list-unit-files -t service
 ```


# ファイヤーウォール  (firewall-cmd) 設定
 ```
ﾌｧｲﾔｰｳｫｰﾙ の状態を表示
firewall-cmd --state

追加、有効化されている項目を全て表示
firewall-cmd --list-all

追加、有効化されているサービスを全て表示
firewall-cmd --list-servicse

サービスを有効化
firewall-cmd --add-services

サービスを追加する
firewall-cmd --add-service=http

ポートを削除する
firewall-cmd --remove-port=123/udp

ポートを追加する
firewall-cmd --add-port=80/tcp

firewalld の再起動/再読み込み時に反映させる
サーバ再起動や firewalld reload 時に恒久的に反映させるためには、
コマンドのどこかに --permanent を入れる（前でも後でも良い）。
firewall-cmd --permanent --add-port=123/udp

firewalld の再読み込み
firewall-cmd --reload

ファイヤーウォール  の設定を表示
systemctl status firewalld.service

firewall-cmd --list-all で表示されるパラメータの意味
 ```






# パッケージをインストール、更新、アンインストール）
 ```
インストールする
rpm -ivh パッケージファイル名

パッケージを更新する
rpm -Uvh パッケージファイル名

パッケージをアンインストールする
rpm -evh パッケージ名
 ```

# IPアドレスの確認
 ```
ping localhost
 ```

# UnitがServiceとして認識されたか確認する
 ```
sudo systemctl list-unit-files --type=service | grep hello

 ```




# CSVファイルマージ
 ```
copy *.csv output.csv
 ```

### Linuxメモリ使用量とディスク使用量を同時に確認コマンド

 ```
free -h && df -h
 ```
free: メモリの使用状況を表示するコマンド
df: ディスクの使用状況を表示するコマンド
&& は、左側のコマンドが正常に終了した場合にのみ右側のコマンドを実行する演算子です。
このコマンドは、メモリ使用状況とディスク使用状況を連続して表示するために使用されます。
 ```
top -n 1 && df -h
 ```

top: プロセスとシステムのリソース使用状況を表示するコマンド
df: ディスクの使用状況を表示するコマンド
&& は、左側のコマンドが正常に終了した場合にのみ右側のコマンドを実行する演算子です。
このコマンドは、プロセスとシステムのリソース使用状況とディスク使用状況を連続して表示するために使用されます。
 ```
vmstat -s && df -h
 ```
vmstat: システムのリソース使用状況を表示するコマンド
df: ディスクの使用状況を表示するコマンド
&& は、左側のコマンドが正常に終了した場合にのみ右側のコマンドを実行する演算子です。
このコマンドは、システムのリソース使用状況とディスク使用状況を連続して表示するために使用されます。



SCPコマンド
ローカルマシンにあるファイル example.txt をユーザー名 user でログインしているリモートサーバーの /home/user/files ディレクトリにコピー

 ```
scp /path/to/local/example.txt user@remote:/home/user/files
 ```

リモートサーバーからローカルマシンにファイルをコピーする場合
リモートサーバーの /home/user/files/example.txt ファイルをユーザー名 user でログインしているローカルマシンの /path/to/local フォルダにコピーするには、以下のようにします。


 ```
scp user@remote:/home/user/files/example.txt /path/to/local
 ```


リモートサーバーからリモートサーバーにファイルをコピーする場合
 ```
scp user1@remote1:/path/to/file user2@remote2:/path/to/destination
 ```
user1：リモートサーバー1に接続するためのユーザー名
remote1：リモートサーバー1のIPアドレスまたはドメイン名
/path/to/file：コピーするファイルの場所と名前（リモートサーバー1上）
user2：リモートサーバー2に接続するためのユーザー名
remote2：リモートサーバー2のIPアドレスまたはドメイン名
/path/to/destination：コピー先のフォルダーの場所（リモートサーバー2上）
user1がリモートサーバー1上の/home/user1/file.txtをuser2のホームディレクトリーにコピーする場合、以下のようになります。
 ```
scp user1@remote1:/home/user1/file.txt user2@remote2:~
 ```

Podmanのバイナリを手動でダウンロード
# 任意のバージョンのバイナリをダウンロード
 ```
wget https://github.com/containers/podman/releases/download/v3.2.3/podman-v3.2.3-linux-amd64.tar.gz
 ```
# ダウンロードしたアーカイブを解凍
 ```
tar xvf podman-v3.2.3-linux-amd64.tar.gz
 ```
# Podmanのバイナリを適切な場所に配置
 ```
sudo cp podman-v3.2.3-linux-amd64/podman /usr/local/bin/
 ```

sudo yum install kernel-core --releasever=8.8 --enablerepo=ol8_baseos_latest

オラクルリナックス8 に　podman 4.1.1 をインストール　する　
continaes-common 　回避方法

"container-common"依存関係を無視してPodmanをインストールします。以下のコマンドを実行します。


依然として問題が解決しない場合、Podmanを手動でダウングレードしてバージョン4.1.1にインストールします。まず、Podmanをアンインストールします。
 ```
sudo dnf remove podman
 ```



 ```
sudo dnf install podman --nobest
 ```



 ```
wget https://download.fedoraproject.org/pub/epel/8/Everything/x86_64/Packages/p/podman-4.1.1-1.el8.x86_64.rpm
sudo dnf install podman-4.1.1-1.el8.x86_64.rpm
 ```

ディレクトリ内のスナップショットファイルを一覧表示
```
 ls -lrth | grep *sesparse.vmdk 
```


Dockerコンテナ内のファイルを取り出す
コンテナ内の/var/log/nginx/access.logファイルをホストの/tmpディレクトリにコピーする場合
```
docker cp mynginxcontainer:/var/log/nginx/access.log /tmp
```

Linux環境からDockerコンテナにファイルを移動させる方法は、
```
docker cp <ホストのファイルパス> <コンテナ名またはコンテナID>:<コンテナ内のディレクトリパス>
```

Linux環境からDockerコンテナにファイルを移動させる方法は、docker cpコマンドを使用します。以下にその使用法を示します。


例ホスト上の/tmp/example.txtファイルをDockerコンテナ内の/appディレクトリにコピーする場合は、次のようにします。
```
docker cp /tmp/example.txt mycontainer:/app
```

Docker インストール
```
sudo subscription-manager repos --enable rhel-7-server-extras-rpms
```
```
sudo yum install docker
```
```
sudo systemctl start docker
```

2
Docker CEリポジトリを追加する:
Docker Community Edition (CE)のリポジトリを追加す
```
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
```

Docker CEをインストールする:
インストール可能なDockerパッケージを検索し、インストールします。

```
sudo yum install docker-ce

```


RHEL ISO ファイルに OpenSSH が含まれているかどうかを確認するコマンド
```
grep -q "openssh" /path/to/iso/file
```

コマンドの説明:

grep: ファイル内を検索するコマンドです。
-q: 検索結果を出力せずに、一致する行があるかどうかだけを判定します。
"openssh": 検索する文字列です。OpenSSH のパッケージ名が含まれているため、これを検索します。
/path/to/iso/file: 検索対象の ISO ファイルのパスです。
コマンドの実行例:

```
grep -q "openssh" ~/Downloads/RHEL-8.5-x86_64-dvd.iso
```
この例では、~/Downloads フォルダにある RHEL-8.5-x86_64-dvd.iso ファイルを検索します。

コマンドの出力例:

検索結果に一致するものがあれば、何も出力されません。
検索結果に一致するものがない場合は、1 というステータスコードが返されます。