Linux 常用基础

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        

你可能感兴趣的:(Linux 常用基础)