linux命令apprw,Linux命令学习(一)

前言

本文及接下来的几篇文章主要来学习下Linux服务器操作中的常用命令,使用系统版本是:CentOS 7.4.17.08。 本文主要学习的Linux命令有:netstat,tail,head,cat,tac,less,more,pwd,cd,ls,type,which,touch,nl,mkdir,rmdir。

1. netstat命令

netstat命令用于显示各种网络相关信息,比如IP、TCP、UDP和ICMP协议的统计信息,网络连接,接口统计等,在工作中使用很多的一种情况是检查本机各端口的连接情况。比如新加一个服务,查看某个端口是否被占用,端口被哪个进程占用等。

看一下它的常用的参数:

-a 或 –-all: 显示所有连线中的Socket

-t 或 --tcp:显示TCP传输协议的连线状况;

-u 或 --udp:显示UDP传输协议的连线状况;

-h 或 --help:在线帮助;

-l 或 --listening:显示监控中的服务器的Socket;

-p 或 –-programs: 显示正在使用Socket的进程id和进程名称;、

-n 或 -–numeric: 隐藏主机,端口,用户名,如果在我们的netstat中不想展示这些信息,可以使用这个命令进行隐藏

使用例子:

[root@192 ~]$ netstat -a # 列出所有端口

[root@192 ~]$ netstat -at # 列出所有TCP端口

[root@192 ~]$ netstat -au # 列出所有UDP端口

比如我们可以查看某个端口是否被占用,以及被哪个服务所占用(可通过PS命令):

[root@192 ~]$ netstat -autlp|grep 端口号

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 0 0.0.0.0:sunrpc 0.0.0.0:* LISTEN 1/systemd

tcp 0 0 192.168.122.1:domain 0.0.0.0:* LISTEN 3197/dnsmasq

tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN 1364/sshd

tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN 1362/cupsd

tcp 0 0 192.168.1.7:51532 210.32.158.231:http ESTABLISHED 15646/python

这里可能需要注意下,有些进程有些时候可能会找不到,这时候注意下当前登陆用户的权限,因为并不是所有用户都是root权限。

2. tail命令

tail是尾部的意思,就是循环将指定的文件的最后部分输出到标准设备,通常是终端。通俗的说,就是将某个文件的最后几行显示到终端上,如果该文件有更新,tail会自动刷新,确保看到的是最新的。这个命令一般用于我们进行查看日志。

使用格式:

tail [ -f ] [ -c Number | -n Number | -m Number | -b Number | -k Number ] [ File ]

常用参数:

-f 循环读取

-c 从尾部num某字节位置读取

-n 从尾部多少行读取

-b 从尾部num表示的512字节块位置读取

-k 从尾部num表示的1KB块位置读取

这其中都涉及到参数num,如果不指定的话,默认显示10行,该参数前面可以使用正负号,表示该偏移从顶部还是从尾部开始计算,如果不指定正负号,默认是负号,从尾部开始计算。

简单的例子:

[root@192 ~]$ tail -f catalina.out # 打印最后10行日志,然后循环执行

[root@192 ~]$ tail -n 20 catalina.out # 打印日志的最后20行

[root@192 ~]$ tail -n +20 catalina.out # 从第20行开始打印日志

如果有需要,可使用 tail --help 查询全部命令。

3. head 命令

head命令和tail命令是相对应的,tail用于从尾部展示数据,而head则是从头部开始展示数据。

常用参数:

-c 读取前num字节数据

-n 读取前多少行数据

-v:显示文件名信息

-q:隐藏文件名信息

同样,默认情况下,head命令也是只展示10行数据,num为正数,表示读取前多少行,为负数,表示读取倒数多少行之前的数据,默认是正数。比如num为3,+3表示读取前3行,-3表示读取从开始到倒数第三行的数据。

举个简单的例子,新建test.log,文件内容:

test1

test2

test3

test4

test5

test6

test7

test8

test9

test10

举例1:分别使用+num 和 -num来测试,默认是+num,也就是前几行

[mrzhang@192 zhangkeke]$ head -n +3 test.log

test1

test2

test3

[mrzhang@192 zhangkeke]$ head -n -3 test.log

test1

test2

test3

test4

test5

test6

test7

举例2:使用-v 和 -q 显示和隐藏文件名,默认是隐藏文件名

[mrzhang@192 zhangkeke]$ head -v test.log

==> test.log <==

test1

test2

... 省略

test9

test10

[mrzhang@192 zhangkeke]$ head -q test.log

test1

test2

... 省略

test9

test10

4. cat命令

cat命令的功能很多,我们来看它几个常用的功能。

cat [file],查看文件内容,查看全部;也可以根据关键字查询;

[mrzhang@192 zhangkeke]$ cat test.log # 查看文件全部内容

[mrzhang@192 zhangkeke]$ cat test.log | grep 20 # 将查询文件中包含20的内容

创建文件,如果文件已存在,则是编辑文件,会覆盖掉原有的文件内容;如果有需要的话,可以使用该命令进行清空文件内容;

[mrzhang@192 zhangkeke]$ cat >test2.log << EOF

> 0519

> 0520

> EOF

[mrzhang@192 zhangkeke]$ cat test2.log

0519

0520

通过EOF来告诉bash哪个符号代表文件结束,当然我们也可也使用其他的符号。

将几个文件合并为一个文件;

[mrzhang@192 zhangkeke]$ cat test.log test2.log > test3.log

向原来文件的尾部写入内容;与上面创建编辑文件类似,只需要将原来的 > 换成 >>即可;

[mrzhang@192 zhangkeke]$ cat >>test.log <

写入内容的时候,对

math?formula=%E7%AC%A6%E5%8F%B7%E7%9A%84%E5%A4%84%E7%90%86%EF%BC%9B%E6%AF%94%E5%A6%82%E6%88%91%E4%BB%AC%E4%BD%BF%E7%94%A8cat%E5%91%BD%E4%BB%A4%E7%94%9F%E6%88%90%E4%B8%80%E4%BA%9B%E8%84%9A%E6%9C%AC%EF%BC%8C%E5%9B%A0%E4%B8%BA 符号是特殊变量,如果直接写该符号,有可能被认为要调用系统变量,所以需要使用\进行转义下:

[mrzhang@192 zhangkeke]$ cat >test.log <

> DATE=$(date)

> EOF

[mrzhang@192 zhangkeke]$ cat test.log

DATE=Sat May 19 21:48:19 CST 2018

[mrzhang@192 zhangkeke]$ cat >test.log <

> DATE=\$(date)

> EOF

[mrzhang@192 zhangkeke]$ cat test.log

DATE=$(date)

然后,再来看一下常用的参数:

-n 或 --number:由 1 开始对所有输出的行数编号。

-b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号

-s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行

比如,把 textfile1 的文档内容加上行号后输入 textfile2 这个文档里:

[mrzhang@192 zhangkeke]$ cat -n textfile1 > textfile2

5. tac命令

tac命令是和cat命令是对应的,cat反过来就是tac,功能就是把文件内容反过来显示,以行为单位,文件的最后一行先显示,第一行最后显示,先瞅下:

[mrzhang@192 zhangkeke]$ cat test2.log

0519

0520

0521

[mrzhang@192 zhangkeke]$ tac test2.log

0521

0520

0519

这个命令一般使用的不多,在网上看到使用tac命令的一种情况,查看日志,如果日志很多的话,使用tail不太方便,使用less翻页太多,使用cat会从前往后,这时候可以考虑使用tac命令:

[mrzhang@192 zhangkeke]$ tac xx.log | grep -m2 -C2 abc

grep -m 搜索的结果个数设置, -C(大写) 搜索结果的旁边n行输出;

6. less命令

less命令作为Linux比较正式的查看文件内容的工具,功能及其强大,不但支持分页查查,还有很强大的搜索功能。我们先来看一下它的参数:

-b 设置缓冲区的大小

-e 当文件显示结束后,自动离开

-g 只标志最后搜索的关键词

-i 忽略搜索时的大小写

-m 显示类似more命令的百分比

-N 显示每行的行号

-o 将less 输出的内容在指定文件中保存起来

-s 显示连续空行为一行

less命令的强大不在于这些参数,而在于使用less命令打开文件后,类似于vi快捷键的导航命令。我们在使用less命令打开文件后,可以使用以下一些导航命令进行操作:

G 快速定位到最后一行(方便我们查看日志)

g 快速定位到第一行

q/ZZ 退出less命令

k 向上移动一行

j 向下移动一行

f 向下移动一屏或者说向后移动一屏

b 向上移动一屏或者说向前移动一屏

d 向下移动半屏

u 向上移动半屏

v/vi 编辑该文件

空格 向下移动一屏

回车 向下移动一行

另外,就是搜索的导航命令,这个功能十分强大,可以用于我们查看日志等相关的操作,主要搜索方式有下面两种(搜索正则表达式):

/ 向后搜索(向下搜索),适合从文件的头部往后搜索

n 向后查找下一个匹配的

N 向前查找下一个匹配的

? 向前搜索(向上搜索),适合从文件的尾部往前搜索

n 向前查找下一个匹配的

N 向后查找下一个匹配的

= 显示当前行信息,如行号、字节位置等

对于第二种?这种形式的我们使用的比较多,因为查看异常日志的时候,我们一般都是查看最后一次exception,然后以此往前进行查询。可以简单看下 = 等号这个导航命令:

test3.log lines 17-39/81 byte 119/185 64% (press RETURN)

另外,当使用 less 查看大文件时,可以在任何一个位置作标记,然后可以通过命令导航到标有特定标记的文本位置:

ma 使用 a 标记文本的当前位置

'a 导航到标记 a 处

标记的时候,输入 m 后,弹出 mark:,然后输入a 标记文本的当前位置,而要导航到标记的位置的话,先输入',然后弹出 goto mark:,输入a 导航到标记处;

除此之外,less命令还支持同时浏览多个文件:

第一种,直接less 多个文件,就可以浏览多个文件:(默认先展示第一个)

[mrzhang@192 zhangkeke]$ less test.log test3.log

第二种,浏览一个文件时,使用:e打开另一个文件:

[mrzhang@192 zhangkeke]$ less test.log

输入 :e 之后:

Examine:

输入另一个文件的地址及名称就可以了。而当打开多个文件时,可以使用如下命令在多个文件之间切换:

:n 浏览下一个文件

:p 浏览前一个文件

直接定位到某个位置:

[mrzhang@192 zhangkeke]$ less +17g xxx.log # 定位到第17行

[mrzhang@192 zhangkeke]$ less +G xxx.log # 定位到最后一行

[mrzhang@192 zhangkeke]$ less +100P xxx.log # 定位到第100个字节的位置

由于该命令功能十分强大,参数及导航命令特别多,如果有需要,可以使用less --help查看该命令的全部使用参数。

7. more命令

该命令和cat命令有点像,cat显示数据的时候是显示全部,而more则是分页展示,并且还具有字符串搜索的功能,more命令也是从前往后读取文件。来看一下它的参数:

+num 从笫num行开始显示

-num 一次显示num行

-s 把连续的多个空行显示为一行

同样,使用more命令打开文件后,可以使用如下导航命令进行一些操作:

空格键 显示下一屏

换行键 显示下一行

nf 向下移动n屏,其中n是数字

nb 向上移动n屏,其中n是数字

/ 向下查找指定的字符串模式

n 向后查找下一个匹配的

= 显示当前的行号

q 退出

并且,more和less也很像,支持同时浏览多个文件,同样是使用:n,:p来实现,并且还有许多其他相似的功能,实际工作中该命令使用的比less命令要少一点,如果感兴趣的可以使用它的help命令进行查看;

有时候我们可能会用到这个命令,比如如果一个目录下文件过多,我们可以使用more然后结合管道 | 来进行分页展示:

[mrzhang@192 zhangkeke]$ ll | more -5

8. pwd命令

pwd 命令比较简单,就是来查看当前所在目录的完整路径,当我们不太确定当前的确切路径时,就可以使用该命令来进行查看。

[mrzhang@192 zhangkeke]$ pwd

/home/mrzhang/Documents/zhangkeke

参数:

-L 如果目录是一个软链的话,显示链接路径

-P 显示实际的物理路径

如果一同使用的话,以第一个参数的为准,来看一下:

[mrzhang@192 etc]$ cd /etc/init.d/

[mrzhang@192 init.d]$ pwd

/etc/init.d

[mrzhang@192 init.d]$ pwd -L

/etc/init.d

[mrzhang@192 init.d]$ pwd -P

/etc/rc.d/init.d

[mrzhang@192 init.d]$ pwd -LP

/etc/rc.d/init.d

[mrzhang@192 init.d]$ pwd -PL

/etc/init.d

不过大多数情况下,我们使用该命令时,都无需传递参数。pwd的命令其实不仅是shell的一个命令,在当前版本中,还有两个可执行pwd的路径:

[mrzhang@192 zhangkeke]$ type -a pwd

pwd is a shell builtin

pwd is /usr/bin/pwd

pwd is /bin/pwd

还可以查看一下pwd命令的版本:

[mrzhang@192 zhangkeke]$ /usr/bin/pwd --version

pwd (GNU coreutils) 8.22

Copyright (C) 2013 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later .

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.

Written by Jim Meyering.

9. cd命令

cd命令是linux中最基础的命令,表示进入另一个目录或者说切换当前目录到另一个目录,命令格式:cd [目录]。

[mrzhang@192 zhangkeke]$ cd / #进入系统根目录

[mrzhang@192 zhangkeke]$ cd ../ #返回上一层目录,也可以是 cd ..

[mrzhang@192 zhangkeke]$ cd ../../ #返回上级的上级目录,可以多层

[mrzhang@192 zhangkeke]$ cd #进入当前用户主目录,也可以是 cd ~

[mrzhang@192 zhangkeke]$ cd /etc/ #跳转至指定目录,从根目录开始

[mrzhang@192 zhangkeke]$ cd - #返回进入此目录之前所在的目录

[mrzhang@192 zhangkeke]$ cd !$ #把上个命令的最后一个单词作为cd 的参数

针对最后一个cd !$简单说下,!$表示最近执行的一条命令的最后一个单词。如果上一条执行的命令是ls,那么cd !$就表示cd ls;如果上一条执行的命令是cd /root,那么这里执行的就是cd /root;当然除非最近的命令与目录有关,否则该命令都会执行不了。

10. ls命令

这个命令也是我们最常见到的命令了,用于打印当前目录下的文件及文件夹内容,我们直接来看一下参数:

ls 目录 列出该目录下的文件

ls -a 显示全部文件,包括隐藏文件(使用.开头)

ls -A 显示全部文件,但不包含.(当前目录) 和 ..(当前目录的父目录)

ls -l 显示全部文件(不包含隐藏文件),并且展示文件的权限,修改日期,文件大小等

ls -t 按照修改时间排序(新的在前面)

ls -r 对原有顺序进行反序

ls -R 对原有顺序反序,同时递归列出所有子目录

ls -h 以比较容易理解的格式列出文件大小 (如 1K 1.4k)

ls -F 显示目录的时候,会在每个目录的末尾添加/字符

ls -S 以文件大小来降序排序

ls -i 列出文件或目录的索引节点号

ls --version 显示ls命令的版本

ls --help 帮助页面,查看所有参数

我们来看几个简单的例子:

查看当前目录中所有以test开头的文件的详细内容:

[mrzhang@192 zhangkeke]$ ls -l test*

以修改时间排序展示文件,最新的排在后面:

[mrzhang@192 zhangkeke]$ ls -ltr

按照文件大小进行降序排列:

[mrzhang@192 zhangkeke]$ ls -lR

通过alias给ls设置别名,这样我们就可以使用别名来进行操作,我们先通过不加任何参数的alias命令来查看所有可用的alias配置,当然也可以通过unalias来取消:

[mrzhang@192 ~]$ alias

alias egrep='egrep --color=auto'

alias fgrep='fgrep --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 vi='vim'

alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

这里,我们可以看到我们平时使用的ll命令其实就是ls -l命令的别名,当然我们也可以自定义我们自己的实现:

[mrzhang@192 ~]$ unalias ll

[mrzhang@192 ~]$ alias

alias egrep='egrep --color=auto'

alias fgrep='fgrep --color=auto'

alias grep='grep --color=auto'

alias l.='ls -d .* --color=auto'

alias ls='ls --color=auto'

alias vi='vim'

alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

[mrzhang@192 ~]$ ll

bash: ll: command not found...

[mrzhang@192 ~]$ alias ll='ls -l'

[mrzhang@192 ~]$ alias

alias egrep='egrep --color=auto'

alias fgrep='fgrep --color=auto'

alias grep='grep --color=auto'

alias l.='ls -d .* --color=auto'

alias ll='ls -l'

alias ls='ls --color=auto'

alias vi='vim'

alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

这里我们只列举了常用的一些参数,同样,更多参数可以参考ls --help和man ls来学习。

本文参考自:https://linux.cn/article-5109-1.html

11. type命令

type命令用来显示我们要查询的命令的类型,比如说我们的命令是内部命令还是外部命令,而命令的类型大致有如下几种:

alias 命令的别名

keyword 关键字,Shell保留字

function 函数,Shell函数

builtin Shell内建命令

file 文件,磁盘文件,外部命令

unfound 没有找到该命令

格式是:type 参数 命令,常用的几个参数:

type -t 返回命令的类型,返回 builtin,代表是内部命令,返回file,代表是外部命令等;

type -p 返回外部命令信息,显示其绝对路径;

type -f 显示shell函数相关命令;

type -a 显示所有的命令类型;

来看一下简单的例子:

[mrzhang@192 ~]$ type ll

ll is aliased to `ls -l'

[mrzhang@192 ~]$ type cd

cd is a shell builtin

[mrzhang@192 ~]$ type date

date is /usr/bin/date

[mrzhang@192 ~]$ type not

bash: type: not: not found

[mrzhang@192 ~]$ type man

man is hashed (/usr/bin/man)

[mrzhang@192 ~]$ type -t cd

builtin

[mrzhang@192 ~]$ type -t ls

alias

[mrzhang@192 ~]$ type -a time

time is a shell keyword

time is /usr/bin/time

time is /bin/time

[mrzhang@192 ~]$ type -p time

[mrzhang@192 ~]$ type -f time

time is a shell keyword

[mrzhang@192 ~]$ type -t time

keyword

12. which命令

which命令是用来查找命令的,which命令会在环境变量$PATH指定的路径中,查找某个给定命令的位置,并返回第一个查找到的结果,也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

[mrzhang@192 ~]$ which pwd

/usr/bin/pwd

[mrzhang@192 ~]$ which ll

alias ll='ls -l'

/usr/bin/ls

[mrzhang@192 ~]$ which ddddd

/usr/bin/which: no ddddd in (/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/mrzhang/.local/bin:/home/mrzhang/bin)

[mrzhang@192 ~]$ which -v

GNU which v2.20, Copyright (C) 1999 - 2008 Carlo Wood.

GNU which comes with ABSOLUTELY NO WARRANTY;

This program is free software; your freedom to use, change

and distribute this program is protected by the GPL.

13. touch命令

touch命令比较简单,主要用于两种场景,一种是新建不存在的文件,另一种是修改文件或者目录的时间属性;

-a 只更改文件的访问时间(access time);

-m 只更改文件的修改时间(modification time);

-c --no-create  不创建任何文件;

-d --date=STRING 使用指定的日期时间,而非现在的时间,使用字符串的形式;

-t  使用指定的日期时间,而非现在的时间,格式是 [[CC] YY]MMDDhhmm[.ss]

-f  此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题;

-r  把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同;

这里简单说下,Linux的文件不同于我们Windows系统中的文件,Windows中文件有创建时间,而Linux中的文件并没有创建时间的概念,Linux中的文件有三个时间:该文件的访问时间,修改时间,状态改变时间。

访问时间:每读一次该文件的内容,该时间就会更新一次,比如使用cat命令;

修改时间:对文件修改一次,该时间就会更新一次,比如 vi命令 修改,而我们使用ll列出的时间就是这个时间;

状态改变时间:该文件的属性发生了改变,该时间就会更新一次,比如通过chmod命令更改之后,这个时间就会更新。

如果要查看文件的这几个时间,可以通过stat命令来查看。

下面,我们还是通过几个简单的例子来学习下该命令:

创建一个新的文件。我们新建一个test目录来进行测试:

[mrzhang@192 Documents]$ cd test/

[mrzhang@192 test]$ ls

[mrzhang@192 test]$ touch test.log

[mrzhang@192 test]$ ll

total 0

-rw-rw-r--. 1 mrzhang mrzhang 0 Jun 10 11:16 test.log

[mrzhang@192 test]$ touch test.log

[mrzhang@192 test]$ ll

total 0

-rw-rw-r--. 1 mrzhang mrzhang 0 Jun 10 11:16 test.log

当然,我们也可以同时创建多个文件:

[mrzhang@192 test]$ touch test1.log test3.log

更改某一个文件的修改时间和另一个时间相同。命令格式是:touch -r file1 file2,将file2的时间修改为和file1的一样:

[mrzhang@192 test]$ touch test2.log

[mrzhang@192 test]$ ll

total 0

-rw-rw-r--. 1 mrzhang mrzhang 0 Jun 10 11:21 test2.log

-rw-rw-r--. 1 mrzhang mrzhang 0 Jun 10 11:16 test.log

[mrzhang@192 test]$ touch -r test.log test2.log

[mrzhang@192 test]$ ll

total 0

-rw-rw-r--. 1 mrzhang mrzhang 0 Jun 10 11:16 test2.log

-rw-rw-r--. 1 mrzhang mrzhang 0 Jun 10 11:16 test.log

使用-d 修改文件的时间为指定的时间。先使用stat命令查看下文件的时间,然后修改文件的时间,再修改文件的日期加时间(备注:隐藏了一些打印内容):

[mrzhang@192 test]$ stat test.log

File: ‘test.log’

Size: 0 Blocks: 0 IO Block: 4096 regular empty file

Device: fd02h/64770d Inode: 2262 Links: 1

Access: (0664/-rw-rw-r--) Uid: ( 1000/ mrzhang) Gid: ( 1000/ mrzhang)

Context: unconfined_u:object_r:user_home_t:s0

Access: 2015-12-11 09:10:30.000000000 +0800

Modify: 2015-12-11 09:10:30.000000000 +0800

Change: 2018-06-10 11:25:08.025620813 +0800

Birth: -

[mrzhang@192 test]$ touch -d '10:00:00' test.log

[mrzhang@192 test]$ stat test.log

...

Access: 2018-06-10 10:00:00.000000000 +0800

Modify: 2018-06-10 10:00:00.000000000 +0800

Change: 2018-06-10 11:39:28.827614789 +0800

[mrzhang@192 test]$ touch -d '2016-09-09 10:00:01' test.log

[mrzhang@192 test]$ stat test.log

...

Access: 2016-09-09 10:00:01.000000000 +0800

Modify: 2016-09-09 10:00:01.000000000 +0800

Change: 2018-06-10 11:40:17.437614448 +0800

使用-t 修改文件的时间为指定的时间,时间格式是:[[CC] YY]MMDDhhmm[.ss]:

[mrzhang@192 test]$ stat test.log

Access: 2017-09-09 12:34:56.000000000 +0800

Modify: 2017-09-09 12:34:56.000000000 +0800

Change: 2018-06-10 11:53:50.343608759 +0800

[mrzhang@192 test]$ touch -t 201609091234.56 test.log

[mrzhang@192 test]$ stat test.log

Access: 2016-09-09 12:34:56.000000000 +0800

Modify: 2016-09-09 12:34:56.000000000 +0800

Change: 2018-06-10 11:54:06.481608646 +0800

如果要查看该文件更多的参数,可以参考:touch --help。

14. nl命令

Linux中的nl命令是用于计算文件的行号,该命令可以将输出的文件自动加上行号。该命令比较简单,来看一下参数:

-b :指定行号指定的方式,主要有两种:

-b a :表示不论是否为空行,也同样列出行号(类似 cat -n);

-b t :如果有空行,空的那一行不要列出行号(默认情况);

-n :列出行号表示的方法,主要有三种:

-n ln :行号在屏幕的最左方显示;

-n rn :行号在自己栏位的最右方显示,且不加 0 ;

-n rz :行号在自己栏位的最右方显示,且加 0 ;

-w :行号栏位的占用的位数。

-p :在逻辑定界符处不重新开始计算。

然后来看一下例子:先查看文件内容,展示行号:

[mrzhang@192 test]$ cat test1.log

ubuntu system

system 123456

right

[mrzhang@192 test]$ nl test1.log

1 ubuntu system

2 system 123456

3 right

[mrzhang@192 test]$

我们将列出的空行也加上行号:

[mrzhang@192 test]$ nl -b a test1.log

1 ubuntu system

2

3 system 123456

4 right

[mrzhang@192 test]$

让行号前面自动补0,统一输出格式:

[mrzhang@192 test]$ nl -b a -n rz test1.log

000001 ubuntu system

000002

000003 system 123456

000004 right

[mrzhang@192 test]$

注意下,nl -b a -n rz test1.log这里行号的位数默认是6位,如果要调整位数可以使用-w 3 调整为具体的位数:

[mrzhang@192 test]$ nl -b a -n rz -w 3 test1.log

001 ubuntu system

002

003 system 123456

004 right

15.mkdir命令

mkdir命令用来创建目录,要求创建目录的用户在当前目录中要有写的权限,并且指定的目录名不能是已存在的目录,默认情况下,也就是如果目录中没有添加路径,那么就是在当前目录下创建。来看下它的参数:

-m --mode=模式 设置该目录的权限(类似 chmod命令),权限可以是777格式,或者-m=r--

-p --parents 递归创建目录,也就是如果要创建目录的上级目录还不存在,则会一并创建上层目录

-v --verbose 每次创建新目录都显示信息

来看一下例子,先创建一个空目录:

[mrzhang@192 test]$ mkdir test0610

[mrzhang@192 test]$ ll

total 0

drwxrwxr-x. 2 mrzhang mrzhang 6 Jun 10 21:32 test0610

如果要创建多个,可以使用空格进行分割:

[mrzhang@192 test0610]$ mkdir test0610_01 test0610_02

[mrzhang@192 test0610]$ ll

total 0

drwxrwxr-x. 2 mrzhang mrzhang 6 Jun 10 21:51 test0610_01

drwxrwxr-x. 2 mrzhang mrzhang 6 Jun 10 21:51 test0610_02

创建多个目录,还可以使用大括号括起来,中间使用逗号进行分割,并且逗号前后不要有空格:

[mrzhang@192 test0610]$ rmdir test0610_01

[mrzhang@192 test0610]$ rmdir test0610_02

[mrzhang@192 test0610]$ ll

total 0

[mrzhang@192 test0610]$ mkdir {test0610_01,test0610_02}

再递归创建多个目录:

[mrzhang@192 test]$ mkdir -p test0611/test0611_01

[mrzhang@192 test]$ ll

total 0

drwxrwxr-x. 2 mrzhang mrzhang 6 Jun 10 21:32 test0610

drwxrwxr-x. 3 mrzhang mrzhang 25 Jun 10 21:34 test0611

[mrzhang@192 test]$ cd test0611/

[mrzhang@192 test0611]$ ll

total 0

drwxrwxr-x. 2 mrzhang mrzhang 6 Jun 10 21:34 test0611_01

然后,创建一个权限是444的目录:

[mrzhang@192 test0612]$ ll

total 0

[mrzhang@192 test0612]$ mkdir -m 444 test0612_01

[mrzhang@192 test0612]$ mkdir -m=r-- test0612_02

[mrzhang@192 test0612]$ ll

total 0

dr--r--r--. 2 mrzhang mrzhang 6 Jun 10 22:06 test0612_01

dr--r--r--. 2 mrzhang mrzhang 6 Jun 10 22:06 test0612_02

再然后,创建的时候展示创建的信息:

[mrzhang@192 test0611]$ mkdir -v test0613

mkdir: created directory ‘test0613’

[mrzhang@192 test0611]$ ll

total 0

drwxrwxr-x. 2 mrzhang mrzhang 6 Jun 10 21:34 test0611_01

drwxrwxrwx. 2 mrzhang mrzhang 6 Jun 10 21:34 test0612

drwxrwxr-x. 2 mrzhang mrzhang 6 Jun 10 21:35 test0613

最后,使用一个命令创建项目的目录结构:

[mrzhang@192 test0611]$ cd test0613/

[mrzhang@192 test0613]$ ll

total 0

[mrzhang@192 test0611]$ mkdir -vp scf/{lib/,bin/,doc/{info,product},logs/{info,product},service/deploy/{info,product}}

然后使用tree命令查看下树结构,默认情况下应该是没有该命令的,切换至root用户下载即可:sudo yum install tree,下载完成后,就可以使用了:

[mrzhang@192 test0613]$ tree scf/

scf/

├── bin

├── doc

│ ├── info

│ └── product

├── lib

├── logs

│ ├── info

│ └── product

└── service

└── deploy

├── info

└── product

12 directories, 0 files

16. rmdir命令

rmdir目录是用于删除目录的,并且删除的 是空目录,也就是说这个目录在使用该命令进行删除前必须是空的,当然删除目录时,必须有相应的写权限。

-p 递归删除,要删除的目录为空,如果整个路径被删除或者由于某种原因保留部分路径,则系统在标准输出上显示相应的信息;

-v --verbose 删除时显示指令执行过程

来简单看下,文件目录如下:

[mrzhang@192 test0611]$ tree test0612/

test0612/

├── test0612_01

│ └── test0612_01_01

└── test0612_02

3 directories, 0 files

直接删除目录:

[mrzhang@192 test0612]$ rmdir -v test0612_01

rmdir: removing directory, ‘test0612_01’

rmdir: failed to remove ‘test0612_01’: Directory not empty

提示目录非空,无法删除,如果子目录为空,可以使用-p 递归删除,删除的时候,记得输入子目录的全路径:

[mrzhang@192 test0612]$ rmdir -p -v test0612_01/test0612_01_01/

rmdir: removing directory, ‘test0612_01/test0612_01_01/’

rmdir: removing directory, ‘test0612_01’

一般情况下,删除非空命令的时候会提示一个错误,不过我们可以使用参数来忽略这个错误,当然也仅仅是忽略:

[mrzhang@192 test0612]$ rmdir test0612_02/

rmdir: failed to remove ‘test0612_02/’: Directory not empty

[mrzhang@192 test0612]$ rmdir --ignore-fail-on-non-empty test0612_02/

[mrzhang@192 test0612]$ ll

total 0

drwxrwxr-x. 2 mrzhang mrzhang 22 Jun 10 22:38 test0612_02

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值