我電腦裡有什麼好玩的東東?


初試

系統裡面安裝了那些套件呢? 尤其是... 有沒有 game 呢?

若您使用 rpm 系列 (RedHat, Fedora, Mandriva, Suse, ...) 的系統:

        rpm -qa --qf '%-20{NAME}: %{SUMMARY}\n'
        rpm -qa --qf '%-20{NAME}: %{SUMMARY}\n' | less
        rpm -qa --qf '%-20{NAME}: %{SUMMARY}\n' | grep -i game
        rpm -qa --qf '%-20{NAME}: %{SUMMARY}\n' | grep -i game | less
    

若您使用 deb 系列 (Ubuntu, Debian, Knoppix, ...) 的系統:

        dpkg-query -W -f '${Package}: ${Description}\n'
        dpkg-query -W -f '${Package}: ${Description}\n' | less
        dpkg-query -W -f '${Package}: ${Description}\n' | grep -i game
        dpkg-query -W -f '${Package}: ${Description}\n' | grep -i game | less
    

印出來的資料中, 每個冒號前面的那串就是一個 套件 (package) 名稱。 關於 less 的操作, 請見 這裡

偷懶

如果對上述指令的細節有興趣, 可以查手冊: man rpmman dpkg-query; 不過一般人更有興趣的應該是如何簡化這些囉嗦的指令。

首先, 用剪貼的比較快: 滑鼠圈起就是複製 (不需要另外按任何鍵); 滑鼠中間鍵就是貼上。

其次, 可以把印出來的結果存檔, 例如存成 packages.txt 好了: rpm -qa --qf '%-20{NAME}: %{SUMMARY}\n' > packages.txtdpkg-query -W -f '${Package}: ${DESCRIPTION}\n' > packages.txt 這個 > 符號叫做 輸出重新導向 output redirection。 以後要找 game 相關套件, 可以下 grep -i game < packages.txt 這個 < 符號叫做 輸入重新導向 input redirection

其實, 最近下過的指令系統都記得, 可以用上箭頭叫出過去的指令, 或用 history 指令印出最近一段時間所下過的所有指令。 如果太多, 可以一頁一頁看 history | less 如果眼花, 可以過濾一下, 例如記得命令叫做什麼 query 的, 但不記得完整的指令, 可以這樣: history | grep -i query

最後, 可以用 function 將很長的命令簡化, 例如: function query() { rpm -qa --qf '%-20{NAME}: %{SUMMARY}\n' | grep -i $1; }function query() { dpkg-query -W -f '${Package;-30}: ${Description}\n' | grep -i $1; } 從此以後可以這樣下: query game 又例如要找可以 view image 的軟體, 可以這樣下: query image | grep -i view 總之 pipe 就是接續處理; grep 就是過濾。

但是這指令的效果僅及於目前的 shell; 若將文字視窗關掉再打開, 就失效了。 (試試看!) 建議把上述設定放入 ~/.bashrc 檔案的最後面, 如此每次開一個新的文字視窗都會生效。

deb 系列補充說明

dpkg-query 所印出來的 description 太長, 不方便看。 如果不介意只留下每個套件名稱那列, 可以指明 "不想留下以空白開頭的列": query image | grep -v '^ ' | grep -i view 其中 -v 表示 "相反" (符合後敘條件的就不印) 而先前的 -i 表示忽略大小寫。 詳見手冊。 這些東西叫做 命列列選項 command line options

其實更好用的另一個指令是 apt-cache search game 會列出不只你電腦上的 games, 還有全世界常見的 games。