ラベル Linuxコマンド の投稿を表示しています。 すべての投稿を表示
ラベル Linuxコマンド の投稿を表示しています。 すべての投稿を表示

2019-02-12

cron で bash を使うまでのお話

おー、ほぼ一年ぶりの更新だ・・・

普段、何気に設定していた cron なんですが、

「PATHは通っていないから、フルパス書いて」
「#!/bin/bash はお呪い」

っていう程度の認識しかなかった。


ので、一からお勉強。



まず、cron の シェル等を確認するには、cron実行ユーザーで

[root@localhost ~]# crontab -e

* * * * * printenv >/var/tmp/env.txt

ってやって1分待つ。

で、1分後に出来上がったファイルの中身を見てみる


[root@localhost ~]# cat /var/tmp/env.txt
...
SHELL=/bin/sh
USER=root
PATH=/usr/bin:/bin
PWD=/root
LANG=ja_JP.UTF-8
SHLVL=1
HOME=/root
LOGNAME=root
XDG_RUNTIME_DIR=/run/user/0
...


あー、shだ。
どおりで、/bin/bash って書かないと、動かない記述があるわけだ。

2017-11-02

telnet でメール送信

# telnet mail.example.com 25

HELO foo.bar.com

MAIL FROM: user@foo.bar.com

RCPT TO: foo@example.com

DATA
From: user@foo.bar.com
Subjet: Test Mail
Hello world.
.

QUIT

2017-08-18

VirtualHost とデフォルトサイト

これは常識なのかもしれないけど、

・サイトは、すべて VirtualHost で定義する。
・VirtualHost 定義の一番先頭に、

<VirtualHost *:80>
</VirtualHost>

ってだけ書いておく。
・IP直打ちでアクセスされたときのために、デフォルトのドキュメントルート(/var/www/html)は空にしておく。
・VirtualHostの定義は、httpd.conf の一番最後で行う。サイトごとに別ファイルで定義するときは、httpd.conf の一番最後で Include する。
・名前ベースのバーチャルホストでSSLする。

ってことをするようにした。


こうすることで、

・IP直打ちアクセスや意図しないHOST_NAMEでのアクセスは、全部、デフォルトのドキュメントルートへ流す。

ことができて、これらの意図しないアクセスはすべて 403 で捌けるなと。

でも、その前の前提として、httpd.conf で

<Directory "/var/www/html">
 Options -Indexes +FollowSymLinks
・・・
</Directory>

ってしておくことと、

# rm /etc/httpd/conf.d/welcome.conf 

って消しておいてね

2017-07-22

http/https のセッション数 を netstat の state ごとに表示する

watch使う場合、sed -e 's/[^A-Z]*//' がみそ。
もし sed -e 's/[^A-Z]*//' がなかった場合どうなるかは、試してみて。

watch -n 1 "netstat -ant | egrep ':(80|443) '| egrep 'EST|SYN|FIN|CLOSE'| awk {'print $6'} | sed -e 's/[^A-Z]*//' | sort | uniq -c"


こんなのも

watch -n 2 "netstat -etpon | egrep ':(80|443) ' | egrep 'EST|SYN|FIN|CLOSE'"

2017-03-03

find でパーミッションとオーナー・グループを条件に検索して パーミッションを変更する

オーナー hoge に 644 与えてある /var/www/html 配下のファイルのパーミッションを 664 に変更する。
# find /var/www/html -perm 644 -type f -user hoge -print0 | xargs -0 chmod 664

グループ hoge に 644 与えてある /var/www/html 配下のファイルのパーミッションを 664 に変更する。
# find /var/www/html -perm 644 -type f -group hoge -print0 | xargs -0 chmod 664

オーナー hoge に 755 与えてある /var/www/html 配下のディレクトリのパーミッションを 775 に変更する。
# find /var/www/html -perm 755 -type f -user hoge -print0 | xargs -0 chmod 775

グループ hoge に 755 与えてある /var/www/html 配下のディレクトリのパーミッションを 775 に変更する。
# find /var/www/html -perm 755 -type f -group hoge -print0 | xargs -0 chmod 775

2017-03-02

vi コマンドで行番号を表示する

:set number

ってやる。

デフォルトで行番号を表示するなら

# vi ~/.vimrc

set number

って書いておく。

2016-12-20

連番ファイルを100個作る

連番ファイルは

# touch file{1..100}

ってすれば、file1からfile100という空っぽのファイルを作ってくれる。


# touch file{001..100}

ってすれば、file001, file002, ...みたいにゼロ埋めしてくれて桁が揃う。





10KBのファイルを100個作りたかったら


# dd if=/dev/zero of=file bs=1024 count=10


ってやって10KBのファイルを作ってから


# for i in `seq -w 1 100`; do  cp file file${i}; done


ってやれば、file001, file002, ...って作れる。

2016-12-13

wgetでサイトをバックアップ

これでいけるかと。

wget -e robots=off\
  --output-file=./wget.log\
  --no-cache\
  --html-extension\
  --convert-links\
  --page-requisites\
  --restrict-file-names=nocontrol,windows\
  --domains=www.example.com\
  --no-parent\
  --mirror\
  --wait=1\
  --waitretry=1\
  --timeout=5\
  http://www.example.com/


WordPressサイトは、feedを取得しないようにするとこうなる。

wget -e robots=off\
  --output-file=./wget.log\
  --no-cache\
  --html-extension\
  --convert-links\
  --page-requisites\
  --restrict-file-names=nocontrol,windows\
  --domains=www.example.com\
  --no-parent\
  --mirror\
  --wait=1\
  --waitretry=1\
  --timeout=5\
  --exclude-directories=/feed\
  http://www.example.com/


あと、コメントのフィードリンクがページ中にあると、せっかくダウンロードしたページがフォルダに変わってしまって

feed

っていうファイルだけになってしまうので、先にこちらを参考にlinkを消してください。

■[WordPress] コメントの RSS フィードリンクを削除する
http://jz5.jp/2013/11/23/remove-wordpress-comment-rss/

remove_action('wp_head', 'feed_links_extra', 3);

だけ追加してもOKだった。


その他、wget のオプションはここがすごくわかりやすかった。

■ダウンロードコマンドwgetのオプション一覧(linux)
http://blog.layer8.sh/ja/2012/03/31/wget_command/

2016-11-26

apachectl fullstatus の Request 列の改行を制御する

[root@websv ~] # which apachectl
/usr/sbin/apachectl

[root@websv ~] # less /usr/sbin/apachectl
...
# |||||||||||||||||||| START CONFIGURATION SECTION  ||||||||||||||||||||
# --------------------                              --------------------
#
# the path to your httpd binary, including options if necessary
HTTPD='/usr/sbin/httpd'
#
#
# a command that outputs a formatted text version of the HTML at the
# url given on the command line.  Designed for lynx, however other
# programs may work.
if [ -x "/usr/bin/links" ]; then
  LYNX="/usr/bin/links -dump"
else
  LYNX=none
fi
#
# the URL to your server's mod_status status page.  If you do not
# have one, then status and fullstatus will not work.
STATUSURL="http://websv:80/server-status"
...

[root@websv ~] # man links
...
-dump-width (alias for document.dump.width)
Width of the dump output.

...

[root@websv ~] # /usr/bin/links -dump http://websv:80/server-status/
...
Srv  PID   Acc  M CPU  SS  Req Conn Child Slot  Client     VHost        Request
GET
0-0 19019 0/7/7 _ 0.00 58  0   0.0  0.03  0.03 127.0.0.1 websv01:80 /server-status
HTTP/1.1
GET
1-0 19020 0/7/7 _ 0.00 18  0   0.0  0.03  0.03 127.0.0.1 websv01:80 /server-status/
HTTP/1.1
GET
2-0 19021 0/6/6 W 0.00 0   0   0.0  0.03  0.03 127.0.0.1 websv01:80 /server-status/
HTTP/1.1
GET
3-0 19022 0/6/6 _ 0.00 178 0   0.0  0.03  0.03 127.0.0.1 websv01:80 /server-status
HTTP/1.1
GET
4-0 19023 0/6/6 _ 0.00 118 0   0.0  0.03  0.03 127.0.0.1 websv01:80 /server-status
HTTP/1.1

...

[root@websv ~] # /usr/bin/links -dump http://websv:80/server-status/ -dump-width 192
...
Srv  PID   Acc  M CPU  SS  Req Conn Child Slot  Client     VHost              Request
0-0 19019 0/7/7 _ 0.00 39  0   0.0  0.03  0.03 127.0.0.1 websv01:80 GET /server-status HTTP/1.1
1-0 19020 0/6/6 W 0.00 0   0   0.0  0.03  0.03 127.0.0.1 websv01:80 GET /server-status/ HTTP/1.1
2-0 19021 0/6/6 _ 0.00 170 0   0.0  0.03  0.03 127.0.0.1 websv01:80 GET /server-status HTTP/1.1
3-0 19022 0/6/6 _ 0.00 159 0   0.0  0.03  0.03 127.0.0.1 websv01:80 GET /server-status HTTP/1.1
4-0 19023 0/6/6 _ 0.00 99  0   0.0  0.03  0.03 127.0.0.1 websv01:80 GET /server-status HTTP/1.1
...

2016-11-22

MySQL サーバーシステム変数 のデフォルトを確認する方法

サーバーのコンパイル時のデフォルトおよび読み取られるオプションファイルに基づいて、サーバーが使用する値を表示するには、次のコマンドを使用します。
mysqld --verbose --help


すべてのオプションファイルの設定を無視し、サーバーのコンパイル時のデフォルトに基づいてサーバーが使用する値を表示するには、次のコマンドを使用します。
mysqld --no-defaults --verbose --help


実行中のサーバーによって使用される現在の値を表示するには、SHOW VARIABLES ステートメントを使用します。


引用:MySQL 5.6 リファレンスマニュアル 5.1.4 サーバーシステム変数
https://dev.mysql.com/doc/refman/5.6/ja/server-system-variables.html

2016-07-16

yum の使い方


  1. インストール
    yum install hogehoge
  2. アップデートの確認
    yum check-update
  3. アップデート
    yum update hogehoge
  4. 削除
    yum remove hogehoge
  5. インストール済みパッケージ一覧
    yum list install
  6. 旧バージョンも含めてパッケージ一覧を表示する
    yum --showduplicates list hogehoge

2016-02-27

Corosync と Pacemaker でクラスタ化されたサーバのメンテナス

普通に監視対象サービスを停止しちゃうとフェイルオーバーするので、
それを回避する方法。

1.メンテナンスモードを有効にする。
crm configure property maintenance-mode=true


2.必要な作業を行う。
サービス停止してもフェイルオーバーしないので、設定ファイルいじったりできる。
停止したサービスは、起動してから次の手順へ。

停止は
crm resource stop リソース名

開始は
crm resource start リソース名

再起動は
crm resource restart リソース名


※その他、crmコマンドの詳細は、こちらのサイトがわかりやすかったです。
CRM CLI (command line interface) tool


3.メンテナンスモードを終了する。
crm configure property maintenance-mode=false

以上!

2016-02-16

systemctl と chkconfig と service の使い方まとめ

サービス一覧
# chkconfig --list

# systemctl list-unit-files -t service


自動起動設定
# chkconfig hoge on

# systemctl enable hoge.service


自動起動解除
# chkconfig hoge off

# systemctl disable hoge.service


サービス起動
# service hoge start

# systemctl start hoge.service


サービス状態確認
# service hoge status

# systemctl status hoge.service


サービス停止
# service hoge stop

# systemctl stop hoge.service

2016-02-01

CentOS 7 ClamAV インストール

yum install epel-release

yum install clamav clamav-update

vi /etc/freshclam.conf
------------------------------------------------------------
#Example
------------------------------------------------------------

/etc/sysconfig/freshclam
------------------------------------------------------------
#FRESHCLAM_DELAY=disabled-warn  # REMOVE ME
------------------------------------------------------------

vi /etc/cron.weekly/clamscan
------------------------------------------------------------
#!/bin/bash

PATH=/usr/bin:/bin

# clamd update
yum -y update clamav clamav-update > /dev/null 2>&1

# excludeopt setup
excludelist=/usr/local/etc/clamscan.exclude
if [ -s $excludelist ]; then
    for i in `cat $excludelist`
    do
        if [ $(echo "$i"|grep \/$) ]; then
            i=`echo $i|sed -e 's/^\([^ ]*\)\/$/\1/p' -e d`
            excludeopt="${excludeopt} --exclude-dir=$i"
    else
        excludeopt="${excludeopt} --exclude=$i"
    fi
    done
fi

# signature update
freshclam > /dev/null

# virus scan
CLAMSCANTMP=`mktemp`
clamscan --recursive --remove ${excludeopt} / > $CLAMSCANTMP 2>&1
[ ! -z "$(grep FOUND$ $CLAMSCANTMP)" ] && \

# report mail send
grep FOUND$ $CLAMSCANTMP | mail -s "Virus Found in `hostname`" root
rm -f $CLAMSCANTMP
------------------------------------------------------------

chmod 700 /etc/cron.weekly/clamscan

echo "/proc/" >> /usr/local/etc/clamscan.exclude
echo "/sys/" >> /usr/local/etc/clamscan.exclude

インストールされたファイルの一覧

yum-utils をインストールして

# repoquery --list パッケージ名

でもいいが、追加で yum-utils をインストールしなくても

# rpm -ql パッケージ名

で確認できる。

2015-11-15

php で include/require しているファイルの一覧を find と grep で作成する

include (require) で読み込んでいるファイルの一覧がほしかったので、find & grep で作ってみた。

例:common/html というディレクトリに共通ファイル(ヘッダやフッタ)がある場合
# cd /var/www/html
# find . -type f -name "*.php" | xargs grep -E "common/html"

2015-09-05

[postfix] 特定のアドレスから送信されたメールのうち拒否られた送信先のログを抽出する

メール配信システムなんかを組んで、一括送信した後に、宛先不明などで拒否られたログを抽出する方法。



1.メールログから送信元で抜いて、そこからキューIDだけ取り出してファイルに保存する

# grep -E "from=" /var/log/maillog | grep -o -E "[0-9A-Z]{10}" > ~/hoge.txt



2.キューIDをファイルから読み込んで検索し、相手メールサーバの応答コードが5XXのログを抜く。

# grep -f ~/hoge.txt /var/log/maillog | grep "said: 5" > ~/hoge_5XX.log

2015-07-16

カレントディレクトリ以下のファイル、ディレクトリに対して移動・削除・chownする

■カレントディレクトリ以下のファイル、サブディレクトリ、隠しファイル全てのオーナーとグループを変更する
chown -R hoge:hoge ./
※ ./* としたいところだが、* を付けると隠しファイルが変更対象にならない。


■カレントディレクトリ以下のファイル、サブディレクトリ、隠しファイル全てを移動する
mv * .[^\.]* 移動先ディレクトリ


■カレントディレクトリ以下のファイル、サブディレクトリ、隠しファイル全てを削除する
rm -r * .[^\.]*
※ 確認メッセージが鬱陶しかったら、-rf とする。

ディレクトリ以下全てのファイルとディレクトリの権限を一覧で取得する

# ls -aRl / > /tmp/permission_list

または

# find -printf "%p\t%TY-%Tm-%Td %TH:%TM:%TS\t%u\t%g\t%#m\n" > /tmp/permission_list

綺麗に見せることに全振りした操法大会の訓練を50日間するよりも、月1回でいいから基本的な操作方法の訓練を実施すべきだと思うのは俺だけか

 7月に県の消防操法大会がある。 市内分団の持ち回り制で、今年はうちの分団が出場する。 俺も前回回ってきたときに、選手として出た。 訓練が5月から始まっている。 週5日。 訓練時間は2時間だけど、その前に準備する時間もあり、訓練後の撤収時間も必要だから、拘束時間は約3時間。 俺が...