我的Linux技巧or知识收集-应用


在Linux服务器中如何找出大文件

查找根目录下(系统中)大于50M的文件:

find / -type f -size +50000k -exec ls -lh {} ;

查找/var/log目录下大于100M的文件:

find /var/log -type f -size +100000k -exec ls -lh {} ; | awk '{ print $9 ": " $5 }'
Perl 技巧: 显示大文件
#依据文件大小从小到大显示当前目录下每个目录的占用的情况(注:星号和星号的长度)
du -k | sort -n | perl -ne 'if ( /^(d+)s+(.*$)/){$l=log($1+.1);$m=int($l/log(1024)); printf ("%6.1ft%st%25s %sn",($1/(2**(10*$m))),(("K","M","G","T","P")[$m]),"*"x (1.5*$l),$2);}'
ls 命令:在目录中找出最大的文件{-S :sort by file size}

$ ls -lS
$ ls -lS | less
$ ls -lS | head +10

ls 命令:在目录中找出最小的文件{-r :reverse order while sorting}

$ ls -lSr
$ ls -lSr | less
$ ls -lSr | tail -10

如果你想要一个基于文件大小排序的文件列表,你可以使用下面的命令(它会以递减顺序排列文件):

# ls -l | grep ^- | sort -nr -k 5 | more

递归查询:

# ls -lR | grep ^- | sort -nr -k 5 | more

grep命令的一些常用选项

grep -l / -i / -v / -n / -c / -r        #这应该是grep最常会用到的选项了,平时多用用多实践就会理解了

grep -E ‘219|216’ data.doc #使用扩展模式匹配

grep -n “48” data.doc      #显示所有匹配48的行和行号(若为多文件匹配还会显示文件名)(-n选项显示匹配行对应的行号)

grep -c “48” data.doc      #输出文档中含有48字符的行数

$ dmesg
$ vim /var/log/dmesg

curl ifconfig.me    #这是个好东西!用于方便的从命令行上获取本机的外网IP

curl http://ipecho.net/plain      #也是用于获取本机的外网IP

Vim中的 “Esc键” 可以用 “Ctrl – C” 进行功能性替代

记录并回放终端会话{script和scriptreplay命令}

这在使用终端制作教程时非常方便。

要开始记录你的终端会话,使用下面的命令:

$ script -t 2>timing.log -a output.session

接着输入:
$ ls
$ touch test
……
……
$ exit
这里,script命令取两个文件作为参数timing.log(它记录了每个命令执行的时间信息)和output.session(存储了命令的输出)。

现在,要回放记录的会话,使用下面所示的scriptplay命令:

$ scriptreplay timing.log output.session

注:timing.log和output.session可以被任何想要在自己的终端上重放会话的人使用。

怎样去掉文件中的 ^M

sed ‘%s/^M//g’

# ^M怎么输的,该是组合键ctrl+v加ctrl+m

# ^M是先组合键crtl+v,然后按回车就行了

# 同样功能键 ^[ 是先crtl+v,然后按Esc键

如何在vim中删除空行

删除空行 “:g/^$/d”

删除所有空白行(^是行的开始,s*是零个或者多个空白字符;$是行尾) :g/^s*$/d

Sed删除空行

sed ‘/^$/d’

sed /^[[:space:]]*$/d

sed /^s*$/d

Sed删除行首、行尾的空格

sed ‘s/^[[:space:]]*//g’

sed ‘s/[[:space:]]*$//g’

用tr命令

tr -s ‘n’

awk ‘{if($0!=””)print}’

awk ‘{if(length !=0) print $0}’

grep -v ^$ file   #grep只将文件file中的非空行显示出来

grep . file       #和上面的效果一样,但颜色和提示符相同

awk NF file

awk ‘!/^$/’ file

tr -s “n”

# locate ncrack #可以找到不少用户名和密码的字典,算是个福利吧!

# locate brute #好多好东西,我才知道nmap的script放在哪了

如何知道Medusa有哪些模块,从而在执行命令时使用-M来指定

locate medusa

medusa -d

shell脚本:一次读取文件的一行,并输出

写法一:

#!/bin/bash

while read line
do
      echo $line     #这里可根据实际用途变化

done < urfile

写法二:

#!/bin/bash

cat urfile | while read line
do
    echo $line
done

 

find . -size 0 -exec {} ; #删除当前文件夹下大小为0的文件

Vim_skills

:w !sudo tee %    #保存对“只读文件”的修改

:e! #在Vim中重新编辑当前文件,忽略之前所有的修改

:r! Command #将命令 Command 的输出结果插入到当前行

:r filename #在光标所在处插入文件filename的内容

:%!xxd #以十六进制查看

:%!xxd -r #从十六进制返回

:n1,n2 w filename #将 n1 行到 n2 行之间的内容保存到文件 filename 中

以root用户运行Linux上的软件

作为一名root用户,为了让某些不能在root身份运行的软件运行(译注:典型的是Google chrome),你需要在软件的二进制文件中改变geteuid调用为getppid

这个技术在某些操作系统中非常有用,比如BackTrack/Kali,这里的大多数安装工作都以root用户完成。

比如:为了以root用户运行Google Chrome,使用下面的命令:

# hexedit /opt/google/chome/chrome

接着按下 Ctrl+S 在16进制转储文件中搜寻geteuid字符串。用字符串getppid代替。按下 Ctrl+X 来保存并退出编辑器。

现在浏览器就可以以root用户运行了。
# google-chrome

—Mayank Bhanderi, [email protected]

Linux的Shell里面生成随机数的一些思路

1.使用时间相关的随机数

利用date命令生成输出unixtimestamp(%s)和当前时间的纳秒数据(%N,精确到亿分之一秒)
前者保证在不同秒数时的输出不重复,后者保证在同一秒内数字(微秒)不重复,所以两者组合一下就可以了
%s seconds since 1970-01-0# 00:00:00 UTC
%N nanoseconds (000000000..999999999)

# date +%s%N
这个方法不依赖系统:只要时间不停止,就一直可以得到不重复的为随机数。

2.系统shell内部变量 $RANDOM

这么没啥好说的,依赖shell。

3.通过Linux的随机设备获取,然后算校验和(计算校验和这个还真的是必不可少的,否则有乱码o(╯□╰)o)

# head -10 /dev/urandom | cksum
注意这里千万不要使用cat去获取,因为这个是一条没有尽头的路,获取1行和10行没有太大的区别,这个各自看着办吧!

4.通过Linux的内核的UUID获取

UUID的计算信息会加入硬件,时间,机器当前运行信息等,可以保证生成的都是全球唯一的,方法比较直接:
# cat /proc/sys/kernel/random/uuid
就可以 然后在算校验和转换为数字即可,但是依赖Linux内核。

如上4种思路,仅供参考。

参考地址:Linux的Shell里面生成随机数的一些思路


发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注