私的ITチートシート_Linux(2024/05/29up)
私的ITチートシート_Windows(2023/6/28up) | TRAINING GROUNDS (bigfoot.work)
私的ITチートシート_Other(2023/6/30up) | TRAINING GROUNDS (bigfoot.work)
Linux
locateのオプション
-i 大文字小文字を無視する -b ディレクトリは無視する -A 通常、locateの後にオプションを付けず、スペースで複数語句を記述するとor検索になるが、and検索にする
/tmpにファイルを作るとどこのパーティションが消費される
パーティションが切られていなければ「/」が消費される
/tmp配下のファイルの保持期限
/usr/lib/tmpfiles.d/tmp.conf
# Clear tmp directories separately, to make them easier to override q /tmp 1777 root root 10d q /var/tmp 1777 root root 30d 10dなので10日となる
renameコマンド
mvばかりで使ったことなかったんですが、
aaaファイルをbbbファイルに変えるとき
mvなら
mv aaa bbb
なのが
renameだと
rename aaa bbb aaa
でマッチする条件を最後につけるのでチョッチ分かりにくい。
複数ファイルを一気に置換する時とかは便利らしい。
rmにrm -iのaliasを設定する(恒久)
aliasを設定するユーザの.bashrcを編集 vi .bashrc
# .bashrc # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi # User specific environment if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]] then PATH="$HOME/.local/bin:$HOME/bin:$PATH" fi export PATH # Uncomment the following line if you don't like systemctl's auto-paging feature: # export SYSTEMD_PAGER= # User specific aliases and functions alias rm='rm -i' ←追加
即時反映
source .bashrc または . .bashrc
すでにrm -iが設定されているユーザーでrm -i を実行しても動作は変わらない(確認あり)模様。
ちなみにrm -i -i hoge.txtでも同様に確認ありで動作した。
digコマンドでDNSの各種登録レコードを確認する
yum install bind-utils dig hogeeee.net dig hogeeee.net ns dig hogeeee.net soa dig hogeeee.net mx dig hogeeee.net A dig hogeeee.net TXT
zipの-m(–move)オプション
意外に何のオプションなのか探すのに手間取ったが
zip後に元のファイルを消すオプション
[root@localhost ~]# ll 合計 0 -rw-r--r--. 1 root root 0 1月 5 11:16 a.txt -rw-r--r--. 1 root root 0 1月 5 11:16 b.txt [root@localhost ~]# zip -m txt.zip * adding: a.txt (stored 0%) adding: b.txt (stored 0%) [root@localhost ~]# ll 合計 4 -rw-r--r--. 1 root root 298 1月 5 11:16 txt.zip
routeコマンドのネクストホップ設定
ip route もしくは ip r で現在の設定を表示 10.0.0.0/8 via 10.131.255.255 dev eth0 viaがネクストホップ(該当のネットワークに届けるために次に経由するIPアドレス)のアドレス 追加する場合のネクストホップの指定は ip route add 192.0.2.1 via 10.0.0.1 dev eth0 などとする。
psacctで複数ユーザーのコマンド実行履歴を確認する
dnf install psacct systemctl enable --now psacct とすることで、OS起動時の自動起動設定とともにすぐに起動することができる lastcomm で全ユーザー lastcomm --user ユーザ名 でユーザ名指定で履歴を確認
一時的にrouteを追加する
route add -net 192.168.1.1 netmask 255.255.255.255 192.168.1.254 eth0
Pingで経路を確認する
chrony
CentOS7以降、採用されているNTPサーバ
htop
dnf install htop
topのcオプション(プロセスのコマンドを表示)を最初から表示するようなコマンド
その他、CPUコア別の表示も出ていたり、マウスで表示を切り替えられたりとなかなか良さげ。
Cutコマンドのセパレータの数え方
shellの中でshell自身が実行されているパスの頭のwordだけを切り取りたい場合
/home/hoge/test.sh で「home」を得たい
#!/bin/bash export DIR=$(readlink -f $0|cut -d'/' -f2) function fileName(){ echo $DIR } fileName
$./test.sh home
readlink -f $0
でフルパスを取得したあと、cutで必要なフィールドを取り出す
「/」をデリミタとした場合は最初の「/」の前から1としてカウントされるのでhomeのあるフィールドは2番目となる。
rsyncのexcludeとinclude
includeとexcludeの順番、コピー元とコピー先の末尾の「/」の有無に注意する
■tar.gzを除外する rsync -auv --exclude="*.tar.gz" --delete 同期元サーバ名:/コピー元ディレクトリ/ /コピー先ローカルディレクトリ/ ■tar.gzのみコピーする rsync -auv --include="*.tar.gz" --exclude="*" --delete 同期元サーバ名:/コピー元ディレクトリ/ /コピー先ローカルディレクトリ/
logwatchの出力先をメールではなくファイルにする
logwatchの出力先をメールではなくファイルにする | TRAINING GROUNDS (bigfoot.work)
viで置換する
■一か所だけ置換 :s/置換したい文字列/置換後の文字列/ ■行全体を置換 :s/置換したい文字列/置換後の文字列/g ■ファイル全体を置換 :%s/置換したい文字列/置換後の文字列/g
renameコマンド
mvばかりで使ったことなかったんですが、 aaaファイルをbbbファイルに変えるとき mvなら mv aaa bbb なのが renameだと rename aaa bbb aaa でマッチする条件を最後につけるのでチョッチ分かりにくい。 複数ファイルを一気に置換する時とかは便利らしい。
停電時に自宅サーバを自動でシャットダウンする
停電時に自宅サーバを自動でシャットダウンする | すあまにあーず! (bigfoot.work)
lsで隠しファイルも表示する
ls -a
ちなみにllはls -lのエイリアスなので隠しファイルは表示しません。ls -laと打ちましょう。
サブディレクトリも再帰的に表示
ll -aR
rsyncdはデフォルトで共有モジュール名を公開している?
rsyncdはデフォルトで共有モジュール名を公開している? | すあまにあーず! (bigfoot.work)
rsyncdのログファイル出力先を変更する
rsyncdのログファイル出力先を変更する | すあまにあーず! (bigfoot.work)
phpの.user.ini
CentOS8ではApacheのMPM のデフォルト値が「event」になっているため、mod_php ではなくphp-fpmを使う。
.user.iniは.htaccessのようにディレクトリ単位でphp.iniの設定をオーバーライドできるもの .htaccessの代わりに使用できる
.htaccessで設定できるのはモジュール版のPHPのみで、php-fpm(CGI)版では使えない。.user.iniは読み込み間隔の設定もあるため、すぐに反映されない場合があるが、php-fpmを再起動すれば即反映される。Redhat8系~ではサービスとなっているphp-fpmを再起動をする必要があり、Apacheの再起動のみでは、php.ini/.user.iniの変更は反映されない模様。試していないが、ディレクトリごとに.user.iniファイルでオーバーライドしている場合はオーバーライドした値が有効になっているか、ディレクトリの設定値をphpinfo()で表示させて確かめた方がよいかも。
phpの有効機能確認
ソースでインストールした場合は./configureで指定したオプションを確認できる
php -i | grep './configure' php -r 'phpinfo();'
リポジトリからのインストールの場合は./configureオプション部分は表示されないため、phpinfoを確認するしかない?
php -r 'phpinfo();'
journalで特定のサービスのログを見る
mariadbの場合
journalctl -u mariadb
RockyLinux
普通にCentOSと同じ感じで使える
apacheがevent起動かprefork起動か確認
httpd -M | grep mpm mpm_event_module (shared)
切り替え
/etc/httpd/conf.modules.d/00-mpm.conf
の
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so #LoadModule mpm_worker_module modules/mod_mpm_worker.so #LoadModule mpm_event_module modules/mod_mpm_event.so
の有効にしたい箇所のコメントを外してhttpdを再起動
Let’s Encrypt
https://qiita.com/dolcano/items/4ad38ec85d0fd27a229c
を参考に。
事前準備
・ドメインがDNSでSSL化するサーバのIPに行くようになっていること。
・Apacheのconfで80番ポートと443番ポート(SSLキー等は証明書取得時は未設定でよいLet’s Encrypt設定後に入れる)のViratulHOSTを設定してエラー無くApacheが稼働すること。
DocumentRoot /path/to/documentroot ServerName ドメイン名 DocumentRoot /path/to/documentroot ServerName ドメイン名
dnf install certbot certbot certonly --webroot -w /path/to/ドキュメントルート -d ドメイン名 -m メールアドレス
–email or -m メールアドレス で通知用メールアドレスを
–agree-tos で利用規約に同意
を予め指定しておくと多少手間が省ける
対象ドメインの削除
certbot delete
表示されたリストの中から削除したいドメインのNoを選んで削除
毎月1日1時に証明書の更新チェックとhttpdの再起動設定
00 04 01 * * certbot renew && systemctl restart httpd
Webmin
https://sourceforge.net/projects/webadmin/files/webmin/
から最新版を取得。※新しいものでないとOSチェックでエラーとなる場合あり。
dnf install perl perl-Net-SSLeay openssl perl-Encode-Detect perl-Digest-MD5 perl-Digest-SHA dnf install webmin-1.99X-1.noarch.rpm
いつもは自動起動しないようOFFっておく。
chkconfig --list|grep webmin webmin 0:off 1:off 2:on 3:on 4:off 5:on 6:off chkconfig webmin off webmin 0:off 1:off 2:off 3:off 4:off 5:off 6:off
最近のVerを入れると/etc/init.d/webmin起動からsystemdに置き換わるようなので、その場合は
systemctl disable webmin
で自動起動を停止
php7.4
※デフォルトのPHP7.1だと新しいWordPressは正常に動作しないため、7.4に切り替え。
※MariaDBとの接続用mysqlnd,キャッシュ高速化用opcache,apucも併せてインストール
dnf module list php dnf module -y reset php dnf module -y enable php:7.4 dnf module -y install php:7.4/common dnf install php-mysqlnd php-opcache php-pecl-apcu php-gd
MariaDB10.5
※この時点でデフォルト10.3だったので、どうせなら新しいのを
dnf module list mariadb dnf module -y reset mariadb dnf module -y enable mariadb:10.5 dnf module list mariadb dnf module -y install mariadb:10.5 mysql_secure_installation
GETコマンドのインストール
dnf install perl-libwww-perl
これでGETは入るが、https対応していないので、こちらも
dnf install perl-LWP-Protocol-https
改行コード変換
LF改行のテキストから改行コードを削除して改行なしファイルを作る
tr -d '\n' < kaigyoari.txt > kaigyonasi.dat
CRLF改行のテキストからCR改行コードを削除してLF改行ファイルを作る
tr -d '\r' < c_CRLF > d_LF
LF改行のテキストをCRLF改行テキストに変更する
nkf -Lw a_LF > c_CRLF
改行コードをまとめて判別
nkf --guess * a_LF: ASCII (LF) b_NO: ASCII c_CRLF: ASCII (CRLF) d_LF: ASCII (LF)
systemdのserviceの一覧表示
アクティブなものを表示 systemctl list-units --type=service すべて systemctl list-units --all --type=service 自動起動の状態を確認 systemctl list-unit-files --type=service
journalを消す
使用量表示 journalctl --disk-usage 1日より前を削除 journalctl --vacuum-time=1d /var/log/journalが無い場合 /etc/systemd/journald.conf が Storage=auto になっているか確認 なっていたら、 mkdir /var/log/journal で作成し、 systemctl restart httpd 等でログが吐かれるか確認する。
Cronの時間がすべて「*」である場合
全てが「*」だと「毎分実行」になる
例えばLarabelのCronスケジュール登録の例
* * * * * cd Larabelプロジェクトの絶対パス && php artisan schedule:run >> /dev/null 2>&1
多分、*/1 * * * * でも同じでは。
sudo経由の実行でPATHが通らない
通常だと実行できるのに、sudo経由だとコマンド、プログラムへのパスが見つからず実行できない場合は/etc/sudoersファイルの以下の行の制約を受けている可能性。
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
必要に応じてsudoで実行するものは絶対パスで記述。
一定のサイズのファイルを作る
1Gのファイルを作成 dd if=/dev/zero of=1G.dummy bs=1M count=1000
grepで「-(ハイフン)」で始まる文字を検索する
エスケープしないとオプション扱いされ、正しく実行できない
「-E」を含む文字を検索する grep "\-E" hoge.text
yumで「Thread died in Berkeley DB library」が出る
rpmdbを再構築する その時は直っても再度壊れる場合はswapが足りないのかもです。後からファイルswapを追加できるのでそちらを検討 rpm --rebuilddb
一定バイトごとに改行を入れて出力
80バイトごとに改行(LinuxなのでLF)を付けて変換出力 fold sample.txt > sample_1.txt バイト指定 fold -40 sample.txt > sample_1.txt 途中で単語が切れることを回避など空白を考慮する場合は fold -s 厳密にフォーマットが決まっているデータでは使用しない。
Windowsにはそのものズバリなコマンドは無いようだが、「バイト ごと 改行 Windows」とかで調べると方法がいくつか見つかる。
120バイトで改行する必要のあるテキストファイルがあり、改行して生成するVBA… – Yahoo!知恵袋
findの-print0と~|xargs -0(または–null)との組み合わせ
xargsの区切りのnull文字指定に合わせてfindもnull指定にするもの
Man page of FIND (osdn.jp) より↓
-print0 true を返します。 パス付きのファイル名と、 最後にヌル文字をつけて、 標準出力に出力します (-print が改行文字をつけるのとは異なります)。 このアクションを使えば、 find の出力を処理するプログラムが、 改行文字やホワイトスペースを含むファイル名を、 正しく解釈できるようになります。 このアクションは、 xargs の -0 オプションに対応します。
文字コード/改行コードの判別
nkf ※ちなみにWindows版でも–guessオプションは使え、Shift_JIS/UTF-8/ASCII/Binaryなどが判別される。
nkf --guess sample.txt UTF-8 (LF)
file ※サーバにnkfが無い時。改行コードがCRLFだった時のみ改行コード情報が表示される
file a_LF a_LF: ASCII text file c_CRLF c_CRLF: ASCII text, with CRLF line terminators file * ワイルドカードで複数ファイル指定をして一度に結果を表示することも可
smbmount
逆な感じでLinuxからWindowsの共有フォルダをマウントするsmbmountコマンド
書式
smbmount //マシン名/共有名 /マウントポイント -o username=username,workgroup=ドメイン名(ドメイン参加マシンの場合)
ローカルadministratorでは接続できなかった。
Cronでは「%」をエスケープすること
そういう仕様で、エスケープしないと失敗します。
こんな感じで
0 1 * * * touch /home/hoge/sample_`date '+\%Y\%m\%d'`.txt
rsyncをログ出力付きで実行する
リモートホストにrsyncする場合にうまくいったんだか確認したかったので。
事前にID/PW入力なしでリモートホストにログインできるように設定しておく
一般ユーザで実行するので、なんとなく一般ユーザーのhomeにログディレクトリを作成
ローカルの/srcbackupdir/配下でhoge_exディレクトリを除くものをリモートホストの/targetbackupdir/配下に同期コピー。同期元から消えていれば同期先からも削除。
mkdir /home/hoge/rsynclog rsync -auv --log-file=/home/hoge/rsynclog/rsync-`date +"%Y%m%d-%H%M"`.log -e ssh --delete --exclude 'hoge_ex' /srcbackupdir/ remotehostname://targetbackupdir/
Cronに仕掛ける場合は「%」をエスケープする
rsync -auv --log-file=/home/hoge/rsynclog/rsync-`date +"\%Y\%m\%d-\%H\%M"`.log -e ssh --delete --exclude 'hoge_ex' /srcbackupdir/ remotehostname://targetbackupdir/
CentOS6でTLS1.2~に対応する
yumだけで解決できそうかな。。。
参考サイト
CentOS6でTLS1.2を利用可能にしてSSLを有効化する手順 | Webは用いる人のリテラシーで決まる (cat-marketing.jp)
こんな話もあったので注意ですかね。
【Linux】nssをアップデートしたらundefined symbol: PR_GetEnvSecure というエラーが出た | ばちブロ (vatchlog.com)
lsの結果をサイズ順にする
ls -lS ls -lSr
先頭が「#」のコメント行を除いて抽出
末尾が.shで終わるファイルの中から「.sh」を含む行を抽出し、さらに「abc」が含まれる行と先頭が0個以上の空白(半角スペース、\t、\n、\r、\f)に続けて#で始まる行を除外する(なんかずれて#付けている人時々いるので)。「.sh」を含む行を指定する際は「.」がワイルドカードとして解釈されないよう、「\.sh」というようにエスケープしている。
grep "\.sh" *.sh |grep -v "abc"|grep -v "^\s*#"
sedとawkの使用例
/proc/net/devのeth0の行の「:」を「 」(空白)に置換し、10カラム目にある文字(Transmit bytes)を表示する
cat /proc/net/dev | grep eth0 | sed -e 's/:/ /' | awk '{print$10}'
Vimの表示文字コード変更
いあ、WordPressのconfigが文字化けで直接編集できんくて、Windowsに落として修正、再アップロードでもできるんですが、メンドイので、方法ないかと思ったら、カンタンでしたね。
: set enc? encoding=latin1 :set encoding=utf-8 : set enc? encoding=utf-8
VCS(Veritas Cluster Server)
VCS の「チートシート」: さまざまな Veritas Cluster Server (VCS) コマンドのクイックリファレンス
クラスタの状態サマリー表示 hastaus -sum サービスグループの任意のメンバーサーバをフリーズ hagrp -freeze クラスタグループ名 -sys メンバーサーバ サービスグループの任意のメンバーサーバをフリーズから復帰させる hagrp -unfreeze クラスタグループ名 -sys メンバーサーバ hagrp -offline クラスタグループ名 -sys メンバーサーバ hagrp -online クラスタグループ名 -sys メンバーサーバ hagrp -flush クラスタグループ名 -sys メンバーサーバ hagrp -switch クラスタグループ名 -to メンバーサーバ hastop - hagrp -clear クラスタグループ名 -sys xxxx
GAB,gabtab
VCS の「チートシート」: さまざまな Veritas Cluster Server (VCS) コマンドのクイックリファレンス
vxdisk -f -g XXXXX resize xxx vxassist -g xxxx maxgrow xxxx vxresize -g xxxx -F vxfs xxxx xxxxx xxxxx vxdisk list
ls -laで複数のパターンのファイルを指定する
/root/work配下に以下のようなファイルがあり、それを一度にls -la するには
abc ehg hij0 hij1 hij2 hij3 hij4 hij5 hij6 klm1 klm2
ls -la /root/work/{abc,ehg,hij[0-6],klm[12]} {A,B,C} A or B or C のいずれかにマッチ [0-6]0,1,2,3,4,5,6のいずれかにマッチ [12]1,2のいずれかにマッチ
ポート番号
ウェルノウンポート 0~1023 ⇒ 決められているものが多く、使用できなものあり。
登録ポート 1024~49512 ⇒ 何らかのソフトウェアと重複する可能性あり。
ダイナミック/プライベートポート 49513~65535 ⇒ 基本的には、自由に使えるポート番号の範囲。
「-」で始まるファイルを消す
rm ./-hoge
lsの実行結果返り値
ファイルあり
echo $? 0
ファイルなし
echo $? 2
tail -f hoge*で複数ファイルをモニタできる
timeZoneの変更
timedatectl set-timezone Asia/Tokyo
postfix
キューの全削除
postsuper -d ALL
設定の確認
postconf | grep smtp_tls_security_level
とか。
htdigestファイル生成コマンド
htdigest -c /path/to/.htdigest 'HIMITSU' ユーザ名
実行すると設定するパスワードを聞かれる。
sendmail⇒postfix切り替え
yum install postfix alternatives --config mta systemctl stop sendmail systemctl start postfix systemctl status postfix systemctl disable sendmail systemctl enable postfix
logwatchの出力先を変更
logwatch --output file --filename /home/hoge/logwatch_log/logwatch_`date '+%Y%m%d'`.log
タイムスタンプではなくファイル自体の更新日付を確認
stat ファイル名
host名を変更(RHEL7系~)
初回だけでなく、2回目以降もこのコマンドでOK。
hostnamectl set-hostname HOSTNAME
apacheとtomcat連携例
localhost:8080/app
を
localhost/app
に飛ばす。
ProxyPass ajp://localhost:8009/app/
cuiでのネットワーク設定
nmtui
sshの公開鍵認証設定
「接続元」のサーバから以下を実行。あらかじめ接続先のsshdを一時的にパスワードで入れるようにしておく必要がある。ssh-copy-id実行後に直ちにパスワードログイン不可に戻す。
ssh-keygen ssh-copy-id username@servername
こんだけ。
※対向のサーバをリプレイスした時
アクセス元の「~ssh/known_hosts」内のアクセス先サーバ情報を削除して
ssh-copy-id username@servername
を再実行。
うまくいかなければ
ssh-keygen
からやり直し。
Teratermでの接続
接続先サーバで実施
su - hoge cd ssh-keygen cat /home/hoge/.ssh/id_rsa.pub >> /home/hoge/.ssh/authorized_keys chmod 600 /home/hoge/.ssh/authorized_keys
接続PCで実施
サーバの/home/hoge/.ssh/id_rsaファイルの中身をコピーして「id_rsa」とかの名前で保存
Teraterm接続時にそのファイルを指定
SSHの公開鍵認証で「ead error SSH2 private key file error:0909006C:PEM routines:get_name:no start line. 」エラーが出る場合
鍵ファイルの最終行の後に改行が入っていない
fail2ban
設定している監視statusを一覧でモニタリング表示する
以下のスクリプトを適当なsh名で保存して、watchコマンドの引数で実行する
#!/bin/bash fail2ban-client status | sed -n 's/,//g;s/.*Jail list://p' | xargs -n1 fail2ban- client status
デフォルト値
bantime = 600 findtime = 600 maxretry = 5
1日に複数回失敗を長期BAN
[recidive]セクションに
enabled = true
を追加してfail2banを再起動。
fail2ban-client status recidive iptables -L -n
で確認。
banを解除
fail2ban-client set recidive unbanip xxx.xxx.xxx.xxx
任意のディレクトリ配下で一定時間経過したファイルを削除する
72時間より前のファイルを削除 -t を付けると消さずに前確認ができる
tmpwatch -m 72 /path/to/dir
ディレクトリ別容量表示
du -cks *|sort -rn|head -11
文字コード変換(iconv)
nkf入ってなくともiconvなら入っていることあるので。
UTF-8→SHIFT_JIS
iconv -f UTF8 -t SJIS 変換したいファイル名 > 変換後のファイル名
SHIFT_JIS→UTF-8
iconv -f sjis -t utf8 変換したいファイル名 > 変換後のファイル名
firewalld
許可
firewall-cmd --zone=public --add-port=PortNO/tcp --permanent firewall-cmd --zone=public --add-service=http --permanent firewall-cmd --zone=public --add-service=https --permanent
削除
firewall-cmd --remove-port=PortNO/tcp
適用
firewall-cmd --reload
htdigestでのパスワードファイル作成
htdigest -c /path/to/.htdigestfile 'Hoge' UserName