LoginSignup
3
3

Linux便利コマンド一覧

Last updated at Posted at 2022-11-20

ルートユーザ切り替えコマンド

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'

自分の入力したコマンドの確認 0表示なら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 検索正規表現1 –e 検索正規表現2 ファイル名

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

指定した文字列を「含む行」を抽出するコマンド

cat ファイル名 | grep "単語"
   複数
cat ファイル名 | grep ""単語1|単語2|単語3"

指定した文字列を「含まない行」を抽出するためのコマンド
cat ファイル名 | egrep -v "単語"
   複数
cat ファイル名 | egrep -v "単語1|単語2|単語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}"
#3日前のデータを削除
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 置換する文字列 置換後の文字列 ファイル名 ファイル名2 ...

削除方法一覧

文字列の削除
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

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3