linux指令

Linux面试题

 http://coolshell.cn/articles/9104.html

http://blog.csdn.net/sunboy_2050/article/details/7303501

sed的替换功能比较简单:

sed"s/my/Hao Chen's/g"pets.txt


注意:如果你要使用单引号,那么你没办法通过\’这样来转义,就有双引号就可以了,在双引号内可以用\”来转义。

再注意:上面的sed并没有对文件的内容改变,只是把处理过后的内容输出,如果你要写回文件,你可以使用重定向,如:

1
$ sed "s/my/Hao Chen's/g" pets.txt > hao_pets.txt

或使用 -i 参数直接修改文件内容:

1
$ sed -i "s/my/Hao Chen's/g" pets.txt

在每一行最前面加点东西:

1
2
3
4
5
6
7
8
9
$ sed 's/^/#/g' pets.txt
#This is my cat
#  my cat's name is betty
#This is my dog
#  my dog's name is frank
#This is my fish
#  my fish's name is george
#This is my goat
#  my goat's name is adam

在每一行最后面加点东西:

1
2
3
4
5
6
7
8
9
$ sed 's/$/ --- /g' pets.txt
This is my cat ---
   my cat 's name is betty ---
This is my dog ---
   my dog's name is frank ---
This is my fish ---
   my fish's name is george ---
This is my goat ---

   my goat's name is adam ---


大小写转换:

第一种方法:tr命令
tr -- translate or delete characters
转换成小写的时候就是tr A-Z a-z
# cat |tr a-z A-Z


第二种方法:sed命令
# cat |sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'
好ugly的方法,有点辱没Linux了.

第三种方法:awk语言
# cat |awk '{print toupper($0)}'
对应的转换成小写的做法是把toupper函数替换成tolower函数.

第四种方法:Perl语言
# perl -e '$_=<STDIN>;chomp;s/(.*)/U$1/;print $_;'
对应的转换成小写的做法是替换s/(.*)/U$1/为s/(.*)/L$1'再运行.


查看本机ip

ifconfig
如果没有这个指令,就用

/sbin/ifconfig


df -f 查看磁盘容量和使用情况


iconv -f from-encoding -t to-encoding inputfile -o outputfile


查看网络端口使用情况


除了一个文件外,其他文件都要拷贝

cp -r $(find -maxdepth 1 ! -name 'nightly.html' | sed 1d) ../tmp

sed 1d的作用是删除第一行的"."


sed -n 'np' text  输出第n行

sed -n 'n,mp' text 输出第n~m行

sed -n 'n,$p' test 输出第n行之后的



方法一:ps -ef | grep 程序名
方法二:netstat -nltp | grep 端口号或服务名
方法三:netstat -antup | grep 端口号

方法四:netstat -an | grep 端口号


netstat -nlp | grep 端口号

如果有,则在最后一列有占有此端口号的进程号


netstat -nlp | grep 进程号

就可以看到占有的端口


用 netstat -apn | grep 貌似更准确


top -u username 然后键入c,就能看到这个用户的所运行程序的详细情况

tail -f 就能实时看到写入到文件中的内容


head -n 1 /etc/issue   # 查看操作系统版本

file 

file -bi

显示文件的编码


在实用svn diff时,如果不希望显示出资源文件的内容,可以把这个文件加上二进制的属性

svn propset svn:mime-type application/octet-stream <filename>
也可以将其属性变为文本格式

text/plain 



不用解压查看压缩包文本内容:

zcat/gzip tt.tar.gz | less

gzip/zcat -dc tt.gz | less


在top指令下

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND


其中RES指程序所占的总内存,以KB为单位


cat /proc/13722/status 可以看程序栈空间使用大小

VmSize(KB) 任务虚拟地址空间的大小 (total_vm-reserved_vm),其中total_vm为进程的地址空间的大小,reserved_vm:进程在预留或特殊的内存间的物理页

VmLck(KB) 任务已经锁住的物理内存的大小。锁住的物理内存不能交换到硬盘 (locked_vm)

VmRSS(KB) 应用程序正在使用的物理内存的大小,就是用ps命令的参数rss的值 (rss)

VmData(KB) 程序数据段的大小(所占虚拟内存的大小),存放初始化了的数据; (total_vm-shared_vm-stack_vm)

VmStk(KB) 任务在用户态的栈的大小 (stack_vm)

VmExe(KB) 程序所拥有的可执行虚拟内存的大小,代码段,不包括任务使用的库 (end_code-start_code)

VmLib(KB) 被映像到任务的虚拟内存空间的库的大小 (exec_lib)

VmPTE 该进程的所有页表的大小,单位:kb



grep -nr 'vector' src/XXXX/ | awk '{if (!match($0,/\.svn/, a)) print $0 }'

输出所有文件汇总含有vector的地方,但是如果是在.svn目录下就不输出


grep -nr 'vector' src/XXXX/ | awk '$0 !~ /\.svn/'


locate filename

从根目录开始输出所有目录或者文件包含filename的完整绝对路径


ps U username

显示用户username创建的进程

xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理。通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从文件的输出中读取数据。xargs的默认命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。

xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令,下面是一些如何有效使用xargs 的实用例子。

1. 当你尝试用rm 删除太多的文件,你可能得到一个错误信息:/bin/rm Argument list too long. 用xargs 去避免这个问题

find ~ -name ‘*.log’ -print0 | xargs -0 rm -f


2. 获得/etc/ 下所有*.conf 结尾的文件列表,有几种不同的方法能得到相同的结果,下面的例子仅仅是示范怎么实用xargs ,在这个例子中实用 xargs将find 命令的输出传递给ls -l

# find /etc -name "*.conf" | xargs ls –l


3. 假如你有一个文件包含了很多你希望下载的URL, 你能够使用xargs 下载所有链接

# cat url-list.txt | xargs wget –c


4. 查找所有的jpg 文件,并且压缩它

# find / -name *.jpg -type f -print | xargs tar -cvzf images.tar.gz


5. 拷贝所有的图片文件到一个外部的硬盘驱动 

# ls *.jpg | xargs -n1 -i cp {} /external-hard-drive/directory


如果启动了多进程如何杀死?

ps aufx|grep 命令名|grep user|awk ‘{print $2}’|xargs kill -9

 killall -u userid

注意这两条指令要慎用


将后缀为.cpp的都改为.cc

rename .cpp .cc *.cpp



copy 本地的档案到远程的机器上 
scp /etc/lilo.conf root@192.168.0.1:/home/k 
会将本地的 /etc/lilo.conf 这个档案 copy 到 192.168.0.1,使用者 root 的/home/k目录下。 
copy远程机器上的档案到本地来 
scp root@192.168.0.2:/etc/lilo.conf /etc 
会将 192.168.0.2 中 /etc/lilo.conf 档案 copy 到本地的 /etc 目录下。 
保持从来源 host 档案的属性 
scp –p k@net67.ee.tw:/etc/lilo.conf /etc

如果想使用特定端口 使用 scp –p(大写) 如 scp –p 1234 k@net67.ee.tw:/etc/lilo.conf /etc



http://coolshell.cn/articles/9070.html

awk


df –h 显示磁盘的使用信息

last 读取用户登录信息

lastlog 显示所有用户的登录信息,每个用户只显示一条

 

free –m 内存使用情况

iostat 系统io情况

sar 显示服务器的性能信息

netstat 显示端口使用信息

 

无密码穿梭服务器:keychain或者ssh-agent加载密钥,然后用ssh直接登录其他服务器

 

更改与文件关联的所有者或组。 
语法
chown [ -f ] [ -h ] [ -R ] Owner [ :Group ] { File ... | Directory ... }
chown -R [ -f ] [ -H | -L | -P ] Owner [ :Group ] { File ... | Directory ... }
描述
chown 命令将 File 参数指定的文件的所有者更改为 Owner 参数指定的用户。Owner 参数的值可以是可在 /etc/passwd 文件中找到的用户标识或登录名。还可以选择性地指定组。Group 参数的值可以是可在 /etc/group 文件中找到的组标识或组名。
只有 root 用户可以更改文件的所有者。只在您是 root 用户或拥有该文件的情况下才可以更改文件的组。如果拥有文件但不是 root 用户,则只可以将组更改为您是其成员的组。


more /proc/cpuinfo 查看cpu数量和信息

 

less 比more更强大,类似于vi,可以打开多个文件,并有搜索功能

Top:

按1,查看所有cpu状态

Shift+m, 按内存排序

Ps:

Ps ux

Ps aux

Ps auxf

 

du –h 各个目录占用空间

du -h --max-depth=2

crontab 定时任务

history 查看历史指令


cut -d' ' -f1-7,9- tt >tt1 删除文件tt中的第8列,9-表示从第9列到最后一列

-d是指定列的分隔符


sed -e '4d' 删除第4行

sed -e '4,7d' 删除4-7行


awk 'BEGIN{n=0}{if (/","/)  n++; if (n%2==0) print n}END{print n}'  t.cc

开始设n值为0,如果一行出现字符串"," n加一,最后输出一共多少行出现了字符串","


注意:awk中只能出现一对单引号,{}大括号中放入的是类c的代码语句,要以分号区分语句


awk '$1 ~ /n/' testfile

~表示的是匹配,如果第一列中有字符n则,输出这一行


awk '$1 !~ /n/' testfile

输出第一列中不含n的行



2.txt文本文件如下   

118.77.0.113
118.77.0.113
124.236.37.121
124.236.37.121
118.77.0.113
211.142.94.2
180.18.96.3
180.18.96.3
118.77.0.113
118.77.0.113
180.18.96.3
180.18.96.3
61.128.250.170
61.128.250.170

要得到的结果

5    118.77.0.113     (即重复行数和 IP )、

awk   '{a[$1]++}END{for (j in a) print a[j],j}'


awk '{ split($0, t, " ");  for (s in t) a[t[s]]++;} END{for (s in a) print a[s], s}' train.t > key.s

cat train.t

aa 11 23 444
bbb tt rr adf
cc tt rr 11
aa
cc d 
ddd  g
eee  d
ff ddd
bbb ff


key.s中统计的是单词的次数


awk中用到的数组都是关联数组,split得到的数组t,其key是整数,其value是字符串

关联数组a,其key是字符串,其value是次数


awk '{split($0, arr);for(a in arr) term[arr[a]]++}END{for(t in term) print t, term[t]}' part | sort -nr -k 2 > all

统计文本part中所有单词出现的次数,并逆序输出


awk -F '|||' '{if( !match($1,/^<s>/,a) && !match($1,/<\/s>$/,b)) print $0 }' final_rules > fin1

按照|||进行切分,将第一个字段中的首尾不是<s></s>的整句输出到fin1

上面的指令的意思是遇到一个|就分段,要这样写才行

awk -F  '\\|\\|\\|'


统计文本中不同词的个数

awk '{split($0,t," "); for (s in t ) a[t[s]]++;}END{print length(a)}' t1

length计算关联数组的长度


awk不支持空格\s

awk '{if (match($0, /[a-z][[:space:]]+[a-z]/, a)) print $0}' cc.txt 

或者

awk '{if (match($0, /[a-z] +[a-z]/, a)) print $0}' cc.txt 

//可以这样使用match($0,/[a-z] +[a-z]/)


注意的是:

1. $NF 表示最后一个字段,而NF表示一共有多少个字段,也就是说$表示的是第几个字段

2. 在'{}'这里面,不能用单引号表示字符串,会引起歧义,要用双引号 


ll | awk '{print $NF}' | sed -n '2,$p'|xargs identify | awk '{if ($3 != "28x28") print $1}'

这个目录下都是图片,如果有一张图片的尺寸不是28x28,就输出这个图片的名字


awk -F ':' '{print $1}'  tt 将按照“:”分割的第一个字段输出

 

NF 如果当前行是非空行,返回true。这里的非空行,也包括一行中全是空格或者tab。

NF 表示一行有多少个字段

awk '{if (NF == 3) print $0}' 只输出有三个字段的行

awk '{print $NF}' 只输出最后一个字段

awk 'NF-=1' 不输出最后一个字段

awk 'NF-=2' 不输出最后两个字段

awk '{$NF="";print}' 不输出最后一个字段

awk '{if (substr($NF,1,1)=="-") print $0 }' 如果最后一个字段的第一个字母是'-', substr下标从1开始,第三个参数是要截取的长度

awk ‘/./’ 只输出非空行,这里的非空行也包括一行中全是空格或者tab

awk NF 输出的是过滤了空行的文本

awk '{if (!NF) print NR}'  tt  输出空行的行号

 

在{}中的语句是不会主动输出匹配行的,所以在{}内,一旦有输出就要用print

譬如:awk '1; {print ""}' tt 处理一行,输出,1是true,满足条件,所以在输出一个空行

awk '{if (1) print ""}' tt 就只会输出空行了

awk '1; {print "\n"}' tt

awk '{print NR "\t" $0}' tt 在每一行添加行号

awk 'END {print NR}' 模拟 wc –l

 

输出文本中4-7行

awk '{if (NR >=4 && NR <= 7)print $0; if (NR >7) exit}' tt

 

awk '{if( match($0,/[0-9]+\.[0-9]*/,a))print a[0]}' tt

查找并输出文件中的小数


$0是指整行


awk '{if ( match($0,/<u>.+<\/u>/,a)) print NR}' Page_gbk.txt 


输出含有<u>XXX</u>这样的模式的行号



awk有比较坑的地方,就是无法正常匹配单引号', 对于双引号可以通过\"进行匹配,单引号只能通过\047匹配


awk '{if ( match($0, /\\\047\\\047\\\047.+\\\047\\\047\\\047/, a) ) print NR}' Page_gbk.txt


输出含有\'\'\'XXXX\'\'\'的行号


awk '{gsub(/\)/,")");print}' tt >t1

awk '{gsub(/\(/,"(");print}' t1 >t2


find . -name '*.scala' | awk '{if (!match($0, /-test/,a)) print $0}'  | xargs wc -l | sort -n

统计有效的代码行数,过滤test目录


删除文件中所有的偶数行

awk 'NR %2 ==1' tt

 

 awk和sed即使功能再强大,但是有一点不行,就是他们的正则表达式不支持非贪婪形式,比如,我们要将<.*>之类的标签去除,一般会用非贪婪形式的<.*?>就是?后面的字符只要出现就停止,但是awk,sed不支持

我们可以变通

sed -i 's/<[^>]*>/ /g' tt.txt

 

head -7 tt | tail -4

 

 

 

awk -F ':' '{if (/processor/ &&!/0/) print $0}' tt 首先按照“:”分为域,当前行必须有“processor”并且不包括“0”才输出


awk -F '_' '{print $0" "substr($NF,0,index($NF,".")-1)}'  注意,string在awk中下标是从1开始的,index是查找函数,substr(s,beg, n), n是从beg开始的n个字符

 

grep -wf f1.txt f2.txt 输出两个文件中相同的行

 

grep –wvf f1.txt f2.txt输出f2中不是共有的行

grep –wvf f2.txt f1.txt输出f1中不是共有的行

 

sort a b 对两个文件的行进行排序

sort a b | uniq 取出两个文件的并集(重复的行只保留一份

sort a b | uniq –u 删除交集,留下其他的行

sort a b| uniq –d 取出两个文件的交集

sort a b b|uniq -u 只保留仅在a中出现的行


打印单个文件重复的行是

sort a | uniq -d 


主要是看uniq命令,sort a b c也只是把这三个文件输出并无区别排序


uniq

-d 只显示重复的行

-u 只显示不重复的行


 

psaux |sort -rn –k 4|head -1|awk '{ print $2 }'

 

psaux指令是将服务器内所有进程列出来

sort 

-r逆序排列

-n将字段作为数字

-d按照字典顺序排序

 

-kn按照第n个字段排序,注意这里是从1开始

 

awk打印字段,从0开始

 

 

python使用正则表达式

m = re.search('[^abcd]+',"acav")

    if m is not None:

               print m.group()

 

去掉行中的空格

去掉所有行的空格
sed  -i ’s/ //g’   df.txt(注意这个指令是对原文本进行操作)


去掉所有行的空格
sed  -e ’s/ //g’   df.txt  >cwm.txt


地址是一个数字,则表示行号;是“$"符号,则表示最后一行。例如: 

sed -'3p' datafile
只打印第三行

 

 只显示指定行范围的文件内容,例如:

# 只查看文件的第100行到第200行
sed -n '100,200p' mysql_slow_query.log

 

切分大文件

split -l 2 -d tt tt.

按照每2行切分文件tt,后缀以数字作为后缀

还可以按照文件大小进行切分


 Linux下多线程查看工具(pstree、ps、pstack)

1. pstree

pstree以树结构显示进程
$ pstree -p work | grep ad
sshd(22669)---bash(22670)---ad_preprocess(4551)-+-{ad_preprocess}(4552)
                                                |-{ad_preprocess}(4553)
                                                |-{ad_preprocess}(4554)
                                                |-{ad_preprocess}(4555)
                                                |-{ad_preprocess}(4556)
                                                `-{ad_preprocess}(4557)


work为工作用户,-p为显示进程识别码,ad_preprocess共启动了6个子线程,加上主线程共7个线程

2. ps -Lf

$ ps -Lf 4551
UID        PID  PPID   LWP  C NLWP STIME TTY      STAT   TIME CMD
work      4551 22670  4551  2    7 16:30 pts/2    Sl+    0:02 ./ad_preprocess
work      4551 22670  4552  0    7 16:30 pts/2    Sl+    0:00 ./ad_preprocess
work      4551 22670  4553  0    7 16:30 pts/2    Sl+    0:00 ./ad_preprocess
work      4551 22670  4554  0    7 16:30 pts/2    Sl+    0:00 ./ad_preprocess
work      4551 22670  4555  0    7 16:30 pts/2    Sl+    0:00 ./ad_preprocess
work      4551 22670  4556  0    7 16:30 pts/2    Sl+    0:00 ./ad_preprocess
work      4551 22670  4557  0    7 16:30 pts/2    Sl+    0:00 ./ad_preprocess

进程共启动了7个线程

3. pstack

pstack显示每个进程的栈跟踪

$ pstack 4551
Thread 7 (Thread 1084229984 (LWP 4552)):
#0  0x000000302afc63dc in epoll_wait () from /lib64/tls/libc.so.6
#1  0x00000000006f0730 in ub::EPollEx::poll ()
#2  0x00000000006f172a in ub::NetReactor::callback ()
#3  0x00000000006fbbbb in ub::UBTask::CALLBACK ()
#4  0x000000302b80610a in start_thread () from /lib64/tls/libpthread.so.0
#5  0x000000302afc6003 in clone () from /lib64/tls/libc.so.6
#6  0x0000000000000000 in ?? ()
Thread 6 (Thread 1094719840 (LWP 4553)):
#0  0x000000302afc63dc in epoll_wait () from /lib64/tls/libc.so.6
#1  0x00000000006f0730 in ub::EPollEx::poll ()
#2  0x00000000006f172a in ub::NetReactor::callback ()
#3  0x00000000006fbbbb in ub::UBTask::CALLBACK ()
#4  0x000000302b80610a in start_thread () from /lib64/tls/libpthread.so.0
#5  0x000000302afc6003 in clone () from /lib64/tls/libc.so.6
#6  0x0000000000000000 in ?? ()
Thread 5 (Thread 1105209696 (LWP 4554)):
#0  0x000000302b80baa5 in __nanosleep_nocancel ()
#1  0x000000000079e758 in comcm::ms_sleep ()
#2  0x00000000006c8581 in ub::UbClientManager::healthyCheck ()
#3  0x00000000006c8471 in ub::UbClientManager::start_healthy_check ()
#4  0x000000302b80610a in start_thread () from /lib64/tls/libpthread.so.0
#5  0x000000302afc6003 in clone () from /lib64/tls/libc.so.6
#6  0x0000000000000000 in ?? ()
Thread 4 (Thread 1115699552 (LWP 4555)):
#0  0x000000302b80baa5 in __nanosleep_nocancel ()
#1  0x0000000000482b0e in armor::armor_check_thread ()
#2  0x000000302b80610a in start_thread () from /lib64/tls/libpthread.so.0
#3  0x000000302afc6003 in clone () from /lib64/tls/libc.so.6
#4  0x0000000000000000 in ?? ()
Thread 3 (Thread 1126189408 (LWP 4556)):
#0  0x000000302af8f1a5 in __nanosleep_nocancel () from /lib64/tls/libc.so.6
#1  0x000000302af8f010 in sleep () from /lib64/tls/libc.so.6
#2  0x000000000044c972 in Business_config_manager::run ()
#3  0x0000000000457b83 in Thread::run_thread ()
#4  0x000000302b80610a in start_thread () from /lib64/tls/libpthread.so.0
#5  0x000000302afc6003 in clone () from /lib64/tls/libc.so.6
#6  0x0000000000000000 in ?? ()
Thread 2 (Thread 1136679264 (LWP 4557)):
#0  0x000000302af8f1a5 in __nanosleep_nocancel () from /lib64/tls/libc.so.6
#1  0x000000302af8f010 in sleep () from /lib64/tls/libc.so.6
#2  0x00000000004524bb in Process_thread::sleep_period ()
#3  0x0000000000452641 in Process_thread::run ()
#4  0x0000000000457b83 in Thread::run_thread ()
#5  0x000000302b80610a in start_thread () from /lib64/tls/libpthread.so.0
#6  0x000000302afc6003 in clone () from /lib64/tls/libc.so.6
#7  0x0000000000000000 in ?? ()
Thread 1 (Thread 182894129792 (LWP 4551)):
#0  0x000000302af8f1a5 in __nanosleep_nocancel () from /lib64/tls/libc.so.6
#1  0x000000302af8f010 in sleep () from /lib64/tls/libc.so.6
#2  0x0000000000420d79 in Ad_preprocess::run ()
#3  0x0000000000450ad0 in main ()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值