Linux常用快捷键
序号 | 快捷键 | 说明 | 备注 |
---|---|---|---|
1 | TAB | 命令或路径补全键 | |
2 | Ctrl+C | 终止当前任务或命令 | |
3 | Ctrl+D | 退出当前用户环境,相当于logout | |
4 | Ctrl+L | 清屏命令,相当于clear | |
5 | Ctrl+Shift+C | 复制命令 | |
6 | Ctrl+Shift+V | 粘贴命令 | |
7 | Ctrl+A | 光标移动到命令开头 | |
8 | Ctrl+E | 光标移动到命令结尾 | |
9 | Ctrl+U | 清除光标前面的内容 | |
10 | Ctrl+K | 清除光标后面的内容 | |
11 | Ctrl+R | 搜索之前输入的内容 | |
12 | Ctrl+Q | 解除挂起,死机 | |
13 | Ctrl+W | 清除当前行 | |
14 | Esc+. | 调出上个路径 |
通配符:
* -- 通配符,代表任意(0到多个)字符*****
? -- 通配符,代表任意1个字符
; -- 连接不同命令的分隔符*****
# -- 配置文件注释*****
| -- 管道*****
~ -- 用户的家目录***** 相当于cd不带参数(vi ~/.base_profile)
- -- 上一次所在的目录*****
$ -- 变量前需要加的符号
/ -- 路径分隔符号,也是根的意思
>或1> -- 重定向,覆盖*****
>> -- 追加重写向,追加内容文件尾部 *****
< -- 输入重定向*****(xargs,tr)
<< -- 追加输入重定向
'' -- 单引号,不具有变量置换功能,输出时所见即所得 *****
""-- 双引号,具有变量置换功能,解析变量后输出,什么都不加一般跟加了""差不多(如果是命令需要用`命令`或者$(命令))*****
`` -- tab键上面的键,反引号,两个``中间的为命令,会先执行等价$( ) *****
{} -- 中间为命令区块组合或者内容序列
! -- 逻辑运算中的“非”(not)
&& -- and 并且 当前一个指令执行成功时,执行后一个指令
|| -- or 或者 当前一个指令执行失败时,执行后一个指令
.. 上一级目录
. 当前目录
常用例子
[root@sanborn ~]# cd /sanborn/
[root@sanborn sanborn]# ll
total 0
[root@sanborn sanborn]# touch {a,b,abc}.sh
[root@sanborn sanborn]# ll
total 0
-rw-r--r-- 1 root root 0 Aug 27 19:59 abc.sh
-rw-r--r-- 1 root root 0 Aug 27 19:59 a.sh
-rw-r--r-- 1 root root 0 Aug 27 19:59 b.sh
[root@sanborn sanborn]# ls ?.sh
a.sh b.sh
[root@sanborn sanborn]# ls ???.sh
abc.sh
[root@sanborn sanborn]# ls -l|grep a
total 0
-rw-r--r-- 1 root root 0 Aug 27 19:59 abc.sh
-rw-r--r-- 1 root root 0 Aug 27 19:59 a.sh
[root@sanborn sanborn]# echo 'date'
date
[root@sanborn sanborn]# echo "date"
date
[root@sanborn sanborn]# echo "`date`"
Tue Aug 27 20:00:59 CST 2019
[root@sanborn sanborn]# echo "$(date)"
Tue Aug 27 20:01:12 CST 2019
[root@sanborn sanborn]# echo `date`
Tue Aug 27 20:01:20 CST 2019
[root@sanborn sanborn]#
详细说明''单引号和""双引号的区别:
[root@sanborn sanborn]# echo oldboy >a.txt
[root@sanborn sanborn]# grep oldboy a.txt
oldboy
[root@sanborn sanborn]# a=oldboy
[root@sanborn sanborn]# grep "$a" a.txt
oldboy
[root@sanborn sanborn]# grep '$a' a.txt
[root@sanborn sanborn]# grep $a a.txt
oldboy
[root@sanborn sanborn]# grep $a a.txt
oldboy
[root@sanborn sanborn]# echo $a >>a.txt
[root@sanborn sanborn]# cat a.txt
oldboy
oldboy
[root@sanborn sanborn]# echo '$a' >>a.txt
[root@sanborn sanborn]# cat a.txt
oldboy
oldboy
$a
{}内容序列举例,常见用法举例
[root@sanborn sanborn]# echo file{1,2,3}
file1 file2 file3
[root@sanborn sanborn]# echo file{1..3}
file1 file2 file3
[root@sanborn sanborn]# touch a.sh
[root@sanborn sanborn]# cp a.sh{,.bak}
[root@sanborn sanborn]# ll
total 4
-rw-r--r-- 1 root root 0 Aug 27 20:41 a.sh
-rw-r--r-- 1 root root 0 Aug 27 20:42 a.sh.bak
-rw-r--r-- 1 root root 17 Aug 27 20:36 a.txt
-rw-r--r-- 1 root root 0 Aug 27 19:59 abc.sh
-rw-r--r-- 1 root root 0 Aug 27 19:59 b.sh
[root@sanborn sanborn]# ll
total 4
-rw-r--r-- 1 root root 0 Aug 27 20:41 a.sh
-rw-r--r-- 1 root root 0 Aug 27 20:42 a.sh.bak
-rw-r--r-- 1 root root 17 Aug 27 20:36 a.txt
-rw-r--r-- 1 root root 0 Aug 27 19:59 abc.sh
-rw-r--r-- 1 root root 0 Aug 27 19:59 b.sh
[root@sanborn sanborn]# mkdir /data/{3306,3307}/data -p
[root@sanborn sanborn]# tree /data
/data
|-- 3306
| `-- data
`-- 3307
`-- data
4 directories, 0 files
常用命令
mkdir
创建目录
- -p 递归 mkdir -p /data/a/b/c
ls
List information about the FILEs (the current directory by default).
- l 长格式
ls -l|grep "^d"
ls -l|awk '{if($2>1)print $0}'
ls -l|sed '/^d/p'
ls -l|awk '/^d/'
- d 查看目录
- h 以比较容易的方式显示文件的大小 如:1K 1M 1G
- F 给不同类型的文件加后缀 */=>@|
- ls -F|grep "$/" 以/结尾
- p 只能目录加/
- a 显示所有文件、包含隐藏文件(默认.开头的文件都是隐藏文件)
- t 按修改时间排序
- r 倒序
- ls -lrt 显示最近修改过的文件
- --color=auto
- ll='ls -l --color=auto'
touch
创建文件
[root@sanborn sanborn]# touch a.txt b.txt
[root@sanborn sanborn]# ls -l *.txt
-rw-r--r-- 1 root root 0 Aug 27 20:51 a.txt
-rw-r--r-- 1 root root 0 Aug 27 20:51 b.txt
[root@sanborn sanborn]# touch file{01..10}
[root@sanborn sanborn]# ls -l file*
-rw-r--r-- 1 root root 0 Aug 27 20:51 file01
-rw-r--r-- 1 root root 0 Aug 27 20:51 file02
-rw-r--r-- 1 root root 0 Aug 27 20:51 file03
-rw-r--r-- 1 root root 0 Aug 27 20:51 file04
-rw-r--r-- 1 root root 0 Aug 27 20:51 file05
-rw-r--r-- 1 root root 0 Aug 27 20:51 file06
-rw-r--r-- 1 root root 0 Aug 27 20:51 file07
-rw-r--r-- 1 root root 0 Aug 27 20:51 file08
-rw-r--r-- 1 root root 0 Aug 27 20:51 file09
-rw-r--r-- 1 root root 0 Aug 27 20:51 file10
cd
切换目录
cd ~ 家目录
cd - 上一次的目录 环境变量OLDPWD env|grep -i oldboy
cd . 当前目录
cd ..上级目录
echo
打印输出内容,配合>
或>>
可以为文件覆盖及追加内容
-
-n
不换行输出 -
-e
可以使用转义字符 enable interpretation of backslash escapes-
\t
tab -
\n
回车
-
[root@zhangqy data]# echo "my name is zhangqy" >zhangqy.txt
[root@zhangqy data]# cat zhangqy.txt
my name is zhangqy
[root@zhangqy data]# echo 'I am a IT boy' >>zhangqy.txt
[root@zhangqy data]# cat zhangqy.txt
my name is zhangqy
I am a IT boy
- 如果
zhangqy.txt
没有,会创建 - 如果
zhangqy.txt
存在,会清空覆盖前面内容
cp
复制文件
参数属性 | 解释说明 |
---|---|
-r | 递归 |
-d | 如果复制的是链接文件,只复制链接文件,对源文件不影响 |
-p | 保持源文件属性 |
-a | 相当于pdr总和 |
-i | 覆盖已有文件前提标用户确定(默认有别名) |
[root@zhangqy data]# alias cp
alias cp='cp -i'
[root@sanborn ~]# alias
alias cp='cp -i'
alias egrep='egrep --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'
[root@zhangqy data]# cp file1 file11
[root@zhangqy data]# cp -a file1 file12
[root@zhangqy data]# ls -l file*
-rw-r--r--. 1 root root 0 Feb 12 21:11 file1
-rw-r--r--. 1 root root 0 Feb 12 21:27 file11
-rw-r--r--. 1 root root 0 Feb 12 21:11 file12
[root@zhangqy data]# cp dir1/ dir4/
cp: omitting directory `dir1/'
[root@zhangqy data]# cp -r dir1/ dir4/
[root@zhangqy data]# ls -ld dir*
drwxr-xr-x. 2 root root 4096 Feb 9 15:49 dir1
drwxr-xr-x. 2 root root 4096 Feb 9 15:49 dir2
drwxr-xr-x. 2 root root 4096 Feb 9 15:49 dir3
drwxr-xr-x. 2 root root 4096 Feb 12 21:33 dir4
vi
vi filename
- vi 命令模式 (默认进入)
- vi 编辑模式 (按iao进入,按Esc退回命令模式)
- 编辑模式下按
:wq
保存退出
head
查看文件,默认查看文件前10行
-n 显示前N行
[root@sanborn sanborn]# head /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
[root@sanborn sanborn]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
rm
删除文件或目录,默认会提示确认
- f 强制删除文件
- r 可以删除目录
- 尽量失败mv、find替换直接删除
删除文件 不能加-r (递归删除)
删除目录则需要加-r
正确删除文件的姿势
1、使用mv命令移动到/tmp(回收站)
2、使用find命令
cd到目的目录
find . -type f(d)-name ""|xargs rm ==>别名在此不生效
cat 查看文件
特殊用法
[root@centos6 data]# cat >>test.txt< 1 2 3 4 5 6
> 7 8 9
> 10 11
> 12 13
> EOF
rmdir
删除目录
- p 递归删除目录
- v 显示删除过程
grep
[root@sanborn sanborn]# cat>>zhangqy.log< I am oldboy teacher!
> I teach Linux.
>
> I like badminton ball,billiard ball and chinese chess!
> my blogis http://zhangqy.blog.51cto.com
> our site is http://www.sanborn.com.cn
> my qq num is 271804108.
>
> not 271800041008.
> my god ,i am not oldbey,but OLDBOY!
> EOF
[root@sanborn sanborn]# cat zhangqy.log
I am oldboy teacher!
I teach Linux.
I like badminton ball,billiard ball and chinese chess!
my blog is http://zhangqy.blog.51cto.com
our site is http://www.sanborn.com.cn
my qq num is 271804108.
not 271800041008.
my god ,i am not oldbey,but OLDBOY!
过滤以m开头的行:
[root@sanborn sanborn]# grep "^m" zhangqy.log
my blog is http://zhangqy.blog.51cto.com
my qq num is 271804108.
my god ,i am not oldbey,but OLDBOY!
过滤以m结尾的行:
[root@sanborn sanborn]# grep "m$" zhangqy.log
my blog is http://zhangqy.blog.51cto.com
过滤空行:
[root@sanborn sanborn]# grep -n "^$" zhangqy.log
3:
8:
[root@sanborn sanborn]# cat -n zhangqy.log
1 I am oldboy teacher!
2 I teach Linux.
3
4 I like badminton ball,billiard ball and chinese chess!
5 my blog is http://zhangqy.blog.51cto.com
6 our site is http://www.sanborn.com.cn
7 my qq num is 271804108.
8
9 not 271800041008.
10 my god ,i am not oldbey,but OLDBOY!
过滤空行:-v是取反
[root@sanborn sanborn]# grep -vn "^$" zhangqy.log
1:I am oldboy teacher!
2:I teach Linux.
4:I like badminton ball,billiard ball and chinese chess!
5:my blog is http://zhangqy.blog.51cto.com
6:our site is http://www.sanborn.com.cn
7:my qq num is 271804108.
9:not 271800041008.
10:my god ,i am not oldbey,but OLDBOY!
因为.
代表任意一个字符,过滤.
就过滤所有的内容了,但空行没有
[root@sanborn sanborn]# grep -n "." zhangqy.log
1:I am oldboy teacher!
2:I teach Linux.
4:I like badminton ball,billiard ball and chinese chess!
5:my blog is http://zhangqy.blog.51cto.com
6:our site is http://www.sanborn.com.cn
7:my qq num is 271804108.
9:not 271800041008.
10:my god ,i am not oldbey,but OLDBOY!
过滤所有的行,包括空行
[root@centos6 data]# grep -n ".*" oldboy.log
1:I am oldboy teacher!
2:I teach Linux.
3:
4:I like badminton ball,billiard ball and chinese chess!
5:my blog is http://oldboy.blog.51cto.com
6:our site is http://www.etiantian.org
7:my qq num is 49000448.
8:
9:not 4900000448.
10:my god ,i am not oldbey,but OLDBOY!
11:gd
12:good
13:glad
过滤"oldb.y"
.
代表任意一个字符
[root@sanborn sanborn]# grep -n "oldb.y" zhangqy.log
1:I am oldboy teacher!
10:my god ,i am not oldbey,but OLDBOY!
过滤"oldb.y"
.
代表任意一个字符; -i 参数:表示不区分大小写
[root@centos6 data]# grep -in "oldb.y" oldboy.log
1:I am oldboy teacher!
5:my blog is http://oldboy.blog.51cto.com
10:my god ,i am not oldbey,but OLDBOY!
过滤结尾的内容"".$"
"\.$"
[root@sanborn sanborn]# grep -n ".$" zhangqy.log
1:I am oldboy teacher!
2:I teach Linux.
4:I like badminton ball,billiard ball and chinese chess!
5:my blog is http://zhangqy.blog.51cto.com
6:our site is http://www.sanborn.com.cn
7:my qq num is 271804108.
9:not 271800041008.
10:my god ,i am not oldbey,but OLDBOY!
[root@centos6 data]# grep -n "\.$" oldboy.log
2:I teach Linux.
7:my qq num is 49000448.
9:not 4900000448.
重复前面一个或多个字符 "0*"
[root@sanborn sanborn]# grep -n "0*" zhangqy.log
1:I am oldboy teacher!
2:I teach Linux.
3:
4:I like badminton ball,billiard ball and chinese chess!
5:my blog is http://zhangqy.blog.51cto.com
6:our site is http://www.sanborn.com.cn
7:my qq num is 271804108.
8:
9:not 271800041008.
10:my god ,i am not oldbey,but OLDBOY!
过滤包含abc
中任意一个字符的行
[root@sanborn sanborn]# grep -n "[abc]" zhangqy.log
1:I am oldboy teacher!
2:I teach Linux.
4:I like badminton ball,billiard ball and chinese chess!
5:my blog is http://zhangqy.blog.51cto.com
6:our site is http://www.sanborn.com.cn
10:my god ,i am not oldbey,but OLDBOY!
过滤不包含abc
中任意一个字符的行
[root@sanborn sanborn]# grep -n "[^abc]" zhangqy.log
1:I am oldboy teacher!
2:I teach Linux.
4:I like badminton ball,billiard ball and chinese chess!
5:my blog is http://zhangqy.blog.51cto.com
6:our site is http://www.sanborn.com.cn
7:my qq num is 271804108.
9:not 271800041008.
10:my god ,i am not oldbey,but OLDBOY!
过滤数字
[root@sanborn sanborn]# grep -n "[0-9]" zhangqy.log
5:my blog is http://zhangqy.blog.51cto.com
7:my qq num is 271804108.
9:not 271800041008.
==三剑客grep总结:==
grep一般常用参数:
- a --在二进制文件中,以文本文件的方式搜索数据
- c --计算找到‘搜索字符串’的次数
- o --仅显示出匹配regrexp的内容(用于统计出现在文中的次数)
- i --忽略大小写的不同,所以大小写视为相同
*****
- n --匹配的内容在其行首显示行号
*****
- v --反向选择,即显示没有‘搜索字符串’内容的那一行
*****
- E --扩展的grep,即egrep
*****
-
--color=auto
以特定颜色高亮显示匹配关键字***
- A after的意思,显示匹配字符串及其后n行的数据
- B before的意思,显示匹配字符串及其前n行的数据
- C context的意思,显示匹配字符串及其前后各num行
find
find 查找
-type -f file文件 -d directory目录 c(character) b(block) s(socket) l(link) -name "文件名"
-mtime 时间 按修改时间查 +7 7天以前 7 第7天 -7 最近7天
find /data -type f -mtime +7|xargs rm -f
find /date -type f -mtime +7 -exec rm -f {} \;
rm -f `find /data -type f -mtime +7`
!取反 -a and 交集 并且;-o or 并集 或者
-maxdepth 深度
find ./ -maxdepth 1 -type d ! -name "."
sed
字符流编辑器
- n 取消默认输出
- i 直接修改文件
1、统一实验文本
[root@centos6 data]# cat person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
2、增删改查
2.1 增
- a 追加文本到指定行后
- i 插入文本到指定行前
2.1.1 单行增加
[root@centos6 data]# sed '2a 106,dandan,CSO' person.txt
101,oldboy,CEO
102,zhangyao,CTO
106,dandan,CSO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@centos6 data]# sed '2i 106,dandan,CSO' person.txt
101,oldboy,CEO
106,dandan,CSO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@centos6 data]# sed '2i 106,dandan,CSO\n107,bingbing,CCO' person.txt
101,oldboy,CEO
106,dandan,CSO
107,bingbing,CCO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
2.1.2 增加多行
[root@centos6 data]# sed '2i 106,dandan,CSO\n107,bingbing,CCO' person.txt
101,oldboy,CEO
106,dandan,CSO
107,bingbing,CCO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@centos6 data]#
[root@centos6 data]# sed '2i 106,dandan,CSO \
> 107,bingbing,CCO' person.txt
101,oldboy,CEO
106,dandan,CSO
107,bingbing,CCO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
指定执行的地址范围
- sed软件可以对单行或多行进行处理。如果在sed命令前面不指定地址范围,那么默认会匹配所有行。
- 用法:
n1[,n2]{sed-commands}
- 地址用逗号分隔的,n1,n2可以用数字、正则表达式、或二者的组合表示。
- 例子:
-
10{sed-commands}
对第10行操作 -
10,20{sed-commands}
对10到20行操作,包括第10,20行 -
10,+20{sed-commands}
对10到30(10+20)行操作,包括第10,30行 -
1~2{sed-commands}
对1,3,5,7,……行操作 -
10,${sed-commands}
对10到最后一行($
代表最后一行)操作,包括第10行 -
/oldboy/{sed-commands}
对匹配oldboy的行操作 -
/oldboy/,/Alex/{sed-commands}
对匹配oldboy的行到匹配Alex的行操作 -
/oldboy/,${sed-commands}
对匹配oldboy的行到最后一行操作 -
/oldboy/,10{sed-commands}
对匹配oldboy的行到第10行操作,注意:如果前10行没有匹配到oldboy,sed软件会显示10行以后的匹配oldboy的行,如果有。 -
1,/Alex/{sed-commands}
对第1行到匹配Alex的行操作 -
/oldboy/,+2{sed-commands}
对匹配oldboy的行到其后的2行操作
-
2.2 删
[root@zhangqy data]# sed '2d' person.txt
101,oldboy,CEO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@zhangqy data]# sed '2,5d' person.txt
101,oldboy,CEO
[root@zhangqy data]# sed '4,$d' person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
[root@zhangqy data]# sed '1~2d' person.txt
102,zhangyao,CTO
104,yy,CFO
[root@zhangqy data]# sed '1,+2d' person.txt
104,yy,CFO
105,feixue,CIO
[root@zhangqy data]# sed '/yy/d' person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
105,feixue,CIO
[root@zhangqy data]# sed '/oldboy/,/yy/d' person.txt
105,feixue,CIO
[root@zhangqy data]# sed '/oldboy/,2d' person.txt
103,Alex,COO
104,yy,CFO
105,feixue,CIO
alias
alias [命令别名]=[命令语句]
unalias
unalias [命令别名]
[root@zhangqy data]# 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'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@zhangqy data]# alias eth0='cat /etc/sysconfig/network-scripts/ifcfg-eth0'
[root@zhangqy data]# eth0
DEVICE=eth0
TYPE=Ethernet
UUID=7095c203-856f-4743-9d71-872c21c9ed63
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
HWADDR=6C:92:BF:55:3D:D8
IPADDR=192.168.203.80
PREFIX=24
GATEWAY=192.168.203.1
DNS1=202.96.128.86
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
[root@zhangqy data]# unalias eth0
[root@zhangqy data]# eth0
-bash: eth0: command not found
xargs
参数选项 | 解释说明 |
---|---|
-n | 指定每行最大参数量 |
-d | 自定义分划符 |
-i | 以{}替换前面的结果 |
[root@zhangqy data]# cat >>test.txt< 1 2 3
> 4 5 6
> 7 8 9
> EOF
[root@zhangqy data]# xargs -n1
awk
过滤、输出内容
NR 行号 NF结尾
$1
第一列
$2
第二列
$0
一整行
$NF
最后一列
[root@zhangqy data]# awk -F ":" 'NR==1{print $1,$4,$NF}' /etc/passwd
root 0 /bin/bash
+
号的意义 贪婪匹配
[root@zhangqy ~]# echo ---1::::::2|awk -F '[-:]+' '{print $1}'
[root@zhangqy ~]# echo ---1::::::2|awk -F '[-:]+' '{print $2}'
1
[root@zhangqy ~]# echo ---1::::::2|awk -F '[-:]+' '{print $3}'
2
seq
语法:
seq [选项]... 尾数
seq [选项]... 首数 尾数
seq [选项]... 首数 增量 尾数
选项:
-f, --format=格式 使用printf 样式的浮点格式
-s, --separator=字符串 使用指定字符串分隔数字(默认使用:\n)
-w, --equal-width 在列前添加0 使得宽度相同
[root@centos6 data]# seq -f "stu%03g" 1 10
stu001
stu002
stu003
stu004
stu005
stu006
stu007
stu008
stu009
stu010
[root@centos6 data]# seq -f "stu%3g" 1 10
stu 1
stu 2
stu 3
stu 4
stu 5
stu 6
stu 7
stu 8
stu 9
stu 10
[root@centos6 data]# seq -f "stu%2g" 10
stu 1
stu 2
stu 3
stu 4
stu 5
stu 6
stu 7
stu 8
stu 9
stu10
-s选项:指定分隔符(默认是回车)
[root@centos6 data]# seq -s " " -f "stu%03g" 1 10
stu001 stu002 stu003 stu004 stu005 stu006 stu007 stu008 stu009 stu010
[root@centos6 data]# seq -s ":" 1 10
1:2:3:4:5:6:7:8:9:10
-w选项:在列前添加0 使得宽度相同
[root@centos6 data]# seq -w 10
01
02
03
04
05
06
07
08
09
10
tree
查看目录结构
参数选项 | 解释说明 |
---|---|
-a | 显示所有文件 |
-d | 只显示目录 |
-f | 显示每个文件的全路径 |
-L | 遍历目录的最大层数 |
-F | 在不同文件类型后面加上结尾,如"*"、"/"、"@" |
-i | 不显示树枝,常与-f配合使用 |
[root@zhangqy data]# tree
.
├── a
├── b
├── bak.tar.gz
├── b.txt
├── c
├── dir1
│ └── test.log
├── dir2
├── dir3
├── dir4
├── file10
├── file11
├── file12
├── file13
├── file2
├── file3
├── file4
├── file5
├── file6
├── file7
├── file8
├── file9
├── nginx.sh
├── person.txt
├── stu_10299_10_finished.jpg
├── stu_10299_1_finished.jpg
├── stu_10299_2_finished.jpg
├── stu_10299_3_finished.jpg
├── stu_10299_4_finished.jpg
├── stu_10299_5_finished.jpg
├── stu_10299_6_finished.jpg
├── stu_10299_7_finished.jpg
├── stu_10299_8_finished.jpg
├── stu_10299_9_finished.jpg
├── test.sh
├── useradd.sh
└── zhangqy.txt
[root@zhangqy data]# tree -d
.
├── dir1
├── dir2
├── dir3
└── dir4
[root@zhangqy data]# tree -if
.
./a
./b
./bak.tar.gz
./b.txt
./c
./dir1
./dir1/test.log
./dir2
./dir3
./dir4
[root@zhangqy data]# tree -L 1 /
/
├── bin
├── boot
├── data
├── dev
├── etc
├── home
├── lib
├── lib64
├── lost+found
├── media
├── mnt
├── opt
├── proc
├── root
├── sbin
├── selinux
├── srv
├── sys
├── tmp
├── usr
└── var
[root@zhangqy data]# tree -F . ##区别目录与文件
.
├── a
├── b
├── bak.tar.gz
├── b.txt
├── c
├── dir1/
│ └── test.log
├── dir2/
├── dir3/
├── dir4/
tr
从标准输入中替换、缩减或删除字符,并将结果写到标准输出。
[root@zhangqy data]# cat zhangqy.txt
my name is zhangqy
I am a IT boy
[root@zhangqy data]# tr -d 'zhangqy' zhangqy.txt
[root@zhangqy data]# tr -s 'zhangqy'
mv
移动文件或重命名文件
[root@zhangqy data]# mv zhangqy.txt /tmp
[root@zhangqy data]# ls -l zhangqy*
ls: cannot access zhangqy*: No such file or directory
[root@zhangqy data]# ls -l /tmp/zhangqy*
-rw-r--r--. 1 root root 33 Feb 12 21:20 /tmp/zhangqy.txt
[root@zhangqy data]# touch a.txt
[root@zhangqy data]# mv a.txt b.txt
[root@zhangqy data]# ls -l *.txt
-rw-r--r--. 1 root root 0 Feb 12 21:58 b.txt
mv dir1/ dir2/ dir3/ dir4/ ##把前三个目录移动到第四个目录下
tree
├── dir4
├── dir1
│ ├── 1.txt
│ ├── 2.txt
│ ├── 3.txt
│ └── 4.txt
├── dir2
└── dir3
rename
rename from to file
-
from
代表需要替换或要处理的字符 文件的一部分,文件的扩展名 -
to
把前面from代表的内容替换为to代表的内容即重命名处理后的结果
[root@centos6 data]# ll
-rw-r--r-- 1 root root 0 Jan 24 15:08 stu_102999_1_finished.jpg
-rw-r--r-- 1 root root 0 Jan 24 15:08 stu_102999_2_finished.jpg
-rw-r--r-- 1 root root 0 Jan 24 15:08 stu_102999_3_finished.jpg
-rw-r--r-- 1 root root 0 Jan 24 15:08 stu_102999_4_finished.jpg
-rw-r--r-- 1 root root 0 Jan 24 15:08 stu_102999_5_finished.jpg
[root@centos6 data]# rename "_finished" "" *.jpg
[root@centos6 data]# ll
-rw-r--r-- 1 root root 0 Jan 24 15:08 stu_102999_1.jpg
-rw-r--r-- 1 root root 0 Jan 24 15:08 stu_102999_2.jpg
-rw-r--r-- 1 root root 0 Jan 24 15:08 stu_102999_3.jpg
-rw-r--r-- 1 root root 0 Jan 24 15:08 stu_102999_4.jpg
-rw-r--r-- 1 root root 0 Jan 24 15:08 stu_102999_5.jpg
basename
截取文件的名字
basename 文件全名
需要截取掉的部分
[root@centos6 data]# ll
-rw-r--r-- 1 root root 0 Jan 24 15:08 stu_sanborn_1.jpg
-rw-r--r-- 1 root root 0 Jan 24 15:08 stu_sanborn_2.jpg
-rw-r--r-- 1 root root 0 Jan 24 15:08 stu_sanborn_3.jpg
-rw-r--r-- 1 root root 0 Jan 24 15:08 stu_sanborn_4.jpg
-rw-r--r-- 1 root root 0 Jan 24 15:08 stu_sanborn_5.jpg
[root@centos6 data]# basename stu_sanborn_1.jpg .jpg
stu_sanborn_1
dirname
截取目录的名字
dirname 文件全路径名
[root@centos6 data]# dirname stu_sanborn_1.jpg
.
[root@centos6 data]# dirname /data/stu_sanborn_1.jpg
/data
[root@centos6 3306]# touch file1
[root@centos6 3306]# pwd
/data/3306
[root@centos6 3306]# dirname /data/3306/file1
/data/3306
file
查看文件类型
md5sum
计算和校验文件的md5值
[root@centos6 data]# md5sum oldboy.log
cb2f9cdf96bbcc67c36725d51499d50c oldboy.log
[root@centos6 data]# md5sum -c oldboy.md5
oldboy.log: OK
chattr
改变文件的扩展属性(只有root能执行)
- a 只能向文件追加内容(不能删除)
- 普通用户家目录下的
.bash_history
- 修改成
chown -R root.root .bash_history
- 改权限
chmod 606 .bash_history
- 添加a
chattr +a .bash_history
- 普通用户家目录下的
- i 文件加锁(不能做任何操作)
- 普通用户家目录下的
.bash_history
- 添加i
chattr +i .bash_history
- 普通用户家目录下的
lsattr
显示文件的扩展属性
[root@centos6 data]# lsattr oldboy.log
-------------e- oldboy.log
[root@centos6 data]# chattr +a oldboy.log
[root@centos6 data]# lsattr oldboy.log
-----a-------e- oldboy.log
[root@centos6 data]# rm -f oldboy.log
rm: cannot remove `oldboy.log': Operation not permitted
[root@centos6 data]# echo "gooood" >>oldboy.log
[root@centos6 data]# tail -1 oldboy.log
gooood
[root@centos6 data]# chattr -a oldboy.log
[root@centos6 data]# lsattr oldboy.log
-------------e- oldboy.log
chown
改变文件的属主和属组
chown 用户.用户组 文件或目录
chage
usermod
cat
- n 显示行号
- T 显示Tab键的分隔符
[root@zhangqy data]# cat --help
Usage: cat [OPTION]... [FILE]...
Concatenate FILE(s), or standard input, to standard output.
-A, --show-all equivalent to -vET
-b, --number-nonblank number nonempty output lines
-e equivalent to -vE
-E, --show-ends display $ at end of each line
-n, --number number all output lines
-s, --squeeze-blank suppress repeated empty output lines
-t equivalent to -vT
-T, --show-tabs display TAB characters as ^I
-u (ignored)
-v, --show-nonprinting use ^ and M- notation, except for LFD and TAB
--help display this help and exit
--version output version information and exit
[root@centos6 data]# cat test.txt
I am oldboy my qq is 1234567
zhang qing yuan
[root@centos6 data]# cat -n test.txt
1 I am oldboy my qq is 1234567
2 zhang qing yuan
[root@centos6 data]# cat -T test.txt
I am oldboy my qq is 1234567
zhang^Iqing^Iyuan
[root@centos6 data]# sed -n l test.txt #打印不可见的字符
I am oldboy my qq is 1234567$
zhang\tqing\tyuan$
less
分而查看文件内容
- h 在查看文件的过程中按h 调出帮助 按
:q
退出 - 退出less按q
[root@centos6 ~]# less -N /etc/services
1 # /etc/services:
2 # $Id: services,v 1.48 2009/11/11 14:32:31 ovasik Exp $
3 #
4 # Network services, Internet style
5 # IANA services version: last updated 2009-11-10
6 #
7 # Note that it is presently the policy of IANA to assign a single well-known
8 # port number for both TCP and UDP; hence, most entries here have two entries
9 # even if the protocol doesn't support UDP operations.
10 # Updated from RFC 1700, ``Assigned Numbers'' (October 1994). Not all ports
…………………………………………………………………………………………………………………………………………………………………………………………………………………
1
2 SUMMARY OF LESS COMMANDS
3
4 Commands marked with * may be preceded by a number, N.
5 Notes in parentheses indicate the behavior if N is given.
6
7 h H Display this help.
8 q :q Q :Q ZZ Exit.
9 ---------------------------------------------------------------------------
10
11 MOVING
12
13 e ^E j ^N CR * Forward one line (or N lines).
14 y ^Y k ^K ^P * Backward one line (or N lines).
15 f ^F ^V SPACE * Forward one window (or N lines).
16 b ^B ESC-v * Backward one window (or N lines).
17 z * Forward one window (and set window to N).
18 w * Backward one window (and set window to N).
19 ESC-SPACE * Forward one window, but don't stop at end-of-file.
head
显示文件内容头部 默认显示前10行
[root@centos6 ~]# head -15 /etc/inittab #显示前15行
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
#
# For information on how to write upstart event handlers, or how
# upstart works, see init(5), init(8), and initctl(8).
tail
显示文件内容尾部 默认显示后10行
==-f 实时输出文件变化后追加的数据==
-F 如果指定文件不存在还会继续等待,直接文件重新生成
[root@centos6 ~]# tail /etc/services
nimgtw 48003/udp # Nimbus Gateway
3gpp-cbsp 48049/tcp # 3GPP Cell Broadcast Service Protocol
isnetserv 48128/tcp # Image Systems Network Services
isnetserv 48128/udp # Image Systems Network Services
blp5 48129/tcp # Bloomberg locator
blp5 48129/udp # Bloomberg locator
com-bardac-dw 48556/tcp # com-bardac-dw
com-bardac-dw 48556/udp # com-bardac-dw
iqobject 48619/tcp # iqobject
iqobject 48619/udp # iqobject
[root@centos6 ~]# tail -f /var/log/cron #实时查看日志
cut
从文本中提取一段文件并输出
参数 | 解释说明 |
---|---|
-b | 以字节为单位进行分割(中文是两个字节为一个字) |
-c | 以字符为单位进行分割(英文的字节与字符一样) |
-d | 指定分隔符;==默认TAB键为分隔符;==一般配合-f使用:指定所在的列;只支持一种分隔符; |
[root@centos6 data]# echo "I am oldboy my qq is 1234567" >test.txt
[root@centos6 data]# cut -b 3 test.txt
a
[root@centos6 data]# cut -b 3-4 test.txt
am
[root@centos6 data]# cut -b 4- test.txt
m oldboy my qq is 1234567
[root@centos6 data]# cut -b -4,4- test.txt
I am oldboy my qq is 1234567
[root@centos6 data]# vim test.txt
I am oldboy my qq is 1234567
我的名字
root@centos6 data]# cut -c 3-4 test.txt
am
名字
[root@centos6 data]# cut -b 3-4 test.txt #以字节为单位就不显示中文了,因为中文是2个字节
am
root@centos6 data]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@centos6 data]# head -1 /etc/passwd|cut -d : -f 4 #显示第四列的0
0
date
完整查看当前时间
[root@zhangqy ~]# date
Tue Feb 13 18:29:49 CST 2018
[root@zhangqy ~]# date +%F
2018-02-13
[root@zhangqy ~]# date +%F-%T
2018-02-13-18:34:30
[root@zhangqy ~]# date +%F -d -1day
2018-02-12
[root@zhangqy ~]# date +%F -d +1day
2018-02-14
tar
==尽量切换到打包目录的上级目录,然后用相对路径打包==
根据时间打包
tar zcvf /路径/筐.tar.gz 苹果
参数选项 | 解释说明 |
---|---|
z | 调用gzip格式来压缩归档文件 |
c | create 创建新的归档文件 |
v | verbose 显示处理过程 |
f | 对普通文件操作 |
t | 查看包的内容 |
x | 从归档文件中解压出来 |
p | 保持属性 |
P(大写) | 从/根开始打包 |
C(大写) | 指定目录操作,如解压到指定目录 |
--exclude | 排除不需要处理的文件或目录 |
tar zcvf test_$(date +%F).tar.gz ./test/
tar tf /data/test.tar.gz 查看打包内容,不解压
find /root -type d -name "oldboy"|xargs tar zcvf oldboy.tar.gz
tar zcvf oldboy.tar.gz `find /root -type d -name "oldboy"`
which
查看二进制命令的完整路径
[root@zhangqy ~]# which tar
/bin/tar
[root@zhangqy ~]# ls -l `which tar`
-rwxr-xr-x. 1 root root 395472 Jul 24 2015 /bin/tar
whereis
[root@zhangqy ~]# whereis tar
tar: /bin/tar /usr/include/tar.h /usr/share/man/man1/tar.1.gz
wc
显示输出文件的行数、单词统计和字节数
- c --bytes,输出字节统计
- m --chars,输出字符数统计
- l --lines,输出行数统计
- L --max-line-length,显示最长行的长度
- w --word,显示单词计数
[root@zhangqy ~]# wc -l /etc/passwd
44 /etc/passwd
sort
文本排序
参数选项 | 解释说明 | 参数选项 | 解释说明 |
---|---|---|---|
-b | 忽略每行开头的空格字符 | -u | 去除重复行 |
-n | 依照数值的大小进行排序 | -t | 指定分隔符 |
-r | 倒序排列 | -k | 指定区间排序 |
[root@mysql ~]# cat 1.txt
1
3
5
7
2
4
6
[root@mysql ~]# sort 1.txt
1
2
3
4
5
6
7
[root@mysql ~]# sort -n 1.txt 顺序排列
1
2
3
4
5
6
7
[root@mysql ~]# sort -r 1.txt 倒序排列
7
6
5
4
3
2
1
[root@mysql ~]# sort 1.txt
1
1
2
2
3
3
4
5
6
6
7
[root@mysql ~]# sort -u 1.txt 去重
1
2
3
4
5
6
7
uniq
去除重复行
注:uniq默认只对相邻的行去重,所以要配合sort
我们常用sort命令对文件排序,然后使用uniq -c命令去重并计数
[root@mysql ~]# cat zhangqy.txt
192.168.17.80
192.168.17.80
192.168.17.81
192.168.17.80
192.168.17.81
192.168.17.85
192.168.17.83
[root@mysql ~]# uniq zhangqy.txt
192.168.17.80
192.168.17.81
192.168.17.80
192.168.17.81
192.168.17.85
192.168.17.83
[root@mysql ~]# sort zhangqy.txt |uniq
192.168.17.80
192.168.17.81
192.168.17.83
192.168.17.85
[root@mysql ~]# sort zhangqy.txt |uniq -c
3 192.168.17.80
2 192.168.17.81
1 192.168.17.83
1 192.168.17.85
netstat
- l display listening server sockets
- n don't resolve names
- t TCP
- u UDP
- p PIN
[root@mysql scripts]# netstat -lntup|grep 3308
tcp 0 0 0.0.0.0:3308 0.0.0.0:* LISTEN 29049/mysqld
[root@mysql scripts]# netstat -lntup|grep 330
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 23920/mysqld
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 24638/mysqld
tcp 0 0 0.0.0.0:3308 0.0.0.0:* LISTEN 29049/mysqld