私的ITチートシート_Linux(2024/04/11up)

【PR】
※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。

私的ITチートシート_Windows(2023/6/28up) | TRAINING GROUNDS (bigfoot.work)

私的ITチートシート_Other(2023/6/30up) | TRAINING GROUNDS (bigfoot.work)

目次

Linux

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で実行するものは絶対パスで記述。

一定のサイズのファイルを作る

10Gのファイルを作成
fsutil file createnew test_10GB 10485760000

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

Posted by admin