方法1:

linux命令 小题
http://www.jianshu.com/p/743b27ac37a5

 

复制代码 代码如下:

[root@localhost ~]#  #号的是root用户环境 $是普通用户环境

1、创建一个目录/data

记忆方法:英文make
directorys缩写后就是mkdir。

命令:

  1. mkdir /data

  2. cd /;mkdir data

  3. #提示:使用分号可以在一行内分割两个命令。

实践过程:

  1. 方法一:

  2. [root@oldboy66 ~]# mkdir /data

  1. #查看data目录是否创建成功,ls是list列表的意思,-ld是ls的常用参数,是长格式查看目录属性,l表示长格式,d表示目录
  1. [root@oldboy66 ~]# ls -ld /data
  1. drwxr-xr-x. 2 root root 4096 Nov 30
    13:40 /data

  2.    

  3. 方法二:

  4. #删除方法一创建的目录

  5. [root@oldboy66 ~]# rm -r /data

  1. #输入y表示确认删除,y是yes的缩写
  1. rm: remove directory `/data’? y
  1. #进入根目录/下

  2. [root@oldboy66 ~]# cd /

  3. #创建data目录,不带斜线/,因为已经进入了

  1. [root@oldboy66 /]# mkdir data
  1. #查看data目录本身

  2. [root@oldboy66 /]# ls -ld data

  1. drwxr-xr-x. 2 root root 4096 Nov 30
    13:44 data

总结:

cd后跟相对路径或者绝对路径,表示进入目录,如果不跟任何东西,会进入当前用户的家目录。

相对路径概念:不从/开始,而是从当前目录开始,例如:data/,mnt/oldboy。

绝对路径概念:从/开始的目录,就叫绝对路径,例如:/data/,/mnt/oldboy。

cd命令记忆方法:change
directory。

mkdir
[-mp] [目录名称] 建立目录

    -m:这个参数用来指定要创建目录的权限,但是很少用,都会用chmod来处理。

    如:mkdir –m 777
/tmp/test,即建立一个权限为777的目录。

    -p:这个参数用来递归创建目录,mkdir的常用参数。

for file in  `ls`; do mv $file $file.txt; done

Linux命令的写法

2、在/data下面建立一个文件oldboy.txt

命令:

  1. touch /data/oldboy.txt

  2. cd /data;touch oldboy.txt

  3. #创建文件也可以用echo等,只不过touch是专业的,也可用间接创建文件的命令,如vi,cat等。

  1. 例如:

  2. echo > /data/oldboy.txt

  3. > /data/oldboy.txt

实践过程:

  1. 方法一:

  2. #在/data目录下创建oldboy.txt

  3. [root@oldboy66 data]# touch
    /data/oldboy.txt

  4. #查看创建的oldboy.txt

  5. [root@oldboy66 data]# ls -l
    /data/oldboy.txt

  6. -rw-r–r–. 1 root root 0 Nov 30 14:04
    /data/oldboy.txt

  7.    

  8. 方法二:

  9. [root@oldboy66 /]# cd /data

  10. #如果同名文件存在,不会提示也不好覆盖,会更新文件的时间戳

  1. [root@oldboy66 data]# touch
    oldboy.txt

总结:

touch”摸”。touch
[文件名]
就是”摸”一下文件,如果文件不存在,就建立新文件,如果存在,就改变文件的访问时间atime等时间戳信息。

路径分隔区别:

windows的目录分隔D:\PIC\oldboy。

linux的目录分隔/data/。

方法2:

命令 [参数] [路径,文件]  例如:rm -f /tmp/oldboy.log 
删除tmp下的oldboy.log文件 []表示可选 命令:rm 参数:-f  路径文件:rm
-f /tmp/oldboy.log 命令 参数 路径文件以空格隔开

3、为oldboy.txt增加内容为”I am studying linux”。

方法一:常规编辑方法

执行vi
oldboy.txt进入vi编辑器(默认命令模式),点击a或i进入编辑模式,敲入内容I
am studying
linux,然后按键盘上的esc键退出编辑模式(进入到命令模式),最后敲:wq保存并退出。wq解释write
quit。

此方法说明:

vi就是类似记事本一样的linux下的常用编辑器,如果想功能更丰富可以用vim代替vi,vi/vim的内部有很多的命令技术点,例如i就是insert,进入插入编辑模式的状态的意思,esc键是切换到命令模式,命令模式下可以敲冒号”:”在后面才可以接命令参数,例如wq,w是write,q是quit。

vi
编辑器,相当于记事本,有编辑功能,但是较弱。

vim
复制编辑器,相当于emeditor,editplus,notepad++。

快捷键:TAB
命令、路径补全。

图片 1

方法二:单行或多行文本插入常用命令,内容都是存放到文件的尾部。

  1. echo “I am
    studying linux” >>/data/oldboy.txt

实践过程:

  1. #特殊的编辑方法,通过echo命令使用单引号把引号的内容通过>>追加到/data/oldboy.txt,注意:是追加不是覆盖
  1. [root@oldboy66 data]# echo “I am studying
    linux” >>/data/oldboy.txt

  2. #检查追加的结果

  3. [root@oldboy66 data]# cat oldboy.txt

  1. I am studying linux

此法说明:

echo是一个打印输出内容的一个常用命令,配合”>或>>”可以为文件覆盖及追加内容。”>”意思为重定向,会清除文件里所有以前数据,”>>”为内容追加,只在文件尾部追加需要的内容,还有一个较复杂不常用的类似命令printf。

特殊字符命令:

>重定向,会清除文件里所有以前的数据,增加

>>追加重定向,

方法三:写脚本常用,追加多行,内容都放在文件的尾部。

  1. cat >>/data/oldboy.txt<<EOF
  1. I am studying linux

  2. EOF

  3. #注意:结尾的EOF要顶格写,EOF也可以用别的字符替代,只要是一对就好。

方法二、方法三为命令行或脚本中常使用的办法,都很重要。

方法二用于单行文本,方法三可以是多行文件,文本中如果有特殊字符,如$等需要用\转义才行。

  1. echo ‘

  2. 111

  3. 222

  4. 333

  5. ‘>>oldboy.txt

方法四:

  1. [root@oldboy66 data]#
    cat >>/data/oldboy.txt

  2. I am studying linux

按ctrl+d或ctrl+c组合键两遍结束编辑。此方法为特殊编辑方法。

总结:

echo是一个打印输出内容的一个常用命令,配合”>”或”>>”可以为文件覆盖或追加内容。echo
$PATH打印出PATH的值。

重定向:意思是将”数据传到其他地方”。将某个命令执行后本应该出现在屏幕的数据,传输到其他地方,执行命令时,这个命令可能会通过文件读入数据,经过处理之后,再将数据输出到屏幕。

>或1>
输出重定向:把前面输出的东西输入到后边的文件中,会删除文件原有内容。

>>或1>>
追加重定向:把前面输出的对象追加到后边的文件中,不会删除文件原有内容。

<或<0
输入重定向:输入重定向用于改变命令的输入,后面指定输入内容,前面跟文件名

<<或<<0
追加输入重定向:
后跟字符串,用来表示”输入结束”,也可以ctrl+d来结束输入。

2>
错误重定向:把错误信息输入到后边的文件中,会删除文件原有内容。

2>>
错误追加重定向:把错误信息追加到后边的文件中,不会删除文件原有内容。

标准输入(stdin):代码为0,使用<或<<,数据流向从右向左。

标准正常输出(stdout):代码为1,使用>或>>,数据流向从左向右。

标准错误输出(stderr):代码为2,使用2>或2>>。

箭头的方向就是数据流的方向。

特殊写法:

  1. echo oldboy 2>a.txt 1>b.txt
  1. #2>&1
    就是把标准错误重定向到标准输出

  2. echo oldboy &>log.txt

  3. #也可以用>&

  4. echo oldboy >log.txt 2>&1

复制代码 代码如下:

man 帮助命令 man后跟命令 查看命令及配置文件

4、把oldboy.txt文件拷贝到/tmp下

命令:

  1. cd /data

  2. cp oldboy.txt /tmp/

  3. 提示:加cp -a,cp,-p保持属性

总结:

cp [-aifpru]
[源文件] [目标文件]

    -a:相当于-pdr

    -d:若源文件为链接文件(link
file),则复制链接文件属性而非档案本身。

    -f:强制,若目标档案已经存在且无法开启,则移除后再尝试。

    -i:若目标文件已经存在时,在覆盖时会先询问。

    -p:连同档案的属性一起复制过去,而非使用默认属性。

    -r:递归,用于复制目录。

    -u:若目标文件存在,则目标文件比源文件旧时才复制。

提示:如果源文件是多个,那么目的文件在最后,且是目录。

cp的重要参数apr。

find . -type f |xargs -i mv {} {}.txt

1.mkdir 创建目录命令

5、把/data目录移动到/root下

命令:

  1. mv /data /root/

  2. 提示:如果希望带目录拷贝,尽量不要mv
    /data/ /root/,移动目录时,源目录结尾不要多余斜线。

总结:

mv [-ifu]
[源文件/源目录] [目的文件/目的目录]

    -i:如果目的文件已存在,询问是否覆盖

    -f:强制执行,不会询问

    -u:若目的文件存在,则比源文件新才会移动。

提示:如果源文件是多个,那么目的文件在最后,且是目录。

如:f1、f2是文件,/d1、/d2是目录

mv f1
f2:如果f2不存在,则相当于f1重命名为f2;如果f2存在,则f1重命名为f2,并覆盖f2

mv f1
/d1:如果/d1不存在,则把f1移动到/下,并重命名为d1;如果/d1存在,则把f1移动到/d1下。

mv /d1
/d2:如果/d2不存在,则把/d1重命名为/d2;如果/d2存在,则把/d1移动到/d2下。

mv /d2
f1:如果f1不存在,则把/d2移动到当前目录,并重命名为f1;如果f1存在,会提示f1是个文件,不能用目录覆盖。

还有一些试验不成功的,先记录在此。

创建一个data目录

6、进入root目录下的data目录,删除oldboy.txt

命令:

  1. cd /root/data/

  2. rm oldboy.txt

删除一个文件一般用rm
oldboy.txt,此法会提示你确认。用rm –f
oldboy.txt方法不会提示确认直接删除,比较危险。

对于文件的删除禁止用”rm
–fr 文件名”,这是杀鸡用牛刀的做法,必须禁止掉,最多用”rm –f 文件名”。rm
–fr 一般用来强制删除目录不提示,非常危险。

建议:

使用mv替代rm,也就是把文件移动到/tmp下,然后等/tmp分区将要满时一次性删除,减少犯错。

find删除

  1. [root@oldboy66 data]# find
    /root/data/ -type f -exec rm -f {} \;

在脚本中删除文件或目录时生产环境的使用方法一般为:

1、和xargs搭配用法

  1. #删除15天以前的文件

  2. find . -type f -name “*.log” -mtime +15 |xargs rm -f

  1. #删除目录30天 慎用

  2. find . -type f -name “*.log” -mtime +30 |xargs rm -fr

2、使用find的-exec

  1. #在/logs目录中查找更改时间在5日以前的文件并删除它们
  1. find /logs -type f -mtime “*.log” -mtime +5 -exec rm {} \;

find命令的原理:

图片 2

\
:特殊字符,让一个有特殊意义的字符,脱掉马甲。

.. :上级目录

. :当前目录

\. :代表.号

|
:管道(把前一个命令结果的输出交给后一个程序进行继续处理)

-type :按文件类型查找

-name
:按名字查找,查找的内容最好用双引号括起来。

! :取反。

删除目录下除了oldboy.txt外的所有文件:

  1. [root@oldboy66 data]# find
    /root/data -type f ! -name “oldboy.txt” |xargs rm -f

  2. [root@oldboy66 data]# find
    /root/data/ -type f ! -name “oldboy.txt” -exec rm {} \;

linux面试题:删除一个目录下所有文件,但保留一个指定文件。

   

   

1.用rename命令修改后缀名,这个是最简单最省事的办法

[root@localhost ~]# mkdir /data 或者:cd /;madir data

7、退出到上级目录,删除data目录。

命令:

  1. cd ..或cd ../

  2. rm -r data或rmdir data

  3. #里面是空目录不需要用-rf。

总结:

..
:相对路径,表示当前目录的上一级目录,例如:/mnt/oldboy,mnt就是oldboy的上级目录。

.
:相对路径,表示当前目录,即当前命令行的目录。

rm
[-irf] [文件/目录] 删除文件/目录

    -i:询问用户是否正确删除,用y或n来回答。

    -r:删除目录时加该选项,删除目录及目录下的文件和目录。

    -f:强制删除,不用确认。

rmdir
[-p] [目录名] 用来删除空目录,-p表示递归删除目录,目录里不能有文件或者目录

如:/a/b/c

rmdir /a/b/c
:会删除/a/b/c,而/a/b还在。

rmdir –p /a/b/c
:会删除/a,/a/b,/a/b/c。

但是rmdir /a,rmdir –p
/a/b都会出错,提示:Directory not empty。

复制代码 代码如下:

2.cd 切换文件目录命令

8、限定输出

已知文件test.txt内容为:

test

liyao

oldboy

请给出打印test.txt内容时,不包含oldboy字符串的目录。

方法一:

head:头部,取文件的前N行,默认前10行,取出前三行-3

  1. [root@oldboy66 ~]# head -2 test.txt

方法二:

grep:过滤器,把想要的或者不想要的分离开,-v排除。

  1. [root@oldboy66 ~]# grep -v “oldboy” test.txt

提示:也可以使用cat
test.txt|grep –v “oldboy”,这个命令虽然能实现,但是执行效率差很多。

方法三:

sed:删除,d表示delete删除,p表示print打印,-n取消sed的默认输出,-i改变文件内容。

    sed –n
‘/过滤的内容/处理的命令’ 文件

  1. [root@oldboy66 ~]# sed -e
    ‘/oldboy/d’ test.txt

  2. [root@oldboy66 ~]# sed /oldboy/d
    test.txt

  3. [root@oldboy66 ~]# sed -e /^oldboy/d
    test.txt

  4. [root@oldboy66 ~]# sed -n
    /[^oldboy]/p test.txt

   

方法四:

awk:

  1. [root@oldboy66 ~]# awk /[^oldboy]/
    test.txt

[root@demo test_rename]# ll

3.ls 查看文件目录命令

9、用一条命令完成创建目录/oldboy/test,即创建/oldboy目录和/oldboy/test目录

命令:

  1. mkdir -p /oldboy/test

实践过程:

  1. #递归创建目录,一般第一级目录不存在时用-p,否则报错mkdir:
    cannot create directory `/oldboy/test’: No such file or directory
  1. [root@oldboy66 /]# mkdir -p
    /oldboy/test

安装系统补装工具命令:

yum安装或者rpm安装、源代码安装

更新补丁执行(生产环境尽量不做,除非有已知的安全漏洞):

yum update

安装tree:

  1. [root@oldbo [root@oldboy66 /]# yum
    install tree -y

  2. #查询tree

  3. [root@oldboy66 /]# rpm -qa tree

  1. tree-1.5.3-3.el6.x86_64

  2. [root@oldboy66 /]# tree oldboy/

  1. oldboy/

  2. └── test

  3.    

  4. 1 directory, 0 files

tree:显示目录树结构

yum:linux里的包管理器,yum可以帮助解决依赖问题。

例如:yum install tree
-y,作用下载tree包,然后调用rpm命令安装tree包,如果需要依赖包,会自动下载并提前安装。

rpm:
-ivh(安装显示输出)

rpm –ivh
包名.rpm(提前下载好),rpm安装的最大问题是无法解决依赖问题。

总计 20

查看这个文件:[root@localhost ~]# ls -ld /data

10、已知/tmp目录下存在test.txt文件,如何执行命令才能把/mnt/test.txt拷贝到/tmp下覆盖掉/tmp/test.txt,而linux系统不提示是否覆盖(root权限下)。

命令:

方法一:

/bin/cp /mnt/test.txt
/tmp/test.txt

方法二:

\cp /mnt/test.txt
/tmp/test.txt

提示:此题就是屏蔽掉系统默认的对应命令别名,默认执行cp的操作是调用了别名的,所以提示覆盖。

cp命令默认是不会提示overwrite,但是cp的-i选项会提示,而一般Linux的用户环境文件~/.bashrc中会把cp命名成alias
cp=’cp
-i’。这样在Linux下输入cp命令实际上运行的是cp
–i,加上一个”\”符号或者写cp全路径/bin/cp就是让此次的cp命令不使用别名(cp
-i)运行。

别名概念:

输入alias查找当前别名。

  1. [root@oldboy66 /]# alias

  2. alias cp=’cp -i’

  3. alias l.=’ls -d .* –color=auto’

  1. alias ll=’ls -l –color=auto’

  2. alias ls=’ls –color=auto’

  3. alias mv=’mv -i’

  4. alias rm=’rm -i’

  5. alias which=’alias | /usr/bin/which
    –tty-only –read-alias –show-dot –show-tilde’

取消别名设置:unalias(临时生效,重启失效)

  1. [root@oldboy66 /]# unalias cp
  1. [root@oldboy66 /]# alias

  2. alias l.=’ls -d .* –color=auto’

  1. alias ll=’ls -l –color=auto’

  2. alias ls=’ls –color=auto’

  3. alias mv=’mv -i’

  4. alias rm=’rm -i’

  5. alias which=’alias | /usr/bin/which
    –tty-only –read-alias –show-dot –show-tilde’

添加别名设置:

  1. [root@oldboy66 /]# alias cp=’cp -i’
  1. [root@oldboy66 /]# alias

  2. alias cp=’cp -i’

  3. alias l.=’ls -d .* –color=auto’

  1. alias ll=’ls -l –color=auto’

  2. alias ls=’ls –color=auto’

  3. alias mv=’mv -i’

  4. alias rm=’rm -i’

  5. alias which=’alias | /usr/bin/which
    –tty-only –read-alias –show-dot –show-tilde’

自定义别名oldboy:

  1. #设置oldboy为别名,执行echo I am
    oldboy linux

  2. [root@oldboy66 /]# alias
    oldboy=”echo I am oldboy linux”

  1. #查看oldboy别名

  2. [root@oldboy66 /]# alias|grep oldboy

  1. alias oldboy=’echo I am oldboy linux’
  1. [root@oldboy66 /]# oldboy

  2. I am oldboy linux

  3. #取消oldboy别名

  4. [root@oldboy66 /]# unalias oldboy

  1. [root@oldboy66 /]# alias|grep oldboy

自定义rm:

  1. [root@oldboy66 /]# alias rm=’echo
    “rm can not be used,pls use mv”‘
  1. [root@oldboy66 /]# alias|grep rm
  1. alias rm=’echo “rm can not be used,pls use mv”‘
  1. [root@oldboy66 /]# rm -fr
    /root/oldboy/

  2. rm can not be used,pls use mv -fr
    /root/oldboy/

方法三:

unalias cp

cp /mnt/test.txt
/tmp/test.txt

提示:命令行处理别名仅在当时生效,重启系统后失效。

alias:查看以及定义别名

unalias:取消别名

~:用户的家目录,针对root,~就代表/root。

别名的配置文件,针对root用户/root/.bashrc;所有用户生效,/etc/bashrc或/etc/profile定义,生效执行soure
/etc/bashrc或/etc/profile。

别名的作用:

1、通过给危险命令加一别保护参数,防止人为误操作。

2、把很多复杂的字符串或命令变成一个简单的字符串或命令。

-rw-r–r– 1 root root 0 09-27 00:57 rename1.log

4.touch 创建文件命令或者修改文件时间搓

11、只查看ett.txt文件(100行)内第20到第30行的内容。

命令:

sequence == seq序列

  1. #打印1到3

  2. [root@oldboy66 tmp]# seq 3

  3. 1

  4. 2

  5. 3

  6. #打印1到3

  7. [root@oldboy66 tmp]# seq 1 3

  8. 1

  9. 2

  10. 3

  11. 打印2到8

  12. [root@oldboy66 tmp]# seq 2 8

  13. 2

  14. 3

  15. 4

  16. 5

  17. 6

  18. 7

  19. 8

  20. #打印1到7的奇数

  21. [root@oldboy66 tmp]# seq 1 2 7

  1. 1

  2. 3

  3. 5

  4. 7

  5. #打印0到7的偶数

  6. [root@oldboy66 tmp]# seq 0 2 7

  1. 0

  2. 2

  3. 4

  4. 6

Usage: seq
[OPTION]… LAST

or: seq [OPTION]…
FIRST LAST

or: seq [OPTION]…
FIRST INCREMENT LAST

-s:指定序列的分割符

  1. [root@oldboy66 tmp]# seq -s “–” 5

  2. 1–2–3–4–5

  3. [root@oldboy66 tmp]# seq -s “@” 5

  4. 1@2@3@4@5

生成ett文件,seq 100
>ett.txt。

  1. [root@oldboy66 tmp]# seq
    100 >ett.txt

方法一:

tail:尾巴,取出文件的最后N行,默认最后10行,取最后三行-n
3 。

    -f:跟踪一个文件的尾部实时变化(tail
–f ett.txt)。

  1. [root@oldboy66 /]# head -30
    ett.txt|tail -11

  2.    

  3. [root@oldboy66 /]# tail -81
    ett.txt|head -11

方法二:

  1. #效率高(首选)

  2. [root@oldboy66 tmp]# sed -n ‘20,30p’
    ett.txt

  3. [root@oldboy66 tmp]# sed -n 20,30p
    ett.txt

取出第30行:

  1. [root@oldboy66 tmp]# sed -n ’30p’
    ett.txt

sed命令与选项:

sed强大的功能,是由以下多种命令和选项联合工作的结果。sed通过指定某一地址来决定对哪些行来进行处理,如果没有指定地址,sed默认处理标准输入所有的行。地址的形式可以是数字,正则表达式,或两种结合。如果给出的是由逗号连接的两个地址,则表示sed要处理的内容就是该两个地址之间的行。

sed命令就是用来处理那些由地址指定的输入行。

命令

功能

a\

在当前匹配行的后面添加一行或多行文本内容

c\

更改当前匹配行的文本,替换成新的文本,原文本行内容消失

d

删除当前模式空间所有的内容

D

删除当前模式空间内第一个\n之前的内容

i\

在当前匹配行之前插入一行或多行文本内容

h

把模式空间的内容复制到保持空间,并覆盖当前保持空间的内容

H

把模式空间的内容追加到保持空间,原保持空间的内容依旧存在(注意两行之间的\n)

x

交换当前模式空间和当前保持空间的内容

g

与s联合使用时,表示对当前行全局匹配替换

g

取出当前保持空间的内容,并将其复制到模式空间,覆盖掉原模式空间的内容

G

取出当前保持空间的内容,并将其复制到模式空间,追加到原模式空间内容的后面(注意两行之间的\n)

p

打印匹配行

P

打印当前模式空间内容,直到第一个换行符(\n)为止

n

读取下一行内容,并复制到模式空间,取代原模式空间的内容

N

读取下一行内容,并复制到模式空间,追加到原模式空间内容的后面(注意两行之间的\n)

q

第一个模式匹配完成后退出或立即退出

r

从另一个文件中读取文本,并加入到当前匹配行后面

s

常说的查找并替换,用一个字符串替换成另一个

w

将匹配的行写入新的文件

y

将字符转换为另一个字符(对正则表达式不能使用y命令)

!

对所选行以外的所有行进行相应处理

=

显示匹配内容行的行号

   

sed选项:

选项

功能

-e

允许多项编辑

-f

后接sed脚本的文件名

-n

取消默认输出

-i

修改文件内容

   

打印:

sed –n ‘2p’ oldboy.txt
(打印第二行)

sed –n ‘$p’ oldboy.txt
(打印最后一行)

sed –n ‘1,3p’
oldboy.txt (打印第1到3行)

sed –n ‘/yass/’p
oldboy.txt (打印匹配yass的行)

sed –n ‘4,/The/’p
oldboy.txt (在第四行匹配模式The,若匹配,则打印)

sed –n ‘/\$/’p
oldboy.txt (匹配元字符$)

sed –n ‘1,$’p
oldboy.txt
(打印整个文件,只需将执行范围设为第一行到最后一行1,$,$意义最后一行)

sed –n ‘/.*ing/’p
oldboy.txt (任意字符,使用模式/.*ing/查询以ing结尾的任意单次)

sed –n ‘/movie/=’
oldboy.txt (打印匹配行的行号)

sed –n –e ‘/movie/p’ –e
‘/movie/=’ oldboy.txt (打印匹配行的内容和行号)

sed ‘=’ oldboy.txt|tail
-2 (显示行数或最大行号)

方法三:

  1. [root@oldboy66 tmp]# awk ‘{if(NR<31 && NR>19) print $1}’
    ett.txt

  2. [root@oldboy66 tmp]# awk ‘{if(NR<31 && NR>19) printf $1″\n”}’ ett.txt

awk:一门语言,过滤内容(取列)

    awk
‘{print $1}’ 文件 $1第一列,$2第二列

    awk –F
“分隔符” ‘{print $1}’ 文件 $1第一列,$2第二列,…,$(NF-1)(倒数第二列),$NF(最后一列)

案例:awk默认分隔符空格

  1. [root@oldboy66 tmp]# cat awk.txt
  1. oldboy oldgirl

  2. ddd fff

  3. [root@oldboy66 tmp]# awk ‘{print
    $1}’ awk.txt

  4. oldboy

  5. ddd

  6. [root@oldboy66 tmp]# awk ‘{print
    $2}’ awk.txt

  7. oldgirl

  8. fff

-F指定分隔符:

  1. [root@oldboy66 tmp]# awk -F “:” ‘{print $1}’ /etc/passwd

指定输出行之间的分隔符:

  1. [root@oldboy66 tmp]# awk -F “:” ‘{print $1 ” ” $3 “==” $5}’ /etc/passwd

总结:

head [-n]
[文件名]:后面直接跟文件名,显示文件前10行。-n表示显示文件前n行。

tail [-nf]
[文件名]:后面直接跟文件名,显示文件后10行。-n表示显示文件后n行。

方法四:

  1. [root@oldboy66 tmp]# cat
    ett.txt|grep 20 -A 10

  2. [root@oldboy66 tmp]# cat
    ett.txt|grep 30 -B 10

  3. [root@oldboy66 tmp]# cat
    ett.txt|grep 25 -C 5

-A:除了显示匹配的一行之外,并显示该行之后的num行。

-B:除了显示匹配的一行之外,并显示该行之前的num行。

-C:除了显示匹配的以后之外,并显示该行前后各num行。

-rw-r–r– 1 root root 0 09-27 00:57 rename2.log

在/data下面建立一个文件oldboy.txt

12、分析图片服务日志,把日志(每个图片访问次数*图片大小的总和)排行,取top10,也就是计算每个url的总访问大小。

说明:这个功能可以用于IDC网站流量带宽很高,然后通过分析服务器日志哪些元素占用流量过大,进而进行优化或裁剪该图片,压缩js等措施。

-rw-r–r– 1 root root 0 09-27 00:57 rename3.log

[root@localhost ~]# cd /data

13、把/oldboy目录及其子目录下所有以扩展名.sh结尾的文件中包含./hostlists.txt的字符串全部替换为./idctest_iplist。

命令:

  1. [root@oldboy66 tmp]# find ./ -name
    “*.sh” -type f -exec sed -i
    ‘s#./hostlists.txt#./idctest_iplist#g’ {} \;

解析:

sed替换:

sed –i
‘s#oldboy#oldgirl#g’ a.txt

    s:查找并替换,用一个字符串替换成另一个。

    g:与s联合使用时,表示对当前行全局匹配替换。

    -i:修改文件内容。

    #:分隔符,也可以用/、@等替换。

find查找:

find / -type f –name
“a.txt”

组合:

替换当前目录下面所有文件名为test.txt中的oldboy为oldgirl。

  1. [root@oldboy66 tmp]# find ./ -name
    “test.txt” -type f|xargs sed -i
    ‘s#oldboy#oldgirl#g’

  2. [root@oldboy66 tmp]# find ./ -name
    “test.txt” -type f -exec sed -i
    ‘s#oldboy#oldgirl#g’ {} \;

  3. [root@oldboy66 tmp]# sed -i
    ‘s#oldboy#oldgirl#g’ `find ./ -name “test.txt” -type f`

查看:

  1. [root@oldboy66 tmp]# find ./ -name
    “test.txt” -type f|xargs cat
  1. [root@oldboy66 tmp]# find ./ -name
    “test.txt” -type f -exec cat {}
    \;

  2. [root@oldboy66 tmp]# cat `find ./
    -name “test.txt” -type f`

特殊字符总结:

符号

作用

>

输出重定向符,重定向内容到文件,清除已有的内容,然后加入新内容,如果文件不存在还会创建文件

>>

追加输出重定向符,>>追加内容到文件(中间无空格)

<

输入重定向(箭头朝向就是数据流的方向)

<<

追加输入重定向

|

管道,就像一个真实管道一样,例如:水管左边进水,右边流出来。其他的功能,egrep "3306|1521" /etc/services

\

转义字符,让有意义的字符脱掉它代表的意义。例如:正则里$表示以什么结尾,用\$表示$符号本身。

~

当前用户的家目录

.或./

一个点号是当前目录,其他功能,正则,任意单个字符

..或../

两个点号是当前目录的上级目录

/

根目录,即linux里所有目录的顶点。也是路径分隔符,而windows里则为D:\工作目录\

;

命令分隔符

{}

生成字符或数字序列(seq),一般配合echo等命令使用,find里的{}意思是前面命令的结果,mkdir stu{1..100}

!

1、!+字母,表示调出最近一次以此字母开头的命令;2、!!表示使用最近一次操作的命令;3、!+数字,表示调出历史的第几条命令。

用户上一次所在的目录。-由OLDPWD变量控制。

   

常用快捷键:

tab命令或路径补全键,如果。

ctrl+c终止当前任务命令或程序。

ctrl+d退出当前用户环境。相当于exit、logout。

ctrl+l清屏。

ctrl+shift+c(ctrl+insert)ssh客户端SecureCRT里复制的命令。

ctrl+a:到开头

ctrl+e:到结尾

ctrl+u:剪切光标前

ctrl+k:删除光标后

-rw-r–r– 1 root root 0 09-27 00:57 rename4.log

[root@localhost data]# touch oldboy.txt

-rw-r–r– 1 root root 0 09-27 00:57 rename5.log

5.vi vim 打开文件编辑命令

[root@demo test_rename]# rename log txt *.log #把*.log改为*.txt

为oldboy.txt增加内容

[root@demo test_rename]# ll

[root@localhost data]# vi oldboy.txt或者vim oldboy.txt

总计 20

打开文件 lnsert 然后编辑

-rw-r–r– 1 root root 0 09-27 00:57 rename1.txt

Ese :wq保存退出

-rw-r–r– 1 root root 0 09-27 00:57 rename2.txt

6.cp 拷贝文件命令

-rw-r–r– 1 root root 0 09-27 00:57 rename3.txt

把oldboy.txt文件拷贝到/tmp下

-rw-r–r– 1 root root 0 09-27 00:57 rename4.txt

[root@localhost data]# cp  oldboy.txt /tmp

-rw-r–r– 1 root root 0 09-27 00:57 rename5.txt

cp(拷贝) 文件 拷贝到路径

[root@demo test_rename]# 

7.cat 查看文件内容命令

2.用for、sed和mv修改后缀名

[root@localhost data]# cat /tmp/oldboy.txt 查看文件内容

复制代码 代码如下:

[root@localhost ~]# cat >test.txt<

[root@demo test_rename]# ll

test

总计 20

liyao

-rw-r–r– 1 root root 0 09-27 01:51 rename1.log

oldboy

-rw-r–r– 1 root root 0 09-27 01:21 rename2.log

EOF

-rw-r–r– 1 root root 0 09-27 01:21 rename3.log

cat生成test.txt文件以及里边的内容

-rw-r–r– 1 root root 0 09-27 01:21 rename4.log

test

-rw-r–r– 1 root root 0 09-27 01:21 rename5.log

liyao

[root@demo test_rename]# for i in $(ls .)

oldboy

> do

8.mv 移动目录命令 或改名(rename)

> mv $i $(echo $i|sed ‘s/\.log/\.txt/’)

把/data 目录移动到/root下

> done

[root@localhost data]# mv /data /root

[root@demo test_rename]# ll

9.rm 删除命令

总计 20

rmdir 删除空目录

-rw-r–r– 1 root root 0 09-27 01:51 rename1.txt

[root@localhost data]# cd /root/data

-rw-r–r– 1 root root 0 09-27 01:21 rename2.txt

[root@localhost data]# rm oldboy.txt

-rw-r–r– 1 root root 0 09-27 01:21 rename3.txt

rm:是否删除普通文件 “oldboy.txt”?y

-rw-r–r– 1 root root 0 09-27 01:21 rename4.txt

退出到上级目录,删除data目录

-rw-r–r– 1 root root 0 09-27 01:21 rename5.txt

[root@localhost data]# cd .. 或cd ../

[root@demo test_rename]#

[root@localhost ~]# rm -r data  或 rmdir data

3.用find和xargs添加后缀名

10.grep 过滤排除命令

复制代码 代码如下:

[root@localhost ~]# cat >test.txt<

[root@demo test_rename]# ll

test

总计 20

liyao

-rw-r–r– 1 root root 0 09-27 02:20 rename1

oldboy

-rw-r–r– 1 root root 0 09-27 02:20 rename2

EOF

-rw-r–r– 1 root root 0 09-27 02:20 rename3

[root@localhost ~]# grep -v oldboy test.txt

-rw-r–r– 1 root root 0 09-27 02:20 rename4

test

-rw-r–r– 1 root root 0 09-27 02:20 rename5

liyao

[root@demo test_rename]# find . -type f |xargs -i mv {} {}.txt

[root@localhost ~]# grep oldboy test.txt

[root@demo test_rename]# ll

oldboy

总计 20

11.head  头部命令 显示文件头部

-rw-r–r– 1 root root 0 09-27 02:20 rename1.txt

[root@localhost ~]# head -2 test.txt

-rw-r–r– 1 root root 0 09-27 02:20 rename2.txt

test

-rw-r–r– 1 root root 0 09-27 02:20 rename3.txt

liyao

-rw-r–r– 1 root root 0 09-27 02:20 rename4.txt

12.tail 尾部命令 显示文件尾部

-rw-r–r– 1 root root 0 09-27 02:20 rename5.txt

[root@localhost ~]# tail -2 test.txt

[root@demo test_rename]#

liyao

oldboy

13.sed 取各种内容命令 擅长打印行

[root@localhost ~]# sed -n /li/p test.txt

liyao

[root@localhost ~]# sed /^oldboy/d test.txt

test

liyao

14.tree 树命令  文件树

[root@localhost ~]# tree /oldboy

bash: tree: 未找到命令…

[root@localhost ~]# tree /oldboy

/oldboy

└── test

1 directory, 0 files

[root@localhost ~]# yum install tree -y #从互联网上安装

已加载插件:fastestmirror, langpacks

15.LANG 字符集命令

查看文件时乱码使用

LANG=en #临时更改 然后执行查看文件树命令

16.which 位置命令

[root@localhost ~]# which cp #汇报cp命令位置

alias cp=’cp -i’

/usr/bin/cp

17.alias 别名命令

[root@localhost ~]# alias

alias cp=’cp -i’

alias egrep=’egrep –color=auto’

alias fgrep=’fgrep –color=auto’

alias grep=’grep –color=auto’

alias l.=’ls -d .* –color=auto’

alias ll=’ls -l –color=auto’

alias ls=’ls –color=auto’

alias mv=’mv -i’

alias rm=’rm -i’

alias which=’alias | /usr/bin/which –tty-only –read-alias –show-dot
–show-tilde’

alias 命令=‘命令’ 添加别名命令

18.unalias 删除别名命令

[root@localhost ~]#unalias cp

19.| 管道命令

通过管道把前一个命令的输出 交给后一个命令继续处理

20.find 查找命令

-type (f d) -name “ddd”按名字查找  -mtime 按照修改时间查找

21.seq 生成命令  显示  打印数字序列

[root@localhost ~]# seq 100 >ett.txt

:set nu 显示行号

[root@localhost ~]# sed -n 20,30p ett.txt 
-n取消默认输出,20到30行,p输出

22.xargs 用于把find / ls 的输出交给后面处理 一般在|后边使用

echo oldboylinux >ett.txt

[root@localhost ~]# cat ett.txt

oldboylinux

[root@localhost ~]# cp ett.txt /etc/

[root@localhost ~]# cp ett.txt /opt/

[root@localhost ~]# sed s#oldboylinux#olbdoywindows#g ett.txt
#这只是输出 并没有修改文件内容

#要修改的内容#修改为什么内容#

olbdoywindows

[root@localhost ~]# sed -i s#oldboylinux#olbdoywindows#g ett.txt
#-i保存默认输出 即修改文件内容

[root@localhost ~]# cat ett.txt

olbdoywindows

[root@localhost ~]# find / -type f -name “ett.txt”|xargs sed -i
s#oldboylinux#olbdoywindows#g

#从根开始查 ett.txt文件

[root@localhost ~]# find / -type f -name “ett.txt”|xargs cat

find: ‘/run/user/1000/gvfs’: 权限不够

olbdoywindows

olbdoywindows

olbdoywindows

Author

发表评论

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