ルートユーザ切り替えコマンド
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