Previous Topへ Next

ファイルを操作する/Operating files

復活〜UNIX入門


anchor

復活〜UNIX入門

一年半ぶりにUNIX入門ページのコンテンツ更新を再開することにした。

パスの記述の仕方

UNIXでは変更したいファイル、ディレクトリなどのオブジェクトを記述する時にほとんど全てパスを記述します。
UNIXでは全てのシステムの動作が「ファイルを読む」「ファイルに書き込みをする」という動作に収斂しているということは以前に書きました。
どういうことかというと、モニタースクリーンやキーボードすらUNIXのシステムからは「ファイル」として見えていて、モニターへの出力は「モニターファイルに書き込み」、キーボードからの入力は「キーボードファイルからの読み出し」というふうに認識しています。

そしてそのファイルは全てパス管理されています。
なのでパスはコマンドを書く時にも重要な意味を持ちます。

例えば新規ファイルを作成するechoというコマンドを以前にも書きました。
もし起動ボリュームの一番上の階層にtest.txtというテキストを作りたいとしたら、

cd /
として
echo > test.txt
と打つことになりますが、パスでオブジェクトを指定するということを知っていたら

echo > /test.txt

という一行のコマンドで事足りることがわかります。
試しに打ってみて実行してみてください。
起動ボリュームのルートに
test.txt
というファイルができていますでしょうか?


<絶対パスの記述の仕方>

パスの記述の仕方は決められた場所から位置関係を記述する絶対パスと、カレントディレクトリからの位置関係を記述する相対パスがあります。

絶対パスの規準の場所は起動ボリュームのルートとホームディレクトリの2カ所になります。

Mac OS Xの場合はデフォルトでは起動ボリュームはMacintoshHDという名前になっていますので、このディスクアイコンの最初の階層がルートディレクトリになります。
ここからどう辿っていくと、目的のファイルにたどりつけるかを記述していきます。

例えばピクチャーフォルダのなかのPicture1というフォルダの中にある01.jpgというファイルを記述したい時は、

/Users/Home/Pictures/Picture1/01.jpg

となります。Macの場合はこの「Home」は自分のユーザ名になります。

同じオブジェクトをホームディレクトリを規準に記述することもできます。
ホームディレクトリは、/Usersの中の自分の名前のディレクトリになります。
ここを規準に書く場合は

~/Pictures/Picture1/01.jpg
となります。
必ずパスを"/"で書き始める場合は最初のスラッシュはルートボリューム、"~"で書き始める場合はホームディレクトリとなります。





MacOSXの場合はFinderの左ペインの一番上のボリュームが起動ボリューム
ここがルートディレクトリになりUsersの中の家のアイコンがホームディレクトリになる



<相対パスの記述>

ターミナルを起動した時にいま見ている場所をカレントディレクトリということはすでに書きました。 Macで使用されているbashではデフォルトではホームフォルダがカレントディレクトリになるようになっています。
ここを規準に相対的にパスを記述することができます。

いまいるカレントディレクトリは
./
と記述し、その上の階層の親ディレクトリは
../
と記述します。
さらに上の階層は
../../
と記述します。
下の階層はディレクトリ名で記述します。
cd ../
として実行してみてください。
コマンドプロンプトが
:~ 名前$
から
:Users 名前$
に変わった筈です。
ホームディレクトリに戻って
cd ../../
と打ってみてください。
:/ 名前$
とプロンプトが変化した筈です。
それぞれ一つ上のUsers階層、ルートボリューム最上階層に移動できたということです。

例えばホームディレクトリからアプリケーションフォルダの中のユーティリティフォルダを記述する時には
../../Applications/Utilities
と記述します。
cd ../../Applications/Utilities
と打ってみてプロンプトが
:Utilities 名前$
と変わったでしょうか。

カレントディレクトリを"./"と記述したり、相対パスを記述したりするのは設定ファイルなどでオブジェクトを指定する時によく使います。
親ディレクトリごと場所を移動する可能性があるアプリの付属ファイルなどを指定する時には、絶対パスよりも行方不明になる可能性が少ないので、この記述も知っていると便利です。

なお、ホームディレクトリに戻る時に
cd ~
としなくても
cd
だけでも戻れます。
シェルが全ての出発点をホームディレクトリと見ていることがわかります。




2011年2月19日







anchor ファイルを操作するコマンド1〜オプションの役割

GUI、つまりグラフィックインターフェイスの基本は視覚的にファイルの操作を見せることです。
WindowsのExplorerにしてもMacのFinderにしても、ファイルはアイコンとして表示され、それを探すにはそれぞれのディレクトリをウインドウとして表示しファイルアイコンを探して操作します。
その中身を見る時にはアイコンをクリックしてヘルパー(クリエーター)アプリケーションを起動して、ウインドウで表示します。

しかしCUIつまり文字によるコマンドの世界では、この操作はかなり様子が違っています。
ここではファイルを操作して、テキストファイルなどの中身を見る操作について。

特定のディレクトリのファイルを表示するlsというコマンドは以前にも取り上げました。
list(リスティング)から来ていると思われます。
ls
だけならカレントディレクトリの内容を表示
ls /
ならカレントディレクトリがどこであろうが関係なくルートディレクトリのリストを表示します。





同じカレントディレクトリにいてもlsの次に
オブジェクトの"/"を入れることでルートディレクトリの表示に変わる



コマンドはオプションによってその機能が規定されます。

ls -F
ディレクトリ(フォルダ)は名前の最後に"/"をつけて区別して表示
ls -f
ソートせずに全てのファイルを表示
ls -a
"."で始まる名称も含めて全てのファイル、ディレクトリを表示
ls -A
"."、".."を除いて表示




ls -fls -Fの表示の違い
"-f"のオプションは全ての形式のファイル、ディレクトリを強制表示
"-F"は強制表示ではなくディレクトリをファイルと"/"で区別して表示
このようにコマンドでは大文字小文字を識別するし大文字小文字では意味が変わる



ではこれは何をしているコマンドでしょうか?
ls -AF /





ls -AF /は『ルートディレクトリの"."、".."を除く全ての
ファイル、ディレクトリを区別して表示』する
探し物の時には便利なコマンド



2011年2月19日







anchor ファイルを操作するコマンド2〜テキストファイルの中身を見る

特定のテキストファイルを開いて中身を確認したい時にいくつかのコマンドが使えます。

例えば
cat
は「連続的にファイルを読み込み標準出力に書き出す」という説明がmanコマンドで見ることができますが、その特性を「複数の分割ファイルを一本化する」目的で利用されます。
その機能は後述するとして、読み込むのが最初の動作ですからテキストビュアーコマンドとしても使えます。

試しにサイトフォルダの中のindex.htmlを覗いてみます。

cd Sites
と打ってサイトフォルダの中に移動します。
現在のカレントディレクトリを確認する

pwd
を打って見てください。
絶対パスで現在位置を表示してくれます。
/Users/Home(ユーザ名)/Sites
と表示されたでしょうか?

ここで
cat index.html
と打ってみてください。
あるいは前述のようにcdで移動などしないで最初から絶対パスでオブジェクトを指定して

cat /Users/Home(ユーザ名)/Sites/index.html
としてもかまいません。





catコマンドでサイトフォルダの"index.html"を開いたところ




同じファイルをGUIでクリックしてSafariで開いたところ
webサイトサーバー導入のページが見える
catで見ていたのはこのページのhtmlタグ



catの本来の使い方はファイルの結合です。
webで転送するために分割されたファイルを結合して一つのファイルに戻すなどの目的で使われます。

cat file1 file2 > file3
ファイル1とファイル2を結合してファイル3を書き出すというように使います。

以下の手順を試しに実行してみます。

cd Sites
(サイトフォルダに移動)
cp index.html index2.html
(index.htmlの複製をindex2.htmlという名前で作成)
cat index.html index2.html > index3.html
(index.htmlとindex2.htmlを連続で読み込んでindex3.htmlという名前で書き出し)





cdコマンドでサイトフォルダに入ってcpコマンドでindex.htmlのコピーindex2.htmlを作る
ここでパスワードを求められるがrootのパスワードでOK
cat index.html index2.html > index3.htmlと打ってみる




GUIのFinderで確認するとindex.html、index2.html、index3.htmlが並んでいるのが見える




でき上がったindex3.htmlをGUIでクリックしてSafariで見てみると
同じ表示が2回繰り返しで繋がっているページが見える



catには面白い機能のオプションが用意されています。

cat -n file
(行番号を表示する)
cat -b file
(空白の行を除いて行番号を表示する)
試しに

cat -n Sites/index.html

cat -b Sites/index.html


と打ってみましょう。

ラインの左に行番号が出てきた筈です。





cat -n Sites/index.htmlを打つとタグの左側に全ての行番号が表示されます




cat -b Sites/index.htmlと打つと空の行を省いて行番号が表示されます



2011年2月21日







anchor ファイルを操作するコマンド3〜テキストファイルの中身を見る他のコマンド

前回、テキストファイルの中身を表示するコマンドとして
cat
を紹介したところ、BBSに「@bsdhack」さんから
『cat はテキストファイルのみではなくバイナリも標準出力に出力してしまうので、
結果として端末が乱れたり操作不能に陥ったりというデメリットもあり、
そうなった場合に特に初心者の場合はどう対処して良いか判らなくなったり慌てたりしがちです。
ですので、ファイルの中身を見るのは less(1) などを推奨した方が良いかと思います。』


というご指摘をいただきました。
実はおっしゃる通りです。

cat
は前回も書いた通り「標準出力」して例えばふたつのファイルを結合するとかが本来の使い道なので、テキストではなく何かのソフトの実行ファイルとか動画や音楽というような長大なバイナリもそのまま読み込んでしまいます。
結合の時にはそういう機能が必要なのですが、表示の時にそういうファイルをうっかり開いてしまうと、延々その表示の作業でMacがフルアップしてしまい、他の操作を受け付けなくなる可能性があります。
Macの場合、シェルの操作は大抵はTerminal上で行うので、この場合Terminalを強制終了すれば何とかなりそうですが、もしコンソール状態でこのコマンドを動かしていたら、システムの強制終了をする羽目になるかもしれません。

cat
はあくまで規模が分かっているテキストファイルの表示に限定するべきです。
前回紹介したように「-n」「-b」のような面白いオプションを持っているのですが、注意して使う必要があります。


それでテキスト系のファイルをプレビューするコマンドは他にも用意されています。

more

less

head

tail


あたりです。

これのそれぞれの意味は
more
テキストを全文表示します。
less
これもテキスト全文表示しますが前方移動だけでなく、後方移動も可能です。
いずれも起動はテキストエディットコマンドのviより軽快です。
head
テキストの頭数行のみ表示します。
tail
テキストの最後数行のみ表示します。

テキストの中身を触りだけ見て確認したい時はheadまたはtail、テキストに目を通したい時にはlessという使い分けがいいでしょう。

使い方はいずれも

less ~/Sites/index.html

というようにオブジェクトをコマンドの次に記述してやります。





moreなら間違ってjpeg等のバイナリを指定して表示しようとしても
「これはバイナリのようだ、それでも見るか?」と聞いてきます
yと打ってもenterキーを叩いても何も表示しません


このページの表示をキーボードで操作できます。

enter
1行送り
space
1ページ送り
b
1ページ戻し
q
表示を終了


同じようにファイルの中身を表示するコマンドで
diff
というのもあります。
これは
diff a.txt b.txt
というように使い、aとbの違っている部分だけを表示というコマンドです。





diffコマンドを使った例
-bのオプションを使えばスペースの違いを無視して表示します
コマンドはdiff a.txt b.txt -bというように打ちます


ファイルを探すコマンドもあります。
find
は文字通り探すということで、-nameというオプションを使えばファイルネームでファイルを探すことができます。

find ~/Sites -name index.html -print

というコマンドはホームフォルダの中の「Sites」フォルダの中で「index.html」という文字列を含むファイルネームのファイルを全て(パスも含めて)表示するというコマンドです。





find ~/Sites -name index.html -printと打ってみた結果、
「サイト」フォルダの中の「index.html」という文字列を含むファイル名の
全てのファイルを絶対パス付きで表示しました


以上のコマンドを実際に試してみたら、何を試したのかおさらいがしたくなってきました。
そういう時には
history
というコマンドが用意されています。
これはシェルが過去に入力されたコマンドを記憶していて、それをリスト表示するというコマンドです。
これも試してみてください。





historyというコマンドを打つと過去に入力したコマンドをリストで表示します
何をやったかがこれで思い出せます



2011年3月28日







anchor

UNIXのテキストエディタのviの使い方について

ターミナルでテキストをエディットできる。
その方法はTipsのページでvisudoの使い方として解説したことがある。
visudosudoersなどのrootのアクセス権でないとエディットできないテキストを編集するためにテキストエディットコマンドだが、使い方はviと同じだ。

なのでそのページの解説をviの使い方として転載する。
ついでに、このセキュリティ設定も検討してみてもいいと思う。

rootログインを不可にする〜それとOSXのrootの安全性について


2)5分間のsudoの認証猶予を無効にする

/etc/sudoersを開いて"Defaults"スペシフィケーションに

Defaults:ALL timestamp_timeout=0

と追記する。
追記する方法はTerminalを起動して
suまたはsudo su
コマンドでまずrootでログインしておく。

次に
visudo
とコマンドを打つ
すると
/etc/sudoersがTerminalのデフォルトのテキストエディタのviで開かれ待機画面になる。

iキーを叩くとインサート編集モードに入る

この状態で
#Defaults specification
と書かれたセクションに
Defaults:ALL timestamp_timeout=0
という文字列をコピーペーストする。

以上が完了したらescキーを叩いて編集モードから出る。
この状態で保存する場合は
:wq
とキーを叩き一番下のプロンプトにその通りに表示されたのを確認したらenterキーでvisudoを終了する。
変更を保存しないで元のままで終了したい場合は
:q
とだけキーを打ってenterキーで実行すれば、変更は保存されないでvisudoを終了することができる。






sudoersの編集はTerminalを起動してvisudoコマンドで実行する
visudoはルートでログインしないと使えないが
そのコマンドはUNIXのスタンダードなエディタのviと同じだ
iで編集モードに入ってラインを書き込み:wqで保存して終了だ
これを実行するとsudoコマンドを入力するたびにいちいちパスワードを
要求されるようになってしまうが上記の未知のスクリプトの脅威は減少する
それにポカミスでsudoでやってはいけないコマンドを実行してしまうのを
未然に防ぐというフールプルーフにもなるかもしれない





anchor

MacのTerminalにはいくつのコマンドが有るのか〜どういうコマンドが有るのか〜こうやって一覧を見ることができる

Macというのは実は昔のMacintoshに似たUIをかぶったUNIXであるというのは結構言い古された事実だ。

ところが今のOS Xを使い込んでいない人々や、昔のOS9以前のMacまでしか使ったことがないMacユーザにはほぼ理解されていない。

でもこのことを理解して今のMacを使ってみれば、色々とメリットがあることは今のユーザの多くが理解していることだ。

そのメリットはいろいろあるのだが、UNIXで一般的なコマンドの多くがMacでも使えるというあまり知られていない、地味だけど、一部の人には強烈に印象的なメリットがある。

最初に覚えたコマンドは何ですか?

多くの人はきっと
fsck
あたりが最初だと思う。

ちょっと前だったら
update_prebinding
なんてコマンドもポピュラーだったかもしれない。(今のLeopard以降のOS Xではこのコマンドは無効になっている)

では、どんなコマンドがいくつくらいあるのだろうか?

これは実は簡単に見ることができる。

UNIXでいうところのコマンドというのはMacのGUIでいうところのアプリのようなものだ。
その名前をTerminalなどのシェルで呼ぶと起動してきて予め決められた機能を実行する。

アプリと同じように所定のフォルダの中に収まっている。
その実体はUNIX実行ファイルだ。
だからその入っているところを覗けばどれくらいの数のコマンドが入っているのか、何があるのかを把握することができる。

この場所は
/bin
/sbin
/usr/bin
/usr/sbin

の中にある。

もし自分でmake installしてパスを通したコマンドがあるならその中にもある。





MainMenuのようなアプリを使って「不可視領域を表示」するメニューを叩く
するとFinderでコマンドの在処を直接見ることができる
/binの中にはシステムのベーシックなコマンドが用意されている




/sbinの中にはさらにバリエーションのコマンドが用意されている
お馴染みのfsckhalt等のコマンドが見える




usr/binにはユーザ権限で実行できるコマンドが用意されている




そしてusr領域にもusr/sbinがあってこれらの領域に
併せて1300以上のコマンドが用意されていることがわかる




そこにどんなコマンドがあるのかリスト化してみた
cd /binと打ってlscd /sbinと打ってls
cd usr/binと打ってlscd usr/sbinと打ってlsを繰り返す




先ほど見えていたhaltコマンドは「システム終了」のコマンド
GUIではまず使うことはないがsshなどで他のマシンにリモートで入っている時に
haltrebootは知っておく必要があるコマンドだ
とても全部を把握することはできないが意味をを知っていると便利なものも多くある



以下上の手順でリスト化したコマンドが以下の通り。
1300以上有って「UNIXコマンド入門」なんて記事を書いている私だが、意味を知らないものがどっさりある。
先は長いぞ。

/binのコマンド

[		date		expr		ln		
pwd		stty		zsh
bash		dd		hostname	ls		
rcp		sync
cat		df		kill		mkdir		
rm		tcsh
chmod		domainname	ksh		mv		
rmdir		test
cp		echo		launchctl	pax		
sh		unlink
csh		ed		link		ps		
sleep		wait4path

/sbinのコマンド
SystemStarter	fsck_exfat	halt		mount		mount_hfs
mpioutil	ping
autodiskmount	fsck_hfs	ifconfig	mount_acfs	mount_msdos
newfs_exfat	ping6
disklabel	fsck_msdos	ip6fw		mount_afp	mount_nfs	
newfs_hfs	quotacheck
dmesg		fsck_udf	ipfw		mount_cd9660	mount_ntfs	
newfs_msdos	reboot
dynamic_pager	fstyp		kextload	mount_cddafs	mount_pdudf	
newfs_udf	route
emond		fstyp_hfs	kextunload	mount_devfs	mount_prodiscfs
nfsd		rtsol
fibreconfig	fstyp_msdos	launchd		mount_exfat	mount_smbfs
nfsiod		shutdown
fsck		fstyp_ntfs	md5		mount_fdesc	mount_udf
nologin		umount
fsck_cs		fstyp_udf	mknod		mount_ftp
mount_webdav	pfctl

/usr/binのコマンド
2to3				infokey				ptar
2to3-				infotocap			ptar5.10
2to3-2.7			install				ptar5.12
2to32.6				install-info			ptardiff
RSA_SecurID_getpasswd		instmodsh			ptardiff5.10
a2p				instmodsh5.10			ptardiff5.12
a2p5.10				instmodsh5.12			pubsub
a2p5.12				instruments			purge
addftinfo			iodbc-config			pwpolicy
afclip				iodbctest			pydoc
afconvert			iodbctestw			pydoc2.5
afhash				iofile.d			pydoc2.6
afinfo				iofileb.d			pydoc2.7
afmtodit			iopattern			python
afplay				iopending			python-config
agentxtrap			iosnoop				python2.5
agvtool				iotop				python2.5-config
alias				ip2cc				python2.6
allmemory			ip2cc5.10			python2.6-config
ant				ip2cc5.12			python2.7
applesingle			ipcount				python2.7-config
appletviewer			ipcount5.10			pythonw
apply				ipcount5.12			pythonw2.5
apr-1-config			ipcrm				pythonw2.6
apropos				ipcs				pythonw2.7
apt				ipptool				qc2movie
apu-1-config			iprofiler			qlmanage
arch				iptab				qtdefaults
asctl				iptab5.10			quota
at				iptab5.12			radclient
atos				irb				radconf2xml
atq				isc-config.sh			radcrypt
atrm				jar				radeapclient
atsutil				jarsigner			radlast
automator			java				radsniff
auval				javac				radsqlrelay
auvaltool			javadoc				radtest
avconvert			javah				radwho
avmetareadwrite			javap				radzap
awk				javaws				rails
banner				jcmd				rake
base64				jconsole			rdoc
basename			jdb				read
bashbug				jhat				readlink
batch				jinfo				refer
bc				jmap				reindexdb
bg				jobs				renice
biff				join				reset
binhex				jot				rev
bitesize.d			jps				ri
bsdtar				jrunscript			rlm_dbm_cat
bspatch				jsadebugd			rlm_dbm_parser
bunzip2				jstack				rlogin
bzcat				jstat				rmic
bzcmp				jstatd				rmid
bzdiff				jvisualvm			rmiregistry
bzegrep				kcc				rs
bzfgrep				kdestroy			rsh
bzgrep				kextutil			rsync
bzip2				keytool				ruby
bzip2recover			kgetcred			runocc.d
bzless				kill.d				ruptime
bzmore				killall				rvictl
c++filt				kinit				rview
c2ph				klist				rvim
c2ph5.10			kpasswd				rwbypid.d
c2ph5.12			krb5-config			rwbytype.d
c_rehash			kswitch				rwho
caffeinate			lam				rwsnoop
cal				last				s2p
calendar			lastcomm			s2p5.10
cancel				lastwords			s2p5.12
cap_mkdb			latency				sample
captoinfo			ldapadd				sampleproc
cd				ldapcompare			sandbox-exec
certtool			ldapdelete			sandbox-simplify
checknr				ldapexop			sar
chflags				ldapmodify			say
chfn				ldapmodrdn			sc_usage
chgrp				ldappasswd			scandeps.pl
chpass				ldapsearch			scandeps5.12.pl
chsh				ldapurl				schemagen
cksum				ldapwhoami			scp
clear				leaks				screen
clusterdb			leave				script
cmp				less				sdiff
codesign			lessecho			sdx
col				libnetcfg			security
colcrt				libnetcfg5.10			sed
colldef				libnetcfg5.12			seeksize.d
colrm				lipo				seq
column				lkbib				serialver
comm				loads.d				servertool
command				locale				setregion
compress			localedef			setuids.d
config_data			locate				sftp
config_data5.10			lockfile			shar
config_data5.12			logger				shasum
corelist			login				shasum5.10
corelist5.10			loginfix.sh			shasum5.12
corelist5.12			logname				shlock
cpan				look				showmount
cpan2dist			lookbib				sigdist.d
cpan2dist5.10			lp				sips
cpan2dist5.12			lpoptions			slogin
cpan5.10			lppasswd			smbencrypt
cpan5.12			lpq				smbutil
cpanp				lpr				smtpd.py
cpanp-run-perl			lprm				smtpd2.5.py
cpanp-run-perl5.10		lpstat				smtpd2.6.py
cpanp-run-perl5.12		lsbom				smtpd2.7.py
cpanp5.10			lsm				sndiskmove
cpanp5.12			lsvfs				snfsdefrag
cpio				lwp-download			snmp-bridge-mib
cpuwalk.d			lwp-download5.10		snmpbulkget
crc32				lwp-download5.12		snmpbulkwalk
crc325.10			lwp-dump			snmpconf
crc325.12			lwp-dump5.10			snmpdelta
creatbyproc.d			lwp-dump5.12			snmpdf
createdb			lwp-mirror			snmpget
createlang			lwp-mirror5.10			snmpgetnext
createuser			lwp-mirror5.12			snmpinform
crlrefresh			lwp-request			snmpnetstat
crontab				lwp-request5.10			snmpset
csplit				lwp-request5.12			snmpstatus
csreq				lwp-rget			snmptable
cu				lwp-rget5.10			snmptest
cups-config			macbinary			snmptranslate
cupstestdsc			macerror			snmptrap
cupstestppd			macerror5.10			snmpusm
curl				macerror5.12			snmpvacm
curl-config			machine				snmpwalk
cut				mail				sntp
cvaffinity			mailq				soelim
cvcp				mailstat			sort
cvmkdir				mailx				spfd
cvmkfile			makeinfo			spfd5.10
dappprof			malloc_history			spfd5.12
dapptrace			man				spfquery
darwinup			manpath				spfquery5.10
db_archive			mcxquery			spfquery5.12
db_checkpoint			mcxrefresh			splain
db_codegen			mddiagnose			splain5.10
db_deadlock			mdfind				splain5.12
db_dump				mdimport			split
db_hotbackup			mdls				sqlite3
db_load				mdutil				srm
db_printlog			memcached			ssh
db_recover			mesg				ssh-add
db_stat				mib2c				ssh-agent
db_upgrade			mib2c-update			ssh-keygen
db_verify			mkbom				ssh-keyscan
dbicadmin			mkfifo				stat
dbicadmin5.12			mklocale			stringdups
dbilogstrip			mktemp				strings
dbilogstrip5.10			mmroff				stty.pl
dbilogstrip5.12			mnthome				stty5.12.pl
dbiprof				moose-outdated			su
dbiprof5.10			moose-outdated5.12		sudo
dbiprof5.12			more				sum
dbiproxy			mp2bug				sw_vers
dbiproxy5.10			msgs				symbols
dbiproxy5.12			mvn				symbolscache
dc				nano				syscallbypid.d
defaults			native2ascii			syscallbyproc.d
diff				nbdst				syscallbysysc.d
diff3				nc				sysdiagnose
diffstat			ncal				syslog
dig				ncurses5.4-config		tab2space
dirname				neqn				tabs
diskhits			net-snmp-cert			tail
dispqlen.d			net-snmp-config			talk
ditto				net-snmp-create-v3-user		tar
dns-sd				nettop				tbl
dprofpp				newaliases			tccutil
dprofpp5.10			newgrp				tclsh
dprofpp5.12			newproc.d			tclsh8.4
dropdb				nfsstat				tclsh8.5
droplang			nice				tconf
dropuser			nl				tee
drutil				nohup				telnet
dscacheutil			notificationconf		testrb
dscl				notifyutil			texi2dvi
dserr				nroff				texi2pdf
dsexport			nslookup			texindex
dsimport			nsupdate			textutil
dsmemberutil			ntp-keygen			tfmtodit
dtruss				ntpq				tftp
du				od				tic
easy_install			odutil				tidy
easy_install-2.5		open				tiff2icns
easy_install-2.6		opendiff			tiffutil
easy_install-2.7		opensnoop			time
ecpg				openssl				tkcon
efax				orbd				tkmib
efix				osacompile			tkpp
egrep				osadecompile			tkpp5.12
emacs				osalang				tmdiagnose
emacs-undumped			osascript			tmutil
emacsclient			pack200				tnameserv
enc2xs				package-stash-conflicts		toe
enc2xs5.10			package-stash-conflicts5.12	top
enc2xs5.12			pagesize			tops
encode_keychange		par.pl				topsyscall
env				par5.12.pl			topsysproc
eqn				parl				touch
eqn2graph			parl5.12			tput
erb				parldyn				tr
errinfo				parldyn5.12			trace
etags				passwd				traptoemail
ex				paste				treereg
execsnoop			patch				treereg5.12
expand				pathchk				trial
expect				pathopens.d			troff
extcheck			pbcopy				true
eyapp				pbpaste				tset
eyapp5.12			pcap-config			tsort
false				pcsctest			tty
fax				pcsctool			twistd
fc				pdfroff				type
fddist				perfdiagnose			ubcontrol
fdesetup			perl				ul
fg				perl5.10			ulimit
fgrep				perl5.12			umask
file				perlbug				unalias
filebyproc.d			perlbug5.10			uname
filtercalltree			perlbug5.12			uncompress
find				perldoc				unexpand
find2perl			perldoc5.10			uniq
find2perl5.10			perldoc5.12			units
find2perl5.12			perlivp				unpack200
findrule			perlivp5.10			unvis
findrule5.12			perlivp5.12			unzip
finger				perlthanks			unzipsfx
fixproc				perlthanks5.10			update_dyld_shared_cache
fmt				perlthanks5.12			uptime
fold				pfbtops				users
fontrestore			pg_basebackup			uucp
formail				pg_config			uudecode
format-sql			pg_dump				uuencode
format-sql5.12			pg_dumpall			uuidgen
from				pg_restore			uulog
fs_usage			pg_upgrade			uuname
ftp				pgrep				uupick
funzip				phar				uustat
fuser				phar.phar			uuto
fwkdp				php				uux
fwkpfv				php-config			vacuumdb
gdiffmk				phpize				vi
gem				pic				view
gen_bridge_metadata		pic2graph			vim
gencat				pico				vimdiff
genstrings			piconv				vimtutor
getconf				piconv5.10			vis
getopt				piconv5.12			vm_stat
getopts				pidpersec.d			vmmap
gluedialect			pkgbuild			w
gluedialect5.10			pkill				wait
gluedialect5.12			pl				wall
gluedoc				pl2pm				wc
gluedoc5.10			pl2pm5.10			wdutil
gluedoc5.12			pl2pm5.12			weblatency.d
glueedit			plockstat			what
glueedit5.10			pltcl_delmod			whatis
glueedit5.12			pltcl_listmod			whereis
gluemac				pltcl_loadmod			which
gluemac5.10			plutil				who
gluemac5.12			pmset				whoami
gluescriptadds			pod2html			whois
gluescriptadds5.10		pod2html5.10			wifidiagnose
gluescriptadds5.12		pod2html5.12			wish
gnuattach			pod2latex			wish8.4
gnuclient			pod2latex5.10			wish8.5
gnudoit				pod2latex5.12			write
gnuserv				pod2man				wsgen
gnutar				pod2man5.10			wsimport
grap2graph			pod2man5.12			xar
grep				pod2readme			xargs
grn				pod2readme5.10			xattr
grodvi				pod2readme5.12			xattr-2.5
groff				pod2text			xattr-2.6
groffer				pod2text5.10			xattr-2.7
grog				pod2text5.12			xcode-select
grolbp				pod2usage			xcodebuild
grolj4				pod2usage5.10			xcrun
grops				pod2usage5.12			xed
grotty				podchecker			xgettext.pl
groups				podchecker5.10			xgettext5.10.pl
gunzip				podchecker5.12			xgettext5.12.pl
gzcat				podselect			xip
gzexe				podselect5.10			xjc
gzip				podselect5.12			xml2-config
h2ph				policytool			xmlcatalog
h2ph5.10			post-grohtml			xmllint
h2ph5.12			postgres_real			xpath
h2xs				pp				xpath5.10
h2xs5.10			pp5.12				xpath5.12
h2xs5.12			ppdc				xslt-config
hash				ppdhtml				xsltproc
hdid				ppdi				xsubpp
hdiutil				ppdmerge			xsubpp5.10
head				ppdpo				xsubpp5.12
heap				pr				xxd
hexdump				pre-grohtml			yes
hiutil				priclass.d			ypcat
host				pridist.d			ypmatch
hostinfo			printenv			ypwhich
hotspot.d			printf				zcat
hpftodit			procmail			zcmp
htmltree			procsystime			zdiff
htmltree5.12			productbuild			zegrep
httpdstat.d			productsign			zfgrep
ibtool				profiles			zforce
iconutil			prove				zgrep
iconv				prove5.10			zip
id				prove5.12			zipcloak
idle				psed				zipgrep
idle2.5				psed5.10			zipinfo
idle2.6				psed5.12			zipnote
idle2.7				psql				zipsplit
idlj				pstopdf				zless
indxbib				pstruct				zmore
info				pstruct5.10			znew
infocmp				pstruct5.12			zprint

/usr/sbinのコマンド
AELWriter		cvgather		kextstat		
postlog			slapindex
AppleFileServer		cvlabel			krbservicesetup		
postmap			slappasswd
BootCacheControl	cvmkfs			ktutil			
postmulti		slapschema
DevToolsSecurity	cvupdatefs		languagesetup		
postqueue		slaptest
DirectoryService	dbmmanage		localemanager		
postsuper		smbd
KernelEventAgent	ddns-confgen		logresolve		
pppd			snmetadump
Kobil_mIDentity_switch	dev_mkdb		lpadmin			
praudit			snmpd
NetBootClientStatus	diskarbitrationd	lpc			
pwd_mkdb		snmptrapd
PasswordService		diskmanagementd		lpinfo			
qmasterca		softwareupdate
ab			disktool		lpmove			
qmasterd		spctl
ac			diskutil		lsof			
qmasterprefs		spindump
accept			distnoted		lwresd			
qmasterqd		spray
accton			dnsextd			mDNSResponder		
quotaoff		sshd
amt			dnssec-dsfromkey	mDNSResponderHelper	
quotaon			sso_util
aosnotifyd		dnssec-keyfromlabel	makedbm			
racoon			stdethers
apachectl		dnssec-keygen		mkextunpack		
racoonctl		stdhosts
apxs			dnssec-revoke		mkfile			
raddebug		symstacks.rb
arp			dnssec-settime		mkpassdb		
radiusconfig		sysctl
arpaname		dnssec-signzone		mtree			
radiusd			syslogd
aslmanager		dot_clean		named			
radmin			system_profiler
asr			dsconfigad		named-checkconf		
radwatch		systemkeychain
audit			dsconfigldap		named-checkzone		
raidutil		systemsetup
auditd			dseditgroup		named-compilezone	
rarpd			tcpdump
auditreduce		dsenableroot		named-journalprint	
rc.radiusd		timed
authserver		dtrace			natd			
reject			timedc
automount		edquota			natutil			
repquota		tokenadmin
avbdeviced		envvars			ndp			
revnetgroup		traceroute
awacsd			envvars-std		netbiosd		
rndc			traceroute6
bless			fdisk			netstat			
rndc-confgen		uninstall
blued			filecoordinationd	networksetup		
rotatelogs		universalaccessd
bnepd			genrandom		newsyslog		
rpc.lockd		usernoted
cfprefsd		gpt			nlcontrol		
rpc.statd		uuchk
chat			graphicssession		notifyd			
rpcbind			uucico
checkgid		gssd			nsec3hash		
rpcinfo			uuconv
checkrad		hdik			ntpd			
rtadvd			uusched
chown			htcacheclean		ntpdate			
rtsold			uuxqt
chroot			htdbm			ntpdc			
rwhod			vifs
coreaudiod		htdigest		ntptrace		
sa			vipw
createhomedir		htpasswd		nvram			
sc_auth			visudo
cron			httpd			ocspd			
screencapture		vpnd
cupsaccept		httpd-wrapper		pboard			
scselect		vsdbutil
cupsaddsmb		httxt2dbm		pcscd			
scutil			weakpass_edit
cupsctl			inituser		pdisk			
securityd		webpromotion
cupsd			installer		periodic		
sendmail		xsanadmin
cupsdisable		ioreg			php-fpm			
serverinfo		xsanctl
cupsenable		iostat			pictd			
setkey			xscertadmin
cupsfilter		ipconfig		pkgutil			
setquota		ypbind
cupsreject		isc-hmac-fixup		postalias		
sharing			ypinit
cvadmin			kadmin			postcat			
slapacl			yppoll
cvdb			kadmin.local		postconf	
	slapadd			yppush
cvdbset			kdcsetup		postdrop		
slapauth		ypset
cvfsck			kextcache		postfix			
slapcat			ypxfr
cvfsdb			kextfind		postkick		
slapconfig		zdump
cvfsid			kextlibs		postlock		
slapdn			zic




2013年6月30日



anchor

MacのTerminalにはいくつのコマンドが有るのか〜「どうせならUNIX的な方法で数えたらどう?」〜おっしゃるとおりです(∪^ω^)

先日こういう記事を書いたらBBSに情報をいただいた。
MacのTerminalにはいくつのコマンドが有るのか〜どういうコマンドが有るのか〜こうやって一覧を見ることができる

「MaxOS Xがunixであるが故に使い始めた私です。
コマンドの数を勘定する方法ですが、

% /bin/ls -1 /bin /sbin /usr/bin /usr/sbin | wc

とかやると一発です。いかにもunix的なやり方ですが、システムの自動管理などにはこういう手法は不可欠ですね。
私のシステムではこれらのディレクトリに1504のファイルがありました。」

「ついでに。シェルから呼び出せるコマンドのありかは環境変数またはシェル変数PATHに入っていますので、それを数え上げようと思えば以下のようにすればできます。

% /bin/ls -1 `echo $PATH| tr ":" " "`|wc

trは文字列の置換えを行うコマンドです。」

「すず」さん情報ありがとうございます。
なるほど、行数を数えるwcコマンドを使うのだな。
lsコマンドのオプションで「-1」(数字の1)を置くと1単語を一行でリストするから、ファイルの数を数えられるわけだ。
なるほど!知らなかった。
これは使わせてもらいます。

少し整理すると
ls -1 /bin /sbin /usr/bin /usr/sbin | wc -l
とするとコマンドの総数だけを表示してくれるようになりそう。
wcのオプションは「-l」(アルファベットのL)にすればファイル数だけを表示。

先日の記事ではデフォルトの4つのパスの数字だけを数えていたのだが、それ以外にパスを通したところもあるし、コマンドサーチパスを表示させて全部数えた方が正確な数はわかるよねと…とちらっと思いはしたけど、大した数ぢゃないしめんどくさいな…とシカトしていた。
しかしユニクサたるものそれぢゃいかんよね。

ということでコマンドサーチパスをリストしてそれを数えるというコマンドも情報をいただいた。
これも少し整理してみた。

ls -1 `echo $PATH| tr ":" " "`|wc -l
(これもlsのオプションは数字の1、wcのオプションはアルファベットのL)
こうすれば4つのデフォルトのコマンドサーチパスだけでなく、自分で通したサーチパスのコマンドも全部一気に数えてくれる(!)
なるほど、方法というのはあるものなのですね。
このtrというコマンドも知らなかった。
勉強になります。

情報ありがとうございました。





すずさんに教えてもらったコマンドを打ってみた
ls -1 /bin /sbin /usr/bin /usr/sbin | wcとすると3つ数字を出す
ファイル数と何かとキャラクター数かな
何かが何かは不明




何かが何かをmanして調べてみたが…ようわからん




そこでls -1 /bin /sbin /usr/bin /usr/sbin | wc -lとしてみた
こうするとすっきりとファイル数だけを表示するのでズバリの数がわかる




さらにデフォルトのパスだけでなく自分で通したコマンドサーチパス
もふくめた全部のコマンドの数を表示するコマンドも試してみた
ls -1 `echo $PATH| tr ":" " "`|wc -lで打つと1356という数が得られた
(上の行でしくじっているのは無視するように!)



2013年7月1日



anchor

MacのTerminalにはいくつのコマンドが有るのか〜「どうせならUNIX的な方法で数えたらどう?」〜<追記>さらに正確な数を抽出できる方法〜と思いきやこの問題は簡単ではない

先日軽い気持ちでMacのTerminalにはどんなコマンドが入っているのか、いくつくらい入っているのかと思ってこんな記事を書いた。
MacのTerminalにはいくつのコマンドが有るのか〜どういうコマンドが有るのか〜こうやって一覧を見ることができる

そしたら「UNIXのコマンドの話てるんだからどうせならUNIXのコマンド使って数えようよ」という指摘をいただいた。
ごもっともだ。
MacのTerminalにはいくつのコマンドが有るのか〜「どうせならUNIX的な方法で数えたらどう?」〜おっしゃるとおりです(∪^ω^)

そしたらさらにTwitterから「monoshiriG3」さんと「Gururi」さんからもっと正確な数を数えるコマンドを教えていただいた。
ありがとうございます。
このサイトは皆様のお知恵によって成り立っています。

「monoshiriG3」さんからいただいた情報はこちら
「lsでパイプするときは、1オプションはいりませんよ。あと、実行ファイルのみを数えるのでしたら、 ls -F パス名 | grep "*" |wc -l でどうでしょう。これだとシンボリックリンクのカウント重複もないと思いますよ」

確かにls -1で行数を出させるよりも実行ファイルを探させる方が本質に近いのかな。
整理すると/binのコマンドの数を知りたい時は、
ls -F /bin | grep "*" |wc -l

デフォルトのコマンドサーチパスにあるコマンドの数を出したいなら
ls -F /bin /sbin /usr/bin /usr/sbin | grep "*" |wc -l
これでよさそう。

自分で通したパスもコマンドサーチパスもチェックするなら、先の「すず」さんの情報と組み合わせて
ls -F `echo $PATH| tr ":" " "` | grep "*" |wc -l
とできるかな。

確かに違うパスに同じコマンドが入っているみたいで、シンボリックリンクがあるのではないかという気がしていた。
GUIでは見えないが、見えてるエイリアスもある。
そういうのは大した数ではないので、シカト…と思っていたらしっかりそこを指摘されてしまった。

シンボリックリンクは確かに外したいが、このエイリアスは除外した方がいいのかと思ってオリジナルをたぐってみるとオリジナルは違うコマンドだったりする。
ひとつのコマンドセットに機能に合わせて違う名前のエイリアスがあるのだろうか?
この場合のコマンドはひとつと勘定するのか、ふたつと勘定するのか?

ふたつだよね〜
これは除外したくないよね…

そう思ってあちこちパスを見ていたら、Xcodeのコマンドが多数あることに気がついた。
clamscanのコマンドはパスが通っていないことに気がついた。
このコマンド数の問題はどうやら、簡単ではない問題を含んでいる。
そういうのは後からインストールしたものだから、数に含めないというルールが最適かな。
いや、今そういうルールに決めた。
(Xcodeぐらい開発者でなくても入れるけどなぁ…どうなんだろ?)

そう思っていたら「Gururi」さんからそんなことしなくても「実行ファイルの数を数えるコマンド」というそのものズバリのコマンドを教えてもらった。

wich -as
と打ってEnter、tabキーを2回叩く。
すると実行ファイルの総数が出て「全部表示するか?y/n」と聞いてくる。

yを叩くと先日lsコマンドでやったコマンドのリストも出力した。

これで解決…と思ったが数が合わない。
それぞれバラバラな結果を出しているのでどれが正しい数字か分からない。

この企画、実は「Macのコマンドってたくさんあるんだよ〜」ということを書きたかっただけのゆる〜い企画で、だからコマンドの数も「1000超えてるか超えてないか」を知りたかっただけだった。
で、100の位なんか切り上げ…というくらいのゆる〜い考えで数え始めたんだけど、ユニクサの皆さんは当然そういうゆる〜い考え方は許せないらしい。

というか
「コマンド数えるのになんでGUIでFinderに表示させた数の合計足して計算してんの?
コマンドならコマンドで数える方がいいでしょ?」
と言われた時点で、私、ぐうの音も出ないんですが…

ということでおおよその近似値は出ました。
Macのデフォのコマンドの数は

1100から1400の間

ということになりそうです(`;ω;´)





情報いただいたlsを使った「実行ファイルを数える」コマンド
実行ファイルでgrepしてwcでリストした実行ファイルの行数を数える
この方法ならシンボリックリンクの重複を除外できるとのこと
/binは37でまあここは異論がないところ




上がコマンドサーチパスをechoさせてその中の実行ファイルの数を数えるコマンド
下がデフォルトの4つのパスのコマンドを数える構文
ぞれぞれ1190と1187という数字が出た
大分少ないのはそれだけシンボリックリンクやエイリアスの重複があるということか




ここでふと思ったのはエイリアスになっているコマンドのオリジナルを
表示させると違うコマンドになっているケースが結構多いことだ
これはひとつのコマンドと勘定すべきかふたつと勘定するべきか…
ふたつだよなぁ…シェルでコマンド打っている時にはそれがエイリアスか
どうかなんて気にしないし違うコマンドならふたつと数えるよなぁ…
どうやら「コマンドどうやって数える問題」は考えていたほど簡単な問題ではない…




と思っていたら「Gururi」さんからコマンドを数えるという
そのものズバリのコマンドを教えてもらった
wich -asと打ってEnter、tabを2回叩くと
実行ファイルの総数とそのリストを表示するか聞いてくる
1397と前のふたつの方法よりもちょっと多めの数が出てきた
Xcodeとかも含んでいるのだろうか?




先ほどのコンファームでyを叩くとリストも表示した
こういうシンプルな方法が有ったんだ…
でも数がそれぞれバラバラなのはどういう解釈の違いだろうか…



2013年7月1日







anchor

WebDAVやVPN、AFPのサーバーにファイルをアプロードする時に知っておくと便利なcpコマンドの使い方

Webサーバを運用する時に昔だったらFetchのようなFTPクライアントを使っていたかもしれない。
しかしこの昔の FTPってスゴく不安定で時間もかかった。

今はCyberduckのような優れもののFTPクライアントもあるのだが、だんだん時代が便利になってきてWebサーバにもFTPを使わずにファイルブラウザで直接ファイルをプットできるサービスが増えた。

例えばDropboxはWebストレージサービスだが、極端な話このサーバを使ってWebサイトを作ることもできる。
この場合アップロードは同期しているフォルダにアップしたいhtmlファイルを移動するだけだ。

そこまでいかなくても今このサイトを置いているMacServerさんは、ストレージを直接マウントしてローカルストレージと同じようにFinderでファイルを移動するだけでファイルがアップロードできる。

ところがMountain Lionあたりから困った問題が起き始めた。

このサイトを更新するためにMacServerにhtmlファイルを Finderでアップロードしようとすると、いつまでも
「***ヘのコピーの準備中」
の青い床屋バーがくるくる回ったままになって一向にアップロードが始まらなくなる。

コマンド+Option+EscでFinderを再起動すれば問題なくアップロードはできるようになるのだが、次の回にまた床屋バーがくるくる回ったままになって、一向にらちがあかない。
メンテナンスでサイト全ページのファイルをアップロードするとなると半日仕事になってしまう。





MacServerにこのサイトの更新のためにファイルをアップしようとするとこのような表示のまま永久に進まなくなる
数十分待っているとフッとアップロードできることもあるがファイルを一個ずつアップロードするのに
いちいち数十分待っていられないので結局Finderを再起動することになってはなはだ能率が悪い



これはMacServerの問題ではなく出先からVPN経由で自宅のサーバにファイルをアップロードする時も全く同じ問題が起きるので、Finderのバグと思われる。
以前のバージョンでは問題なかったが、Mountain Lionで急にこの問題が頻発するようになった。
Mavericksで改善されるかと期待したのだが、結局今も全く同じなので大いにがっかりした。

そこで
「まあ、Finderがバグがあって使えないのならTerminalを使えばいいのに…」(#マリーアントワネッター)
ということでTerminalコマンドを使ってアップロードをすることにした。

といっても遠隔ボリュームはマウントできているわけだからFTPなどのコマンドを使う必要はない。
普通にコピーコマンドのcpを使ってアップロードをした。

このcpコマンドの使い方は以下のようになる。
【ファイルをコピーする場合】
cp (コピー元のファイルのパス) (コピー先のファイルを置きたいディレクトリのパス)

(ファイルはスペースを挟んで複数指定が可能)

【フォルダごとコピーする場合】
cp -Rv (コピー元ディレクトリのパス) (コピー先のフォルダを置きたいディレクトリのパス)


例えば
Users/ユーザ名/Sites/1.jpg
をマウントした遠隔ボリューム名「target」の中の「Sites」という名前のフォルダにコピーしたい場合は

cp Users/ユーザ名/Sites/1.jpg Volumes/target/Sites

でOKだ。
ファイルは
cp Users/ユーザ名/Sites/1.jpg Users/ユーザ名/Sites/2.jpg Users/ユーザ名/Sites/3.jpg Volumes/target/Sites
という感じで複数指定して一気にアップロードができる。
ただしUNIX的制限から一度に指定できるファイル数は100までだ。

今回Finderのいちいち停まる挙動に我慢ができなくなりcpコマンドでアップロードを完了したのでそのコマンドの使い方をメモしておく。





キャプチャのコマンドはhtmlファイルを遠隔でマウントしたnmutaという名前の
サーバのボリュームの中のディレクトリにアップロードしている
cp Users/hiiragi/Sites/tips1.html Users/hiiragi/Sites/tips2.html Volumes/nmuta/Sites
コマンドはこんな感じでオブジェクトのファイルのパスが先でスペース挟みで複数指定可、
最後にターゲットのボリュームの中のフォルダ名という構文になる
これもネット越しだと時間はかかるがFinderのように途中で停まったりはしないので
ずっと監視していなくても良いのが最大のメリット




cp -Rv Users/hiiragi/Sites/homeimages Volumue/nmuta/Sites
これは-Rvで「ディレクトリの中身も含めて全てコピーする」と
「何をしたかを表示する」というオプションになる
コピー元のパスを書いたhomeimagesというフォルダを
ターゲットのディレクトリ内に中身ごとコピーしている
下には何をコピーしたかのリストが表示される



2014年10月11日







anchor

ネット越しのFinderが遅い!〜解決法〜遠隔からファイルをコマンドを使ってアプリケーションに渡して開く

ファイルを開くコマンドがある。
openというコマンドを使うが、このコマンドにはファイルを開くアプリケーションを指定してファイルを開くことができる。

ローカルで使うだけならそんなコマンドを知っていても、あまり使う場面はないかもしれない。

しかしMacはMountain Lionあたりから、ネットワークボリュームの読み込みにえらく時間がかかるようになった。
特にインターネット越しにサーバーのボリュームをマウントして、ディレクトリ、内包ファイルを表示するのに数分、数によっては20〜30分かかるようになった。

以前のMacはこの辺りは速かったのだが、FinderがCocoa化したあたりからだんだん遅くなって、ついにMountain Lionあたりから顕著になってきた。
Mavericksあたりで改善されるかと期待していたのだが、Yosemiteになった現在でもネット越しのファイルリストの表示はとても遅い。

最近はTerminalを起動してファイルリストの表示はlsコマンド、ファイルのアップロードはcopyコマンドで済ますことが多い。
Finderを使うよりずっと速いからだ。

困るのはアプリケーションからファイルを開きたい時だ。
サイトの運営をしているとhtmlファイルなどをネット越しにテキストエディタで開いて、タグを編集したい時がある。
その時にテキストエディタのファイルを開くメニューでネットボリュームのリストがダイアログに表示されるのを待っていると、下手するとまた数十分待たされることがあって、仕事にならない。

そこでコマンドを使ってネット越しのファイルをアプリケーションを指定して開く。

そのコマンドは以下のようになる。
open -a <アプリケーションのパス> <ファイルのパス>

例えばアプリケーションフォルダの中のbusinessフォルダの中に置いているCotEditorを使ってインターネット越しにマウントしているmutaというユーザのSiteフォルダの中のindex.htmlというファイルを開きたい時にはこういうコマンドになる。
open -a /Applications/business/CotEditor.app /Volumes/muta/Sites/index.html

アプリケーションフォルダのパスを記述していること、ネットワークボリュームは/Volumes/の中のボリュームのパスを記述していることに注目。
このパスがわからない時はTerminalにopen -a (最後にスペースを一つ入れる)とだけ打って開きたいアプリをTerminalにドロップ、次にデスクトップにマウントしているネットワークボリュームのアイコンをドロップしてネットワークボリュームの中のパスだけ手打ちで入力するのでも構わない。
これで正しいパスが入力できるはずだ。

Terminalも多少は待たされるが、Finderのモタモタぶりと比べたらはるかに速い。





インターネット越しにWebサイトのファイルを編集したいという時
Finderはネットワークボリュームの中身を表示するのに時間がかかる
時にこの表示のまま十数分待たされることがあってディレクトリを
変えるごとにその時間待たされていたら仕事にならない




ネットワークボリュームはGUI上ではデスクトップにマウントされているように見えるが
UNIX的パスで見ると/Volumesの中にマウントされているのでcdコマンドでそこに入って
lsコマンドでファイルリストを表示させるとFinder
表示するよりはるかに短い時間で全てのリストを表示できる




相手先のリストが表示されたらそのパス、ファイル名を確認する




ここで特定のアプリケーションでファイルを開くコマンドを実行する
アプリケーションフォルダの中にbusinessというフォルダを作って
そこに入れているCotEditorを使ってnmutaというユーザ名のネット越しボリュームの
Sitesというフォルダの中のindex.htmlを開きたい時のコマンドは以下の通り
open -a /Applications/business/CotEditor.app /Volumes/nmuta/Sites/index.html




こうしてhtmlファイルをCotEditorで開いてネット越しに編集することができる
Finderでドロップしているのと比べて能率は段違い




このコマンドのパスを記述するのが面倒という人はアプリケーションのパスは
本体アイコンをTerminalにドロップするだけで記述できるという裏技がある
Macならではの作法だがこれでネットワークボリュームのパスも
記述できるのでこのコマンドは見た目が長い割には簡単に入力できる



2015年2月22日







anchor

ちょっとしたメモ〜Yosemite・Mavericksのメモリ圧縮を無効にするコマンドでひょっとしたらMacが高速化するかも…しないかも…

先日Trim EnablerのトラブルでMacが起動できなくなり、その解決のためにnvramコマンドについて調べていた時に思わぬ拾い物をしたのでメモしとく。

Yosemite・Mavericksのメモリ圧縮を無効にするコマンドが存在する。
それも先日問題を起こしたNVRAM(旧PRAM)に記録されたパラメーターを変更するコマンド、nvramを使用する。

メモリ圧縮を無効化するのがこれ
sudo nvram boot-args="vm_compressor=1"

メモリ圧縮を有効化するコマンドは以下
sudo nvram boot-args="vm_compressor=4"

要はnvramのvm_compressorというパラメーターが4なら圧縮メモリは有効、1なら圧縮メモリは無効ということらしい。
今圧縮メモリが有効か無効化を確認するコマンドは以下。
sysctl -a vm.compressor_mode


で、実はこれまだ試していない。
近日中に効果を確認する。
nvramのパラメーターをいじるのは当分慎重になりたいので…

ただ圧縮メモリ自体が本来システムの高速化のために導入されたはずだから、メモリ圧縮の無効化がシステムの高速化に貢献するのかは不明。
使い方や空きメモリの余裕にもよると思うのだが、逆にSwapが増えてシステムが重くなってしまうということも考えられる。
見たところ単なるnvramパラメーターだから逆効果ならすぐに元に戻せそうではあるが…
ダメならPRAMクリア・NVRAMリセット・セーフモードで起動などでリセットできるので問題ない。
ただしYosemiteでTrim Enablerを使っている人は要注意なのは先日書いた記事の通りなのだが…





sysctl -a vm.compressor_modeのコマンドを打つと現在の圧縮メモリの有効・無効が確認できる
デフォルトのパラメーターは4で有効だが上記コマンドでこれを1に変更すれば無効にできる



2015年2月28日














Previous Topへ Next





site statistics
青木さやか