显示标签为“mac”的博文。显示所有博文
显示标签为“mac”的博文。显示所有博文

2010年8月27日星期五

常用的 OS X 命令行工具(转)

转:http://purpen.javaeye.com/blog/162720

常用的 OS X 命令行工具(收藏)

关键字: mac ox 终端 命令
原文标题:Ten OS X Command Line Utilities you might not know about
原文作者:OS X Daily
译者:Klaith
Mac OS X 的命令行界面是成千上万程序的基础,可平常用户往往不知道它的存在。依靠 GNU 基金会以及开源社区的多年努力,Apple 设计出一个“无须”使用命令的杰出操作系统。在不必为了每天的日常操作而动用命令行的同时,只要利用得当,命令行仍然能够节省你不少时间,偶尔还会让你开怀一笑。我希望你能好好享受这里提到的十个 OS X 命令行工具!

1、ssh

这颗小小的“宝石”包含于 Mac OS X 的每个版本,其开发的最初目的只是为了取代 rsh/rlogin,现在却成为 Linux/Unix(包括 Mac OS X)社区不可缺少的一部分。openssh 的主要作用就是安全的远程管理。打开系统预置,点击“共享”,勾选“远程登录”,即可启动 Mac OS X 的内置 SSH 服务。现在假设你想连接你不在身边的电脑,可以借助类似 PuTTY(Windows 平台)的客户端,或者在 Mac OS X 的终端窗口中输入“ssh”连接你 Mac 的 IP 地址。以你的用户名和密码登录之后,你便获得了 Mac OS X 命令行的完整操作权。除此之外,openssh 还有许许多多应用,有些可是相当了不起的。我就很喜欢用 ssh 搭个 SOCKS 代理,这样我在公共地点也能安全上网冲浪。在Mac 上使用 ssh 的更多技巧,可以浏览本页!

2、top

top 是另一个长期为 Linux/Unix 社区使用的经典工具,使用它只需打开终端输入“top”。眨眼之间,你就会看见一个满是文字的窗口——每一个正在你的 Mac 上运行的进程都会被列出。如果我的 Mac 速度变慢,top 是让我知道什么正在发生的首选。点击这里,查看 top 的完整概述。

3、lsbom

如果你偶然在某个 Mac 站点(比如 OS X Daily)发现一件够酷够新的软件,忍不住想安装,而你又犹豫不决,那么 lsbom 对你大有好处。通过它,你可以测试 Mac OS X 安装包(.pkg)的内容,并且清楚了解究竟会有什么被塞进你心爱的文件系统。要使用 lsbom,你需要启动终端,并进入 .pkg 文件所在的目录。如果你的安装包形式是 .dmg,可能需要把其中的 .pkg 文件拷贝到桌面上,然后进入 Desktop 目录。一旦确认 .pkg 文件的位置,输入“lsbom .pkg/Contents/Archive.bom> | more”。哇!你所看见的就是新程序将会安装的完整文件列表。

4、say

这个命令是 Mac OS X 独一无二的,比其他任何一个都更有趣。打开终端输入“say hello”试试吧!

5、softwareupdate

softwareupdate 命令提供了一种安装 Apple 软件更新方便快捷的方法。打开终端,输入“softwareupdate -i -a”,你的 Mac 就会安装所有可以获得的更新项。如果你只想安装“推荐”更新项,那么就输入“softwareupdate -i -r”。

6、ipconfigifconfig

要说获取你 Mac IP 地址最快、最简单的方法,绝对是“ipconfigifconfig”,只需打开终端输入“ipconfigifconfig”。你能看到许多信息,包括你网卡的 MAC 地址。我喜欢输入“ipconfigifconfig | grep inet”仅回馈我计算机的 IP 信息。你也可以通过输入“ifconfig en0 down”来禁止一个网络连接(这里举了“en0”的例子);如果希望恢复,那么就输入“ipconfigifconfig en0 up”。这比使用系统预置要快上不少哦!

7、lipo

lipo 是一个在 Mac OS X 中处理通用程序(Universal Binaries)的工具。现在发售或者提供下载的许多(几乎所有)程序都打上了“Universal”标志,意味着它们同时具有 PowerPC 和 Intel 芯片能够处理的代码。不过既然你可能不在意其中的一个,你就能够使用 lipo 来给你的程序“瘦身”。比如你想让“便笺”应用程序只包含 Intel(i386)的代码:

cd /Applications
lipo Stickies.app/Contents/MacOS/Stickies -thin i386 -output Stickies.app/Contents/MacOS/Stickies.i386
cd Stickies.app/Contents/MacOS/
rm Stickies
mv Stickies.i386 Stickies

8、screencapture

screencapture 提供了较 command-shift-3 更高级的抓屏手段。要使用它,打开终端,试着输入“screencapture -iW ~/Desktop/screen.jpg”,鼠标会变成等待点击的相机图标,点击后就在你的桌面上创建一个名为“screen.jpg”的文件,内容就是你点击的任何窗口的抓屏。当然你也能够通过输入“screencapture -S ~/Desktop/screen.jpg”来抓取整个屏幕。如果你还想与众不同,你还可以输入“screencapture -ic”来抓取屏幕的一部分。现在就抓上一些图片发给 osxdaily 吧,我们会喜欢它们的!

9 & 10、Fink 和 DarwinPorts

如果你已经习惯于 OS X 命令行工具的基本应用,现在就是让你的终端接触更大开源世界的时候了。借助于 DarwinPorts 或者 Fink,你能够在你的计算机上下载、安装成百上千的免费开源软件。我发现 Darwinports 开始注意到一些较少见的开源计划,而 Fink 似乎更为坚实。你可以同时安装两者,只要你的确知道你在干什么,但是一般我会建议你只选择其中一个。初学者应该试试 Fink,因为它会附带一个名为“Fink Commander”的程序,你只需从中选择一个程序来下载。看看它们各自的官方网站吧:DarwinPorts (已更名为 MacPorts)官方网站;Fink 的官方网站。

11. cat/more/less
以上三个指令均为察看档案内容的指令。cat 的意义是猫....不不不,是
concatenate ,在字典上的意思是"连结,将…串成锁状"( 语出资工电子
词典 cdict ),其实就是把档案的内容显示出来的意思。 cat 有许多奇怪
的参数,较常为人所使用的是 -n 参数,也就是把显示出来的内容加上行
号。 cat 的用法如下:

cat [-n] :自标准输入读进内容,你可以用 pipe 将别的程式的输出转向
给 cat .
cat [-n] filename : 将 filename 的内容读进来,显示在标准输出上。

问题在於 cat 它是不会停下来的,因此并不好用( 试想如果一个萤幕二十
四行,而一个档案四百行,cat 一出来将会劈哩啪啦不断的卷上去,使用者
很难据此得到他们所需的资讯。) 所以才有人又写了 more 出来。

more , 跟据蔡文能老师的说法是"再多一点就好",more 可以将所观察的档案
跟据终端机的形态一页页的显示出来,再根据使用者的要求换页或卷行。如果
使用者要在某一个档案中搜寻一个特定的字串,则按 / 然後跟著打所要搜寻
的单字即可进行搜寻。more 也可以找得到。more 的使用法如下:

more filename

如果你在使用中觉得已经看到了所要看的部份,可以按'q'离开 more 的使用。
在使用中按'v' 亦可以使用编辑器来编辑所观看的档案。

less 的用法与 more 极类似,原先它就是为了弥补 more 只能往前方卷页的缺
点而设计。 less 的用法如下:

less filename

其与 more 不同的是它可以按 y 来往上卷一行,并且可以用"?"来往回搜寻你所
要找的单字。

2010年8月24日星期二

Change the hostname in Mac OS X(转)

转:http://blog.psyrendust.com/2008/05/23/change-the-hostname-in-mac-os-x-osx/


Change the hostname in Mac OS X [osx]

by LARRY on MAY 23, 2008

in MAC,HOWTO,PROGRAMMING

When I log into the network at my job my Mac’s hostname always turns to:

larryx.na.corp.ipgnetwork.com

I have my local hostname set to:

larryx.local

So What I would like to do is set my Mac’s hostname to my local hostname. You can do this all from Terminal in a single line.

Run this command in Terminal:

sudo scutil --set HostName larryx.local

This is also helpful if you’re in Terminal and have a really long hostname at your prompt. If you want to view your current hostname, run this command in Terminal:

hostname

This is what it looked like for me:

Last login: Fri May 23 09:55:20 on ttys000 larryx:~ lgordon$ hostname larryx.na.corp.ipgnetwork.com larryx:~ lgordon$ sudo scutil --set HostName larryx.local Password: larryx:~ lgordon$ hostname larryx.local

2010年5月25日星期二

解决mac emacs 字体 方框问题

用了两次进行解决
第一次:
方案:
(set-default-font "-apple-STKaiti-medium-normal-normal-*-*-*-*-*-p-0-iso10646-1")
(set-face-attribute 'default (selected-frame) :height 155)
原理:
用现有的字体, 替换目前的字体
效果:
勉强可以接受, 其实是用楷体, 但是楷体的默认英文字体 奇丑无比
补充方案:
(defun cha-b()
(interactive)
(set-default-font "-apple-Heiti_SC-bold-normal-normal-*-*-*-*-*-p-0-iso10646-1")
(set-face-attribute 'default (selected-frame) :height 130))

(defun cha-a()
(interactive)
(set-default-font "-apple-Monaco-medium-normal-normal-*-*-*-*-*-m-0-iso10646-1"))
补充方案效果:
通过命令进行切换, 暂时解决问题. 但跟吃了苍蝇一样.
第二次:
方案:
(create-fontset-from-fontset-spec
"-apple-bitstream vera sans mono-medium-r-normal--12-*-*-*-*-*-fontset-mymonaco,
ascii:-apple-Monaco-medium-normal-normal-*-12-*-*-*-m-0-iso10646-1,
chinese-gb2312:-apple-STHeiti-medium-normal-normal-12-*-*-*-*-p-0-iso10646-1,
latin-iso8859-1:-apple-Monaco-medium-normal-normal-*-12-*-*-*-m-0-iso10646-1,
mule-unicode-0100-24ff:-apple-Monaco-medium-normal-normal-*-12-*-*-*-m-0-iso10646-1")

(setq default-frame-alist (append '((font . "fontset-mymonaco")) default-frame-alist))
(set-default-font "fontset-mymonaco")
原理:
自己配置个完整的字体方案, 中文和英文分开设置. 愿意用啥字体就啥字体
效果:
终于爽了.

参考
http://www.emacswiki.org/emacs/SetFonts#toc6
http://strickland.spaces.live.com/Blog/cns!3B996A2BC0C32C32!512.entry

2010年5月22日星期六

mac safari 跨墙

无法查看这则摘要。请 点击此处查看博文。

2010年5月21日星期五

修改 computer name

系统偏好设置->共享,修改“电脑名称”,就可以了。

另外,楼主说的在终端命令行提示符里的东东不是HostName,是ComputerName。用楼上同学说的scutil也可以修改,具体命令是:
sudo scutil --set ComputerName


修改 computer name 后要修改 hosts, 127.0.0.1

2010年5月20日星期四

path finder 替代 finder

菜单Path Finder > Preference > Reveal
勾中
Set Path Finder as the default file viewer

Applications:
勾中 Mount DMGs using Path Finder

General:
勾中 Launch Path Finder automatically after log in
Quit the Finder's desktop

不过,Path Finder要比Finder慢一些,建议你还是保留Finder

2010年5月18日星期二

使用inotify监视文件系统(转)

转:http://hi.baidu.com/hq1305018/blog/item/55c7bbde8c78d9abcc11661b.html
使用inotify监视文件系统
2009-10-19 12:07
使用inotify监视文件系统

inotify是Linux的功能,监视文件系统的读取,写入,文件建立等动作。inotify是事件驱动型的,而且使用方法又非常简单,比起用cron来频繁地查找文件系统的变化相比,非常有效。

关于inotify

inotify是Linux系统的核心功能,监视文件系统,当有事件(删除,读取,写入或者unmount等等)发生时,向指定的程序发出通知。另外,文件的移动等的操作发生时,移动文件和移动位置也可以通过通知来获取。

inotify的使用文件非常简单。首先生成一个文件标识,一个文件标识中记载了一个以上的监视对象(文件系统的路径和所要监视的事件类别)。然后,使用read()函数和读取该文件标识的事件通知。inotify并不会不断的去检索文件系统,如果一个事件没有发生,那么read()会一直等待。

另外因为inotify使用的是以前的文件标识方式,所以可以和select()等系统函数结合起来,对文件监视对象和多种入力源同时进行事件驱动型监视。事件驱动型的实行方式,避免了频繁地检索文件系统,大量地节省了系统资源。

接下来我会通过一些例子程序来详细说明inotify的使用方法。inotify需要Linux2.6.13以上,可以使用下面的命令来检查系统是否可以使用inotify。另外一种确认方法是,查找/usr/include/sys/inotify.h是否存在。

%uname -a

Linux ubuntu-desktop 2.6.24-19-generic #1 SMP ... i686 GNU/Linux
注意:FreeBSD,或者Mac OS X系统并不支持inotify,但是提供了和inotify相似的kqueue。关于kqueue可以使用man 2 kqueue来获取相关信息。

inotify的C语言API

inotify提供了3个系统调用函数,使用它们可以进行任意的文件系统监视。

● inotify_init() 用来生成inotify的实例,成功时返回一个文件标识,失败时返回-1。和其它的系统调用一样,失败的时候可以使用errno来进行分析。

● inotify_add_watch() 看函数名就知道了,这个是用来追加监视对象的系统调用。追加监视对象的时候需要监视文件路径,监视的事件列表(监视事件的指定要使用象IN_MODIFY等的常量)。多个监视对象之间是逻辑OR的关系(C语言中是(|))。inotify_add_watch()调用成功时,会返回一个监视标识,失败的时候会返回-1。当需要对监视对象进行变更或者删除的时候要使用监视标识。

● inotify_rm_watch() 是用来删除监视对象的系统调用函数。

除了上述的三个系统调用 之外,还要使用系统调用 函数read()和close()。read()是用来读取通知,如果通知没有发生那么read()不会返回。对文件标识执行了close()之后,和那个文件标识相关的内存资源都被删除和释放。

例子程序:事件监视

#include
#include
#include
#include
#include

#define EVENT_SIZE ( sizeof (struct inotify_event) )
#define BUF_LEN ( 1024 * ( EVENT_SIZE + 16 ) )

int main( int argc, char **argv )
{
int length, i = 0;
int fd;
int wd;
char buffer[BUF_LEN];

fd = inotify_init();

if ( fd <>
perror( "inotify_init" );
}

wd = inotify_add_watch( fd, "/home/kankyou",
IN_MODIFY | IN_CREATE | IN_DELETE );
length = read( fd, buffer, BUF_LEN );

if ( length <>
perror( "read" );
}

while ( i <>
struct inotify_event *event = ( struct inotify_event * ) &buffer[ i ];
if ( event->len ) {
if ( event->mask & IN_CREATE ) {
if ( event->mask & IN_ISDIR ) {
printf( "The directory %s was created.\n", event->name );
}
else {
printf( "The file %s was created.\n", event->name );
}
}
else if ( event->mask & IN_DELETE ) {
if ( event->mask & IN_ISDIR ) {
printf( "The directory %s was deleted.\n", event->name );
}
else {
printf( "The file %s was deleted.\n", event->name );
}
}
else if ( event->mask & IN_MODIFY ) {
if ( event->mask & IN_ISDIR ) {
printf( "The directory %s was modified.\n", event->name );
}
else {
printf( "The file %s was modified.\n", event->name );
}
}
}
i += EVENT_SIZE + event->len;
}

( void ) inotify_rm_watch( fd, wd );
( void ) close( fd );

exit( 0 );
}
这个程序中,用 fd = inotify_init();来生成了一个文件标识。
用wd = inotify_add_watch(...)追加了一个监视标识。对 /home/kankyou的文件系统变化来进行监视。
read()函数在一个通知到来之前会一直等待。通知的详细信息(文件和事件)是通知一个字节流来送信的。利用应用程序中的循环来获取字节流中的信息。
事件通知的构造体被定义在/usr/include/sys/inotify.h文件中。(参照下记)
struct inotify_event
{
int wd; /* The watch descriptor */
uint32_t mask; /* Watch mask */
uint32_t cookie; /* A cookie to tie two events together */
uint32_t len; /* The length of the filename found in the name field */
char name __flexarr; /* The name of the file, padding to the end with NULs */
}


wd是监视标识,表明一个监视对象。mask是事件通知的类别(文件删除,文件更新等等)。

通过使用cookie来关联两个监视事件对象,比如当文件从一个目录被移动到另一个目录的时候,发生的两个事件的cookie是相同的。对文件移动的监视要使用IN_MOVED_FROM和IN_MOVED_TO,或者使用IN_MOVED来对双方进行监视。

最后,name和len是发生事件的文件的文件名(不包括路径)和文件名的长度。


Build例子程序


调用C编译器(大部分的Linux系统是gcc)。之后是实行编译后的程序。

%cc -o watcher watcher.c
%./watcher
watcher实行中的状态下,在/home/kankyou目录中执行touch,cat,rm等命令,来进行实验。

%cd $HOME
%touch a b c
The file a was created.
The file b was created.
The file c was created.

%./watcher &
%rm a b c
The file a was deleted.
The file b was deleted.
The file c was deleted.

%./watcher &
%touch a b c
The file a was created.
The file b was created.
The file c was created.

%./watcher &
%cat /etc/passwd >> a
The file a was modified.

%./watcher &
%mkdir d
The directory d was created.


inotify的使用技巧

因为read()在通知到来之前一直是处于等待状态,所以对于象画面应该程序是不能使用的。这种场合可以结合select(),pselect(),poll(),epoll()来进行监视。



int return_value;
fd_set descriptors;
struct timeval time_to_wait;

FD_ZERO ( &descriptors );
FD_SET( ..., &descriptors );
FD_SET ( fd, &descriptors );

...

time_to_wait.tv_sec = 3;
time.to_waittv_usec = 0;

return_value = select ( fd + 1, &descriptors, NULL, NULL, &time_to_wait);

if ( return_value <>
/* Error */
}

else if ( ! return_value ) {
/* Timeout */
}

else if ( FD_ISSET ( fd, &descriptors ) ) {
/* Process the inotify events */
...
}

else if ...


select()函数被调用之后,程序会等待time_to_wait秒,但是如果在这期间,fd中的任何文件发生变化,那么监视会立刻被再次实行。time_to_wait秒之后,应用程序可以进行其它的处理(象GUI事件处理等等)。


最后介绍几个inotify使用时的技巧。

● 监视对象的文件或者目录被删除之后,该当监视对象自动被删除。

● 如果正在监视的文件或者目录,发生了unmount,那么该当监视对象接收到unmount事件通知,之后受unmount影响的所有的监视对象都被删除。

● 监视事件类别中如果指定了IN_ONESHOT,那么事件通知只被送信一次。

● 事件通知的队列到达最大值时,会发生IN_OVERFLOW。

● close()函数执行之后,inotify的实例和相关的所有监视对象会被删除,队列中等待处理的事件会被删除。

launched launchctll 学习心得

因工作需要 macbook 需要配置nginx开机自动启动
步骤如下:
1. 编写对应的 属性文件






  Label
  com.example.processor
  OnDemand
  
  Program
  /Users/strike/bin/processor
  ProgramArguments
  
    processor
  

  WatchPaths
  
    /Users/strike/data/incoming
  





2. launchctl load < < 文件名 > >
3. 修改 nginx 配置文件 保证单独可启
4. launchctl start
< < 文件名 > >
5. top / htop 检查是否起来
6. web 测试

转:https://www6.software.ibm.com/developerworks/cn/education/aix/au-usingcron/index.html(需要注册账户)

ps: 经常忽略 ibm, 但ibm 资料库里的 好东西真是多多, 而且质量很高

2010年5月12日星期三

使用macbook感想

入手mac book三天了, 感觉太美妙了. 非常顺手, 之前有使用过一段时间的enlightenment. 那之后只要一接触windows都有种莫名的恐惧. 虽然后来由于某些原因继续windows 下的痛苦煎熬, 身体属于你 心属于它.
最近在做一个 erlang 的项目. 再也无法忍受在windows 下开发的无名业火. 尤其是
1. 调试代码的繁琐. 虽然有cygwin 的辅助, 但 liunx/unix下的一些趁手的工具都无法使用, 能用的也重重限制.
2. 代码和脚本既然兼容windows 又要兼容 linux.
3. emacs的开发很多工具都用不了, 主要原因也源于第一条
4. launch 还是没 quicksilver 爽(这条又凑数之嫌 纯马后炮)
5. windows 下的配套工具 不够专业 人性化差, 虽然又emacs/total commands 之流的工具配合 总体感觉还是差强人意

咳, 其实这么长时间对于windows 下的容忍 出于几方面的原因
1. 懒, 不愿意再搭个 englightenment 了
2. 换苹果 银子不凑手
3. 对于未知事物的恐惧,
4. 工作需要 rtx 等只能在windows下跑的应用程序

现在这些都抛在脑后了 还是又些解决手段的

刚刚看完 徐宥同学的 开发人员使用 Mac OS X 兼 OS X 小史 小小感慨一下

还在windows下的挣扎的同学 come on come on