====== Tips ======
===== 普段Linuxを使っていて教えてもらった事や、調べて分かった事 =====
  * テキストファイルから指定した桁数の数字を検索したい
    * 桁数固定の場合
$ grep [0-9]\{6\} hogehoge
 // 例ではhogehogeというファイルから6桁の数字を検索
 // 大カッコをエスケープしている事に注意!!
    * 桁数の範囲を指定する場合
$ grep [0-9]\{1,6\} hogehoge
 // 例ではhogehogeというファイルから1〜6桁の数字を検索
 // 大カッコをエスケープしている事に注意!!
  * RPMパッケージからファイルを取り出す
$ rpm2cpio hogehoge.rpm | cpio -dim usr/lib/*
  * 複数のファイルに同じ操作を繰り返す
    * ディレクトリを再帰的に処理する場合
$ find $(ディレクトリ} -type f -exec chmod 775 {} \;
 // 大カッコの後のスペースに注意
$ find ${ディレクトリ} -type f -print0 | xargs -0 chmod 664
    * 一つのディレクトリを処理する場合(ねろめさんありがとうございます)
$ for i in *; do chmod 664 $i; done
  * ディレクトリー丸ごとコピー
    * パーミッション等をそのまま引き継ぐ場合(げんたちんありがとうございます)
$ cp -rp ./oldhome ./newhome
    * 単純にコピーする場合(ねろめさんありがとうございます)
$ cp -r ./oldhome ./newhome
  * FAXの送信
$ faxspool 012-345-6789 hogehoge.ps
$ sudo faxrunq
  * 文字列の置き換え
$ sed 's/huga/HUGA/' hogehoge
  * 複数ファイルの文字列の置き換え
$ for fname in *.html ; do sed 's/hoge/HOGE/' $fname > $fname.new; rm $fname ;  mv $fname.new $fname ; done
 // 「${fname%.html}」とすると、ファイル名から「.html」をカットする
    * echo と sed を組み合わせる技も覚えておくといいかも
  * ファイル等を使用中のプロセスを調べる
$ lsof | grep -i hogehoge
  * IPアドレスからMACアドレスを調べる
$ ping hogehoge
$ arp | grep -e hogehoge
  * 通算秒を普通の日付の形式で表示する
$ perl -e 'print scalar localtime hogehoge'
  * hogehoge.specファイルからrpmバイナリを作成する
$ rpm -bb hogehoge.spec
   * RedHat8(?) あたりから、build するときはrpmbuild を使え、になっていますので注意^^; -- [[ynerome]]
  * 指定したバイト数毎に改行を挿入する
$ fold -b -w 256 hogehoge > hugahuga
  * 他のファイルシステム上にディスクイメージでext2なファイルシステムを作る
# cd /home/hogeUser/fat32
 // このディレクトリーにディスクイメージを作る
# dd if=/dev/zero of=hogehoge.ext2 bs=1024k count=100
 // これ(hogehoge.ext2)がディスクイメージのファイル名
 // bs=1024kがブロックサイズでcount=100がブロック数なので、100MB作成する
# mke2fs -F hogehoge.ext2
# mkdir -p /home/hogeUser/hogehoge.dat
# chown hogeUser /home/hogeUser /home/hogeUser/hogehoge.dat
# mount -o loop hogehoge.ext2 /home/hogeUser/hogehoge.dat
# chown hogeUser /home/hogeUser/hogehoge.dat/.
  * PostgreSQLでの削除レコードの圧縮
    * DB全てに対して行う場合
$ su - postgres
$ vacuumdb DM名
    * テーブルに対して行う場合
$ su - postgres
$ psqlj DB名
 DB名=# VACUUM gwlog;
  * 最終変更日付が指定した日付以前のファイルを削除する
$ find . -ctime +N -exec rm {} \;
  * ファイルが作成されてから2週間たったものをReadOnlyにする。(古いファイルへの上書きの抑制)
$ find /usr/hoge/fuga/ -type f -mtime +14 -exec chmod 440 {} \;
  * あるファイルの最終行を常に表示する(ログファイル等)
$ tail -f hogehoge
  * VMWarePlayerのGuest OSをWindowsにすると、\_(アンダースコア)が入力できない問題への対処方法
# vi /etc/vmware/config
 「xkeymap.keycode.211 = 0x073」を追加
 Guest OSをシャットダウン後
# /etc/init.d/vmware restart
  * aptでのKDEパッケージ一式のインストール(Vine)
$ sudo apt-get install task-kde
  * aptで導入したいアプリケーションのパッケージ名を調べる
$ apt-cache search hogehoge
  * Boot FDを作成する(Redhat系?)
$ sudo mkbootdisk カーネルのバージョン
  * 指定した範囲にpingを送って返事を確認する
$ nmap -sP 10.1.1.1-100
  * LinuxパスワードをSambaパスワードへ移行
$ sudo cat /etc/passwd | mksmbpasswd.sh > /etc/smbpasswd
  * gpgによる公開キーの登録
$ gpg --keyserver pgp.mit.edu --recv-keys ID
  * あるファイルの行数や文字数を表示する
$ wc hoge
 // 表示される内容は「行数 単語数 ファイルサイズ ファイル名」となる
  * ディレクトリのファイル数を調べる
$ find hogehoge -type f|wc -l
  * Firefoxで日本語入力中に文字が消えてしまう場合の対処(Vineだけ?)
$ sudo apt-get update
$ sudo apt-get install scim-bridge scim-bridge-gtk
$ sudo vi /usr/share/vine/imelib
 「GTK_IM_MODULE=scim」を「GTK_IM_MODULE=scim-bridge」に変更
$ setime scim
 XWindowを再起動
  * up2dateでカーネルをアップデートする
$ sudo up2date -f kernel
$ sudo up2date -f kernel-source
$ sudo up2date -f kernel-utils
  * Debian系でのNICのIP設定
    * IP固定の場合
$ sudo vi /etc/network/interfaces
 以下の様に設定
  iface lo inet loopback
  auto lo
  
  iface eth0 inet static
  address xxx.xxx.xxx.xxx
  network xxx.xxx.xxx.0
  netmask 255.255.255.0
  broadcast xxx.xxx.xxx.255
  gateway xxx.xxx.xxx.xxx
  auto eth0
設定完了後
$ sudo /etc/init.d/networking restart
として、ネットワークを再起動する
    * IPをDHCPで取得する場合
$ sudo vi /etc/network/interfaces
以下の様に設定
  iface lo inet loopback
  auto lo
  
  iface eth0 inet dhcp
  auto eth0
設定完了後
  # /etc/init.d/networking restart
として、ネットワークを再起動する
  * rpmパッケージをdeb形式に変換する
$ sudo alien hogehoge.hugahuga.rpm
  * いらないサービスの自動起動を停止する(Debian系)
$ sudo update-rc.d -f hogehoge remove
 // サービスのパッケージがapt-get等でアップデートされた場合には、
 // 自動起動が再セットされる場合があるので、その際には上記処理を
 // 再度行う必要がある
    * sysv-rc-confを使う方がいいらしい
$ sudo sysv-rc-conf hogehoge off
 // 使い方はchkconfとほぼ同じ?
  * Meta-Cityのボタンの位置を変更する(MacOSX風)
$ gconf-editor
 [apps] > [metacity] > [general]と選択していき
 [button_layout]を「close,maximize,minimize:menu」に変更する
  * HDDのバックアップを取る(圧縮)
$ sudo dd if=/dev/hdb | gzip -c > ./hdb.gz
  * Adobe AIRをubuntu 64bitで実行するには
 Adobe AIRをインストール後
 $ sudo ln -s /usr/lib64/libadobecertstore.so /usr/lib32/
  * 処理にかかった時間を調べる
$ time hogehoge
  * grepした結果でファイルを削除する
$ grep -l -i hogehoge * | xargs rm -f
  * /var/logにある各ログファイル
    * /var/log/boot.log
      * boot時の情報が記録される
    * /var/log/messages
      * システムに関する情報が記録される
    * /var/log/cron
      * cronで実行された結果が記録される
    * /var/log/dmesg
      * boot時のデバイス情報が記録される
    * /var/log/maillog
      * メールに関する情報が記録される
    * /var/log/secure
      * セキュリティに関する情報が記録される
    * /var/log/wtmp
      * システムへのログイン履歴が記録される~
 参照方法
$ last
    * /var/log/lastlog
      * ユーザーごとの最終ログイン情報が記録される
 参照方法
 $ lastlog
    * /var/log/btmp
      * 不正なログイン履歴が記録される
 参照方法(root権限が必要)
 # lastb
    * /var/log/faillog
      * ユーザーごとのログイン失敗回数が記録される
 参照方法(root権限が必要)
 $ sudo faillog
  * ubuntuでの情的経路の指定方法
    * /etc/network/if-up.d/static-routesに次の行を追加する(ない場合は作成する(755))
 #!/bin/sh
 /sbin/route add -net 10.0.1.0 netmask 255.255.255.0 gw 10.1.1.30 dev eth0
  * ubuntuが操作不能な状態になった場合の対処
    * ubuntuのSysRq Key(Alt + PrintScreen)を使用する
      * 安全に電源を落とす
        * Alt + Print Screen + R + S + E + I + U + O
          * Alt と Print Screen を押しながら R > S > E > I > U > O と順番に押す。
      * 安全に再起動する
        * Alt + Print Screen + R + S + E + I + U +B
          * Alt と Print Screen を押しながら R > S > E > I > U > B と順番に押す。
      * SysRq Keyの詳細
  R X Windows からキーボードの制御を取り戻す
  S 書き込みキャッシュのデータをディスクに書き込む
  E すべてのプロセスにSIGTERMシグナルを送り、正常に終了させる
  I すべてのプロセスにSIGKILLシグナルを送り、強制的に終了させる
  U すべてのファイルシステムを読み込み専用で再マウントする
  O システムを終了する
  B システムを再起動する
  * ubuntu(unity)の壁紙スライドショーの設定
    * crebsなどを使用しxmlファイルを作成し、任意のディレクトリに保管する
    * ディレクトリ「/usr/share/gnome-background-properties/」に存在するxmlを任意の名前でコピーする
    * スライドショーを定義したxmlを指定している箇所を先ほど作成したxmlに変更する
  
    Ubuntu 14.04 Community Wallpapers
    /home/makoto/Data/Wallpaper/Car/FD3S/FD3S.xml
    zoom
  &br;
    * その他の行は全て削除する
  * grepで文字列を検索する場合に、論理和(or)を使いたい場合
    * 検索パターンを正規表現とするオプション(-E)を使用する
$ grep -E -e '(hogehoge|hugahugga)' hogehuga.txt
  * csvファイル等から決まった位置のデータを取り出したい場合
    * cutを使う(cut -d 'デリミタ' -f 取り出したいデータの位置)
$ cut -d ',' -f 2,3,5-7 hugahoge.csv
  * ファイルの先頭に行番号を追加したい
    * nlを使う
$ nl -s, hugahoge.csv
  * IPアドレスのような空白以外の区切り文字が存在するデータを並べ替えたい場合
    * 区切り文字を指定するオプション(-t)を使用する
$ sort -t. -k1,1 -k2,2 -k3,3 -k4,4 -g IPAddress.txt
    * (例では、数字として並べ替えるためのオプション(-g)を使用しているが、実際には(-n)でも正常な結果を返す…が、(10e1)の様な指数表記された場合(-g)では正常に処理されるが、(-n)では(10)の部分しか見ないために正常な結果が得られない、そこで(-g)を常用するようにした方が良い…が、(-n)よりも(-g)の方が処理速度は遅くなるので、処理速度を稼ぎたい場合で指数表記がない場合は(-n)を使用するとよい)
  * 指定した日時に処理を一度だけ実行したい場合
    * atコマンドを使用する
$ at 07:00 091712
at> echo hogehoge > hugahuga.txt
at> [Ctrl+D]
    * (日付はMMDDYYとなる)
  * IPアドレスの範囲からサブネットマスクを得る
    * ipcountを使用する(perl)
 ubuntuの場合(要libnet-ip-perl)
$ /usr/share/doc/libnet-ip-perl/examples/ipcount 10.1.0.0 - 10.1.255.255
 CentOSの場合(要perl-Net-IP)
$ ipcount 10.1.0.0 - 10.1.255.255
  * プロクシを通したくないとき
$ export no_proxy=localhost,hoge.huga.com
    * 複数のホストを指定する場合はカンマで区切る
  * 親プロセスを調べる
$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
makoto   25353  0.1  0.0  15368  2268 pts/4    S+   17:22   0:00 top
$ cat /proc/25353/stat
25353 (top) S 25318 25353 9705 34820 25353 4194304 185 0 0 0 0 4 0 0 20 0 1 0 89908 15736832 567 18446744073709551615 4194304 4247452 140728479687936 0 0 0 0 0 138047495 1 0 0 17 3 0 0 0 0 0 6344704 6347792 7163904 140728479696172 140728479696176 140728479696176 140728479698923 0
$ cat /proc/25318/stat
25318 (bash) S 25317 25318 9705 34820 25353 4194560 570 2240 0 0 0 0 1 0 20 0 1 0 89817 118427648 939 18446744073709551615 4194304 5094508 140737195549472 0 0 0 65536 3686404 1266761467 1 0 0 17 0 0 0 0 0 0 7192576 7228592 17289216 140737195552635 140737195552641 140737195552641 140737195552750 0
$ cat /proc/25317/stat
25317 (su) S 25206 25317 9705 34820 25353 4194560 267 0 0 0 0 0 0 0 20 0 1 0 89817 164220928 798 18446744073709551615 1 1 0 0 0 0 2147196671 0 16384 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0
$ cat /proc/25206/stat
25206 (bash) S 25205 25206 9705 34820 25353 4194560 477 1388 0 0 0 0 0 0 20 0 1 0 89550 118317056 870 18446744073709551615 1 1 0 0 0 0 65536 3686404 1266761467 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0
$ cat /proc/25205/stat
25205 (sudo) S 9705 25205 9705 34820 25353 4194560 396 0 0 0 0 0 0 0 20 0 1 0 89550 197926912 1267 18446744073709551615 1 1 0 0 0 0 0 0 752135 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0
$ cat /proc/9705/stat
9705 (bash) S 9704 9705 9705 34820 25353 4194304 747 93246 0 12 1 0 221 78 20 0 1 0 12219 118329344 889 18446744073709551615 1 1 0 0 0 0 65536 3686404 1266761467 0 0 0 17 1 0 0 0 0 0 0 0 0 0 0 0 0 0
$ cat /proc/9704/stat
9704 (sshd) S 9701 9701 9701 0 -1 4194624 186 0 0 0 4 3 0 0 20 0 1 0 12202 121004032 1117 18446744073709551615 1 1 0 0 0 0 0 4096 65536 0 0 0 17 2 0 0 0 0 0 0 0 0 0 0 0 0 0
$ cat /proc/9701/stat
9701 (sshd) S 3129 9701 9701 0 -1 4194560 632 204 0 0 1 0 0 0 20 0 1 0 12163 120872960 1809 18446744073709551615 1 1 0 0 0 0 0 16781312 16387 0 0 0 17 3 0 0 0 0 0 0 0 0 0 0 0 0 0
$ cat /proc/3129/stat
3129 (sshd) S 1 3129 3129 0 -1 4194624 281 13257 0 15 0 0 19 7 20 0 1 0 2117 82579456 810 18446744073709551615 1 1 0 0 0 0 0 4096 81925 0 0 0 17 2 0 0 0 0 0 0 0 0 0 0 0 0 0
    * 調べたいプロセスIDのステイタス(/proc/[PID]/stat)の4番目(Sの後)が親プロセスIDとなる
    * それを再帰的に調べていくと最終的にはINITプロセス(PID=1)にたどり着く
  * ハードウェア情報を調べる
^ **内容**          ^ **コマンド**               ^
| ディスク情報を表示       | blkid                  |
| マウント情報を表示       | df                     |
| BIOS/UEFI情報を表示  | dmidecode -t bios      |
| メモリ情報を表示        | dmidecode -t memory    |
| ディスク情報を表示       | fdisk -l               |
| 現在のメモリ使用状況を表示   | free -m                |
| ディスク情報を表示       | hdparm -i デバイスファイル     |
| ハードウェア情報をフル表示   | hwinfo                 |
| ハードウェア情報を表示     | hwinfo --short         |
| ネットワーク情報を表示     | ifconfig -a            |
| ハードウェア情報を表示     | inxi -Fxz              |
| ネットワーク情報を表示     | ip link_show           |
| ルーティング情報を表示     | ip route               |
| ディスク情報を表示       | lsblk                  |
| CPU情報を表示        | lscpu                  |
| ハードウェア情報をフル表示   | lshw                   |
| CPU情報を表示        | lshw -C cpu            |
| ネットワーク情報を表示     | lshw -C network        |
| ハードウェア情報を表示     | lshw -short            |
| ディスク情報を表示       | lshw -short -C disk    |
| メモリ情報を表示        | lshw -short -C memory  |
| PCI情報を表示        | lspci                  |
| 指定したデバイスの情報表示   | lspci -v -s デバイス番号     |
| VGA情報を表示        | lspci | grep -i vga    |
| USB情報を表示        | lsusb                  |
| ネットワーク情報を表示     | netstat -i             |
| ルーティング情報を表示     | netstat -r             |
| 現在のメモリ使用状況を表示   | top                    |
  * フォントを追加した後のキャッシュのクリアと再作成
$ fc-cache -fv
  * Netplanの設定
    * 「/etc/netplan/*.yaml」をファイル名順に設定していく
    * 設定は後優先
# vi /etc/netplan/01-network-manager-all.yaml
# cat /etc/netplan/01-network-manager-all.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    enp4s0:
      dhcp4: false
      dhcp6: false
      addresses: [10.1.1.41/24]
      gateway4: 10.1.1.22
      nameservers:
        addresses: [10.0.71.156, 10.0.70.118]
        search: [seas-san-a.com, san-a.co.jp]
# netplan apply
  * zshでPATHの通っているディレクトリにコマンドなどを追加しても補完で出てこない場合
    * 「rehash」コマンドでキャッシュを再構築する
$ rehash