#Linux基础命令
##################测试文本#####################
[root@m01 ~]# vim /data/test.txt
I like Linux
12345
1 2 3
@##$%%
hello world
HELLO WORLD
####################测试文本######################
1、文件管理
***cat***:concatenate files and print on the standard output
连接文件并打印到标准输出
5种用法:
-b 显示行号
-n 显示行号(包含空白行)
-E 显示结束符(默认$)
创建文件:
例子:
[root@m01 data]# cat >test3.txt<<EOF
> this is test3.txt created by cat command
> EOF
[root@m01 data]#
[root@m01 data]# ls
bbs test2.txt test3.txt test.txt
[root@m01 data]# cat test3.txt
this is test3.txt created by cat command
修改文件:比如将test.txt,test2.txt覆盖test3.txt
[root@m01 data]# cat test.txt test2.txt >test3.txt
3大文件操作命令:
***cp***:copy 复制文件或目录
5种用法:
-a 复制目录时,保留链接,文件属性,并复制目录下的所有文件
[root@m01 data]# cp -a ../data/ /tmp/data2
[root@m01 data]#
[root@m01 data]# ls -l . /tmp/data2/
.:
total 16
drwxr-xr-x. 2 root root 24 Jun 29 09:53 bbs
-rw-r--r--. 1 root root 0 Jul 2 17:53 test1.txt
-rw-r--r--. 1 root root 5 Jul 2 17:45 test2.txt
-rw-r--r--. 1 root root 10 Jul 2 17:47 test3.txt
-rw-r--r--. 1 root root 10 Jul 2 17:53 test4.txt
-rw-r--r--. 1 root root 5 Jul 2 17:45 test.txt
/tmp/data2/:
total 16
drwxr-xr-x. 2 root root 24 Jun 29 09:53 bbs
-rw-r--r--. 1 root root 0 Jul 2 17:53 test1.txt
-rw-r--r--. 1 root root 5 Jul 2 17:45 test2.txt
-rw-r--r--. 1 root root 10 Jul 2 17:47 test3.txt
-rw-r--r--. 1 root root 10 Jul 2 17:53 test4.txt
-rw-r--r--. 1 root root 5 Jul 2 17:45 test.txt
-i 复制文件时显现提示信息,系统重要命令保护机制(已被设置别名)
-f 与-i相反
\ 不使用别名,表示命令本身执行:[root@m01 data]# \cp test.txt test1.txt
-d 复制时保持链接
-r 若给出的源文件是一个目录文件,此时将复制该目录下的所有子目录和子文件(可以看出和-a还是有区别的:文件的时间都被修改)
[root@m01 data]# cp -r /data/ /tmp/data/
[root@m01 data]# ls -l /tmp/data/ /data/
/data/:
total 20
drwxr-xr-x. 2 root root 24 Jun 29 09:53 bbs
-rw-r--r--. 1 root root 5 Jul 2 18:10 test1.txt
-rw-r--r--. 1 root root 5 Jul 2 17:45 test2.txt
-rw-r--r--. 1 root root 10 Jul 2 17:47 test3.txt
-rw-r--r--. 1 root root 10 Jul 2 18:03 test4.txt
-rw-r--r--. 1 root root 5 Jul 2 17:45 test.txt
/tmp/data/:
total 20
drwxr-xr-x. 2 root root 24 Jul 3 13:42 bbs
-rw-r--r--. 1 root root 5 Jul 3 13:42 test1.txt
-rw-r--r--. 1 root root 5 Jul 3 13:42 test2.txt
-rw-r--r--. 1 root root 10 Jul 3 13:42 test3.txt
-rw-r--r--. 1 root root 10 Jul 3 13:42 test4.txt
-rw-r--r--. 1 root root 5 Jul 3 13:42 test.txt
[root@m01 data]#
***mv***:Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY
可以将文件或者目录重命名,或者移动文件到目录下
5种用法:
-重命名文件或目录
[root@m01 data]# mkdir linux
[root@m01 data]# ls
bbs linux test1.txt test2.txt test3.txt test4.txt test.txt
[root@m01 data]#
[root@m01 data]# mv linux/ unix
[root@m01 data]# ls
bbs test1.txt test2.txt test3.txt test4.txt test.txt unix
-f 强制执行,没有interactive(-i,表示交互式的)
-b 覆盖文件前将源文件进行备份
***rm***:remove 删除命令
-i 交互式
-f 强制的
-v -v, --verbose explain what is being done 详细过程的展示
-r, -R, --recursive remove directories and their contents recursively递归删除
[root@m01 data]# rm -irvf unix/
removed directory: ‘unix/test/test1/test2’
removed directory: ‘unix/test/test1’
removed directory: ‘unix/test’
removed directory: ‘unix/’
可以看出是从底层往上层删除的!
最基本创建文件命令:
touch: - change file timestamps 修改文件时间戳(文件不存在时则创建文件)
-t STAMP 修改文件时间戳
use [[CC]YY]MMDDhhmm[.ss] instead of current time
例子:[root@m01 data]# touch -t 197101011212.12 test.txt
[root@m01 data]#
[root@m01 data]#
[root@m01 data]# ls -l test.txt
-rw-r--r--. 1 root root 0 Jan 1 1971 test.txt
***find*** 在指定目录下查找文件
find path -option [ -print ] [ -exec -ok command ] {} \;
-print 将匹配发送到标准输出
-exec 将匹配的结果执行后面的shell指令,并输出
-ok 和exec一样 但是多了交互操作
常见用法示例:
查找到文件并显示最后三行
[root@db01 data]# find . -type f -name test.txt -exec tail -3 {} \;
I like Linux
123456
$ 2 dfg
-mtime: -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
示例:今天创建了/data /data/test.txt /data/test1.txt /data/test2.txt /data/test3.txt
find / -ctime -1
***ln*** 为文件创建链接
-s 软连接
[root@db01 ~]# ln -s /data/test.txt test
[root@db01 ~]# ll
total 4
-rw-------. 1 root root 1233 Jun 19 16:55 anaconda-ks.cfg
lrwxrwxrwx. 1 root root 14 Jul 4 14:05 test -> /data/test.txt
***sed***:NAME
sed - stream editor for filtering and transforming text 流编辑器用来过滤和处理文档。
Linux sed命令是利用script来处理文本文件。
sed可依照script的指令,来处理、编辑文本文件。
sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
语法:sed [-hnV][-e<script>][-f<script文件>][文本文件]
常见用法:
1,按行修改内容:
a:新增;c:取代;d:删除;p:打印;-i:插入
[root@db01 data]# sed -e '2a'\hello test.txt
which one is the best OS?
A.linux
hello
B.windows
C.mac
[root@db01 data]#
2,以行为单位新增或者删除
示例:我删除了第2行
[root@db01 data]# sed '2d' test.txt
which one is the best OS?
B.windows
C.mac
3,在第二行前插入:nihao
[root@db01 data]# sed '2i nihao' test.txt
which one is the best OS?
nihao
A.linux
B.windows
C.mac
4,过滤出匹配的内容,打印输出
如果不使用-n:则会输出文件所有内容,并将匹配的行重复输出一次
[root@db01 data]# nl /etc/passwd |sed -n '/root/p'
1 root:x:0:0:root:/root:/bin/bash
10 operator:x:11:0:operator:/root:/sbin/nologin
5,使用s替换匹配的内容并输出({}中的一组命令依次执行)
[root@db01 data]# nl /etc/passwd |sed -n '/bash/{s/bash/csh/;p;q}'
1 root:x:0:0:root:/root:/bin/csh
6,搜寻并替换
[root@db01 data]# sed 's/123/456/'
123
456
456
456
678
678
这一组交互式,123被替换成了456
7,多点编辑:1:删除第三行后的所有行(包括第3行) 2:bash替换为blueshell
[root@db01 data]# nl /etc/passwd |sed -e '3,$d' -e 's/bash/blueshell/'
1 root:x:0:0:root:/root:/bin/blueshell
2 bin:x:1:1:bin:/bin:/sbin/nologin
***grep***:NAME
grep, egrep, fgrep - print lines matching a pattern
例子:
1,查找与递归查找与反向查找
[root@db01 data]# grep A test.txt
A.linux
-r 递归
[root@db01 data]# grep -r 'A' /data
/data/test.txt:A.linux
/data/sed:A.linux$
-v 反向
[root@db01 data]# grep -v A test.txt
which one is the best OS?
B.windows
C.mac
2,正则匹配:-E
-o:只显示匹配的内容
[root@db01 data]# cat /etc/passwd|grep -o -E "apache"
apache
[root@db01 data]# cat /etc/passwd|grep -E "apache"
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
3,统计匹配次数与忽略大小写:-c -i
[root@db01 data]# grep -ci 'sbiN' /etc/passwd
19
4,-e:可以同时执行多个匹配
[root@db01 data]# echo 'this is a test'|grep -e "this" -e "is"
this is a test
5,-l:列表(默认按1列输出);-lZ:不换行输出(一般一起用);xargs -0:以null为分隔符将管道送来的内容,交给后面的rm命令。
[root@db01 data]# grep -l aaa test*
test1.txt
test.txt
[root@db01 data]# grep -lZ aaa test*
test1.txttest.txt[root@db01 data]#
[root@db01 data]# grep -lZ aaa test*|xargs -0
test1.txt test.txt
[root@db01 data]# grep -lZ aaa test*|xargs -0 rm
[root@db01 data]# ls
bbs file2 sed test2.txt test3.txt
[root@db01 data]#
***awk***:AWK是一种处理文本文件的语言,是一个强大的文本分析工具
NAME
gawk - pattern scanning and processing language
几种用法:
###############这是测试文本#########
[root@db01 data]# cat log.txt
I like Linux very much
what is your name ?
how old are you ?
i am 12 years old
1 2 3 4 5 6 7 8 9 10
###############这是测试文本#########
1,awk善于处理列。可以按照列的方式提取文本内容
awk '{print $2,$5}' log.txt
[root@db01 data]# awk '{print $2,$5}' log.txt
like much
is ?
old ?
am old
2 5
[root@db01 data]#
awk '{printf '%-4s %-6s\n',$2,$5}' log.txt
[root@db01 data]# awk '{printf "%-4s %-6s\n", $2,$5}' log.txt #注意的是“”与‘’的配合使用,内外层不同即可!
like much
is ?
old ?
am old
2 5
[root@db01 data]#
2,-F 指定分隔符 如指定字母‘o’为分隔符
[root@db01 data]# awk -F"o" '{print $1}' log.txt
I like Linux very much
what is y
h
i am 12 years
1 2 3 4
[root@db01 data]#
3,支持加入变量运算
变量是数字需要加+;变量时字符串直接加在$0面
[root@db01 data]# echo 'i like linux'|awk -va=' very much' '{print $0a}'
i like linux very much
[root@db01 data]#
4,使用正则表达式匹配
BEGIN{IGNORECASE=1}:表示忽略大小写;$4:表示取出第4列;~表示开始模式;/Y/:正则匹配;{print $1,$3}打印1,3列
[root@db01 data]# awk 'BEGIN{IGNORECASE=1}$4 ~ /Y/ {print $1,$3}' log.txt
I Linux
how are
i 12
5,!~:表示模式取反
[root@db01 data]# awk 'BEGIN{IGNORECASE=1}$4 !~ /Y/ {print $1,$3}' log.txt
what your
1 3
[root@db01 data]#
##################测试文本#####################
[root@m01 ~]# vim /data/test.txt
I like Linux
12345
1 2 3
@##$%%
hello world
HELLO WORLD
####################测试文本######################
1、文件管理
***cat***:concatenate files and print on the standard output
连接文件并打印到标准输出
5种用法:
-b 显示行号
-n 显示行号(包含空白行)
-E 显示结束符(默认$)
创建文件:
例子:
[root@m01 data]# cat >test3.txt<<EOF
> this is test3.txt created by cat command
> EOF
[root@m01 data]#
[root@m01 data]# ls
bbs test2.txt test3.txt test.txt
[root@m01 data]# cat test3.txt
this is test3.txt created by cat command
修改文件:比如将test.txt,test2.txt覆盖test3.txt
[root@m01 data]# cat test.txt test2.txt >test3.txt
3大文件操作命令:
***cp***:copy 复制文件或目录
5种用法:
-a 复制目录时,保留链接,文件属性,并复制目录下的所有文件
[root@m01 data]# cp -a ../data/ /tmp/data2
[root@m01 data]#
[root@m01 data]# ls -l . /tmp/data2/
.:
total 16
drwxr-xr-x. 2 root root 24 Jun 29 09:53 bbs
-rw-r--r--. 1 root root 0 Jul 2 17:53 test1.txt
-rw-r--r--. 1 root root 5 Jul 2 17:45 test2.txt
-rw-r--r--. 1 root root 10 Jul 2 17:47 test3.txt
-rw-r--r--. 1 root root 10 Jul 2 17:53 test4.txt
-rw-r--r--. 1 root root 5 Jul 2 17:45 test.txt
/tmp/data2/:
total 16
drwxr-xr-x. 2 root root 24 Jun 29 09:53 bbs
-rw-r--r--. 1 root root 0 Jul 2 17:53 test1.txt
-rw-r--r--. 1 root root 5 Jul 2 17:45 test2.txt
-rw-r--r--. 1 root root 10 Jul 2 17:47 test3.txt
-rw-r--r--. 1 root root 10 Jul 2 17:53 test4.txt
-rw-r--r--. 1 root root 5 Jul 2 17:45 test.txt
-i 复制文件时显现提示信息,系统重要命令保护机制(已被设置别名)
-f 与-i相反
\ 不使用别名,表示命令本身执行:[root@m01 data]# \cp test.txt test1.txt
-d 复制时保持链接
-r 若给出的源文件是一个目录文件,此时将复制该目录下的所有子目录和子文件(可以看出和-a还是有区别的:文件的时间都被修改)
[root@m01 data]# cp -r /data/ /tmp/data/
[root@m01 data]# ls -l /tmp/data/ /data/
/data/:
total 20
drwxr-xr-x. 2 root root 24 Jun 29 09:53 bbs
-rw-r--r--. 1 root root 5 Jul 2 18:10 test1.txt
-rw-r--r--. 1 root root 5 Jul 2 17:45 test2.txt
-rw-r--r--. 1 root root 10 Jul 2 17:47 test3.txt
-rw-r--r--. 1 root root 10 Jul 2 18:03 test4.txt
-rw-r--r--. 1 root root 5 Jul 2 17:45 test.txt
/tmp/data/:
total 20
drwxr-xr-x. 2 root root 24 Jul 3 13:42 bbs
-rw-r--r--. 1 root root 5 Jul 3 13:42 test1.txt
-rw-r--r--. 1 root root 5 Jul 3 13:42 test2.txt
-rw-r--r--. 1 root root 10 Jul 3 13:42 test3.txt
-rw-r--r--. 1 root root 10 Jul 3 13:42 test4.txt
-rw-r--r--. 1 root root 5 Jul 3 13:42 test.txt
[root@m01 data]#
***mv***:Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY
可以将文件或者目录重命名,或者移动文件到目录下
5种用法:
-重命名文件或目录
[root@m01 data]# mkdir linux
[root@m01 data]# ls
bbs linux test1.txt test2.txt test3.txt test4.txt test.txt
[root@m01 data]#
[root@m01 data]# mv linux/ unix
[root@m01 data]# ls
bbs test1.txt test2.txt test3.txt test4.txt test.txt unix
-f 强制执行,没有interactive(-i,表示交互式的)
-b 覆盖文件前将源文件进行备份
***rm***:remove 删除命令
-i 交互式
-f 强制的
-v -v, --verbose explain what is being done 详细过程的展示
-r, -R, --recursive remove directories and their contents recursively递归删除
[root@m01 data]# rm -irvf unix/
removed directory: ‘unix/test/test1/test2’
removed directory: ‘unix/test/test1’
removed directory: ‘unix/test’
removed directory: ‘unix/’
可以看出是从底层往上层删除的!
最基本创建文件命令:
touch: - change file timestamps 修改文件时间戳(文件不存在时则创建文件)
-t STAMP 修改文件时间戳
use [[CC]YY]MMDDhhmm[.ss] instead of current time
例子:[root@m01 data]# touch -t 197101011212.12 test.txt
[root@m01 data]#
[root@m01 data]#
[root@m01 data]# ls -l test.txt
-rw-r--r--. 1 root root 0 Jan 1 1971 test.txt
***find*** 在指定目录下查找文件
find path -option [ -print ] [ -exec -ok command ] {} \;
-print 将匹配发送到标准输出
-exec 将匹配的结果执行后面的shell指令,并输出
-ok 和exec一样 但是多了交互操作
常见用法示例:
查找到文件并显示最后三行
[root@db01 data]# find . -type f -name test.txt -exec tail -3 {} \;
I like Linux
123456
$ 2 dfg
-mtime: -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
示例:今天创建了/data /data/test.txt /data/test1.txt /data/test2.txt /data/test3.txt
find / -ctime -1
***ln*** 为文件创建链接
-s 软连接
[root@db01 ~]# ln -s /data/test.txt test
[root@db01 ~]# ll
total 4
-rw-------. 1 root root 1233 Jun 19 16:55 anaconda-ks.cfg
lrwxrwxrwx. 1 root root 14 Jul 4 14:05 test -> /data/test.txt
***sed***:NAME
sed - stream editor for filtering and transforming text 流编辑器用来过滤和处理文档。
Linux sed命令是利用script来处理文本文件。
sed可依照script的指令,来处理、编辑文本文件。
sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
语法:sed [-hnV][-e<script>][-f<script文件>][文本文件]
常见用法:
1,按行修改内容:
a:新增;c:取代;d:删除;p:打印;-i:插入
[root@db01 data]# sed -e '2a'\hello test.txt
which one is the best OS?
A.linux
hello
B.windows
C.mac
[root@db01 data]#
2,以行为单位新增或者删除
示例:我删除了第2行
[root@db01 data]# sed '2d' test.txt
which one is the best OS?
B.windows
C.mac
3,在第二行前插入:nihao
[root@db01 data]# sed '2i nihao' test.txt
which one is the best OS?
nihao
A.linux
B.windows
C.mac
4,过滤出匹配的内容,打印输出
如果不使用-n:则会输出文件所有内容,并将匹配的行重复输出一次
[root@db01 data]# nl /etc/passwd |sed -n '/root/p'
1 root:x:0:0:root:/root:/bin/bash
10 operator:x:11:0:operator:/root:/sbin/nologin
5,使用s替换匹配的内容并输出({}中的一组命令依次执行)
[root@db01 data]# nl /etc/passwd |sed -n '/bash/{s/bash/csh/;p;q}'
1 root:x:0:0:root:/root:/bin/csh
6,搜寻并替换
[root@db01 data]# sed 's/123/456/'
123
456
456
456
678
678
这一组交互式,123被替换成了456
7,多点编辑:1:删除第三行后的所有行(包括第3行) 2:bash替换为blueshell
[root@db01 data]# nl /etc/passwd |sed -e '3,$d' -e 's/bash/blueshell/'
1 root:x:0:0:root:/root:/bin/blueshell
2 bin:x:1:1:bin:/bin:/sbin/nologin
***grep***:NAME
grep, egrep, fgrep - print lines matching a pattern
例子:
1,查找与递归查找与反向查找
[root@db01 data]# grep A test.txt
A.linux
-r 递归
[root@db01 data]# grep -r 'A' /data
/data/test.txt:A.linux
/data/sed:A.linux$
-v 反向
[root@db01 data]# grep -v A test.txt
which one is the best OS?
B.windows
C.mac
2,正则匹配:-E
-o:只显示匹配的内容
[root@db01 data]# cat /etc/passwd|grep -o -E "apache"
apache
[root@db01 data]# cat /etc/passwd|grep -E "apache"
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
3,统计匹配次数与忽略大小写:-c -i
[root@db01 data]# grep -ci 'sbiN' /etc/passwd
19
4,-e:可以同时执行多个匹配
[root@db01 data]# echo 'this is a test'|grep -e "this" -e "is"
this is a test
5,-l:列表(默认按1列输出);-lZ:不换行输出(一般一起用);xargs -0:以null为分隔符将管道送来的内容,交给后面的rm命令。
[root@db01 data]# grep -l aaa test*
test1.txt
test.txt
[root@db01 data]# grep -lZ aaa test*
test1.txttest.txt[root@db01 data]#
[root@db01 data]# grep -lZ aaa test*|xargs -0
test1.txt test.txt
[root@db01 data]# grep -lZ aaa test*|xargs -0 rm
[root@db01 data]# ls
bbs file2 sed test2.txt test3.txt
[root@db01 data]#
***awk***:AWK是一种处理文本文件的语言,是一个强大的文本分析工具
NAME
gawk - pattern scanning and processing language
几种用法:
###############这是测试文本#########
[root@db01 data]# cat log.txt
I like Linux very much
what is your name ?
how old are you ?
i am 12 years old
1 2 3 4 5 6 7 8 9 10
###############这是测试文本#########
1,awk善于处理列。可以按照列的方式提取文本内容
awk '{print $2,$5}' log.txt
[root@db01 data]# awk '{print $2,$5}' log.txt
like much
is ?
old ?
am old
2 5
[root@db01 data]#
awk '{printf '%-4s %-6s\n',$2,$5}' log.txt
[root@db01 data]# awk '{printf "%-4s %-6s\n", $2,$5}' log.txt #注意的是“”与‘’的配合使用,内外层不同即可!
like much
is ?
old ?
am old
2 5
[root@db01 data]#
2,-F 指定分隔符 如指定字母‘o’为分隔符
[root@db01 data]# awk -F"o" '{print $1}' log.txt
I like Linux very much
what is y
h
i am 12 years
1 2 3 4
[root@db01 data]#
3,支持加入变量运算
变量是数字需要加+;变量时字符串直接加在$0面
[root@db01 data]# echo 'i like linux'|awk -va=' very much' '{print $0a}'
i like linux very much
[root@db01 data]#
4,使用正则表达式匹配
BEGIN{IGNORECASE=1}:表示忽略大小写;$4:表示取出第4列;~表示开始模式;/Y/:正则匹配;{print $1,$3}打印1,3列
[root@db01 data]# awk 'BEGIN{IGNORECASE=1}$4 ~ /Y/ {print $1,$3}' log.txt
I Linux
how are
i 12
5,!~:表示模式取反
[root@db01 data]# awk 'BEGIN{IGNORECASE=1}$4 !~ /Y/ {print $1,$3}' log.txt
what your
1 3
[root@db01 data]#