-->

網頁

2019/08/23

讓 less 可以顯示 ANSI 色彩

應該不少人有經驗,在使用 grep 時,要搜尋的關鍵字會用顏色 highlight 方便閱讀,例如:
$ ls -lh | grep php
-rw-rw-r--  1 zero zero  178 Aug 22 19:15 autoload.php
drwxrwxr-x  3 zero zero 4.0K Aug 22 19:01 cakephp
drwxrwxr-x  5 zero zero 4.0K Aug 22 19:01 phpdocumentor
drwxrwxr-x  3 zero zero 4.0K Aug 22 19:01 phpoffice
drwxrwxr-x  3 zero zero 4.0K Aug 22 19:01 phpoption
drwxrwxr-x  3 zero zero 4.0K Aug 22 19:01 phpseclib
drwxrwxr-x  3 zero zero 4.0K Aug 22 19:01 phpspec
drwxrwxr-x  8 zero zero 4.0K Aug 22 19:01 phpunit

不過如果因為列表很長,在把搜尋結果 pipe 給 less 以後,顏色就消失了。

這其實是 grep 這邊會判斷 output 到哪一種型態的 I/O,像是後面接的是 bash pipe,grep 就會自動移除 ANSI color 的 syntax,畢竟不知道 pipe 資料給誰,如果後者不支援 ANSI color 就會變成亂碼。

如果很確定 pipe 後面的指令、工具支援 ANSI color 的指令,就可以下參數要求 grep 輸出顏色。例如:
$ ls -lh | grep php --color=always | less
-rw-rw-r--  1 zero zero  178 Aug 22 19:15 autoload.php
drwxrwxr-x  3 zero zero 4.0K Aug 22 19:01 cakephp
drwxrwxr-x  5 zero zero 4.0K Aug 22 19:01 phpdocumentor
drwxrwxr-x  3 zero zero 4.0K Aug 22 19:01 phpoffice
drwxrwxr-x  3 zero zero 4.0K Aug 22 19:01 phpoption
drwxrwxr-x  3 zero zero 4.0K Aug 22 19:01 phpseclib
drwxrwxr-x  3 zero zero 4.0K Aug 22 19:01 phpspec
drwxrwxr-x  8 zero zero 4.0K Aug 22 19:01 phpunit

2019/08/13

快速判斷 Ubuntu (或該 distribution) 是否重新開機的方法

登入 Ubuntu 時,常會看到最底下會有一行字,提醒你主機是否需要重新開機:
Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-142-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

0 packages can be updated.
0 updates are security updates.


*** System restart required ***

追了一陣子,才知道判斷的方法非常簡單,只要到 /var/run 目錄下檢查是否有「reboot-required」的檔案即可。

例如:
$ ls /var/run
acpid.pid      crond.reboot         initctl         log          motd.dynamic          resolvconf         snapd.socket  udev
acpid.socket   dbus                 initramfs       lvm          mount                 rsyslogd.pid       sshd          unattended-upgrades.lock
agetty.reload  dhclient.enp0s3.pid  init.upgraded   lvmetad.pid  mysqld                screen             sshd.pid      user
atd.pid        dmeventd-client      irqbalance.pid  lxcfs        network               sendsigs.omit.d    sudo          utmp
blkid          dmeventd-server      iscsid.pid      lxcfs.pid    reboot-required       shm                systemd       uuidd
crond.pid      grub                 lock            mdadm        reboot-required.pkgs  snapd-snap.socket  tmpfiles.d    xtables.lock

就這樣,沒了。