Posts Tagged ‘命令’

December 11, 2011

  甚至可以可以使用nc建立文件的中转站。比如,从host1无法直连到host3,只能先连到host2再间接连到host3。如果想从host1向host3传输文件,可以在host2上面建立中转。每次直接传输是client/server还是server/client,都可以实现(当然,如果两台机器有防火墙相隔时,就另说了):

1
2
3
4
dutor@host2 $ nc -l 5198 | nc -l 5191
dutor@host2 $ # 使用 while true; do nc -l 5198 | nc -l 5191; done 可以建立持久的'中转站'
dutor@host1 $ nc host2 5198 < stuff.tgz
dutor@host3 $ nc host2 5191 | tar xzvf -

  nc是一个简单,强大,又可以信手拈来的工具,尽情发挥你的想象力吧。

Tags: ,. 101 views
November 2, 2011

一个致命字符串

  传说中,存在这么一串神秘的字符,你把它们放到终端,然后回车,不消太久,你的机器就变植物人只能低电平复位重启了。这串神秘的字符看起来是这样的,

1
dutor@home: ~$ :(){ :|:; };:&

  这是神马玩意儿呢?好的,现在听我的,把你的脑袋面对显示器逆时针旋转四分之一圆周,像不像一个张着血盆大口的长袍老怪?
  严肃点,你看懂它的真相了吗?换种等价的写法,

1
dutor@home: ~$ foo(){ foo|foo; };foo&

  其实就是“声明”了一个函数,然后在后台执行这个函数。在函数体内部,以管道的形式调用递归调用自身。第一种写法只是把函数名换成”:”产生的怪胎。

Tags: . 165 views
May 5, 2011

  相信很多人经常遇到文件乱码,尤其是文本文件。如果你不是用编辑器打开一个二进制文件的话,这应该是一个编码问题,即文件的实际编码和编辑器查看该文件时所使用的编码不一致。这时候,咱们需要把文件的编码进行转化,或者修改使用该文件的程序采用的编码。后一种方法取决于咱们使用的具体的程序,无法一概而论。
  这里介绍一个工具,iconv,使用它可以将一个输入文件从一种编码转换到另一种编码,同时将转化结果输出。iconv的-f选项指定源编码,-t选项指定目标编码,-o指定输出文件:

$ iconv -f coding1 -t coding2 file1 -o file2

  若file1省略,则使用标准输入;若-o选项省略,则使用标准输出。
  例如,我想把所有GBK编码的.cue文件转化为utf8编码:

$ find . -name "*.cue" -exec iconv -f gbk -t utf8 {} -o {} \;
Tags: ,,. 127 views
March 10, 2011

  alias, 假名,别名,bash的一个内建命令,用来给常用的较长的命令定义个简短的名称。
  alias命令的基本格式为alias [word[='command']], []内为可选项。定义word为command的别名。若=’command’部分省略,则输出word之前的定义,未定义则报错。单独的alias列出当前环境中所有可用的别名。通常来讲,关于alias,知道这么多就行了。但在使用alias的过程中还有一些问题需要注意。
  如果bash的expand_aliases选项没有被设置,那么在非交互式shell中alias不会被执行展开。也就是说,在shell脚本中,使用alias会导致”command not found”的错误。使用shopt命令来设置expand_aliases选项:

1
shopt -s expand_aliases

设置这个选项,可以在bashrc中,也可以在需要使用alias的脚本中。

Tags: . 272 views
March 8, 2011

  什么是shell自己版本的echo呢?原来,shell中可以使用的命令有“内建命令”(built-in)和外部命令之分。内建命令有shell本身实现,即和shell进程同属于一个地址空间执行,比如echo可能是shell中的一个函数实现的。内置命令通常是无法或者不适以外部命令的形式实现的命令,比如cd, source, alias, bind, history, set等等。外部命令是一些独立的可执行文件,由shell以fork/exec的形式执行。
  使用type命令可以获取命令的类型。由type type可以知道type命令本身也是内建命令。

  知道这些,通过–help选项输出echo的帮助信息就不是什么难事了,

1
2
3
4
~$ which echo
/bin/echo
~$ /bin/echo --help
......
Tags: . 67 views
August 9, 2010

  现在再推荐一个类似的工具集Gow(GNU On Windows). 这是一个轻量级的Cygwin“替代品”,集成了130个Linux命令,可以由Windows Installer方便地安装,自动设定环境变量。同时,自动为Windows Explorer的右键菜单添加一个“open in cmd prompt”的菜单项。里面有特色的工具主要有:

  • 脚本解释器:bash, zsh ;
  • 归档、压缩工具:tar, gzip, bzip2等;
  • putty工具集: putty, psftp, pscp, plink等;
  • 下载工具:cURL, wget;
  • 编辑器:Vim;
  • 文本搜索/查看工具:grep, cat, less, head, tail等;
  • 文件(系统)相关工具:mv, cp, ls, rm, pwd等;

  另外,你可能注意到,Gow中并没有gcc(GNU Compiler Collections),所以,如果你需要这些工具,你可能还需要安装上面的cygnus。需要注意的是,这两个工具集的命令有交集,所以同时安装这两个工具集时要注意PATH中搜索路径的顺序,我更倾向于把Gow的bin放在前面。
  最后,如果你系统中已经装有Vim(通常为较高的版本),最好把Gow中提供的Vim(貌似是6.3)删除。

Tags: ,. 306 views
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: ,,. 517 views
July 4, 2010

  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: ,. 255 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: ,. 126 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: . 118 views
Page 1 of 512345