5/12/2007

学习css

  1. float与clear
  2. float:leftrightnone;使对象浮动,到左边右边,直到它的外边缘碰到包含它的框的内边缘或另一个浮动框的边缘。 clear:noneleftrightboth;清除左右两边的浮动对象,即通过降低自己的位置来保证满足左右两边没有浮动对象。 这两个属性可以用来进行div布局。
  3. important
  4. margin,border&padding
  5. 四个数值按上右下左顺时针排列。
      width属性计算
    • IE:width=content+padding+border
    • Firefox:width=content
    margin融合 两个框的margin碰到一起会合并成较大的那个框
  6. display
  7. position
  8. 相对定位
    相对定位是相对于对象自身的初始位置。元素本身即使移动到了别处也要占据原来没有变化时的初始位置。相对定位的元素并没有脱离原Html流
    绝对定位
    绝对定位的元素已经脱离了普通流,不受普通流的影响,元素会被放到一个新层上。绝对定位的元素的位置相对于“最近”的“已定位”的祖先元素。如果元素没有已定位的祖先元素,那么它的位置相对于body。

5/11/2007

web学习

  1. 结构、表现、行为分离
    • 分离js 语法<script src="***.js" type="text/javascript"> </script>注意后面的</script>不能少,不能仅仅用/表示.路径可有相对和绝对两种,绝对路径注意带上协议http://,相对路径的目录是从网站的根目录算起,第一个子目录前可带/也可不带。如
      <script language="JavaScript" src="jscript/hide.js" > </script>
      <script language="JavaScript" src="http://localhost/jscript/hide.js" ></script>
    • 分离css
  2. xhtml
    • 标签和属性需要小写
    • 标签应封闭
    • 空标签应有关闭符' /'
    • 属性需用引号,不能简写
    • 标签需要正确嵌套
    • 使用id代替name
    • 使用xml:lang
    • 声明Doctype

5/10/2007

如何给软件分类

不知道有多少人面临我这种问题:面对硬盘里上百G的软件不知如何存放,没整理的时候各种文件难以识别,混乱不堪。想要整理的时候,如何给分类取合适的名字,建立较合理的目录结构又成了难题。

最早,我也是和国内的下载网站一样进行二级分类,特点就是每类尽量用四个字,显得比较整齐。这点可以参考华军,霏凡等网站。

比如下面就是一个例子。为了避免文章太长,删去了很多分类。

软件目录结构
├─图形图像
│  ├─图像处理
│  ├─图像捕捉
│  ├─图像浏览
│  ├─图像管理
│  └─图片压缩
├─媒体工具
│  ├─媒体管理
│  ├─网络音视
│  ├─视频处理
│  ├─音频处理
│  └─音频转换
├─安全相关
│  ├─密码管理
│  ├─木马防护
│  ├─病毒防治
│  └─网络安全
├─应用软件
│  ├─信息管理
│  ├─办公软件
│  ├─压缩解压
│  ├─数据恢复
│  ├─文件管理
│  ├─汉字输入
│  └─键盘鼠标
├─硬件工具
│  ├─主板驱动
│  ├─显卡驱动
│  ├─硬件工具
│  └─网卡驱动
├─系统程序
│  ├─优化设置
│  ├─升级补丁
│  ├─卸载清除
│  ├─系统检测
│  └─系统辅助
└─网络工具
    ├─下载工具
    ├─主页浏览
    ├─网络辅助
    ├─网页辅助
    ├─聊天联络
    └─邮件处理

后来我觉得只用四个字虽然整齐,但是限制了很多类别的表达,导致分类不合理,所以我现在采用英文站点的分类模式,使用英文目录。中文目录看着方便,但在使用命令行或者数据恢复的时候还是不如英文方便,关键时刻就能体会到这点了。

Software
├─[Developers]
├─[Disc Tools]
├─[File&Disk Management]
│  ├─[Backup]
│  ├─[Comparer]
│  ├─[Data Recovery]
│  ├─[Disk Management]
│  ├─[File Renamer]
│  ├─[Installer]
│  └─[Verifier]
├─[Graphics & Media]
│  ├─[Audio]
│  ├─[Codecs]
│  ├─[Editors]
│  ├─[Icons]
│  ├─[Image Comparer]
│  ├─[Image Viewer]
│  ├─[Screen Capture]
│  └─[Video]
├─[Hardware]
│  ├─[Driver Backup]
│  └─[Hardware Testing]
├─[Information Management]
│  ├─[Databases]
│  ├─[IM]
│  └─[KMS]
├─[Internet]
│  ├─[BBS]
│  ├─[Blog]
│  ├─[Browsers]
│  ├─[Chat]
│  ├─[Downloader]
│  ├─[E-Mail]
│  ├─[Feed Reader]
│  └─[Offline Explorer]
├─[Miscellaneous]
│  ├─[Calculators]
│  └─[Keyboard & Mouse]
├─[Network]
│  ├─[Network Application]
│  ├─[Network Management]
│  ├─[P2P]
│  ├─[Proxy]
│  └─[Servers]
├─[Office Application]
│  ├─[CHM]
│  ├─[Converter]
│  ├─[Input & Language]
│  ├─[Print]
│  ├─[Text Editor]
│  ├─[Viewer]
│  └─[Word Processing]
├─[Security]
│  ├─[Anti Spy]
│  ├─[Anti Virus]
│  ├─[Anti-ADWare]
│  ├─[Firewall]
│  └─[Password Recovery]
└─[Ulilities]
    ├─[Explorer]
    ├─[Optimize Utilities]
    ├─[Registry]
    ├─[Shell]
    ├─[System Utilities]
    └─[Virtual System]

如果把所有软件这样归类,其实已经够了。但是不同于下载网站,对个人来说,这种方法还有很多很多不方便的地方。我列举一下我的看法:

  1. 分类不能太细。有的软件模棱两可,用的时候自己都不知道在哪类了。用Gmail的话说就是Search, Don't Sort 。
  2. 自家硬盘比不上服务器,我是不能忍受一个2G以上的文件放在一个很深的目录里面。一般来说大型的软件都是专用的软件,所以我把他们单独归类。
  3. 正版和免费要分开。其实,我是想说盗版,不过知识产权日刚过,还是支持正版,支持免费!
  4. 常用软件和不常用的要分开。很多软件功能相同,但是我只会安装一种,尽量把自己觉得好的软件和不太好的软件分开。
  5. 一个软件作者的要放在一起。或者说,一个软件公司的要放在一起,因为它们有相同的风格。比如Adobe,O&O的软件我都以公司名字存放在一个目录里面。
  6. 软件要有注释。软件一多,有的时候光看名字也想不起来它是干什么的。我用TC的文件注释功能。
  7. 及时更新,不要重复。下载以后要先查毒并试用。
  8. 目录存放,版本分开。每个软件的每个版本我都会单开一个目录。

新blogger模板修改纪实

  1. 实现复杂文章格式

    1. 进入模板编辑的html页,将“扩展窗口小部件模板”勾上
    2. 在<b:includable id='post' var='post'>中的<div class='post-body'>部分将 <p><data:post.body/></p>中 <p>改成<div>,因为p里不能实现复杂的嵌套,如果文章中含有复杂的格式,会导致格式乱套。
  2. 增加文章样式表

    1. 加入代码样式
      .code{ 
      
      background-color:#eeeeee; 
      
      width:400px; 
      
      border-width:1px 1px 1px 1px; 
      
      border-color:#00ccee; 
      
      border-style:solid; 
      
      margin:20px,0px,20px,100px; 
      
      color:#cc6600;padding:10px; 
      
      } 
      
    2. 小标题样式
      .subtitle{ 
      
      font-weight:bold; 
      
      } 
      

  3. 文章部分显示

    blogger首页默认对于文章是全文显示的。一旦有长文章,阅读将非常不便。下面给出方案:

    1. 进入模板编辑的html页,将“扩展窗口小部件模板”勾上
    2. 在<b:includable id='post' var='post'>中的<div class='post-body'>部分将 <div><data:post.body/></div> 替换成 <b:if cond="data:blog.pageType!=item"> <div><data:post.body/></div> <a href="http://www.blogger.com/">阅读全文</a> </b:else> <div><data:post.body/></div> </b:if>
    3. 解释if语句使得只有主页的文章是部分显示的。pageType有3个选项,项目、归档和索引,主页属于索引性质,文章页属于项目性质。

  4. 文章分类

    暂用标签实现

5/04/2007

Firefox配置技巧

原文来自 Geek to Live: Top Firefox 2 config tweaks

browser.startup.page

推荐设置为 3。firefox 会恢复崩溃时的会话页面,但是正常关闭时,你可能也需要上次的那些会话页面。(此效果类似于opera默认的设置)

0 启动打开 about:blank 空页面
1 启动打开homepage 主页面
2 启动打开上次最后关闭时的页面
3 启动打开上次最后会话的那些页面

browser.tabs.tabMinWidth

设置 tab 出现横向翻滚按钮时的最小宽度。默认100,太宽了,推荐75。

browser.tabs.closeButtons

设置 tab 关闭按钮的样式。lifehacher 推荐3,我个人推荐0。

0 当前tab显示关闭按钮
1 所有tab显示关闭按钮
2 所有tab都不显示关闭按钮
3 在tab bar 的最右面显示关闭按钮(firefox 1.5 的那种效果)

network.prefetch-next

预加载功能。打开后,firefox 会预加载它认为你可能会打开的链接。推荐关闭。

Browser.cache.memory.capacity

或者叫 browser.cache.disk.capacity(我的portable firefox 2.0.3就是如此),页面加载之后是否缓存,加快前进后退时的显示速度(不再重新渲染页面)。默认为0。

512-1G 内存推荐 15000
128-512M 推荐 5000

-1 根据内存自动决定 图片和 chrome 的缓存空间。firefox 2.0 的规则如下

Physical RAM Memory Cache (in KB)
32 MB 2048
64 MB 4096
128 MB 6144
256 MB 10240
512 MB 14336
1 GB 18432
2 GB 24576
4 GB 30720
8 GB and up 32768

0 不缓存图片和 chrome

browser.chrome.toolbar_tips

false 关闭firefox 界面的提示信息。

browser.urlbar.hideGoButton

设置为 true,关掉地址栏最后面的三角 go 按钮。firefox 2.0 的这个go按钮不能象以前那样直接在 customize 中拖走!

layout.spellcheckDefault

layout.spellcheckDefault = 2 把 input 中的拼写检查也关掉。我推荐0,全部关掉,咱们又不是英语国家。

0 关掉所有拼写检查
1 关掉多行文本域(比如 textarea)拼写检查
2 关掉多行文本域和单行文本域的拼写检查

dom.max_script_run_time

设置 firefox java script脚本超时警告的时间限制。

via http://www.firefoxbar.com/Firefox-skill/Firefox-skill-1946.html

“Ctrl+Shift+T” 恢复刚刚关闭的标签

更多 firefox 设置技巧:
恢复 firefox 2.0 backspace 键页面后退功能
firefox 2.0 backspace 键页面后退功能没有了(成为 向上翻页 了)。只能使用 alt+右方向键。据说是为了解决一个bug(On Linux, backspace should be page up, not history back),要恢复的话在 about:config

过滤器 browser.backspace_action

值改为1即可。
设置 firefox 2.x 强制在 tab 而不是 新窗口打开

firefox 2.x 强制在 tab 而不是 新窗口打开
about:config,设置 browser.link.open_newwindow 为 3 即可。

only now tab show close buton
browser.tabs.closeButtons -> 0

always show tabs
browser.tabs.autoHide false

5/02/2007

打造便携式用户配置

发信人: edyfox (滇狐), 信区: LinuxApp
标 题: 打造便携式用户配置
发信站: 水木社区 (Mon Apr 30 10:27:58 2007), 站内

#TITLE: 打造便携式用户配置

如果你有多台不同的机器的话,你也许希望能在不同的机器上都使用同样的用户配置,例如窗口样式、Firefox 扩展、应用程序偏好设置等。虽然在 Linux 所有用户配置都在 ''$HOME'' 目录下,只要完整同步 ''$HOME'' 目录,就能把所有用户配置同步到另一台机器上,但完整同步整个 ''$HOME'' 目录却不是每个人都能负担的开销,也不是所有人都愿意像滇狐这样把 ''$HOME'' 放在移动硬盘里面随身携带。因此,我们需要打造一套便携式的用户配置文件,让我们在不同机器之间迁移时更加方便灵活。

注意:
本文按照思考问题的思路顺序来介绍打造方法,因此接下来的部分中会提到许多半成品脚本,在其后的章节里可能会多次修改这些脚本。因此在你确认这些脚本是最终版本之前,没有必要把脚本抄到你自己的系统中试验。

* 收集需要同步的配置文件

要想在不同机器中使用同样的配置,首先能够想到的就是同步我们家目录下点开头的文件和文件夹。但是,这些点开头的文件和文件夹并不是都需要被同步的,例如除非你是专业美术设计人员,否则你肯定不会愿意同步 ''~/.gimp*'' 文件夹。另外,同步 Firefox 本地缓存、KDE 图标预览缓存等,也都是很让人不愉快的经历。因此,我们需要将需要同步的内容和不需要同步的内容区分开来。实现这点很容易,因为 Linux 支持符号链接!我们只需要建立一个文件夹,然后将需同步的内容都移动到这个文件夹下,然后在原始位置创建指向这些移动后的文件的符号链接就可以了。

于是,滇狐创建了 ''~/config'',然后准备在这个文件夹下存放需要同步的配置文件。为了在 Konqueror 下编辑配置文件更加方便,滇狐把 ''~/.filename'' 移动到 ''~/config'' 下后,顺便改名为 ''dot.filename'',这样,该文件就不再是隐藏文件了,可以在 Konqueror 下直接双击打开。为了让配置文件的收集更加便利,滇狐创建了以下脚本:

#Code syntax="sh" <<
---
#!/bin/sh
# Filename: gather.sh
if (test $# = 0) then
echo Usage: gather.sh filename
else
for file in "$@"
do
if [ ! -e "dot`basename $file`" ];
then cp -rfa "$file" "dot`basename $file`"
fi
done
fi

---

打开 Konsole,切换到 ''~/config'' 目录,然后运行 ''./gather.sh ~/.vimrc'',就可以把 ''~/.vimrc'' 复制到 ''~/config'' 中,并改名为 ''dot.vimrc''。滇狐使用这样的方法收集了以下文件:
#Code syntax="txt" <<
---
dot.bash_logout dot.bash_profile dot.bashrc dot.deplate dot.dir_colors dot.fonts.conf dot.gaim dot.gconf dot.gconfd dot.google dot.gtkrc dot.gtkrc-2.0 dot.gtkrc-2.0-kde dot.gtkrc.mine dot.kde dot.kderc dot.lftprc dot.mozilla dot.mutt_alias dot.muttrc dot.pyinput dot.qt dot.scim dot.screenrc dot.themes dot.vim dot.vimrc dot.xinput.d dot.Xresources dot.Xsession

---

收集了需要同步的文件后,当我们把 ''~/config'' 文件夹整个复制到另外一台机器上后,需要把 ''$HOME'' 底下的那些文件或文件夹删了,改为指向 ''~/config'' 中的相应文件或文件夹的符号链接。我们再创建一个简单的脚本来做这件事情:
#Code syntax="sh" <<
---
#!/bin/sh
# Filename: settings.sh
for file in dot.*
do
filename=${file/dot/}
if [ -e ~/$filename ];
then
if [ ! -L ~/$filename ];
then
echo Trying to remove ~/$filename...
rm -rf ~/$filename
echo Linking $file to ~/$filename...
ln -s `pwd`/$file ~/$filename
fi
else
echo Linking $file to ~/$filename...
ln -s `pwd`/$file ~/$filename
fi
done
---
* 减少同步内容
现在我们已经拥有一个简单的、可在不同机器间同步的配置文件包了,但是,在这些配置文件包中,还是存在许多不需要被同步的内容,例如 Firefox 本地缓存等。解决这个问题很简单,还是使用同样的思路,将这些不需要同步的内容再创建一次符号链接,指到 ''~/config'' 之外就行了。 ** Gaim 滇狐不是那种特别热衷于收集聊天记录的人,因此滇狐理所当然地将 Gaim 中的聊天记录、MSN 图标、QQ Show等信息挪到同步目录之外。因此,滇狐在 ''~/config/dot.gaim'' 中创建了以下符号链接:
#Code syntax="txt" <<
---
icons -> ~/document/gaim/icons
logs -> ~/document/gaim/logs
qqshow -> ~/document/gaim/qqshow
smileys -> ~/document/gaim/smileys
---
为了方便在新的环境中创建这几个文件夹,滇狐写了这个简单的脚本,存为 ''~/config/dot.gaim/settings.sh'':
#Code syntax="sh" <<
---
#!/bin/sh
mkdir -p ~/document/gaim/icons
mkdir -p ~/document/gaim/logs
mkdir -p ~/document/gaim/qqshow
mkdir -p ~/document/gaim/smileys
---

** KDE
KDE 的配置文件非常乖,一般守规矩的程序都会把用户偏好设置存放到''.kde/share/config'' 下,把用户使用中生成的数据存放到''.kde/share/apps'' 下,这给我们排除不需要同步的数据提供了极大便利,因为就滇狐个人而言,很希望能方便地同步偏好设置,但不大希望同步使用中生成的数据,因此我们直接把 ''~/config/dot.kde/share/apps'' 移动到 ''~/tmp'' 下,然后原地创建一个符号链接即可。 和前面类似,我们依然创建一个 ''~/config/dot.kde/settings.sh'',方便在新的环境中创建所需的文件夹:
#Code syntax="sh" <<
---
#!/bin/sh mkdir -p ~/tmp/apps
---

** Firefox
和 KDE 的乖比起来,Firefox 那可是相当不乖。看一下它的配置文件所在的目录'' ~/config/dot.mozilla/firefox/edward.default''(在你机器上一定不是这样的路径,根据你的实际情况修改),里面需要同步的文件和不需要同步的文件犬牙交错,分离起来很困难。经过一番搜索,滇狐决定把这些文件或文件夹挪到 ''~/tmp/mozilla'' 中:
#Code syntax="txt" <<
---
bookmarkbackups Cache Cache.Trash history.dat urlclassifier2.sqlite ---
Firefox 对 ''history.dat'' 的格式检测非常严格,如果 ''history.dat'' 的格式不能满足它的要求,它会把 ''history.dat'' 整个删掉然后重新创建一个。这就意味着,即使我们为 ''history.dat'' 创建了符号链接并且把它指到''~/tmp/mozilla'' 下,如果 ''~/tmp/mozilla'' 下没有一个格式完全合法的 ''history.dat'' 的话,Firefox 会删除符号链接并创建一个非符号链接的 ''history.dat'',这样我们下次向另一台机器同步的时候,''history.dat'' 也就不得不参与同步了。为了解决这个问题,滇狐采取了这样的方法: # 关闭 Firefox; # 删除 ''history.dat''; # 打开 Firefox,此时会自动创建一个没有任何条目的 ''history.dat'',大概 376 字节; # 将 ''history.dat'' 复制到 ''~/config/dot.mozilla'' 下备用; # 到一台新机器架设工作环境时,先将''~/config/dot.mozilla/history.dat'' 复制到 ''~/tmp/mozilla'' 下,这样可以保证 Firefox 配置文件夹下的那个 ''history.dat'' 符号链接指向的文件有合法的格式。 相比之下,urlclassifier2.sqlite 文件可就乖得多了,即使目标文件格式不合法,它也只会重写目标文件,而不会删除符号链接重建,因此我们只需要简单地在 ''~/tmp/mozilla'' 下创建一个空文件给它链接就好。 另外还有两个最可恶的文件 ''XPC.mfasl'' 和 ''XUL.mfasl'',它们都不是滇狐心目中的需要被同步的内容,却不但体积庞大,而且会不定期删除重建,使滇狐完全无法使用符号链接机制把它们从需同步内容中剥离出来,只好忍了。实在不行每次同步之前把它们两个都删一遍就好。 除了 Firefox 外,古老的 Mozilla 也把配置文件放在 ''~/.mozilla/default'' 中。滇狐没有兴趣同步 Mozilla 的配置文件,所以把 ''~/.mozilla/default'' 整个指到 ''~/tmp/mozilla/default'' 就好。 为了自动实现上面说的一系列创建文件夹、复制 ''history.dat'' 等内容,我们编写一个简单的脚本存放到 ''~/config/dot.mozilla/settings.sh'' 中。 #Code syntax="sh" <<
---
#!/bin/sh
mkdir -p ~/tmp/mozilla/default
mkdir -p ~/tmp/mozilla/Cache
mkdir -p ~/tmp/mozilla/Cache.Trash
mkdir -p ~/tmp/mozilla/bookmarkbackups
touch ~/tmp/mozilla/urlclassifier2.sqlite
cp history.dat ~/tmp/mozilla/history.dat
---
** Vim
和前面那些大批由程序自动生成的配置文件相比,Vim 的配置处理起来可容易多了,因为所有的配置文件都是用户自己编写或下载的,用户对于自己需要同步的文件非常清楚。 根据个人习惯,滇狐喜欢在 ''~/.vim/plugin'' 下存放一些在 Vim 中常用的脚本或二进制应用程序,到了一台新的机器时,把这些程序直接 ''ln -s'' 到 ''~/bin'' 中就可直接使用。和前面类似,滇狐在这里也提供了一个 ''settings.sh'': #Code syntax="sh" <<
---
#!/bin/sh
mkdir -p ~/bin
ln -f -s ~/.vim/plugin/clewn ~/bin/clewn
ln -f -s ~/.vim/plugin/gvim-latex ~/bin/gvim-latex
ln -f -s ~/.vim/plugin/omnictags ~/bin/omnictags
ln -f -s ~/.vim/plugin/start.kde ~/bin/start
---
其中 clewn 下载自 http://clewn.sourceforge.net,其余几个很简单的脚本内容如下: #Code syntax="sh" <<
---
#!/bin/sh
# Filename: gvim-latex
if [ $# -lt 1 ];
then
echo Usage: gvim-latex filename
else
for i in "$@"
do gvim --servername latex-suite --remote-silent "$i"
done
fi
---
#Code syntax="sh" <<
--- #!/bin/sh # Filename: omnictags ctags --c++-kinds=+p --fields=+iaS --extra=+q "$@"
---
#Code syntax="sh" <<
---
#!/bin/sh
# Filename: start.kde
if (test $# = 0)
then
echo Usage: start filename
else while (test $# -gt 0)
do kfmclient exec "$1" shift
done
fi
---
* 增加同步内容
在许多情况下,我们会发现,在一个配置文件目录中,大部分内容我们不希望同步,但有少部分内容我们希望把它同步起来。此时使用前面的“收集整个配置文件目录”后再“减少无须同步的内容”来进行处理的话显得非常繁琐,因此我们改用另一种思路,就是整个目录不移入 ''~/config'',将需同步的内容放入 ''~/config'' 后再在外面创建符号链接指到''~/config'' 中去。 ** applications 在 KDE 中, ''~/.local/share/applications'' 里存放了我们自定义的开始菜单图标、文件打开方式等信息,以一系列 ''.desktop'' 文件的形式存放。但 ''~/.local'' 中却有大量别的我们不希望同步的内容,如回收站等。因此滇狐决定,将 ''~/.local/share/applications/*.desktop'' 收集到 ''~/config/applications''下,然后在原始位置创建符号链接指过来。 为了方便在新的机器上创建符号链接,我们编写一个这样的脚本:
#Code syntax="sh" <<
---
#!/bin/sh
# Filename: settings.sh
mkdir -p ~/.local/share/applications
for file in *.desktop
do
ln -sf `pwd`/$file \ ~/.local/share/applications/$file
done
---
** bin
也许你日常工作中会编写一些常用的小脚本,希望在不同机器中都可以使用。这样的话不妨把你编写的脚本都放到 ''~/config/bin'' 中,然后在 ''~/config/bin'' 中创建一个这样的脚本 ''settings.sh'':
#Code syntax="sh" <<
---
#!/bin/sh
mkdir -p ~/bin for file in *
do
if [ "$file" != settings.sh ];
then
ln -fs `pwd`/"$file" ~/bin/"$file"
fi
done
---
** face KDE
和 GNOME 都允许定义用户自定义头像,但 KDE 是 ''~/.face.icon'',GNOME 是 ''~/.face''。没关系,反正我可以使用硬链接把它们都链接到同一个文件上。在 ''~/config/face'' 中创建一张 png 图片作为头像,命名为 ''face.png'',然后创建一个脚本,名叫 ''settings.sh'':
#Code syntax="sh" <<
---
#!/bin/sh
ln face.png ~/.face
ln face.png ~/.face.icon
chmod 644 ~/.face
chmod 644 ~/.face.icon
---
** QTerm QTerm
文件夹下有大量不需要同步的内容,如图片浏览时留下的 Cache 等等。需要同步的只有两个文件:''address.cfg''——QTerm 地址簿;''qterm.cfg''——用户偏好设置。将这两个文件收集到 ''~/config/qterm'' 中,然后创建一个脚本 ''settings.sh'',内容如下:
#Code syntax="sh" <<
---
#!/bin/sh
mkdir -p ~/.qterm
ln -s ~/config/qterm/address.cfg ~/.qterm
ln -s ~/config/qterm/qterm.cfg ~/.qterm
if [ -f /usr/local/LumaQQ/QQWry.dat ];
then ln -s /usr/local/LumaQQ/QQWry.dat ~/.qterm
fi
---
* 一些额外设置
除了收集配置文件外,我们顺便再使用这一机制实现一些额外功能,简化在一个新的环境中初始化工作环境的工作。
** 创建常用工作文件夹
在 ''~/config'' 中创建 ''directories'' 文件夹,里面放一个 ''settings.sh'',内容如下:
#Code syntax="sh" <<
---
#!/bin/sh
mkdir -p ~/workspace mkdir -p ~/public_html
---
** Mail
在 ''~/config'' 中创建 ''mail'' 文件夹,里面放一个 ''settings.sh'',内容如下:
#Code syntax="sh" <<
---
#!/bin/sh
mkdir -p ~/Mail touch ~/Mail/mailbox
touch ~/Mail/postponed
ln -s /var/spool/mail/`whoami` ~/Mail/spool

---

** 自动运行各个 settings.sh
打开我们之前创建的 ''~/config/settings.sh'',在尾部添加以下语句: #Code syntax="sh" <<
---
...
for file in *
do
if [ -d $file ];
then pushd $file > /dev/null
if [ -f settings.sh ];
then echo Launching $file/settings.sh
./settings.sh
fi
popd > /dev/null
fi
done

---

这样我们只要运行这个 ''./settings.sh'',它就会自动把所有其它目录中的 ''settings.sh'' 都运行一遍了。

* 同步脚本

为了更方便地与其它机器同步,滇狐提供了以下两个脚本:

#Code syntax="sh" <<
---
#!/bin/sh
# Filename: upload.sh

if (test $# = 0) then
echo Usage: $0 host
else
rsync -az -e ssh --delete "/home/edward/config" \
$1:"/home/edward/"
fi
---

#Code syntax="sh" <<
---
#!/bin/sh
# Filename: download.sh

if (test $# = 0) then
echo Usage: $0 host
else
rsync -az -e ssh --delete $1:"/home/edward/config" \
"/home/edward/"
fi
---


附:关于git
git 支持好多协议的,还能把某一个范围的版本打包成一个单独文件(git bundle),
这样不需要在 repos 端开服务器,方便用 u 盘带着跑。

大致流程是这样:
cd
git init
git status
看输出需要什么就 git add 什么,可以编辑 ~/.gitignore 忽略某些文件。
git commit -m "some log"
git gc
这一步把分散在 .git/objects 下的 loose objects 打包成 .git/objects/pack下的 pack 文件,对于配置文件,这个 pack 很小的,可以直接拿 u 盘拷贝.git 带走,不需要 git bundle 了。
git branch hostA
这样创建一个分支给 hostA 用,在这个 .git 里头就包含了你要使用的所有机器上的自定义配置,互相之间还能 merge.
有版本管理最大的好处是可以看 diff 和 log,这样改错了能方便的恢复回去。

5/01/2007

一篇非常好的linux学习笔记分享 (Linux入门绝佳)

一篇非常好的linux学习笔记分享 (Linux入门绝佳)
linux目录架构
/ 根目录
/bin 常用的命令 binary file 的目錄
/boot 存放系统启动时必须读取的档案,包括核心 (kernel) 在内
/boot/grub/menu.lst GRUB设置
/boot/vmlinuz 内核
/boot/initrd 核心解壓縮所需 RAM Disk
/dev 系统周边设备
/etc 系统相关设定文件
/etc/DIR_COLORS 设定颜色
/etc/HOSTNAME 设定用户的节点名
/etc/NETWORKING 只有YES标明网络存在
/etc/host.conf 文件说明用户的系统如何查询节点名
/etc/hosts 设定用户自已的IP与名字的对应表
/etc/hosts.allow 设置允许使用inetd的机器使用
/etc/hosts.deny 设置不允许使用inetd的机器使用
/etc/hosts.equiv 设置远端机不用密码
/etc/inetd.conf 设定系统网络守护进程inetd的配置
/etc/gateways 设定路由器
/etc/protocols 设定系统支持的协议
/etc/named.boot 设定本机为名字服务器的配置文件
/etc/sysconfig/network-scripts/ifcfg-eth0 设置IP
/etc/resolv.conf 设置DNS
/etc/X11 X Window的配置文件,xorg.conf 或 XF86Config 這兩個 X Server 的設定檔
/etc/fstab 记录开机要mount的文件系统
/etc/inittab 设定系统启动时init进程将把系统设置成什么样的runlevel
/etc/issue 记录用户登录前显示的信息
/etc/group 设定用户的组名与相关信息
/etc/passwd 帐号信息
/etc/shadow 密码信息
/etc/sudoers 可以sudo命令的配置文件
/etc/securetty 设定哪些终端可以让root登录
/etc/login.defs 所有用户登录时的缺省配置
/etc/exports 设定NFS系统用的
/etc/init.d/ 所有服務的預設啟動 script 都是放在這裡的,例如要啟動或者關閉
/etc/xinetd.d/ 這就是所謂的 super daemon 管理的各項服務的設定檔目錄
/etc/modprobe.conf 内核模块额外参数设定
/etc/syslog.conf 日志设置文件
/home 使用者家目录
/lib 系统会使用到的函数库
/lib/modules kernel 的相关模块
/var/lib/rpm rpm套件安装处
/lost+found 系統不正常產生錯誤時,會將一些遺失的片段放置於此目錄下
/mnt 外设的挂载点
/media 与/mnt类似
/opt 主机额外安装的软件
/proc 虚拟目录,是内存的映射
/proc/version 内核版本
/proc/sys/kernel 系统内核功能
/root 系统管理员的家目录
/sbin 系统管理员才能执行的指令
/srv 一些服務啟動之後,這些服務所需要取用的資料目錄
/tmp 一般使用者或者是正在執行的程序暫時放置檔案的地方
/usr 最大的目录,存许应用程序和文件
/usr/X11R6: X-Window目录
/usr/src: Linux源代码
/usr/include:系统头文件
/usr/openwin 存放SUN的OpenWin
/usr/man 在线使用手册
/usr/bin 使用者可執行的 binary file 的目錄
/usr/local/bin 使用者可執行的 binary file 的目錄
/usr/lib 系统会使用到的函数库
/usr/local/lib 系统会使用到的函数库
/usr/sbin 系统管理员才能执行的指令
/usr/local/sbin 系统管理员才能执行的指令
/var 日志文件
/var/log/secure 記錄登入系統存取資料的檔案,例如 pop3, ssh, telnet, ftp 等都會記錄在此檔案中
/var/log/wtmp 記錄登入者的訊息資料, last
/var/log/messages 幾乎系統發生的錯誤訊息
/var/log/boot.log 記錄開機或者是一些服務啟動的時候,所顯示的啟動或關閉訊息
/var/log/maillog 紀錄郵件存取或往來( sendmail 與 pop3 )的使用者記錄
/var/log/cron 記錄 crontab 這個例行性服務的內容
/var/log/httpd, /var/log/news, /var/log/mysqld.log, /var/log/samba, /var/log/procmail.log:
分別是幾個不同的網路服務的記錄檔
一些常用的基本命令:
uname -a 查看内核版本
ls -al 显示所有文件的属性
pwd 显示当前路径
cd - 返回上一次目录 cd ~ 返回主目录
date s 设置时间、日期
cal 显示日历 cal 2006
bc 计算器具
man & info 帮助手册
locale 显示当前字体 locale -a 所有可用字体 /etc/sysconfig/i18n设置文件
LANG=en 使用英文字体
sync 将数据同步写入硬盘
shutdonw -h now & half & poweroff 关机
reboot 重启
startx & init 5 进入图形介面
/work & ?work 向上、下查找文档内容
chgrp 改变档案群组 chgrp testing install.log
chown 改变所属人 chown root:root install.log
chmod 改变属性 chmod 777 install.log read=4 write=2 execute=1
cp 复制 cp filename
rm 删除文件 rm -rf filename 强制删除文件
rmdir 删除文件夹
mv 移动 mv 123.txt 222.txt 重命名
mkdir 创建文件夹
touch 创建文件 更新当前时间
cat 由第一行开始显示 cat more 分页
nl 在内容前加行号
more & less 一面一面翻动
head -n filename 显示第N行内容
tail -n filename 显示后N行内容
od 显示非纯文档
df -h 显示分区空间
du 显示目录或文件的大小
fdisk 分区设置 fdisk -l /dev/hda 显示硬盘分区状态
mkfs 建立各种文件系统 mkfs -t ext3 /dev/ram15
fsck 检查和修复LINUX档案
ln 硬链接 ln -s 软件链接
whereis 查找命令
locate 查找
find 查找 find / -name "***.***"
which 查看工具
whoami 显示当前用户
gcc -v 查看GCC版本
chattr +i filename 禁止删除 chattr -i filename 取消禁止
lsattr 显示隐藏档属性
updatedb 更新资料库
mke2fs 格式化 mkfs -t ext3
dd if=/etc/passwd of=/tmp/passwd.bak 备份
mount 列出系统所有的分区
mount -t iso9660 /dev/cdrom /mnt/cdrom 挂载光盘
mount -t vfat /dev/fd0 /mnt/floppy 挂载软盘
mount -t vfat -o iocharset=utf8,umask=000 /dev/hda2 /mnt/hda2 挂载fat32分区
mount -t ntfs -o nls=utf8,umask=000 /dev/hda3 /mnt/hda3 挂载ntfs分区
Linux-NTFS Project: http://linux-ntfs.sourceforge.net/
umount /mnt/hda3 缷载
ifconfig 显示或设置网络设备
service network restart 重启网卡
ifdown eth0 关闭网卡
ifup eth0 开启网卡
clear 清屏
history 历史记录 !55 执行第55个指令
stty 设置终端 stty -a
fdisk /mbr 删除GRUB
at 僅進行一次的工作排程
crontab 循環執行的例行性命令 [e]编辑,[l]显示,[r]删除任务
& 后台运行程序 tar -zxvf 123.tar.gz & --------->后台运行
jobs 观看后台暂停的程序 jobs -l
fg 将后台程序调到前台 fg n ------>n是数字,可以指定进行那个程序
bg 让工作在后台运行
kill 结束进程 kill -9 PID [9]强制结束,[15]正常结束,[l]列出可用的kill信号
ps aux 查看后台程序
top 查看后台程序 top -d 2 每两秒更新一次 top -d 2 -p10604 观看某个PID
top -b -n 2 > /tmp/top.txt ----->將 top 的資訊進行 2 次,然後將結果輸出到 /tmp/top.txt
pstree 以树状图显示程序 [A]以 ASCII 來連接, [u]列出PID, [p]列出帐号
killall 要刪除某個服務 killall -9 httpd
free 显示内存状态 free -m -------->以M为单位显示
uptime 显示目前系统开机时间
netstat 显示网络状态 netstat -tulnp------>找出目前系統上已在監聽的網路連線及其 PID
dmesg 显示开机信息 demsg more
nice 设置优先权 nice -n -5 vi & ----->用 root 給一個 nice 植為 -5 ,用於執行 vi
renice 调整已存在优先权
runlevel 显示目前的runlevel
depmod 分析可载入模块的相依性
lsmod 显示已载入系统的模块
modinfo 显示kernel模块的信息
insmod 载入模块
modprobe 自动处理可载入模块
rmmod 删除模块
chkconfig 检查,设置系统的各种服务 chkconfig --list ----->列出各项服务状态
ntsysv 设置系统的各种服务
cpio 备份文件


压缩命令:
*.Z compress 程式壓縮的檔案;
*.bz2 bzip2 程式壓縮的檔案;
*.gz gzip 程式壓縮的檔案;
*.tar tar 程式打包的資料,並沒有壓縮過;
*.tar.gz tar 程式打包的檔案,其中並且經過 gzip 的壓縮
compress filename 压缩文件 加[-d]解压 uncompress
gzip filename 压缩 加[-d]解压 zcat 123.gz 查看压缩文件内容
bzip2 -z filename 压缩 加[-d]解压 bzcat filename.bz2 查看压缩文件内容
tar -cvf /home/123.tar /etc 打包,不压缩
tar -xvf 123.tar 解开包
tar -zxvf /home/123.tar.gz 以gzip解压
tar -jxvf /home/123.tar.bz2 以bzip2解压
tar -ztvf /tmp/etc.tar.gz 查看tar内容
cpio -covB > [filedevice] 份份
cpio -icduv < [filedevice] 还原
vi一般用法
一般模式 编辑模式 指令模式 h 左 a,i,r,o,A,I,R,O :w 保存 j 下 进入编辑模式 :w! 强制保存 k 上 dd 删除光标当前行 :q! 不保存离开 l 右 ndd 删除n行 :wq! 保存后离开 0 移动到行首 yy 复制当前行 :e! 还原原始档 $ 移动到行尾 nyy 复制n行 :w filename 另存为 H 屏幕最上 p,P 粘贴 :set nu 设置行号 M 屏幕中央 u 撤消 :set nonu 取消行号 L 屏幕最下 [Ctrl]+r 重做上一个动作 ZZ 保存离开 G 档案最后一行 [ctrl]+z 暂停退出 :set nohlsearch 永久地关闭高亮显示 /work 向下搜索 :sp 同时打开两个文档 ?work 向上搜索 [Ctrl]+w 两个文档设换 gg 移动到档案第一行 :nohlsearch 暂时关闭高亮显示 认识SHELL alias 显示当前所有的命令别名 alias lm="ls -al" 命令别名 unalias lm 取消命令别名 type 类似which exprot 设置或显示环境变量 exprot PATH="$PATH":/sbin 添加/sbin入PATH路径 echo $PATH 显示PATH路径 bash 进入子程序 name=yang 设定变量 unset name 取消变量 echo $name 显示变量的内容 myname="$name its me" & myname='$name its me' 单引号时$name失去变量内容 ciw=/etc/sysconfig/network-scripts/ 设置路径 env 列出所有环境变量 echo $RANDOM 显示随意产生的数 set 设置SHELL PS1='[\u@\h \w \A #\#]\$ ' 提示字元的設定 [root@linux ~]# read [-pt] variable -----------读取键盘输入的变量 參數: -p :後面可以接提示字元! -t :後面可以接等待的『秒數!』 declare 声明 shell 变量 ulimit -a 显示所有限制资料 ls /tmp/yang && echo "exist" echo "not exist" 意思是說,當 ls /tmp/yang 執行後,若正確,就執行echo "exist" ,若有問題,就執行echo "not exist" echo $PATH cut -d ':' -f 5 以:为分隔符,读取第5段内容 export cut -c 10-20 读取第10到20个字节的内容 last grep 'root' 搜索有root的一行,加[-v]反向搜索 cat /etc/passwd sort 排序显示 cat /etc/passwd wc 显示『行、字数、字节数』 正规表示法 [root@test root]# grep [-acinv] '搜尋字串' filename 參數說明: -a :將 binary 檔案以 text 檔案的方式搜尋資料 -c :計算找到 '搜尋字串' 的次數 -i :忽略大小寫的不同,所以大小寫視為相同 -n :順便輸出行號 -v :反向選擇,亦即顯示出沒有 '搜尋字串' 內容的那一行! grep -n 'the' 123.txt 搜索the字符 -----------搜尋特定字串 grep -n 't[ea]st' 123.txt 搜索test或taste两个字符---------利用 [] 來搜尋集合字元 grep -n '[^g]oo' 123.txt 搜索前面不为g的oo-----------向選擇 [^] grep -n '[0-9]' 123.txt 搜索有0-9的数字 grep -n '^the' 123.txt 搜索以the为行首-----------行首搜索^ grep -n '^[^a-zA-Z]' 123.txt 搜索不以英文字母开头 grep -n '[a-z]$' 123.txt 搜索以a-z结尾的行---------- 行尾搜索$ grep -n 'g..d' 123.txt 搜索开头g结尾d字符----------任意一個字元 . grep -n 'ooo*' 123.txt 搜索至少有两个oo的字符---------重複字元 * sed 文本流编辑器 利用脚本命令来处理文本文件 awd 模式扫描和处理语言 nl 123.txt sed '2,5d' 删除第二到第五行的内容 diff 比较文件的差异 cmp 比较两个文件是否有差异 patch 修补文件 pr 要打印的文件格式化 帐号管理 /etc/passwd 系统帐号信息 /etc/shadow 帐号密码信息 经MD5 32位加密 在密码栏前面加『 * 』『 ! 』禁止使用某帐号 /etc/group 系统群组信息 /etc/gshadow newgrp 改变登陆组 useradd & adduser 建立新用户 ---------> useradd -m test 自动建立用户的登入目录
useradd -m -g pgroup test --------->指定所属级
/etc/default/useradd 相关设定
/etc/login.defs UID/GID 有關的設定
passwd 更改密码 -----------> passwd test
usermod 修改用户帐号
userdel 删除帐号 ----------->userdel -r test
chsh 更换登陆系统时使用的SHELL [-l]显示可用的SHELL;[-s]修改自己的SHELL
chfn 改变finger指令显示的信息
finger 查找并显示用户信息
id 显示用户的ID -----------> id test
groupadd 添加组
groupmod 与usermod类似
groupdel 删除组
su test 更改用户 su - 进入root,且使用root的环境变量
sudo 以其他身份来执行指令
visudo 编辑/etc/sudoers 加入一行『 test ALL=(ALL) ALL 』
%wheel ALL = (ALL) ALL 系统里所有wheel群组的用户都可用sudo
%wheel ALL = (ALL) NOPASSWD: ALL wheel群组所有用户都不用密码NOPASSWD
User_Alias ADMPW = vbird, dmtsai, vbird1, vbird3 加入ADMPW组
ADMPW ALL = NOPASSWD: !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, \
!/usr/bin/passwd root 可以更改使用者密码,但不能更改root密码 (在指令前面加入 ! 代表不可)
PAM (Pluggable Authentication Modules, 嵌入式模組)
who & w 看谁在线
last 最近登陆主机的信息
lastlog 最近登入的時間 读取 /var/log/lastlog
talk 与其他用户交谈
write 发送信息 write test [ctrl]+d 发送
mesg 设置终端机的写入权限 mesg n 禁止接收 mesg y
wall 向所有用户发送信息 wall this is q test
mail 写mail
/etc/default/useradd 家目录默认设置
quota 显示磁盘已使用的空间与限制 quota -guvs ----->秀出目前 root 自己的 quota 限制值
quota -vu 查询
quotacheck 检查磁盘的使用空间与限制 quotacheck -avug ----->將所有的在 /etc/mtab 內,含有 quota 支援的 partition 進行掃瞄
[-m] 强制扫描
quota一定要是独立的分区,要有quota.user和quota.group两件文件,在/etc/fstab添加一句:
/dev/hda3 /home ext3 defaults,usrquota,grpquota 1 2
chmod 600 quota* 设置完成,重启生效
edquota 编辑用户或群组的quota [u]用户,[g]群组,[p]复制,[t]设置宽限期限
edquota -a yang edquota -p yang -u young ----->复制
quotaon 开启磁盘空间限制 quotaon -auvg -------->啟動所有的具有 quota 的 filesystem
quotaoff 关闭磁盘空间限制 quotaoff -a -------->關閉了 quota 的限制
repquota -av 查閱系統內所有的具有 quota 的 filesystem 的限值狀態
Quota 從開始準備 filesystem 的支援到整個設定結束的主要的步驟大概是:
1、設定 partition 的 filesystem 支援 quota 參數:
由於 quota 必須要讓 partition 上面的 filesystem 支援才行,一般來說, 支援度最好的是 ext2/ext3 ,
其他的 filesystem 類型鳥哥我是沒有試過啦! 啟動 filesystem 支援 quota 最簡單就是編輯 /etc/fstab ,
使得準備要開放的 quota 磁碟可以支援 quota 囉;
2、建立 quota 記錄檔:
剛剛前面講過,整個 quota 進行磁碟限制值記錄的檔案是 aquota.user/aquota.group,
要建立這兩個檔案就必須要先利用 quotacheck 掃瞄才行喔!
3、編輯 quota 限制值資料:
再來就是使用 edquota 來編輯每個使用者或群組的可使用空間囉;
4、重新掃瞄與啟動 quota :
設定好 quota 之後,建議可以再進行一次 quotacheck ,然後再以 quotaon 來啟動吧!

开机流程简介
1、載入 BIOS 的硬體資訊,並取得第一個開機裝置的代號;
2、讀取第一個開機裝置的 MBR 的 boot Loader (亦即是 lilo, grub, spfdisk 等等) 的開機資訊;
3、載入 Kernel 作業系統核心資訊, Kernel 開始解壓縮,並且嘗試驅動所有硬體裝置;
4、Kernel 執行 init 程式並取得 run-level 資訊;
5、init 執行 /etc/rc.d/rc.sysinit 檔案;
6、啟動核心的外掛模組 (/etc/modprobe.conf);
7、init 執行 run-level 的各個批次檔( Scripts );
8、init 執行 /etc/rc.d/rc.local 檔案;
9、執行 /bin/login 程式,並等待使用者登入;
10、登入之後開始以 Shell 控管主機。
在/etc/rc.d/rc3.d內,以S开头的为开机启动,以K开头的为关闭,接着的数字代表执行顺序
GRUB vga设定
彩度\解析度 640x480 800x600 1024x768 1280x1024 bit
256 769 771 773 775 8 bit
32768 784 787 790 793 15 bit
65536 785 788 791 794 16 bit
16.8M 786 789 792 795 32 bit

./configure 检查系统信息 ./configure --help more 帮助信息
make clean 清除之前留下的文件
make 编译
make install 安装
rpm -q ----->查询是否安装 rpm -ql ------>查询该套件所有的目录
rpm -qi ----->查询套件的说明资料 rpm -qc[d] ----->设定档与说明档
rpm -ivh ---->安装 rpm -V -------->查看套件有否更动过
rpm -e ------>删除 rpm -Uvh ------->升级安装
--nodeps ----->强行安装 --test ----->测试安装