Archive for ‘Unix/Linux’ Category

August 8, 2010

chmod命令介绍

  下面介绍如何使用chmod命令来设定和修改文件的权限位。
  首先,chmod命令本身的执行也有限制,普通用户只能修改自己的文件的权限位,超级用户可以使用chmod修改任意用户任意文件的权限。使用chmod的方法为chmod [option] mode file. 常用的选项就是-R,用来对整个目录及其子目录中的文件进行模式(权限)修改。mode可以由两种方式指定,一种是由字母表达式表示的相对修改方式,一种是以4位8进制表示的绝对方式。
  第一种方式:chmod [ugoa][+-=][rwxst] file. u指代user,g指代group,o指代other,a指代all。+-=分别执行指代增加、减少、设定相应权限(由后面的参数指定)。rwxst分别指代读、写、执行、set-user-id/set-group-id、sticky-bit粘滞位。整体上理解,就是对哪类用户(ugoa,为a时可省略)执行哪些权限(rwxst)的什么修改(+-=)。示例:

1
2
3
4
5
6
7
8
9
10
11
12
$ chmod u-x a.out 
$ ll a.out
-rw-r-xr-x 1 dutor dutor 7.1K 2010-08-08 13:33 a.out
$ chmod +t a.out 
$ ll a.out
-rw-r-xr-t 1 dutor dutor 7.1K 2010-08-08 13:33 a.out
$ chmod g=rs a.out 
$ ll a.out
-rw-r-Sr-t 1 dutor dutor 7.1K 2010-08-08 13:33 a.out
$ chmod a+x a.out 
$ ll a.out
-rwxr-sr-t 1 dutor dutor 7.1K 2010-08-08 13:33 a.out
Tags: ,,. 45 views
July 25, 2010

配置inputrc

  我们这里需要的是一种叫做菜单式补全(menu-complete)的功能。通常,默认情况下,这个选项是没有被配置的。为了配置这项功能,并为之进行快捷键绑定,我们需要修改inputrc配置文件,这个文件中保存了Readline的一些键绑定和其它诸如编辑模式的配置选项。像许多其它配置文件一样,inputrc有系统级的配置选项/etc/inputrc和用户级的点文件~/.inputrc。建议建立自己的点文件,而不是直接编辑系统级文件,当然如果整个系统只是你一个人在用的话,你也可以在/etc/inputrc上面直接编辑。但使用点文件的另一个好处告诉你,它是属于你自己的,即使在另外一个不同的发行版上,点文件通常也是可以直接使用的。这可以减轻你在不同系统上的不适。
  好了,打开或者建立你的.inputrc,写下,下面两行:

1
2
"\C-j": menu-complete
"\C-k": menu-complete-backward
Tags: ,,. 89 views
July 4, 2010

动态链接库

  动态库和静态库相似,也是各个目标文件的集合。但相比静态链接的程序,动态链接可执行程序要小得多:这类程序运行时需要外部共享 函数库的支持,因此好像并不完整。除了程序体小之外,动态链接允许程序包指定必须的库,而不必将库装入程序包内。动态链接技术还允许多个运行中的程序共享一个库,这样就不会出现同一代码的多份拷贝共占内存的情况了。由于这些原因,当前多数程序采用动态链接技术。
  在Linux中的扩展名通常为.so。但在链接时,并不会被链接到可执行文件中,而是在执行时(需要时)由操作系统的动态加载模块动态地加载到内存,并链接到可执行文件地址空间的相应位置。
  动态链接库的创建也分为编译和”归档”两个阶段,但不同的是在这两个阶段需要使用一些不同的命令选项。首先,需要将源文件编译成一种成为位置无关码(PIC: Position Independent Code)的目标文件,这种代码可以被加入到内存的任何位置却不需要加载器对其进行重定位,关于这种格式可以参考《链接器与加载器》和《程序员的自我修养–链接装载与库》中较为详尽的描述。接下来需要将这些位置无关码“归档”为.so文件。整个过程只需一个工具即可,即gcc。还是上面的源文件,执行以下命令:

1
2
$ cc -c -fpic plus.c sub.c
$ cc -shared -o libmath.so *.o
Tags: ,. 127 views

  find命令可以按照指定的规则对硬盘上的文件进行查找,且可以跨越不同的文件系统。find命令的使用方法:

1
find fold [option]

  下面按照不同的选项介绍find命令。

find -name

  -name是最常用的选项,它指定了需要查找的文件名的模式,模式中可以使用通配符和简单的正则表达式。下面的命令查找Wdir目录下的.cpp文件:

1
2
3
4
5
6
7
8
9
10
11
dutor@dutor-desktop:~$ find Wdir -name "*.cpp"
Wdir/Cpp/Pthread/main.cpp
Wdir/Cpp/STL/sort_list.cpp
Wdir/Cpp/STL/Heap.cpp
Wdir/Cpp/STL/operator.cpp
Wdir/Cpp/STL/bind2nd/main.cpp
Wdir/Cpp/STL/Kth-Max.cpp
Wdir/Cpp/STL/priority_queue.cpp
Wdir/Cpp/ACM/Huffman/main.cpp
Wdir/Cpp/ACM/Bellman-Ford/main.cpp
......

  需要注意的是,如果搜索目录以相对路径形式指定,则搜索结果也以相对路径形式给出;否则,搜索结果以绝对路径形式给出。

Tags: ,. 55 views
July 1, 2010

  Linux/Unix中有两种链接,硬链接和软链接,均由ln命令来创建。

软链接

  软链接使用ln命令的-s选项创建:

1
ln -s source target #创建source文件的软链接target

  软链接类似于Windows中的快捷方式,内部保存的是源文件的路径,路径可以是相对路径,也可以是绝对路径:

1
2
3
4
5
6
dutor@dutor-desktop:~$ ln -s gvim.tgz gvim
dutor@dutor-desktop:~$ ln -s /home/dutor/gvim.tgz gvim2
dutor@dutor-desktop:~$ ll gvim* # alias ll='ls -l'
lrwxrwxrwx 1 dutor dutor    8 2010-07-01 20:32 gvim -> gvim.tgz
lrwxrwxrwx 1 dutor dutor   20 2010-07-01 20:33 gvim2 -> /home/dutor/gvim.tgz
-rw-r--r-- 1 dutor dutor 8.5M 2010-06-29 23:06 gvim.tgz

  软链接应用十分广泛。

Tags: ,. 39 views
June 6, 2010

  ls == list,根据不同的选项,列举指定目录或文件的相关信息,是Unix/Linux下最常用的命令之一,cd到某一目录下后执行的第一个命令。

ls

  不带参数的ls列举当前目录下有哪些文件和目录,ls Folder列举Folder目录中的文件和子目录,ls File显示File文件的信息(默认为文件名)。

1
2
3
4
5
6
7
8
9
dutor@dutor-desktop:~$ cd Wdir/
/home/dutor/Wdir
dutor@dutor-desktop:~/Wdir$ ls
APUE  ASM  Cpp  LaTeX  PHP  Python  QT  Shell
dutor@dutor-desktop:~/Wdir$ ls Cpp/
ACM     main    main.cpp  Makefile    Pthread  symtab         tags    test.s
Curses  main.c  main.s    Playaround  STL      SystemProgram  test.c  TutManual
dutor@dutor-desktop:~/Wdir$ ls Cpp/Makefile
Cpp/Makefile
Tags: . 29 views

  上一篇[命令技巧]mkcd中,mkcd函数里面使用到了mkdir的-p选项。mkdir的-p选项允许你一次性创建多层次的目录,而不是一次只创建单独的目录。例如,我们要在当前目录创建目录Projects/a/src,使用命令

1
mkdir -p Project/a/src

而不是

1
2
3
4
5
mkdir Project
cd Project
mkdir a
cd a
mkdir src
Tags: . 43 views
May 30, 2010

  介绍一个新命令,保准你从未听说过,但它实现的操作你应该一直都在使用,这个命令就是mkcd。其实它不是一个命令,而是一个shell函数:

1
2
3
4
5
6
7
8
9
10
11
# mkcd: mkdir, then cd
mkcd()
{
    if [ $# = "1" ]
    then
        mkdir -p "$1"
        cd "$1"
    else
        echo "Usage: mkcd folder"
    fi
}

  很简单,相信你一看就知道它能做什么了。

Tags: ,. 31 views
May 14, 2010

简述

  sed是Linux环境下的一个文本流、行编辑器,十分强大,这里贴一些常用的单行脚本,脚本最初来源于此,基本未做改动。另外一个强大的文本处理工具就是awk,对于这两个工具,个人觉得,根据个人选择其一就够用了,我自己就喜欢sed多一点。Bones在这里用awk对下面的各个sed命令行做了相应的替代。
  推荐一本关于sed和awk的书《sed & awk》,作者Dale Dougberty, Arnold Robbins。中文版在网上已经买不到了,china-pub倒是有,不过是原版的一般人承受不起那个价位。幸好这本书的作者提供免费的电子版,在网上应该可以搜的到。

sed单行命令快速参考

文本间隔
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 在每一行后面增加一空行
 sed G
 
 # 将原来的所有空行删除并在每一行后面增加一空行。
 # 这样在输出的文本中每一行后面将有且只有一空行。
 sed '/^$/d;G'
 
 # 在每一行后面增加两行空行
 sed 'G;G'
 
 # 将第一个脚本所产生的所有空行删除(即删除所有偶数行)
 sed 'n;d'
 
 # 在匹配式样“regex”的行之前插入一空行
 sed '/regex/{x;p;x;}'
 
 # 在匹配式样“regex”的行之后插入一空行
 sed '/regex/G'
 
 # 在匹配式样“regex”的行之前和之后各插入一空行
 sed '/regex/{x;p;x;G;}'
Tags: . 77 views
May 11, 2010

  俺学习和使用Shell过程中积累的一些东西,希望对某些看官有用。另,本人使用bash环境。

Shell预设环境变量

环境变量 说明
$HOME 当前用户主目录
$PATH 冒号分割的用来搜索命令的目录的几何
$PS1 命令提示符,例如[\u@\h/\W$]给出了user@host/folder $这样的提示符
$PS2 二级提示符,通常仅仅包含一个>
$IFS 输入分割域,通常为空白符,即空格、制表符、回车
$0 shell脚本的文件名
$# 调用本脚本时提供的参数个数
$$ shell脚本的进程号
$! 后台进程的进程号
$? 上一个进程的退出状态
$1, $2, ……, $n 脚本的参数,n超过9时需要用${n}
$* 包含了所有的参数,各参数以$IFS分割
$@ 类似$*,但当$IFS为空时,各参数不会到一块儿,”$*”和”$@“的扩展不同
Tags: . 62 views
Page 1 of 71234567