ReverseProxy配下でDNSアクセス制御をかけると、Apacheが403となる

他ドメインのDNSアクセス制御

他ドメインのDNSをアクセス制御する場合、下記を設定する。
VirtualHostを設定している場合は、上記設定をしないと他ドメインのネームサーバーに同じドメインが指定された場合、他ドメインが同じサーバを向き、ドメイン以外の全てが同じ表示となってしまう。
Googleのペナルティを受ける可能性もある。

/etc/httpd/conf/httpd.conf

<VirtualHost *:80>
     ServerName dummy
     <Location />
        Order deny,allow
        Deny from all
     </Location>
</VirtualHost>

アクセス制御によるエラー

/var/log/httpd/error_log

client denied by server configuration: /var/www/dvh/xxx, referer: http://yyy.com
  • Aサーバ: http://example.com
  • Bサーバ: http://example.com/xxx

上記のようにプロキシサーバを経由し、ディレクトリでサーバ間を振り分けている場合、/xxx側ではApacheがエラーとなり403 forbidden となる。
この場合は、/xxx側のサーバでは、DNSアクセス制御は不要である。

[WordPress] ドメイン名変更手順

環境

項目 説明
OS Amazon Linux AMI 2017.03.1.20170812 x86_64 HVM GP2
Load Balancer ALB
DB RDS, MySQL
Apache 2.4
WordPress 4.5.3
MySQL 5.5
PHP 5.6

事前準備

DumpとコンテンツのBackupを取得しておく。
※私の場合は、WordPressプラグインのBackWPupを用いてAWS S3へ毎日Backupを行っている。

ドメインを取得後、管理画面からサイトアドレスを変更する。

添付画像のURL部分を変更する。

※管理画面から変更せずドメインを更新した場合、MySQLへ接続後Update文を流します。
[sql]
mysql> select * from wp_options where option_name = ‘siteurl’,’home’ \G;
*************************** 1. row ***************************
option_id: 1
option_name: siteurl
option_value: http://before.com
autoload: yes
*************************** 1. row ***************************
option_id: 2
option_name: home
option_value: http://before.com
autoload: yes

mysql> update wp_options set option_value = ‘http://after.com’ where option_id = 1;
mysql> select * from wp_options where option_id = 1 \G;
*************************** 1. row ***************************
option_id: 1
option_name: siteurl
option_value: http://after.com
autoload: yes
1 row in set (0.00 sec)
[/sql]

旧ドメインの一括置換

DBに格納されたドメインの一括置換には以下のPHPスクリプトを用いる。

Database Search and Replace Script in PHP

サーバのドキュメントルート(デフォルト:/var/www/html/)に解凍したディレクトリを配置し、http://after.com/{解凍ディレクトリ名}へアクセスする。replacehttp://を含めずbefore.comを入力し、withhttp://を含めずafter.comを入力する。Dry-runでプレビューし、live runで実行する。

※置換後はdelete meボタンから該当ファイルを削除する。

トラブルシューティング

サイトが旧ドメインへリダイレクトされる

以下の定数値を、新しいドメインのDBへ変更する。
[php]
define(‘WP_HOME’,’https://halclan.net’);
define(‘WP_SITEURL’,’https://halclan.net’);
[/php]
※一時的な措置であり、データベースが更新され次第削除する。

参考

WordPress の引越し

DNS basic

名前解決 (正引き, 逆引き)

ホスト名(test.com)からIPアドレスを解決すること。逆引きはその逆。client からの名前解決要求を受けた cache DNS server (full service resolver) が権威 DNS server (DNS contents server) 群と反復問い合わせ(検索)を行い、その結果を client へ返却している。

この際に client (stub resolver) から cache DNS server への問い合わせを “再帰問い合わせ” という。

cache DNS server から 権威 DNS server 群への問い合わせを “非再帰問い合わせ”, または “反復問い合わせ” という。問い合わせを受けた権威 DNS server は自身が管理する zone 情報, cache 情報のみを応答する。他 DNS server へは問い合わせを行わない。

full service resolver と stub resolver の違い

resolver (名前解決の為のDNS client) では、1つ以上の DNS server のIPアドレスを持ち、アプリケーションが名前解決を要求した場合 resolver (stub resolver) にキャッシュされた情報を調べる。stub resolver は DNS リクエストを送信するだけの client pc, DNS server である。情報がない場合は、 resolver が cache DNS server (full service resolver) へ再帰問い合わせを行い(完全に名前解決を行い) client へ問い合わせ結果を返し、自身に問い合わせ情報をキャッシュする。cache DNS server (full service resolver) は非再帰問い合わせを 権威 DNS server (DNS contents server) へ行う。

stub resolver は、OSに付随する TCP/IP プログラムに組み込まれている。nslookup, dig のようなもの。client PC の DNS キャッシュは ipconfig,displaydns で確認可能であり、ipconfig,flushdns で消去可能。

cache DNS server (full service resolver) は intranet 内に配置するのみであり、権威 DNS (DNS contents server) と同居させるのはセキュリティ上危険性が高い。権威 DNS (DNS contents server)では、cache 機能を無効にしておくこと。

DNS forwarder

自分自身では解決できない DNS request を、指定した cache DNS server (full service resolver) へ転送し代わりに解決してもらう DNS server のこと。例えば企業内 LAN として構築した DNS forwarder に、指定した DNS server が cache DNS server (full service resolver) として動作する。

client からの DNS名前解決 request に応答する際、forwarder は特定の DNS server へ1度問い合わせ要求を転送 (して結果を cache) するのみである。cache DNS server(full service resolver) は複数の DNS server に対して順番に問い合わせを行い名前解決を行う。forwarder は network の負荷が full service resolver に比べて少ない為、intranet で forwarder を1台構築し、ISP(Internet Service Provider) 側 full service resolver へ forward させる使い方が常套。network 回線が名前解決負荷が高くなるのを防ぎ、ISP側の変更に対して client の設定を変更せず、forwarder の設定変更のみで済むようになる。

A record

  • 単一のドメイン名を、複数のホスト (global IP) に紐づけることができる。
  • ドメイン名(1):IPアドレス(n)
  • IPアドレス(1):ドメイン名(n)

CNAME (resource name)

  • A record で定義済みの複数ドメイン名(ドメイン名:参照ドメイン名)を1つのホスト(global IP)に紐付けることがてきる。
  • A record 定義済みのドメイン名と別ドメイン名を設定することができる。
  • 同様のAレコードが複数ある場合、IP変更時の手間を減らす。
    www.taro.jp. IN CNAME www.taro.com.
    ftp.taro.com. IN CNAME www.taro.com.
    app.taro.com. IN CNAME www.taro.com.

別管理者のドメインに紐づける
other.taro.jp -> other.ne.jp

CNAMEを設定した場合、他のレコード (TXT, CNAME, NS) を一緒に設定出来ない。

SOA (Start Of Authority)

  • DNSツリー構造において分散管理されている zone それぞれの委任に関する Authority 情報を示すレコード。
  • 権威 DNS server 担当 zone に関する Authority 情報が記載されている。
nslookup -type=soa test.net 8.8.8.8
Server:     8.8.8.8
Address:    8.8.8.8#53

Non-authoritative answer:
test.net
    origin = ns-781.awsdns-33.net
    mail addr = awsdns-hostmaster.amazon.com
    serial = 1
    refresh = 7200
    retry = 900
    expire = 1209600
    minimum = 86400

refresh (秒)
* zone 情報をリフレッシュするまでの時間。
* secondary DNS server が zone 情報の更新を確認する間隔。

retry(秒)
* refresh で更新が行えなかった場合にリトライする時間間隔。

expire(秒)
* refresh で更新が行えない情報が続いた場合に、secondary DNS server が保持するデータを利用する時間

minumum (Negative cache TTL)
* negative cache (存在しないドメイン名をキャッシュ) を維持する時間。
* 存在しないドメイン名を権威DNS (contents DNS server) へ問い合わせた場合、”NXDOMAIN” ステータスが返却される。

関連記事

Linux command basic

更新中。2015年7月9日

pbcopy

clipboard にコピー。

pbcopy < ./test.txt
cat text.txt | pbcopy

htpasswd

.htpasswd 作成。

htpasswd -c .htpasswd {ユーザー名}

ls

-R: ディレクトリ内容を再帰的に表示(全て表示)
-t: Timestamp(降順)
-r: リバース(Timestamp昇順)
-a: 拡張子含め表示

cp

[bash]

最終更新日時と最新アクセス日時,所有者と所有グループ,アクセス権(パーミッション)を保持しつつ、ディレクトリを丸ごとコピーする。

$ cp -Rp {ディレクトリ名}
[/bash]
-p: オーナー,グループ,パーミッション,タイムスタンプを保持したままコピー
-f: 同名ファイルがある場合, 警告せず上書き
[Linux] “-f”オプションを付与してコマンドを実行しても、対話形式となってしまう場合がある

mkdir

複数ディレクトリを一気に作成

$ mkdir -p

find

# `2&gt;/dev/null` は許可されていない旨のエラーを出力しないようにしている。
$ find / -name &quot;{検索ファイル名}&quot; -type f 2&gt;/dev/null -print0

$ find . -name &quot;{検索ファイル名}&quot; -type f 2&gt;/dev/null -print0 | xargs -0 grep &quot;{ファイルに含まれる文字列}&quot;

# 直近xx分以内に更新をかけたファイルをfindする
## 現在~分以内
$ find . -type f -mmin -10

## 現在~日以内
$ find . -type f -mtime 2

# 特定のディレクトリを除いて、find検索を行う。
find {検索パス} -type d -name {除外パス} -prune -o -type f -name &quot;{検索ファイル名}&quot; -print

# 7日以上前の&quot;.tar.gz&quot;ファイルを削除する。
$ find {BK_PATH}/ -name &quot;*.tar.gz&quot; -type f -mtime +7 | xargs rm -fv

# 圧縮されたjarファイルの中から、該当のClassファイルを検索する。
$ find . -name &quot;*.jar&quot; -exec zipgrep &quot;{検索文字列}&quot; '{}' \;
$ for FILE in $(find . -name '*.jar') ; do jar -tvf $FILE | grep &quot;{検索文字列}&quot; ; done

grep

  • grep: 簡単な絞り込み。
  • egrep: より強力な正規表現(EREs)が利用可能。ファイルの中から指定されたパターンを検索。grepに-Eオプションをつけた場合と同じ挙動。
  • zgrep: gzipなどで圧縮されたファイルも検索可能。
# &quot;xxx&quot;を含む行すべてを表示
$ grep &quot;xxx&quot; test.html

# &quot;xxx&quot;を含まない行すべてを表示
$ grep --invert-match[-v] &quot;xxx&quot; test.html

# 最大検索数をnとし、それ以上の検索は中止
$ grep --max-count[-m] {n} &quot;xxx&quot; test.html

# 行数を表示
$ grep --line-number[-n] &quot;xxx&quot; test.html

# &quot;xxx&quot;の前後10行を表示
$ grep --context[-C] 10 &quot;xxx&quot; test.html

# &quot;xxx&quot;を含む行とその次の10行を表示
$ grep --after-context[-A] 10 &quot;xxx&quot; test.html

# &quot;xxx&quot;を含む行とその前の10行を表示
$ grep --before-context[-B] 10 &quot;xxx&quot; test.html

# 大文字/小文字を区別しない
$ grep --ignore-case[-i] &quot;xxx&quot; test.html

# ファイル内文字列検索
$ grep -rl &quot;xxx&quot; *

# 件数表示 (wc:word count)
$ grep -rl &quot;xxx&quot; * | wc -l
$ grep -rl &quot;xxx&quot; * | grep &quot;cache&quot; | wc -l

# 特定のディレクトリを除外
grep -rl &quot;xxx&quot; {検索パス} --exclude-dir={除外パス}

# 特定のファイルを除外
grep -e &quot;xxx&quot; --exclude {除外文字列} -ri {検索パス}

# 引数で指定した&quot;xxx&quot;にマッチする部分のみ表示。大文字/小文字を無視。&quot;aaa&quot;,&quot;.bbb&quot;ディレクトリを除外。xxxが含まれるが、&quot;/tmp-xxx&quot;,&quot;test-xxx&quot;は除外。
$ grep -ri --only-matching &quot;xxx&quot; . --exclude-dir={aaa,.bbb} | egrep -v '/tmp-xxx|/test-xxx'

awk

スペースで区切られた複数列のテキストデータを処理する。

$ head /var/log/httpd/access_log | awk '{print $1&quot;   &quot;$7&quot; &quot;$9}'
xxx.xxx.xxx.xxx   /healthCheck.html 200
xxx.xxx.xxx.xxx   /healthCheck.html 200
xxx.xxx.xxx.xxx   /healthCheck.html 200
xxx.xxx.xxx.xxx   /healthCheck.html 200
xxx.xxx.xxx.xxx   /healthCheck.html 200
xxx.xxx.xxx.xxx   /healthCheck.html 200
xxx.xxx.xxx.xxx   /healthCheck.html 200
xxx.xxx.xxx.xxx   /healthCheck.html 200
xxx.xxx.xxx.xxx   /healthCheck.html 200
xxx.xxx.xxx.xxx   /healthCheck.html 200

# &quot;access_log&quot;の1列目をユニークに抽出する
$ head -300 /var/log/httpd/access_log | awk '{print $1}' | sort -n | uniq -c
      5 127.0.0.1
    141 172.0.0.27
    141 172.00.13.248
     13 202.00.232.55

# &quot;access_log&quot;の1,7,9列目をユニークに抽出しつつ、ソートを行いLESSを起動する
$ cat /var/log/httpd/access_log | awk '{print $1&quot;   &quot;$7&quot; &quot;$9}' |sort |uniq -c|less
      1 111.111.111.111   /healthCheck.html 503
      8 111.111.111.111   / 200
      3 111.111.111.111   /test 200
     46 111.111.111.111   /api/getTest.html 200
     42 111.111.111.111   /api/getAreaTest.html 200

# Fオプションで区切り文字を指定
$ cat test.csv | awk -F',' '{print $2}'
 iii

# 例えばcsvでユーザー、HOST名がリスト化してあるものを、awsで接続用コマンドを出力する
$ cat test.csv | awk -F',' '{print &quot;mysql -u&quot;$2 &quot; -p -h&quot;$4}'
mysql -u developer -p -h test.com
mysql -u testuser -p -h test.com

nslookup

正引きでドメインからIPを調べる。
DNSのサーバーに対して直接DNS要求を送り、その結果を表示する。

// DNS server を指定しない場合、既定のDNS server へ問い合わせを行う。
$ nslookup test.com

// DNS server を Google Public DNS 8.8.8.8 に指定、デフォルトではAレコードを取得。
$ nslookup test.com 8.8.8.8

// NS 等 type を指定することも可能。
$ nslookup -type=ns test.com 8.8.8.8
$ nslookup -type=mx test.com 8.8.8.8
$ nslookup -type=soa test.com 8.8.8.8
$ nslookup -type=txt test.com 8.8.8.8

TXTレコードを引いて迷惑メール対策用のSPF認証レコードなどを調べる。

関連記事: DNS basic

dig

DNS(ネームサーバー)の情報を調べる。

$ dig -t soa xxx.com

; &lt;&lt;&gt;&gt; DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.51.amzn1 &lt;&lt;&gt;&gt; -t soa xxx.com
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 62640
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;xxx.com.       IN  SOA

;; ANSWER SECTION:
xxx.com.    60  IN  SOA ns-1466.awsdns-55.org. awsdns-hostmaster.amazon.com. 1 xxx 900 xxx xxx

;; Query time: 26 msec
;; SERVER: xx.x.x.x#53(10.0.0.2)
;; WHEN: Tue Apr xx xx:xx:xx 2017
;; MSG SIZE  rcvd: xxx

各種バージョン確認

こちらの記事を参照。

curl

HTTPやFTPプロトコル経由でファイルのダウンロード、アップロード、サーバーの生死確認、APIの試打、スクレイピング等に利用する。

# ローカルIP確認
$ curl ifconfig.co

# レスポンス確認(ヘッダーのみ)
$ curl -I http://xxx.xxx.xxx.xxx:80/

# レスポンスをファイルに出力
$ curl -i http://xxx.xxx.xxx.xxx:80/ -O

ping

指定したIP、もしくはホスト名に対してパケットを送信し、応答を確認する。利用プロトコルはICMP。確認できるのは、OSI参照モデルのネットワーク層(IPレベル)まで。トランスポート層やアプリケーション層は確認不可。Pingは通るがWebが見れない場合は、Webサーバー側に問題があるのではないか、と予測できる。

$ ping {IPアドレス | ホスト名} [-c パケット送信回数] [-i 待機秒数] [-w 実行秒数] [-n IPからホストを検索しない]

telnet

単に経路が有効かどうかだけを調べたければ通常はpingコマンドを利用するが、接続先の特定ポートへ接続できるかを確認するにはtelnetコマンドを使う。

$ telnet [ポート番号]

dstat

サーバー全体のリソースを監視。

オプション 説明
-c CPU時間の割合
-d ディスクI/Oバイト数
-g ディスクからメモリへのI/Oバイト数
-i 割込状況
-l LoadAverageの状況
-m メモリの状況
-s Swap状況
-y システムの状態
$ dstat -Tclmdrn

ln

オプション 説明
-f 同一ファイルを上書きして強制的に作成する
-i 同一ファイルがあった場合確認する
-v 実行内容を出力
-n 同一ファイルがある場合は何もしない
$ ln -s /Users/developer/Dropbox/env/.zshrc /Users/developer

# リンクを削除(rmでも可)
$ unlink /Users/developer/.zshrc

tree

# ディレクトリのみ表示
$ tree -d

# ファイル・ディレクトリのサイズを表示
$ tree -s

# 現在の位置から表示させる階層の数を指定
$ tree -L 2

# ドットファイルも出力対象
$ tree -a

scp

# ローカルのファイルをリモートサーバーへ送信
$ scp /Users/user_name/file.php ec2-user@xxx.com:/home/ec2-user/{path}

# リモートサーバーのファイルをローカルへ転送
$ scp ec2-user@xxx.com:/home/ec2-user/{path}/file.php ~/Desktop/

# ポートを指定し、ディレクトリをコピーし、ローカルへ転送
$ scp -r -P 2222 ec2-user@xxx.com:/home/ec2-user/{ディレクトリ} ~/

# ~/.ssh/config の設定を読み込みつつ、scpを利用
$ scp dev-web:/home/ec2-user/test.conf ./

# &quot;Permission denied&quot; となる場合ssh-addを行う
$ ssh-add ~/.ssh/xxx.pem

# オプション
-p 最終修正時刻、最終アクセス時刻、パーミッションを引き継ぐ
-P ポートを指定

# 踏み台サーバを経由して転送
$ scp -o 'ProxyCommand ssh user@basition-host nc %h %p' ./path/to/copy/from user@remote-host:/path/to/copy/to

ssh

こちらの記事を参照。

圧縮

tar: http://webkaru.net/linux/tar-command/
gzip: http://webkaru.net/linux/gzip-command/

Current directoryで圧縮を行う。パス指定で操作すると事故を起こす。
tarの必須オプションは事故を起こすものが多い為、注意

# 連結したやり方
$ tar -cf archive.tar dir; gzip archive.tar
$ tar -zcf xxxx.tar.gz directory

# 分割したやり方
$ tar -cf archive.tar dir
$ gzip archive.tar

# 必須オプション
-c  新しくアーカイブを作成
# 任意オプション
-f アーカイブファイルを指定
-v 作成・展開するアーカイブのファイルリストを表示
-z gzip形式にアーカイブを圧縮・展開
-x アーカイブを展開

最高レベルで圧縮する (bashのみ)
ベストな圧縮をする場合、gzipを使わない。lzma7z を使う。

$ GZIP=-9 tar czf file.tar.gz /path/to/directory

絶対パスを指定して”tar: Removing leading `/’ from member names”のエラーが表示される場合は、”-C / {PATH}”で抑制する。
例) Shell Script等でDumpファイルをtarする場合等。

GZIP=-9 tar czf ${BACKUPDIR}/${DB_NAME}-dump-`date +%Y%m%d%H%M`.tar.gz -C / backups/databases/${DB_NAME}-dump.sql

zip作成

$ zip -r xxx.zip xxx

解凍

$ tar -zxf xxxx.tar.gz

ポート確認

[bash]

プロセスが使用しているポートを確認

$ lsof -i

ポート番号から使用しているプログラムを確認

$ lsof -i:80

通信が確立しているtcpポートの状況を調べる

$ netstat -t

接続待ちをしているTCP、UDPポートを表示する

$ netstat -antu
[/bash]

du

Disk Used 。
個々のディスク使用量。

# public.shtml以下のディレクトリの容量をKバイト単位で表示する
$ du -k public.shtml
1024    public.shtml/images
364     public.shtml/doc
1905    public.shtml

# public.shtmlディレクトリのみの容量を表示する
(サブディレクトリの情報は表示しない)
$ du -s public.shtml
1905    public.shtml

# public.shtmlディレクトリの容量のみを表示する
$ du -sS public.shtml
517

$ du -sh *
4.0K    Gemfile
4.0K    Gemfile.lock
3.2M    cookbooks

NKF

# インストール
$ brew install nkf

# エンコードの確認
$ nkf -g foo.csv
UTF-8

# Shift-jisへ変換 (-s)
$ nkf -s foo.csv &gt; bar.csv

# UTF-8へ変換 (-w)
$ nkf -w foo.csv &gt; bar.csv

# UTF-8+unix改行コード(LF)へ変換
$ nkf -w -Lu foo.csv &gt; bar.csv

# SHIFT-JIS+Windows改行コード(CRLF)へ変換
$ nkf -s -Lw foo.csv &gt; bar.csv

# UTF-8へ変換+Macintosh改行コード(CR)へ変換
$ nkf -w -Lm foo.csv &gt; bar.csv

whois

$ whois test.com
Domain Name: TEST.COM
Registrar: AMAZON REGISTRAR, INC.
Sponsoring Registrar IANA ID: 468
Whois Server: whois.registrar.amazon.com
Referral URL: http://registrar.amazon.com
Name Server: NS-xxxx.AWSDNS-55.ORG
Name Server: NS-xxxx.AWSDNS-03.CO.UK
Name Server: NS-xxx.AWSDNS-54.COM
Name Server: NS-xxx.AWSDNS-30.NET
Status: ok https://icann.org/epp#ok
Updated Date: 14-may-2017
Creation Date: 09-jul-2016
Expiration Date: 09-jul-2017

NTP

http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/set-time.html#configure_ntp

# NTP サービスを起動
$ sudo service ntpd start

# ブート時に NTP を開始
$ sudo chkconfig ntpd on

# NTP が有効かどうか
$ sudo chkconfig --list ntpd
ntpd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
# 実行レベル 2、3、4、および 5 で ntpd がオンになっていれば、適正。

# NTP が機能していることを確認
$ ntpstat

ip

$ ip -f inet -o addr show

監視

vmstat

メモリやCPUの情報だけでなく、スワップやプロセスの情報を出力。

$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 653116 165176 2561636    0    0     0     5   41   31  0  0 100  0  0
 0  0      0 653116 165176 2561636    0    0     0     0  211  499  0  0 100  0  0
 0  0      0 653084 165176 2561636    0    0     0    20  264  573  0  0 100  0  1

si(スワップイン), so(スワップアウト)が頻繁に動いている場合はスワップが発生している。他の項目としては、rは実行待ち状態のプロセス数、bは割り込み不可能なスリープ状態にあるプロセス数。memoryの項目はfreeと同様、ioはデバイスとのブロックの転送量、systemはコンテキストの毎秒の切り替えレート(割り込み回数・コンテキストスイッチの回数)、cpuはCPU使用率。

ps

psで特定のプロセスだけ確認する。

$ ps -C java ufw
$ ps -Cruby,nginx ufw

メモリ確認

$ cat /proc/meminfo |egrep -e &quot;Active:|Inactive:|MemFree:&quot;
MemFree:          208944 kB
Active:          3033956 kB
Inactive:         636568 kB

Swap

こちらの記事を参照。

top

こちらの記事を参照。

passwd

こちらの記事を参照。

user*

新規ユーザー追加

$ useradd {User_Name}

グループへ追加

# -Gのみで新しいサブグループを追加しない。既に設定されている他グループ設定が消える。
$ sudo usermod -aG {Group_Name} {User_Name}

# 指定グループの所属ユーザーを確認
$ getent group {Group_Name}

ユーザー削除

# -rオプションでhomeディレクトリごと削除
$ sudo userdel -r olduser

wget

ファイルをダウンロードする。

# 指定したURLからファイルを取得する
$ wget {URL}

# バックグラウンドでプロセスを実行する
$ wget -b {URL}

# 指定したファイルへログを出力する
$ wget -o /tmp/test.log {URL}

# ファイルが存在している場合は、ダウンロードしない
$ wget -nc {URL}

less

ファイルの中身を閲覧する。

# -N: 行数表示
# -M: カーセルの行数、ファイル名表示
# -i: 検索時大文字でない限り大文字/小文字を区別しない
# -S: テキストを折返し表示しない
$ less -NMiS {FILE_NAME}
less起動後のコマンド 説明
R 画面再描画
F “tail -f”と同様
Enter 1行進む
y 1行戻る
g 先頭へ
G 末尾へ
space 1画面戻進む
b 1画面戻る
q 終了

mail

受信したメールの確認をする。

$ mail
Heirloom Mail version 12.4 7/29/08.  Type ? for help.
&quot;/var/spool/mail/root&quot;: 2 messages 2 new
>N  1 developer@xxx  Tue Jun  6 22:18  17/770   &quot;*** SECURITY information for xxx ***&quot;
 N  2 developer@xxx  Tue Jun  6 22:19  17/779   &quot;*** SECURITY information for xxx ***&quot;
&amp;
Message  1:
From developer@xxx  Tue Jun  6 22:18:40 2017
Return-Path: &lt;developer@xxx&gt;
Date: Tue, 6 Jun 2017 22:18:40 +0900
To: root@xxx
From: developer@xxx
Auto-Submitted: auto-generated
Subject: *** SECURITY information for heart-core-dev ***
Status: R

xxx : Jun  6 22:18:40 : developer : user NOT in sudoers ; TTY=pts/0 ; PWD=/home/developer ; USER=root ; COMMAND=/bin/su -

>N  1 developer@xxx  Tue Jun  6 22:18  17/770   &quot;*** SECURITY information for xxx ***&quot;
 N  2 developer@xxx  Tue Jun  6 22:19  17/779   &quot;*** SECURITY information for xxx ***&quot;

|メールステータス|1,2,3…|developer@xxx|17/770|”*** SECURITY information for xxx ***”|
|N: 新着, U: 未読, R: 既読, S: セーブ済み|受信した順番|送信者|メール行数/文字数|題名|

yum

依存関係を考慮しつつパッケージ管理を行い、インストール/更新が可能。
こちらの記事を参照。

convmv

ファイル名のエンコードを変更する。

# Dry run
$ convmv -f sjis -t utf-8 *

$ convmv -f sjis -t utf-8 * --notest

# ディレクトリの場合
$ convmv -r -f sjis -t utf-8 * --notest

tr

文字の一括置換を行う。

split

ファイルを条件を指定して分割する。

watch

コマンドの定期実行。

$ brew install watch

# 何らかのスクリプトを実行している際に、ファイルサイズの変化等を監視する
# -e: 実行結果がエラーとなった場合に終了
# -c: カラー出力
# -n: 実行間隔(秒)
$ watch -e -c -n 1 ls -la

w

ログインユーザーの利用状況を確認する。

項目 説明
TTY 端末
FROM 接続元Ip
LOGIN@ ログイン日時
IDLE 入力待ち状態時間
JCPU 全プロセスの処理時間
PCPU 実行中プロセスの処理時間
WHAT 現在実行中のプロセス
$ w
 19:44:20 up 79 days,  2:14,  5 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
xxx      pts/0    111.111.111.111   15:05    2:37m  0.15s  0.00s sshd: xxx [priv]
xxx      pts/1    111.111.111.111   Wed18    2days  0.02s  0.00s sshd: xxx [priv]
xxx      pts/2    111.111.111.111   15:07    3:16m  0.04s  0.00s sshd: xxx [priv]
xxx      pts/3    111.111.111.111   15:09    1:16m  0.11s  0.00s sshd: xxx [priv]
xxx      pts/4    111.111.111.111.b 19:40    1.00s  0.00s  0.00s w

Mac 辞書を開く

$ open dict:///{検索文字列}

shutdown

// Mac 電源 off
$ shutdown now

// Mac 再起動
$ shutdown -r now