风催

管道

--


管道  


# stat file1 | tail -3 --查看stat file1命令的结果的后三行
# tail -5 /etc/passwd |head -1 --查看此文件的倒数第五行
# head -5 /etc/passwd |tail -1 --查看此文件的正数第五行
# cat /etc/passwd |wc -l --统计此文件有多少行
# cat /etc/passwd |grep root |wc -l --统计此文件里有root关键字的行数


# cd /etc
# grep root * --表示在当前目录的所有文件里查找有root关键字的行


# grep root * |cut -d":" -f1 |sort|uniq -c |sort -n -r

--cut -d":" -f1 表示以:为分隔符,截取第一列
--sort  表示把行排序(默认会比较第一个字符来排序,第一个相同则比较第二个......以此类推)
--uniq -c 表示把挨在一起的(不相邻的行不行)相同的行留下唯一一个,重复的都去掉;-c代表统计重复的有多少个
--sort -n -r  前面的-n参数表示以数字排序(默认情况11会排到2前面,加了-n后11会排到2后面);-r表示反向;所以-n -r合起来就是以数字从大到小排序

 


========================================================================

 

重定向


0 标准输入 ----- 终端 --------标准输出 1


错误输出
2

标准输入:指你键盘的输入,或者敲的命令
标准输出:指结果里正确的输出,可以用> 或者 1> 来重定向
错误输出:指结果里错误的输出,可以用 2> 来重定向

 

# ls 1 2
ls: cannot access 2: No such file or directory --错误输出
1 --正确输出,也就是标准输出

# ls 1 2 > /dev/pts/2 --把正确的重定向到/dev/pts/2,错误的还是会默认显示到当前终端
ls: cannot access 2: No such file or directory

# ls 1 2 2> /dev/pts/2 --把错误的重定向,正确的显示到当前终端
1

# ls 1 2 &> /dev/pts/2
# ls 1 2 >& /dev/pts/2
# ls 1 2 > /dev/pts/2 2>&1 --这三个写法都是正确和错误一起重定向

 

重定向的其它用法:

实验1:利用重定向自动修改用户密码
# pwd
/test

# echo > passwd.txt <<EOF --这就是表示创建一个文件,内容为两行123456;EOF是一段标记,就是一个固定用法
> 123456
> 123456
> EOF


# passwd root < passwd.txt &> /dev/null --把root用户密码改成123456.并且信息都扔掉(/dev/null类似一个黑洞设备)

 

扩展一个小错误:
# passwd root < passwd.txt --这样改密码时出现了下面的错误,是因为selinux的影响
Changing password for user root.
New password: Password change aborted.
New password: Password change aborted.
New password: Password change aborted.
passwd: Have exhausted maximum number of retries for service

解决方法
# setenforce 0 --设置selinux为警告调试模式,就可以解决这个问题

 

实验2:手动交互式发邮件
# /etc/init.d/postfix restart --启动postfix邮件服务器(如果没有此服务文件,则yum install postfix安装就可以)
# echo > /var/mail/root --清空root用户的邮箱(这里就是把echo得到的空行,重定向到后面的文件,覆盖后面文件的内容)

# mail -s "哈哈" root --这里表示用本机root用户给本机root用户发一封邮件,主题为哈哈
你好 --正文内容为你好
. --.号表示结束
EOT

# cat /var/mail/root --查看是否收到了此邮件

 

实验3:利用重定向或管道非交互发邮件
# mail -s "邮件主题" root < mail.txt --把mail.txt里的内容做为邮件正文重定向给这封邮件发给root用户
# echo 邮件正文 | mail -s "邮件主题" root --用管道的用法来实现发邮件

 


实验4:覆盖与追加

# echo abc > 123.txt --如果123.txt不存在,则创建123.txt,并内容修改为abc;如果123.txt文件存在,则只把原内容修改为abc

# echo cba >> 123.txt --两个>符号,就是原内容不变,再追加新的内容

# cat > 123.txt << EOF --如果123.txt不存在,则创建它,并加入两行内容111 222;存在则覆盖它原来的内容
111
222
EOF

# cat >> 123.txt << HAHA --相比于上一条,这是追加内容,而且标记不一定要用EOF,只要前后一致成对出现就可以
> 333
> 444
> HAHA

 

==================================================================================


bash环境下命令操作的一些技巧

# clear --此命令可以清屏,也可以使用快捷键ctrl+l来做
# history --查看你在当前终端的命令历史记录(平时可以通过向上或向下箭头来翻命令历史,HOME键可以直接移到一条命令的开头,END键可以直接移到一条命令的结尾)

# !500 --表示执行history里查看到第500条命令

ctrl+shift+r --进入命令匹配模式


!$ --此符号表示上一条命令的后面部分,如
# ls /share/20170717/rhel-server-6.5-x86_64-dvd.iso
# ll !$

==================================================================================

文本编辑器
记事本 写字板 word wps

gedit emacs vi/vim


编辑器常见的功能:
移动,删除,复制,粘贴,编辑修改,查找与替换等


vi vim (增强版vi,现在基本各种linux版本都带有vim)


vi 有三种模式:

1,一般普通模式: (用vi刚打开一个文件就默认为一般普通模式)
2,编辑模式: i I o O a A r R
3,命令行模式: : / ?

# cp /etc/passwd /test/passwd
# vim /test/passwd --因为/etc/passwd文件非常重要,不能随便乱改,所以我这里拷贝一份,打开这个拷贝的副本来做实验操作


移动相关(一般普通模式):
向上,向下,向左,向右箭头
--ctrl+b 向上翻页 = page up
--ctrl+f 向下翻页 = page down
ctrl+d 向下移动半页
ctrl+u 向上移动半页
--G 移动到页末 =shift +g
--gg 移动到页头
--0 移动到行头 = home
--$ 移动到行末 = end
n(代表数字)+回车 向下移动N行

 

删除,复制,粘贴(一般普通模式)
x 向后删除一个字符 = delete
X 往前删除一个字符 = backspace
--dd 直接删除光标所在行 ndd (n代表数字,删除n行)
--yy 复制光标所在行 nyy (n代表数字,复制n行)
--p 粘贴
--u 回退上一次操作 按一次u只能回退一次
--ctrl+r 重做上一次操作

 

进入编辑模式:
--i 当前insert
I 行头insert
a 向后一个字符insert
A 行末insert
--o 下一行insert
O 上一行insert
r 替换光标所在的字符
R 从光标处向后一直替换
--ESC 从编辑模式回退到一般模式

补充一:
有些时候复制其它地方的内容到你的编辑文本中,记录一定要在编辑模式下用鼠标粘贴;如果在一般普通模式下粘贴,可能会少几个开头的字符

补充二:
有些时候,把网络上的一些配置段,复制粘贴到我们vim编辑的文本中,可能会造成格式不紧凑;
解决方法:
先在编辑器里
:set paste
再进入编辑模式,粘贴上去


查找与替换:
-- /word 查找单词 n 向下查找 N 向上查找
-- :1,$s/old/new/g 从第一行到最后一行都用new替换old
  :%s/old/new/g 从第一行到最后一行都用new替换old
-- :n1,n2s/old/new/g 从n1行到n2行用new替换old
  :1,$s/old/new/gc 从第一行到最后一行都用new替换old,多加了一个c就可以要求用户确认哪些换哪些不换

 

--:set number 或者 : set nu 把每一行都加上行号
--:set nonumber 或者 : set nonu 去掉每一行前的行号
:n(代表数字)+回车 直接把光标定位到n行

--:w 保存 (write)
--:q 退出 (quit)
--:wq 保存并退出 = shift+zz
-- +! 表示强制保存或者退出

 

如果你希望vim打开时默认就有行号,可以这样做
# vim /etc/vimrc

set number --在这个配置文件空的地方加上这一句就可以了


====================================================================================

 

posted on 2017-08-09 17:47  风催  阅读(317)  评论(0编辑  收藏  举报

导航