Linux——bash的基础特性与命令

bash的基础特性与命令

一、命令

  1. 历史命令 

history

作用:管理命令历史——默认新记录只记录在缓存中,该缓存命令会在用户退出时追加记录在缓存历史文件中

Linux——bash的基础特性与命令

# history -a 追加本次登录缓存中命令至缓存历史文件中

# history -d 删除历史文件中指定的命令——指定历史命令列表编号

# history -c 清空命令历史

快捷操作

#!n调用命令列表中的第n条命令

#!string 调用命令列表中最近一个以string开头的命令

#!!重复运行上一条命令

Linux——bash的基础特性与命令

环境变量$HISTSIZE:命令历史记录的条数

环境变量$HISTFILE:/root/.bash_history

环境变量$HISTFILESIZE:命令历史文件记录历史的条数

调用上一条命令的最后一个参数:

!$ 或者Esc.

控制命令历史的记录方式——环境变量:HISTCONTROL

ignoredups:忽略重复命令(连续且相同的)

ignorespace:忽略以空白字符(空格)开头的命令

ignoreboth:以上两种同时生效

修改环境变量

#export 变量名=“值”  (不加$)

Linux——bash的基础特性与命令

变量赋值:把赋值符号后面的数据存储于变量名指向的内存空间

手动赋值只针对当前shell有效。

 

所以,如果你不小心删除了公司的数据库, 先#history -c,然后一脸无辜

 

  1. 命令补全

  1. 路径补全

  1. 目录管理类命令

cd,pwd,ls,mkdir,rmdir,tree

新建目录

#mkdir /a/b/c/d 在/a/b/c下创建d,首先路径要存在。

# mkdir  -p /a/b/c/d 已存在不报错,且自动创建a,b,c,d子目录

# mkdir  -pv /a/b/c/d 显示创建过程信息

# mkdir  -m MODE 创建目录时直接指定权限

删除目录

#rmdir /a/b/c/d 删除在/a/b/c的d目录,d目录必须为空目录

#rmdir -p /a/b/c/d 递归删除空目录

 

列出目录层级

tree

Linux——bash的基础特性与命令

重新装一下

Linux——bash的基础特性与命令

#tree /tmp/test1

Linux——bash的基础特性与命令

#tree -d /tmp/test1 只显示目录

#tree -L 2 /tmp level最多显示到2级目录

#tree pattern 只显示由指定pattern匹配到的路径

 

  1. 命令行展开

{ }:可承载一个以逗号分隔的列表,并将其展开为多个路径

#mkdir -p /tmp/{a,b}在tmp下创建a和b

Linux——bash的基础特性与命令

Linux——bash的基础特性与命令

Linux——bash的基础特性与命令

Linux——bash的基础特性与命令

  1. 命令执行结果状态

成功

失败

bash使用特殊变量$?保存最近一次命令的执行状态结果:

0:成功

1-255:失败

Linux——bash的基础特性与命令

程序执行有两类结果,一类为程序的返回值,一类为程序执行的状态结果。

 

  1. 文本文件查看类命令

cat,tac,more.less,tail,head

#more [OPTION...] FILE...

#less [OPTION...] FILE...  同man

#head [OPTION...] FILE... 显示前n行,默认10行。

-c字节 -n行数

Linux——bash的基础特性与命令

#tail [OPTION...] FILE... 显示后n行,默认10行。

-c字节 -n行数

-f,--follow 查看到文件尾部后不退出,跟踪显示文件新追加进来的行内容

 

  1. 文件的时间戳管理工具

touch

文件:metadate,date

查看文件状态:stat

三个时间戳:

access time:访问时间,简写atime,读取文件内容

modify time:修改时间,简写mtime,改变文件内容(数据)

chang time:改变时间,简写ctime,元数据发生改变

touch命令可以手动修改其中的前两个时间戳:atime和mtime

#touch [OPTION...] FILE...

-a -m

 -t use [[CC]YY]MMDDhhmm[.ss] instead of current time

Linux——bash的基础特性与命令

-c:若文件不存在,不予创建

 

  1. 文件管理

cp,mv,rm

复制:cp 默认复制文件,-r递归复制目录

       cp [OPTION]... [-T] SOURCE DEST

       cp [OPTION]... SOURCE... DIRECTORY

           cp [OPTION]... -t DIRECTORY SOURCE...

常用选项:

-i:交互式,提醒是否覆盖

-r,-R:递归复制目录

-a:归档,相当于-dR –preserv=all

-p:same as --preserve=mode,ownership,timestamps(权限,属主属组,时间戳)

-f:强制

 

移动文件:mv(剪切)

 

删除:rm(不可恢复)

-i:交互式(root默认-i)

-r:递归删除目录

-f:强制删除

说到这里,想提一个梗:”rm -rf”这个命令,强制递归删除,通常这个命令都是指定文件夹用的,比如#rm -rf /tmp/ 就是删除/tmp/这个文件夹下面的所有东西,但是如果后面的文件夹路径没有加对,执行了rm -rf / ,在服务器上也就意味着……(效果参考下图)

Linux——bash的基础特性与命令

值得庆幸的是:在redheat6之前,系统认为所有的管理员都是理性的,所以默认允许管理员执行删根操作。但是在6之后,系统发现有些管理员是糊涂的,所以更改了用法,加强了保护机制和确认,man rm中说明:

Linux——bash的基础特性与命令

但是这项默认只针对rm -rf /,如果是rm -rf /*。。。。。。再见!

 

  1. 文本编辑器

nano

nano [OPTIONS] [[+LINE,COLUMN] FILE]...

 

二、bash的基础特性

(1)命令别名(alias)

alias:显示当前shell进程所有可用命令别名

alias name=value:定义别名

在命令行中定义的别名,仅对当前shell进程有效。若想永久生效,要定义在配置文件中。

仅对当前用户:~/.bashrc

对所有用户有效:/etc/bashrc

Linux——bash的基础特性与命令

配置文件修改后,已连接其他终端用户需要让bash进程重新读取配置文件:

source /PATH/TO/XXX 或者 . /PATH/TO/XXX

撤销别名:unalias [-a] name

执行原命令:\COMMAND

 

(2)glob(globbing)

bash中用于实现文件名“通配”机制

通配符:* ,?,[]

*:

任意长度任意字符:a*b=a123b  acdfgb

?:

任意单个字符:a?b=a1b   a??b=a12b

[ ]:

匹配指定范围内的任意单个字符:

[0-9]:匹配0-9  

[a-z]:不区分大小写

[A-Z]:仅匹配大写字母

[^]:匹配指定范围之外的任意单个字符[^0-9][^A-Z][^0-9A-Z]

专用字符集合:

       [:alnum:]数字+字母  [:alpha:]大小写字母  [:blank:]  [:cntrl:]

       [:digit:]数字  [:graph:]  [:lower:]小写字母  [:print:]

       [:punct:]标点符号  [:space:]空格  [:upper:]大写字母  [:xdigit:]

 

(3)bash的快捷键

Ctrl+l:清屏,相当于clear

Ctrl+a:光标跳至命令首部

Ctrl+e:光标跳至命令尾部

Ctrl+c:中止命令

Ctrl+u:删光标到命令行收

Ctrl+k:删光标到命令行尾

 

(4)bash的I/O重定向及管道

打开的文件都有一个fd:file descriptor(文件描述符)

标准输入:keyboard;0

标准输出:moniter;1

标准错误输出:moniter;2

 

I/O重定向:改变默认标准(输入/输出)位置

输出重定向:COMMAND > NEW_POS; COMMAND >> NEW_POS;

>:覆盖重定向,目标文件原有内容被清除

>>:追加重定向,新内容追加至目标文件尾部

>|:强制覆盖

Linux——bash的基础特性与命令

Linux——bash的基础特性与命令

#set -C:禁止将内容覆盖输出至已有文件中(只对当前shell有效)

# set +C:打开允许覆盖功能

2>:覆盖重定向错误输出数据流

2>>:追加重定向错误输出数据流

标准输出和错误输出各自定向至不同位置:

#COMMAND > /PATH/TO/FILE.TXT 2> /PATH/TO/ERROR.TXT     

合并标准输出和错误输出为同一个数据流进行重定向:&

&>:覆盖重定向

Linux——bash的基础特性与命令

&>>:追加重定向

#COMMAND > /PATH/TO/FILE.TXT 2> &1

#COMMAND > /PATH/TO/FILE.TXT 2>> &1

 

输入重定向:<

tr命令:转换或删除字符

tr [OPTION]... SET1 [SET2] :SET1中的字符替换为SET2中对位的字符

tsst666中的小写字母全部替换为大写字母:

Linux——bash的基础特性与命令

tr -d SET1 :删除SET1字符

Linux——bash的基础特性与命令

HERE Documentation:<<

#cat << EOF

#cat >> /tmp/tsst666 <<EOF

EOF结束前的所有内容追加至/tmp/tsst666:

Linux——bash的基础特性与命令

 

管道

|:第一个命令的输出成为最后一个命令的输入

COMMAND1 | COMMAND2 | COMMAND3

最后一个命令会在当前shell进程的子shell进程中执行

tee:一个输入两路输出

tee [OPTION]... [FILE]...

Linux——bash的基础特性与命令

在屏幕输出后同时保存到/tmp/test22文件中(覆盖输出)

 

 

 

将/etc/passwd中的前五行转换为大写,保存到/tmp/passwd.our

Linux——bash的基础特性与命令

Linux——bash的基础特性与命令

 

(5)文本处理工具:wc,cut,sort,uniq

wc命令:统计行数、单词、字节(-l -w -c)

Linux——bash的基础特性与命令

passwd下有34行,53个单词,1621个字节

cut命令:剪切并输出至标准输出

-d:指明分隔符

-f:指明字段。1  1,2  1-4  1-3,7等

--output-delimiter=STRING :输出分割符替换

以:为分割,截取/etc/passwd中的第1,3列

Linux——bash的基础特性与命令

sort命令:排序(默认按字母排序)

sort [OPTION]... [FILE]...

-r:逆序排序

-f:忽略字符大小写

-t DELIMITER:字段分隔符

-k NUMBER:以指定字段为标准排序

-u:uniq,排序后去重

将/etc/passwd中以:分割的第三列按数值大小排序

Linux——bash的基础特性与命令

切一下更直观

Linux——bash的基础特性与命令

uniq命令:去重复:连续且完全相同,方位重复

uniq [OPTION]...[FILE]..

-c:显示每行重复出现的次数

-d:仅显示重复过的行

-u:仅显示不曾重复的行

Linux——bash的基础特性与命令

练习:取出/etc/passwd文件的第6-10行,并将这些信息按第三个字段的数值大小排序