Windows で作業をしていて初めて知った("clip"コマンド)。Linux/Unix の世界にも同様のコマンドがあった("xclip")。知ってよかった。
C:\Users\foo>date /T | clip
Windows で作業をしていて初めて知った("clip"コマンド)。Linux/Unix の世界にも同様のコマンドがあった("xclip")。知ってよかった。
C:\Users\foo>date /T | clip
Fedora 21 Workstation の ISO と liveusb-creator をダウンロードしてWindows 8.1 を使ってブータブルUSBを作ってみたものの、次のメッセージが出て起動しなかった。(BIOS環境の場合のみ。UEFIの場合は問題なかった)
vesamenu.c32: not a COM32R image boot:
この症状は、USBの中にあるSYSLINUXの設定ファイル、具体的には /syslinux/syslinux.cfg をほんの少しだけ変更してあげれば治った。
default vesamenu.c32 timeout 100 ...
default linux0 timeout 100 ...
こちらに書いてあるように、プロンプトでTabキーを押してイメージの候補を表示する、という方法もある。が、キーボード押したくない場合には syslinux.cfg を編集すればよい。
netshというコマンドを使えばいい。
たとえば TCP/80 を開けたいなら、コマンドプロンプトを管理者として開いて
netsh advfirewall firewall add rule name="HTTP" dir=in action=allow protocol=TCP localport=80を実行すればOK。
ここで、nameオプションは「ルールの名前」と呼べばよいだろうか。文脈に応じて分かりやすい文字列を指定すればよい。
Windows Server 2012と2008で動作確認した。
$ cd ~/work $ wget ftp://ftp.ring.gr.jp/pub/elisp/skk/maintrunk/ddskk-15.1.tar.gz $ wget ftp://ftp.ring.gr.jp/pub/elisp/skk/maintrunk/ddskk-15.1.tar.gz.md5 $ md5 ddskk-15.1.tar.gz MD5 (ddskk-15.1.tar.gz) = c33f335994b93ea91783bf5b42663f07 $ cat ddskk-15.1.tar.gz.md5 MD5 (ddskk-15.1.tar.gz) = c33f335994b93ea91783bf5b42663f07 $ tar xzf ddskk-15.1.tar.gz
;; (setq SKK_DATADIR "/Applications/Emacs.app/Contents/Resources/etc/skk") ;; (setq SKK_INFODIR "/Applications/Emacs.app/Contents/Resources/info") ;; (setq SKK_LISPDIR "/Applications/Emacs.app/Contents/Resources/site-lisp/skk") ;; (setq SKK_SET_JISYO t)
(setq SKK_DATADIR "/Applications/Emacs.app/Contents/Resources/etc/skk") (setq SKK_INFODIR "/Applications/Emacs.app/Contents/Resources/info") (setq SKK_LISPDIR "/Applications/Emacs.app/Contents/Resources/site-lisp/skk") (setq SKK_SET_JISYO t)
$ cd ddskk-15.1 $ make what-where emacs -batch -q -no-site-file -l SKK-MK -f SKK-MK-what-where Loading subst-ksc... Loading subst-gb2312... Loading subst-big5... Loading subst-jis... Loading /Users/th/work/ddskk-15.1/SKK-CFG... SKK modules: skk-viper, skk-emacs, ccc, cdb, context-skk, queue-m, skk-abbrev, skk-act, skk-annotation, skk-auto, skk-autoloads, skk-azik, skk-cdb, skk-comp, skk-cursor, skk-cus, skk-dcomp, skk-develop, skk-gadget, skk-hint, skk-inline, skk-isearch, skk-jisx0201, skk-jisyo-edit-mode, skk-kakasi, skk-kcode, skk-leim, skk-look, skk-macs, skk-num, skk-server-completion, skk-server, skk-show-mode, skk-sticky, skk-tankan, skk-tut, skk-vars, skk-version, skk, skk-study -> /Applications/Emacs.app/Contents/Resources/site-lisp/skk SKK infos: skk.info -> /Applications/Emacs.app/Contents/Resources/info SKK tutorials: SKK.tut, SKK.tut.E, NICOLA-SKK.tut, skk.xpm -> /Applications/Emacs.app/Contents/Resources/etc/skk
$ sudo make install Emacs=/Applications/Emacs.app/Contents/MacOS/Emacs
以上。
今日まで存在を知らなかった。。。バックグラウンドプロセスが終了するまで待ち合わせするコマンド。
惰性で順次実行してたシェルスクリプトを手軽に並行実行できるようになって効率上がるかも。
$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0)
Copyright (C) 2007 Free Software Foundation, Inc.
$ help wait
wait: wait [n]
Wait for the specified process and report its termination status. If
N is not given, all currently active child processes are waited for,
and the return code is zero. N may be a process ID or a job
specification; if a job spec is given, all processes in the job's
pipeline are waited for.
$ cat test.sh #!/bin/bash date (sleep 1; echo 'sleep 1') & (sleep 2; echo 'sleep 2') & (sleep 3; echo 'sleep 3') & date $ ./test.sh 2013年 12月 8日 日曜日 23時03分12秒 JST 2013年 12月 8日 日曜日 23時03分12秒 JST sleep 1 sleep 2 sleep 3
$ cat test.sh #!/bin/bash date (sleep 1; echo 'sleep 1') & (sleep 2; echo 'sleep 2') & (sleep 3; echo 'sleep 3') & wait date $ ./test.sh 2013年 12月 8日 日曜日 23時06分58秒 JST sleep 1 sleep 2 sleep 3 2013年 12月 8日 日曜日 23時07分01秒 JST
とあるAndroidスマホの中を見ていたら、ディレクトリの一部が「fuse」という謎のファイルシステムを使っていることに気がついた。初耳だったので調べてみると、LUKSをもっと手軽にしたようなものらしい(FUSEとLUKSを比較している記事がいくつかみつかった)。
ネットで紹介されているFUSEの利用例はたいていリモートホストのファイルをセキュアにSSHFSとしてマウントするものなので、ここでは矮小というか卑近というか要するにあまり役に立たない例としてローカルホストにあるアーカイブ(tgz)を読み書きする例にした。
[root@localhost ~]# cd [root@localhost ~]# mkdir work; for i in foo bar baz; do echo $i > work/$i.txt; done [root@localhost ~]# ll work; cat work/* total 12 -rw-r--r--. 1 root root 4 Nov 5 01:43 bar.txt -rw-r--r--. 1 root root 4 Nov 5 01:43 baz.txt -rw-r--r--. 1 root root 4 Nov 5 01:43 foo.txt bar baz foo [root@localhost ~]# tar cvzf work.tgz work/ work/ work/bar.txt work/baz.txt work/foo.txt
[root@localhost ~]# mkdir -p /var/local/fuse
[root@localhost ~]# cp /etc/fstab{,.orig}
[root@localhost ~]# echo '/root/work.tgz /var/local/fuse fuse.archivemount defaults,allow_other' >> /etc/fstab[root@localhost ~]# mount -a
[root@localhost ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/fedora-root 28244124 9058868 17743876 34% / devtmpfs 1015516 0 1015516 0% /dev tmpfs 1022324 148 1022176 1% /dev/shm tmpfs 1022324 964 1021360 1% /run tmpfs 1022324 0 1022324 0% /sys/fs/cgroup tmpfs 1022324 2664 1019660 1% /tmp /dev/sda1 487652 83857 378195 19% /boot archivemount 1048576000 0 1048576000 0% /var/local/fuse [root@localhost ~]# ll /var/local/fuse/work total 0 -rw-r--r--. 0 root root 4 Nov 5 01:43 bar.txt -rw-r--r--. 0 root root 4 Nov 5 01:43 baz.txt -rw-r--r--. 0 root root 4 Nov 5 01:43 foo.txt
[u1@localhost ~]$ id uid=1001(u1) gid=1001(u1) groups=1001(u1) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [u1@localhost ~]$ cd /var/local/fuse/work [u1@localhost work]$ echo hoge > hoge.txt [u1@localhost work]$ ll total 0 -rw-r--r--. 0 root root 4 Nov 5 01:43 bar.txt -rw-r--r--. 0 root root 4 Nov 5 01:43 baz.txt -rw-r--r--. 0 root root 4 Nov 5 01:43 foo.txt -rw-r--r--. 0 root root 5 Nov 5 01:44 hoge.txt [u1@localhost work]$ vi bar.txt # ファイル内の文字列「bar」を「bar2」と書き換えるだけ [u1@localhost work]$ ll total 0 -rw-r--r--. 0 root root 5 Nov 5 01:44 bar.txt -rw-r--r--. 0 root root 4 Nov 5 01:43 baz.txt -rw-r--r--. 0 root root 4 Nov 5 01:43 foo.txt -rw-r--r--. 0 root root 5 Nov 5 01:44 hoge.txt [u1@localhost work]$ rm baz.txt # ファイルを削除 [u1@localhost work]$ ll total 0 -rw-r--r--. 0 root root 5 Nov 5 01:44 bar.txt -rw-r--r--. 0 root root 4 Nov 5 01:43 foo.txt -rw-r--r--. 0 root root 5 Nov 5 01:44 hoge.txt
[root@localhost ~]# umount /var/local/fuse
umount: /var/local/fuse: target is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
[u1@localhost work]$ cd # u1 の存在で umount が失敗したので cd する
[root@localhost ~]# umount /var/local/fuse
[root@localhost ~]# mv work{,.orig} # もともとのアーカイブをリネーム
[root@localhost ~]# tar xf work.tgz # fuse.archivemount 経由で変更したアーカイブを展開
[root@localhost ~]# diff -uwbr work.orig work # diff をとってみる
diff -uwbr work.orig/bar.txt work/bar.txt
--- work.orig/bar.txt 2013-11-05 01:43:39.096153269 +0900
+++ work/bar.txt 2013-11-05 01:44:38.000000000 +0900
@@ -1 +1 @@
-bar
+bar2
Only in work.orig: baz.txt
Only in work: hoge.txt
$ echo -e "foo\tbar" foo bar
$ printf "foo\tbar\n" foo bar
ただし、環境によっては echo の '-e' オプションが使えないとの意見あり(シェルの仕様に依存する)。