~相信自己,勤奋努力,不断总结!~
1、mkdir 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
2、ls list(列表) 列表目录文件 例子: ls / 列根/目录下目录和文件
-l (long)长格式 -d 查看(directorys)目录
3、cd change directory 改变目录路径 例子: cd /etc
4、pwd print work directory 打印工作目录(显示当前所在路径)
5、touch 创建文件或更新文件时间戳. 如果文件不存在,就建立新文件,
如果文件存在,就改变文件的访问时间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]#
7、vi (相当windows的记事本)编辑方法如下: 例子:vi oldboy.txt
执行oldboy.txt 进入vi编辑器(默认命令模式),点击a或i(insert)进入编辑模式,敲打内容,
然后按键盘上的esc键退出编辑模式(在进入命令模式),最后敲打:wq保存并退出。wq解释为wirte quit
8、vim比较复杂的编辑器 功能复杂,高亮,自动缩进(写shell/python可用)
9、echo 是一个打印输出内容的一个常用命令,配合">或>>"可以为文件覆盖或追加内容,这个命令可要掌握!!还有一个类似较复杂且不常用的命令printf
">"意思是重定向,会清除文见里面所有以前的数据.
">>"为内容追加,只有在文件尾部追加需要的内容
10、cat 查看文件内容 例子:cat oldboy.txt
11、xargs 从标准输入获取内容创建和执行命令行 -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.txt和b.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
13、cpcopy拷贝文件或目录,默认不能拷目录
-r递归拷贝,用于复制目录
-a 相当于-pdr
-p连同档案属性一起复制过去,而非使用默认属性(例如:使用权限保持不变)
-d若源文件为链接文件(link file),则复制链接文件属性而非档案本身(
-f强制
14、mvmove移动文件或目录
**提示: 如果希望带目录拷贝,尽量不要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
15、find 查找 (企业面试常常会考!!*****)
-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
16、rm 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出来的结果 合并成一行)
17、grep(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
18、head 头、头部 读取文件的前n行,默认前10行 -n 数字 ,习惯 -数字 忽略n
19、tail 尾巴 读取文件的后n行,默认后10行 -n 数字 ,习惯 -数字 忽略n
20、alias 别名 查看和设置别名 例子:查看别名直接查看别名即可
作用:
(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
21、unalias 取消别名
22、seq sequence 序列
23、sed 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
24、awk linux三剑客老大 过滤、输出内容,一门语言。 NR 表示行号 例子: awk '19<NR && NR<31' ett.txt
25、useradd 添加用户 语法:useradd 用户名 , useradd oldboy
26、passwd 为用户设置或修改密码 语法:passwd 用户名 , passwd oldboy 为oldboy修改密码, 若直接输入passwd 就是当前的用户
近接用法:(非交互式更改密码)
[root@oldboy ~]# echo "123456" | passwd --stdin oldboy
Changing password for user oldboy.
passwd: all authentication tokens updated successfully.
27、uname 打印系统信息 -m 32位or64位 -r 内核版本 -a 显示所有 -n(显示主机名)
28、hostname 显示和设置主机名 默认是显示主机名,设置主机名可以 hostname名子 (临时生效)
29、runlevel 查看当前系统运行级别
30、init 切换运行级别,后面接对应级别的数字,例如:init 6 就是重启linux的服务器)
31、shutdown(halt、init 0 ) 关机
关机 shutdown -h now shutdown -r 重启
32、reboot (init 6) 重启电脑
33、history 查看及清理历史纪录 -c清空所有 -d 删除指定历史纪录
34、dmesg 命令可以系统故障信息
35、ifup和ifdown 启动和停止网卡 ,可以接网卡名 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行)内第20到30行的内容 (企业常见面试题)
答案(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 --->(这样可以不用重新启动机器)