~相信自己,勤奋努力,不断总结!~

1mkdir make directorys 创建目录   例子: mkdir /data 在根/下创建data目录   -p 递归创建目录

例子:

[root@oldboy /]# mkdir -p /oldboy/test/a/b/c/d   (-p 递归创建目录)

[root@oldboy /]# tree /oldboy/(如果tree没有,可以yum install tree -y)

/oldboy/

└── test

    └── a

        └── b

            └── c

                └── d

2ls  list(列表)   列表目录文件   例子: ls / 列根/目录下目录和文件

    -l (long)长格式   -d 查看(directorys)目录

3cd  change directory 改变目录路径  例子: cd /etc 

4pwd print work directory 打印工作目录(显示当前所在路径)

5touch 创建文件或更新文件时间戳. 如果文件不存在,就建立新文件,

如果文件存在,就改变文件的访问时间atime等时间戳信息


6、相对路径和绝对路径

windows 绝对路径:

E:\2016-oldboy    从头(盘符)开始的路径

linux绝对路径: cat /etc/sysconfig/network-scripts/ifcfg-eth0,从根/开始的目录

相对路径:不从根/开始,也不从头(/)开始的路径。

 例如

[root@oldboy /]# ls

bin   data  etc   lib    lost+found  mnt     opt   root  selinux  sys  usr

boot  dev   home  lib64  media       oldboy  proc  sbin  srv      tmp  var

[root@oldboy /]# cd  oldboy/

[root@oldboy oldboy]# ls

a  b  c  c.txt  test

[root@oldboy oldboy]# cd test    ----> 相对路径进去test资料夹

[root@oldboy test]# cd /

[root@oldboy /]# cd /oldboy/test/   ---->绝对路径进去test资料夹

[root@oldboy test]#


7vi (相当windows的记事本)编辑方法如下: 例子:vi oldboy.txt

执行oldboy.txt 进入vi编辑器(默认命令模式),点击ai(insert)进入编辑模式,敲打内容,

然后按键盘上的esc键退出编辑模式(在进入命令模式),最后敲打:wq保存并退出。wq解释为wirte quit


8vim比较复的编辑器 功能复,高亮,自动缩进(写shell/python可用)


9echo 是一个打印输出内容的一个常用命令,配合">>>"可以为文件覆盖或追加内容,这个命令可要掌握!!还有一个类似较复且不常用的命令printf

">"意思是重定向,会清除文见里面所有以前的数据

">>"为内容追加,只有在文件尾部追加需要的内容


10cat     查看文件内容  例子:cat oldboy.txt


11xargs 从标准输入获取内容创建和执行命令行   -n (加数字-->分组)

例子:

[root@oldboy data]# echo 1 2 3 4 5 6 7 8 9 > oldboy.txt 

[root@oldboy data]# xargs -n 2 < oldboy.txt 

1 2

3 4

5 6

7 8

9

[root@oldboy data]# xargs -n 3 < oldboy.txt 

1 2 3

4 5 6

7 8 9


多行文本追加:(使用cat)  也可以用cat新增文件(如果文件本来不存在) cat > oldboy.txt 然后输入内容,回车,ctrl-c 便可新增文件。

例子:

[root@oldboy test]# cat >>/data/oldboy.txt<<EOF

> linux

> EOF

[root@oldboy test]# cat /data/oldboy.txt 

linux

[root@oldboy test]# cat >>/data/oldboy.txt<<EOF

> good

> EOF

[root@oldboy test]# cat /data/oldboy.txt 

linux

good


12、特殊符号:


>1>  输出重定向:把前面输出的东西输入到后边的文件中,会清除文件原有内容   例子:echo 'oldboy' >a.txt echo'oldboy' 1>b.txt  **a.txtb.txt内容相符

>>1>>   追加输出重定向:把前面输出的东西追加到后边的文件尾部,不会清除文件原有内容

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

例子1:

[root@oldboy data]# echo 1 2 3 4 > oldboy.txt 

[root@oldboy data]# cat oldboy.txt 

1 2 3 4

[root@oldboy data]# xargs -n 2 < oldboy.txt 

1 2

3 4

例子2:

[root@oldboy data]# tr " " "\n" < oldboy.txt 

1

2

3

4

0<<<<   追加输入重定向:后面跟字符串,用来表达"输入结束",也可以用ctrl+d来结束输入

例子:

[root@oldboy ~]# cat >>/data/a.txt 0<<EOF

> i am studing linux 

> oldboy

> EOF

[root@oldboy ~]# cat /data/a.txt 

i am studing linux 

oldboy

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

例子1:

[root@oldboy data]# echo oldboy > a.txt

[root@oldboy data]# cat a.txt 

oldboy

[root@oldboy data]# echo oldboy 1> a.txt 

[root@oldboy data]# cat a.txt 

oldboy

[root@oldboy data]# echo oldgirl 1> a.txt 2>b.txt

[root@oldboy data]# cat a.txt 

oldgirl

[root@oldboy data]# cat b.txt 

[root@oldboy data]# eho oldgirl 1> a.txt 2>b.txt   //这边是错误ㄉ部分

[root@oldboy data]# cat b.txt 

-bash: eho: command not found

**在工作中,时常会把正确和错误的资讯都放在一起,该如何实现?

答案(1):  推荐使用

[root@oldboy data]# echo oldgirl 1>a.txt 2>&1

[root@oldboy data]# cat a.txt 

oldgirl

[root@oldboy data]# eho oldgirl 1>a.txt 2>&1   //(2>&1  写法是把标准错误重定向到标准输出,即让错误的输出和正确的一样,正确的定向到哪,错误就到哪)

[root@oldboy data]# cat a.txt 

-bash: eho: command not found

答案(2):

[root@oldboy data]# echo hello &>a.txt

[root@oldboy data]# cat a.txt 

hello

[root@oldboy data]# eco hello &>a.txt   // (&>意思是正确和错误都放在一起)

[root@oldboy data]# cat a.txt 

-bash: eco: command not found

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

例子:

接续上面答案(2)

[root@oldboy data]# echo test &>>a.txt

[root@oldboy data]# cat a.txt 

-bash: eco: command not found

test

说明:

1、箭头的指向就是数据的流向

2、数字说明:

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

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

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

(4)2>&1标准正常输出和标准错误输出一样,相当于跟屁虫,1放到哪,2就到哪

例子:echo 'oldboy' >a.txt 2>&1



13cpcopy拷贝文件或目录,默认不能拷目录  

-r递归拷贝,用于复制目录 

-a 相当于-pdr

-p连同档案属性一起复制过去,而非使用默认属性(例如:使用权限保持不变)

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

-f强制


14mvmove移动文件或目录

**提示: 如果希望带目录拷贝,尽量不要mv/data/ /root/ 移动目录时,源目录结尾不要多余的斜线。虽然此处是可以的,但尽量保持好习惯

例子:

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

[root@oldboy /]# ls

bin   dev  home  lib64       media  opt   root  selinux  sys  usr

boot  etc  lib   lost+found  mnt    proc  sbin  srv      tmp  var

[root@oldboy /]# ls /root/

anaconda-ks.cfg  a.txt  b.txt  data  install.log  install.log.syslog


15find 查找 (企业面试常常会考!!*****)

-type文件类型(f(file),d(directory),c(character),b(block),s(socket),l(link)), 

-name"文件名"

-mtime 时间  按文件修改时间查找,时间数字分三种 (1)+7 -->表示7天以前 (2)7 -->表示第七天 (3)-7 -->表示最近7

!取反 , -a and 交集(并且) -o or并集(或者)

例子(1):合并于16例子说明

例子(2):(**在脚本中删除文件或目录时生产环境的使用方式**)

[root@oldboy data]# find /data -type f -name "*.txt" -mtime -1

/data/3.txt

/data/2.txt

/data/1.txt

[root@oldboy data]# find /data -type f -name "*.txt" -mtime -1 | xargs rm -f    (查找/data目录,删除第一天修改过的内容)

例子(3):

[root@oldboy data]# touch {1..10}.txt

[root@oldboy data]# ls

10.txt  1.txt  2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  9.txt

[root@oldboy data]# mv `find /data -type f -name "*.txt"` /tmp/

[root@oldboy data]# ls

[root@oldboy data]# ls /tmp

10.txt  2.txt  4.txt  6.txt  8.txt  oldboy.txt

1.txt   3.txt  5.txt  7.txt  9.txt  yum.log


***企业面试题(题目:删除一个目录下的所有文件,但保留一个指定文件 http://oldboy.blog.51cto.com/2561410/1650380



16rm remove删除目录和文件  (***强调:删除命令要慎用,非常危险,删除前一定要先备份一份)  -f (force) 强制  -r (递归recursive)用于删除目录

例子(1):

[root@oldboy data]# rm oldboy.txt 

rm: remove regular file `oldboy.txt'? y

例子(2):

[root@oldboy data]# rm -f oldboy.txt   //rm -f 无法删除目录

例子(3):

[root@oldboy ~]# rm -rf data

**一般来说 运维人员建议利用find来删除文件**

例子(1):

[root@oldboy /]# echo oldboy >/data/oldboy.txt

[root@oldboy /]# ls /data

oldboy.txt

[root@oldboy /]# find /data -type f

/data/oldboy.txt

[root@oldboy /]# echo oldboy >/data/a.txt

[root@oldboy /]# find /data -type f

/data/a.txt

/data/oldboy.txt

[root@oldboy /]# find /data -type f -name "oldboy.txt"

/data/oldboy.txt

[root@oldboy /]# find /data -type f -name "oldboy.txt" -exec rm {} \;   (**exec 是指 要准备对前面所出来的资讯做什么动作--->放在exec 后边)

[root@oldboy /]# ls /data/

a.txt

例子(2):

[root@oldboy /]# ls /data

a.txt  b.txt  c.txt

[root@oldboy /]# find /data -type f -name "*.txt"

/data/b.txt

/data/a.txt

/data/c.txt

[root@oldboy /]# find /data -type f -name "*.txt" |xargs rm -f    (xargs的目的是要将find出来的结果 合并成一行)


17grep(liunx三剑客之一*****)过滤需要的内容

-v 排除内容 

-B(before)除了显示匹配的一行之外,并显示该行之前的num 

-A(after) 除了显示匹配的一行之外,并显示该行之后的num

-C(context) 除了显示匹配的一行之外,并显示该行之前后各num

例子:创建test.txt文件,但我不要显示出oldboy

答案(1):(推荐)

[root@oldboy /]# cat >>test.txt<<EOF

> test

> liyao

> oldboy

> EOF

[root@oldboy /]# cat test.txt 

test

liyao

oldboy

[root@oldboy /]# grep -v oldboy test.txt   (-v 排除)

test

liyao

答案(2): (没有必要先把文件内容呈现出来再进行过滤,只是此方法比较容易理解)

[root@oldboy /]# cat test.txt | grep -v "oldboy"

test

liyao

例子: C.P 题目(2) grep 20 -A 10 ett.txt 


18head  头、头部   读取文件的前n行,默认前10   -n 数字 ,习惯 -数字 忽略n


19tail  尾巴       读取文件的后n行,默认后10   -n 数字 ,习惯 -数字 忽略n


20alias 别名     查看和设置别名  例子:查看别名直接查看别名即可

作用:

(1)给危险命令加一些保护参数,防止人为误操作。

例子:

[root@oldboy /]# alias rm='echo this command does not allow to use'

[root@oldboy /]# rm

this command does not allow to use

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

例子:

[root@oldboy /]# alias net='cat /etc/sysconfig/network-scripts/ifcfg-eth0

[root@oldboy /]# net

DEVICE=eth0

HWADDR=00:0c:29:fe:c6:a9

TYPE=Ethernet

UUID=a414c6d9-f88d-4f92-ac02-322bea0dfb6d

ONBOOT=yes

NM_CONTROLLED=yes

BOOTPROTO=dhcp

USERCTL=no

PEERDNS=yes

IPV6INIT=no


**若想要定义别名永久生效: 要放在这些地方

/etc/profile 全局生效

~/.bashrc    当前用户生效


C.P :(centos linux 因别名问题引起的麻烦及解决技巧) http://oldboy.blog.51cto.com/2561410/699046


21unalias 取消别名


22seq  sequence 序列


23sed   stream editor  linux三剑客老二  流编辑器,实现对文件的增删改替检查

参数 -n 取消默认输出 (我要什么 就打印什么) , -i 修改内容  , -e 允许多项编辑 -s 指定分隔符

         p  打印 例子:sed -n '20,30'p ett.txt 

功能:

g-->s联合使用时,表示对当前行全局匹配替换;s-->常说的查找并替换,用一个字符串替换成另一个

例子:(sed 字符串替换)

[root@oldboy /]# cat oldoy.txt 

oldboy gongli

[root@oldboy /]# sed -i 's#gongli#love#g' oldoy.txt 

[root@oldboy /]# cat oldoy.txt 

oldboy love


24awk   linux三剑客老大    过滤、输出内容,一门语言。  NR 表示行号    例子: awk '19<NR && NR<31' ett.txt 


25useradd 添加用户   语法:useradd 用户名 , useradd oldboy


26passwd 为用户设置或修改密码  语法:passwd 用户名 , passwd oldboy oldboy修改密码, 若直接输入passwd 就是当前的用户

近接用法:(非交互式更改密码)

[root@oldboy ~]# echo "123456" | passwd --stdin oldboy

Changing password for user oldboy.

passwd: all authentication tokens updated successfully.

27uname 打印系统信息  -m 32or64  -r 内核版本  -a 显示所有  -n(显示主机名)


28hostname 显示和设置主机名  默认是显示主机名,设置主机名可以 hostname名子 (临时生效)


29runlevel 查看当前系统运行级别


30init 切换运行级别,后面接对应级别的数字,例如:init 6 就是重启linux的服务器)


31shutdown(haltinit 0 ) 关机 

    关机 shutdown -h now   shutdown -r 重启


32reboot (init 6) 重启电脑


33history 查看及清理历史纪录  -c清空所有  -d 删除指定历史纪录


34dmesg 命令可以系统故障信息


35ifupifdown 启动和停止网卡 ,可以接网卡名 ifup eth0




****特殊字符****:

(1)| 管道 

(2).. 上一级目录

(3).  当前目录

(4)/ 所有目录的顶点,也是路径的分割符

(5)!+字母  表示调出最近一次以此字母开头的命令

(6)!! 表示使用最近一次的操作

(7)!+数字 表示调出历史的第几条命令

(8)! 也有取反的意思 (find,shell编程里面会有)

(9)~ 当前用户的家目录

(10)&& 并且




***题目***

(1)已知/tmp/目录下已经存在了test.txt文件,如何执行命令才能把/mnt/test.txt拷贝到/tmp下覆盖掉/tmp/test.txt

   而让linux系统不提示是否覆盖(root权限下)

答案(1):

[root@oldboy /]# \cp /mnt/test.txt /tmp/

  (使用反斜线 \ 就是不使用别名)因为...

):alias 默认下 已经有这些别名  -i 就是确认的意思  如果要临时取消别名: unalias cp  就可以取消别名

[root@oldboy /]# alias

alias cp='cp -i'

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'

答案(2):

[root@oldboy /]# /bin/cp /mnt/test.txt /tmp/  (使用全路径也可以不使用别名)

答案(3):

取消别名 (重新开机后就会不见ㄌ)

[root@oldboy /]# unalias cp

[root@oldboy /]# cp /mnt/test.txt /tmp/test.txt


(2)只查看ett.txt文件(100)内第2030行的内容  (企业常见面试题)

答案(1):

[root@oldboy /]# seq 100 > ett.txt

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

20

21

22

23

24

25

26

27

28

29

30

答案(2):----->最有效率的方式,要记得!

[root@oldboy /]# sed -n '20,30'p ett.txt

答案(3):  NR 是行号,&&意思是并且,两边同时成立

[root@oldboy /]# awk '19<NR && NR<31' ett.txt

答案(4):

[root@oldboy ~]# grep 20 -A 10 ett.txt

答案(5):

[root@oldboy ~]# grep 25 -C 5 ett.txt

答案(6):

[root@oldboy ~]# grep 30 -C 10 ett.txt

(3)/oldboy目录及其子目录下所有以扩展明.sh结尾的文件中包含oldboy的字符串全部替换为oldgirl

答案(1):

[root@oldboy oldboy]# echo "oldboy" > test/del.sh

[root@oldboy oldboy]# echo "oldboy" > test/test.sh

[root@oldboy oldboy]# echo "oldboy" > test/.sh

[root@oldboy oldboy]# find /oldboy -type f -name "*.sh" | xargs sed -i 's#oldboy#oldgirl#g'

oldgirl

oldgirl

oldgirl

答案(2):

[root@oldboy oldboy]# sed -i 's#oldgirl#oldboy#g' `find /oldboy -type f -name "*.sh"`   (注意这个符号`  tab键上面)

oldboy

oldboy

oldboy



Linux 特殊变量


临时生效:

export TMOUNT=10   --->连接的超时时间控制变量

export HISTSIZE=5    --->命令行历史纪录数量

export HISTFILESIZE=     --->命令行命令对应文件的纪录数   ~/.bash_history



永久生效:

echo 'export TMOUNT=300' >>/etc/profile

echo 'export HISTSIZE=5' >>/etc/proflie

echo 'export HISTFILESIZE=5' >>/etc/profile

source /etc/profile      --->(这样可以不用重新启动机器)