前提
すぐ忘れるので書いていきます。
sed
・コメントアウト削除
sed -e '/^#/d' ファイル名
・空白行削除
sed -e '/^$/d’ ファイル名
・コメントアウト + 空白行の削除
sed -e '/^#/d; /^$/d' ファイル名
・指定行の前に挿入
# 行指定(3行目の前にaaaを挿入する場合)
sed '3i aaa' ファイル名
# 対象文字列指定(aaaの前にbbbを挿入する場合)
sed '/aaa/i bbb' ファイル名
・指定行の後に挿入
# 行指定(2行目の後にaaaを挿入する場合)
sed '2a aaa' ファイル名
# 対象文字列指定(aaaの後にbbbを挿入する場合)
sed '/aaa/a bbb' ファイル名
・スラッシュを含む文字列の下に文字を挿入したい場合
スラッシュの前に \ を入れる
対象文: /var/log/httpd/access_log
挿入文: CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/sample_access_log.%Y%m%d 86400 540" ltsv env=!no_log
sed -e '/\/var\/log\/httpd\/access_log/a CustomLog "|\/usr\/sbin\/rotatelogs \/var\/log\/httpd\/sample_access_log.%Y%m%d 86400 540" ltsv env=!no_log' /etc/httpd/conf/httpd.conf
・挿入時にインデントを揃えたい場合
aの後ろに \ を入れる
a\ の後に指定したい分のインデントを入れる
sed -e "/\/var\/log\/httpd\/access_log/a\ hoge" /etc/httpd/conf/httpd.conf
・バックスラッシュを含む文字列の下に挿入する場合
\ を追加する
# 挿入したい文字列
LogFormat "time:%{%d/%b/%Y:%H:%M:%S %z}t\tx_forwarded_for:%{X-Forwarded-For}i\tremote_host:%h\trequest:%r\tlast_status:%s\tsize:%b\treferer:%{Referer}i\tuser_agent:%{User-Agent}i\tv_host:%{Host}i" ltsv
# 以下実装
sed -e '/LogFormat "%h %l %u %t \\"%r\\" %>s %b" common/a\ LogFormat "time:%{%d\/%b\/%Y:%H:%M:%S %z}t\\tx_forwarded_for:%{X-Forwarded-For}i\\tremote_host:%h\\trequest:%r\\tlast_status:%s\\tsize:%b\\treferer:%{Referer}i\\tuser_agent:%{User-Agent}i\\tv_host:%{Host}i" ltsv' /etc/httpd/conf/httpd.conf
・書式を残したまま特定の文字列だけ置換したい場合
文字列bbbをcccに置換する
aaa = "bbb"
sed -i 's/\(^aaa = \).*/\1"ccc"/g' ファイル名
awk
$NFで末尾のフィールドを取り出す
awk '{print $NF}' <ファイル名>
末尾から数えてn番目を取り出す
awk '{print $(NF-n)}' <ファイル名>
printf
printf 書式 値
[aaa]
command = "/usr/bin/bbb /var/log/httpd/access_log"
↑こんな感じの文字列を挿入する場合
printf "[%s]\ncommand = \"%s\"\n" "aaa" "/usr/bin/bbb /var/log/httpd/access_log"
[bbb]
command = ["ccc", "-p", "ddd"]
↑こんな感じの文字列を挿入する場合
printf "[%s]\ncommand = [%s]\\n" "bbb" '"ccc", "-p", "ddd"'
mkdir
mkdir -p 指定されたディレクトリの上位ディレクトリも作成
-m パーミッションを指定しディレクトリを作成
-v ディレクトリを作成した結果のメッセージを表示
例:1度で3つのディレクトリを作成する場合 → mkdir -p dir1/dir2/dir3
date
# 現在の日時を表示
date
Thu Dec 3 05:24:17 UTC 2020
# フォーマットは + で始まる書式で指定
date "+%Y%m%d-%H%M%S"
20201203-052401
# 24時間後の日時を表示
$ date -d tomorrow
Fri Dec 4 05:24:32 UTC 2020
# -d の代わりに --date でも同じ
$ date --date tomorrow
Fri Dec 4 05:24:32 UTC 2020
# 30日後の日付を表示
date "+%Y/%m/%d" -d "30 days"
2021/01/02
test
test -d ディレクトリであれば
# sampleがディレクトリであれば、なければsampleディレクトリ作成
test -d /sample || mkdir -p /sample
tail
tail -f
cron
# cronの設定
crontab -e
# 一覧表示
crontab -l
# 削除
crontab -r
秒単位でcronを実行
# 分・時・日・月・曜日 コマンド
* * * * * for i in `seq 0 15 59`;do (sleep ${i} ; sh /sample.sh) & done;
* * * * * for i in `seq 0 15 59`;do (sleep ${i} ; sh /home/deploy/sample.sh) & done;
1日1回0時0分に実行
0 0 * * * /path/to/sample.sh
正規表現
^cat 行頭がcatではなく、行頭がcで次がa、その次がtになっている文字列
$scat 行末がcatになっている文字列
ca[ta]a caの次がtかa、その次がaの文字列
[Cc]at Cが大文字でも小文字でもいい
[^c] 行頭がc以外で始まる文字列
. 任意の1文字
[…] リスト内任意の1文字
[^…] リストに含まれていない任意の1文字
^ 行頭
$ 行末
\< 行頭
\> 行末
| または
? 任意の1回
+ 少なくとも1回 ‘abc\+’の場合、「abc」が少なくとも1回必要
* 幾つでもOK
[a-zA-Z]{min, max}
AWS CLI
AMI
# 最新AMIのID取得(Linux2)
aws ssm get-parameter \
--name /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 \
--query "Parameter.Value" \
--region ap-northeast-1
S3
aws s3 ls
aws s3 cp アップロードしたいファイル名 ARN
Vim
上に進む k
下に進む j
左に進む h
右に進む l
一番上に gg
一番下に G
先頭行 ^
行末 $
単語の先頭 B
単語の末尾 E
現在の行を削除 dd
カーソル以降削除 D
全削除 :%d
空白行削除 :v/./d
行コピー yy
カーソルの場所にペースト p
カーソルの行をコピーし、下に10行追加 yy10p
インサートモードから出る Ctl + c
# 検索
esc → /検索したい文字入力 → Enter → 該当の文字に移動する
行コピー yy
貼り付け p
一つ前の作業に戻る u
# 行番号の表示
:set number
# 行番号の非表示
:set nonumber
検索一覧 :vim 検索文字入力 % | cw
Quickfix
次の検索 :cn
前の結果 :cp
閉じる :ccl
行番号表示 :set number
非表示 :set nonumber
ターミナル
# 途中まで入力していたコマンドを全削除
Ctrl + u
# 復元
Ctrl + y
# カーソル位置以降切り取り
Ctrl + k
# カーソル位置の文字削除
Ctrl + d
# 移動
↑ 「 Ctrl + p 」
↓ 「 Ctrl + n 」
→ 「 Ctrl + f 」
← 「 Ctrl + b 」
VSCODE
# ターミナルを開く
control + shift + `
上移動 control + p
下移動 control + n
firewall-cmd
firewall-cmd --list-all
# 追加
firewall-cmd --add-service=mysql --permanent
firewall-cmd --add-port=22/tcp --permanent
# 削除
firewall-cmd --remove-service=mysql --permanent
firewall-cmd --remove-port=22/tcp --permanent
firewall-cmd --reload
# rich-rule追加
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.0.0" port protocol="tcp" port="22" accept"
# rich-rule削除
firewall-cmd --permanent --zone=public --remove-rich-rule="rule family="ipv4" source address="192.168.0.0" port port="22" protocol="tcp" accept"
PDO 接続確認
<?php
const DB_HOST = 'mysql:mysql:host=hostname;dbname=dbname';
const DB_USER = 'user';
const DB_PASSWORD = 'pass';
try{
$pdo = new PDO(DB_HOST, DB_USER, DB_PASSWORD);
echo '接続成功' . "\n";
} catch(PDOException $e){
echo '接続失敗' . $e->getMessage() . "\n";
exit();
}
まだまだ覚えることはあるので随時更新していきます。
yum list ~
yum list enabled
yum list installed
yum list available