BASH的小白学习笔记

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

bash的基础命令有很多,也挺重要,好好学习一下。

一、内置命令

1.type

[user@localhost ~]$ type cd     ==>查看cd是否为内置
cd 是 shell 内嵌             
[user@localhost ~]$ type ls  
ls 是 `ls --color=auto' 的别名
[user@localhost ~]$ type -t ls  
alias                           ==>该命令为别名设计的命令
[user@localhost ~]$ type -a ls  ==>列出所有含ls的命令
ls 是 `ls --color=auto' 的别名
ls 是 /usr/bin/ls
ls 是 /bin/ls

2.快速编辑

命令编辑时我们最常遇到三个问题:
一、命令太长
命令太长都在同一行可能看起来不舒服,那咱们将分几行写。一般编辑文档时换行点击【Enter】即可,但在Linux执行命令时,【Enter】就会执行命令。所以这里引入一个【 \ 】转义字符,将 \与【Enter】结合及实现换行。

[user@localhost ~]$ cp /var/spool/mail/root  /etc/crontab \ ==>输入\后点击【Enter】即可换行
> /etc/fstab  /root   ==>  此行开头的 > 是主动出现的,>的出现也标准着你学会换行了,即可继续输入。
[user@localhost ~]$ cp /var/spool/mail/root   /etc/crontab  /etc/fstab  /root 

以上两个命令执行是完全一样的,总结来说就是换行用 : +【Enter】,执行命令用:【Enter】
二、命令错误
命令这么多,打错字很正常,那我们怎么去删除。逐字点击【Backspace】? 如果命令非常长,这样是不是太慢了·,所以我们可以用【Ctrl】+u / 【Ctrl】+k

[user@localhost ~]$ cp /var/spool/mail/root  /etc/crontab  ==>我们将光标停在/etc/crontab前【Ctrl】+k看一下
[user@localhost ~]$ cp /var/spool/mail/root  ==>光标后面的全部删除,so quickly!!!
[user@localhost ~]$ cp /var/spool/mail/root  /etc/crontab  ==>我们将光标停在/etc/crontab前【Ctrl】+u看一下
[user@localhost ~]$  /etc/crontab ==>光标前的全部删除

三、移动光标
光标移到开始:【Ctrl】+a
光标移到最后:【Ctrl】+e

总结一下:你也可以不用这些快速按钮,自己慢慢的删除,慢慢的挪动光标也可以,不嫌麻烦就行。

二、shell变量

1.echo

变量就是以一组文字或符号等来代替一些设置或一串保留的数据。变量自然与一般使用的常量表示方式不同,变量使用时前面加上 【$】

[user@localhost ~]$ echo $variable   ==>用echo读取未赋值的变量variable

[user@localhost ~]$ variable=VBird   ==>给variable赋值VBird
[user@localhost ~]$ echo $variable   
VBird
[user@localhost ~]$ variable=VBird1  ==>给variable赋值VBird1
[user@localhost ~]$ echo $variable
VBird1                               ==>给变量赋什么值。读取出来什么值

echo读出变量,可用$可以直接加变量名,也可用 $ {变量}

[user@localhost ~]$ echo $PATH      
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/user/.local/bin:/home/user/bin
[user@localhost ~]$ echo ${PATH}
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/user/.local/bin:/home/user/bin

2.变量

1.变量赋值

变量不以数字开头

[user@localhost ~]$ 12name=VBird  ==>变量由数字和字母组成,但不能以数字开头
bash: 12name=VBird: 未找到命令...

赋值号前后不能有空格

[user@localhost ~]$ name =VBird
bash: name: 未找到命令...
[user@localhost ~]$ name= VBird
bash: VBird: 未找到命令...
[user@localhost ~]$ name = VBird
bash: name: 未找到命令...
[user@localhost ~]$ name=VBird Tsai
bash: Tsai: 未找到命令...
[user@localhost ~]$ echo $name
                                  ==>未赋值成功

双引号中的 $变量,保存原本的特性

[user@localhost ~]$ myname=erdeng
[user@localhost ~]$ var="myname is $myname"
[user@localhost ~]$ echo $var
myname is erdeng

单引号中的 $变量,直接赋值

[user@localhost ~]$ myname=erdeng
[user@localhost ~]$ var='myname is $myname'  
[user@localhost ~]$ echo $var 
myname is $myname

我们想要将 erdeng’s name (尔等的名字) 赋值给var ,但是命令识别是从左到右,所以var赋值就被拆分中间有空格,所以失败。

[user@localhost ~]$ var='erdeng's name'
> '
bash: name
: 未找到命令...

但是我们就需要赋值成erdeng’s name ,我们可以使用转义字符 \

[user@localhost ~]$ var=erdeng\'s\ name ==> \ 将's的'转义和name前的空格转义 
[user@localhost ~]$ echo $var
erdeng's name

还有一种方法:双引号套单引号

[user@localhost ~]$ var="erdeng's name"
[user@localhost ~]$ echo $var
erdeng's name

2.变量扩增

扩增就是往变量里面加东西,扩增采用 :的模式,累加一个 /home/dmtsai/bin这个目录到PATH

[user@localhost ~]$ echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/user/.local/bin:/home/user/bin
[user@localhost ~]$ PATH=$PATH:/home/dmtsai/bin
[user@localhost ~]$ echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/user/.local/bin:/home/user/bin:/home/dmtsai/bin

两种扩充方法

[user@localhost ~]$ name=erdeng
[user@localhost ~]$ name="$name"yes ==>双引号保持原本性质
[user@localhost ~]$ echo $name
erdengyes
[user@localhost ~]$ name=erdeng
[user@localhost ~]$ name=${name}yes 
[user@localhost ~]$ echo $name
erdengyes

3.子进程

export 变量名 :将变量变成环境变量。子进程仅会继承父进程的环境变量,子进程不会继承父进程的自定义变量。

[user@localhost ~]$ echo $name   
erdengyes
[user@localhost ~]$ bash           ==>进入子进程
[user@localhost ~]$ echo $name     ==>查看name
                                   ==>空的
[user@localhost ~]$ exit           ==>退出子进程
exit
[user@localhost ~]$ export name    ==>export将父进程的变量变成环境变量
[user@localhost ~]$ bash
[user@localhost ~]$ echo $name
erdengyes                          ==>变量变成环境变量

unset 变量名 :取消变量

[user@localhost ~]$ bash
[user@localhost ~]$ echo $name 
erdengyes
[user@localhost ~]$ exit
exit
[user@localhost ~]$ unset name  ==>取消变量
[user@localhost ~]$ bash        
[user@localhost ~]$ echo $name
                                ==>变量无赋值,取消成功

进入目前内核的模块目录,$(uname -r)为内核版本

[user@localhost ~]$ cd /lib/modules/$(uname -r)/kernel 
[user@localhost kernel]$ 

3.环境变量

我们可以通过env和export来查看环境变量

[user@localhost ~]$ env
XDG_VTNR=1
SSH_AGENT_PID=8225
XDG_SESSION_ID=1
HOSTNAME=localhost.localdomain      <==主机名
IMSETTINGS_INTEGRATE_DESKTOP=yes
VTE_VERSION=5202
TERM=xterm-256color                 <==终端环境类型
SHELL=/bin/bash                     <==当前使用的shell的程序
XDG_MENU_PREFIX=gnome-
HISTSIZE=1000
GNOME_TERMINAL_SCREEN=/org/gnome/Terminal/screen/f70e0dcf_3f33_4fab_be28_f8547c875856
IMSETTINGS_MODULE=IBus
USER=user
-----------------------------------------省略n字----------------------------------------------

1.提示字符设置

提示符是对应的变量是PS1,我们可以通过对PS1的赋值来改变提示符的格式

[user@localhost ~]$ cd /home   
[user@localhost home]$ PS1='[\u@\h \w \A #\#]\$' 
[user@localhost /home 20:52 #50]$PS1='[\u \h \w \A #\#]\$'
[user localhost /home 20:54 #51]$PS1='[\u@\H \w \A #\#]\$'
[user@localhost.localdomain /home 20:57 #52]$PS1='[\u@\H \w \A #\# \d]\$'
[user@localhost.localdomain /home 21:08 #53922]$

哦哦!原来这些提示的格式设置是可以自己控制的,将对应的符号设置在不同的格式,提示符也就不同了。
\u :当前用户名
\h :主机名(仅取小数点前的名字)
\H:完整主机名
\w:完整的工作目录
#:执行第几个命令
$:提示字符,root是# ,一般用户是 $
与时间有关
\d:显示时间【星期 月 日】
\t:24小时【HH:MM:SS】
\A:24小时【HH:MM】
\T:12小时【HH:MM:SS】
@:12小时,显示上下午
?作为一个特殊的变量,?关系上一个执行命令的换回值,上一个成功执行返回0,不成功执行返回非0

[user@localhost /home]$name=er deng   ==>错误格式的赋值
bash: deng: 未找到命令...
[user@localhost /home]$echo $?        ==>读变量?
127
[user@localhost /home]$echo $?        ==>上一个echo正确读取,所以返回值为0
0

4.语系变量

1.locale

语系问题可能会导致语系乱码以及时间部分的乱码,linux支持的语系非常多,locale -a 查看所有语系。

[user@localhost ~]$locale -a
aa_DJ
aa_DJ.iso88591
aa_DJ.utf8
aa_ER
aa_ER@saaho
aa_ER.utf8
aa_ER.utf8@saaho
aa_ET
aa_ET.utf8
af_ZA
af_ZA.iso88591
-----------------------------此时省略n字--------------------------------

2.read

键盘读取

[user@localhost ~]$read atest      
This is a test                     <==在此输入atest的变量值
[user@localhost ~]$echo $atest     <==查看atest变量赋值
This is a test
[user@localhost ~]$read -p "myname :" -t 30 name  <== -p后接提示符;-t后接等待时间秒数,过时不候
myname :erdeng   ==>输入前面的提示myname:
[user@localhost ~]$echo $name
erdeng

3.declare

declare声明变量类型
整数类型

[user@localhost ~]$sum=100+50  ==>默认的变量属性为文字形式的属性,所以识别的10050并不是数字,也就不能计算和
[user@localhost ~]$echo $sum
100+50
[user@localhost ~]$declare -i sum=100+50   ==>-i 将sum的类型定义成整数类型,可以进行整数的计算
[user@localhost ~]$echo $sum
150
[user@localhost ~]$declare -p sum    ==> -p 可以看变量sum的属性
declare -i sum="150"                 ==> -i 整数类型
[user@localhost ~]$declare -x  sum   ==>-x ,与export作用一样,将自定义变量sum转化成环境变量
[user@localhost ~]$declare -p sum 
declare -ix sum="150"                ==>此时变量sum是整数类型也是环境变量   
[user@localhost ~]$bash              ==>接入子进程
[user@localhost ~]$ echo $sum       
150                                  ==>150,OK!!!
[user@localhost ~]$ exit     
exit                                 ==>进入主程序
[user@localhost ~]$declare +x  sum   ==> -是添加,+就是取消,+x就是取消变量是全局变量
[user@localhost ~]$bash 
[user@localhost ~]$ echo $sum          
                                     ==>此时子进程的变量sum为空   
[user@localhost ~]$ exit
exit
[user@localhost ~]$declare -r sum    ==>变量sum变成只读类型
[user@localhost ~]$sum=123           ==>修改失败,制度
bash: sum: 只读变量
[user@localhost ~]$declare +r sum    ==>只读权限无法修改,注销可肯能恢复
bash: declare: sum: 只读变量
[user@localhost ~]$su 
密码:
[root@localhost user]# su
[root@localhost user]# su user       ==>重新登录
[user@localhost ~]$ declare -p sum 
declare -x sum="150"                 ==>-r类型没了
[user@localhost ~]$ sum=151          ==>修改变量成功
[user@localhost ~]$ echo $sum
151
[user@localhost ~]$ declare -p sum
declare -x sum="151"   

数组类型

[user@localhost ~]$ var[1]="AAA"
[user@localhost ~]$ var[2]="BBB"
[user@localhost ~]$ var[3]="CCC"
[user@localhost ~]$ echo "${var[1]},${var[2]},${var[3]}" 
AAA,BBB,CCC
[user@localhost ~]$ declare -p var
declare -a var='([1]="AAA" [2]="BBB" [3]="CCC")'

5.文件系统限制

1.ulimit

------------------------------------------一部分未保存丢失---------------------------------------------------

四.登录与欢迎

1./etc/issue

登录信息在/etc/issue里面

[root@localhost user]# cat  /etc//issue

查看登录文件信息

\S                
Kernel \r on an \m

[字符]这种变量形式在提示符设置的时候我们就遇到过,现在我们在学几个
\d本地端日期 ==> 前面已经学过
\I显示终端数量
\m显示硬件等级
\n显示主机网络名
\O显示domin name
\r操作系统版本(uname -r)
\t本地端日期
\S操作系统名
\v操作系统版本

2./etc/motd

虚拟机还在学习中,暂时还不会截图,拍的照片有点糊
前两行是登录信息,登录后成空行,此时欢迎文件/etc/motd文件是空的,所以没有欢迎的语句
在这里插入图片描述
在/etc/motd中编写
在这里插入图片描述
在次登录,欢迎信息出现
在这里插入图片描述
欢迎信息不仅仅可以做问候语,还可以做为root给用户的提示。

3. 环境配置文件

五.重定向数据

1.> >> 2> 2>> <

< 覆盖输入 ,<<追加输入
1> 覆盖将【正确数据】输入到指定的文件或设备
1>>追加将【正确数据】输入到指定的文件或设备
2> 覆盖将【错误数据】输入到指定的文件或设备
2>>追加将【错误数据】输入到指定的文件或设备

[user@localhost ~]$ ll /                       ==>最熟悉的ll在执行一下
总用量 20
lrwxrwxrwx.   1 root root    7 921 02:29 bin -> usr/bin
dr-xr-xr-x.   5 root root 4096 921 02:52 boot
drwxr-xr-x.  20 root root 3360 924 01:30 dev
drwxr-xr-x. 139 root root 8192 924 01:35 etc
--------------------------此处省略n字----------------------------------
[user@localhost ~]$ ll />~/rootfile       ==>屏幕无任何信息,ll原本输出的信息输入到~/.rootfile
[user@localhost ~]$ cat  ~/rootfile      ==>查看~/.rootfile的内容
总用量 20
lrwxrwxrwx.   1 root root    7 921 02:29 bin -> usr/bin
dr-xr-xr-x.   5 root root 4096 921 02:52 boot
drwxr-xr-x.  20 root root 3360 924 01:30 dev
drwxr-xr-x. 139 root root 8192 924 01:35 etc
--------------------------此处省略n字----------------------------------
[user@localhost ~]$ find /home -name .bashrc >right  2> error ==
[user@localhost ~]$ cat right   ==>查寻的正确结果放test1
/home/user/.bashrc
[user@localhost ~]$ cat error   ==>查寻的正确结果放test2,无错误

[user@localhost ~]$ find /home -name .bashrc > right 2> error 
[user@localhost ~]$ cat error     ==>无错误
[user@localhost ~]$ cat right      ==>找到
/home/user/.bashrc
[user@localhost ~]$ find /home -name .bashrc  2> error  ==>将错误的放error,能查询到自动输出
/home/user/.bashrc    ==>查询输出的结果
[user@localhost ~]$ cat error       ==>无错

想要将正确错误的输出都写到一个文件怎么操作呢?

[user@localhost ~]$ find /home -name .bashrc  > all  2> all    ==>错误格式,两个数据同时写入,次序错乱
[user@localhost ~]$ find /home -name .bashrc  >all 2>&1        ==>正确,命令从左到右读,先正确的写入all,再将错误的写入文件
[user@localhost ~]$ find /home -name .bashrc &>all             ==>正确
[user@localhost ~]$ cat > in  ==>cat原本是查看文件内容,现在加上 > ,也就很容易理解是将下面输入的内容输出到文件
Hello                         ==>输入
This is in                    ==>【Ctrl+d】结束
[user@localhost ~]$ cat in    ==>查看文件内容
Hello 
This is in

也就是创建一个文件,并直接向文件写入数据。同时有一个替代【Ctrl+d】来结束的方法

[user@localhost ~]$ cat > test <<"eof"    ==>eof也可以用其他此替代,但是建议用eof
> This is test
> Bye
> eof
[user@localhost ~]$ cat test
This is test
Bye

将< 与 > 结合一起理解一下,>将信息输出到文件,< 将文件中的数据输入。

[user@localhost ~]$ cat > all < ~/.bashrc  ==>前半条 cat > all 通过上一操作理解,< ~/.bashrc就是将其内容输入到新建的all文件
[user@localhost ~]$ ll all ~/.bashrc  ==>all 与 ~/.bashrc像复制的一样
-rw-rw-r--. 1 user user 231 924 03:32 all
-rw-r--r--. 1 user user 231 1031 2018 /home/user/.bashrc

无论是 < 还是 > 都是将大头的数据传到小头。还有一个就是我们不想要它的某一个输出怎么办?

[user@localhost ~]$ find /home -name .bashrc >/dev/null 
[user@localhost ~]$ cat /dev/null  ==>咦,按照之前的理解,/dev/null 里面是查找到的.bashrc结尾的文件
                             ==>怎么是空的,/dev/null是一个垃圾桶黑洞设备与特殊写法,数据放进去就丢失 

2. ; 、&&、||

; 前面的命令执行完接着执行后面的
&& 前面的成功执行才能执行后面的
|| 前面执行失败执行后面的,前面的成功后面的不执行

;   ==> 就是从左到右执行,前面的结果对后面执行无影响不做展示

&&:前面命令执行$?=0才能执行后面

[user@localhost ~]$ ls /tmp/AAA && touch /tmp/AAA/bbb 
ls: 无法访问/tmp/AAA: 没有那个文件或目录            ==>执行ls失败不再执行
[user@localhost ~]$ mkdir /tmp/AAA             ==>创建/tmp/AAA后
[user@localhost ~]$ ls /tmp/AAA && touch /tmp/AAA/bbb ==>成功执行

||:前面命令执行$?不等于0才能执行后面

[user@localhost ~]$ rm -r /tmp/AAA
[user@localhost ~]$ ls /tmp/AAA|| mkdir /tmp/AAA
ls: 无法访问/tmp/AAA: 没有那个文件或目录 ==>命令从左到右执行,ls时不存在,然后创建
[user@localhost ~]$ ll /tmp/AAA    ==>ok!再次查询有了,创建成功
总用量 0        
[user@localhost ~]$ ll /tmp
总用量 131088
drwxrwxr-x. 2 user user         6 924 04:46 AAA  

六.pipe

管道将输出的数据经过几道处理得到我们想要的格式,| 前的输出数据作为 | 后的输入数据。

[user@localhost ~]$ ls -al /etc
总用量 1404
drwxr-xr-x. 139 root root     8192 924 01:35 .
dr-xr-xr-x.  17 root root      224 921 02:50 ..
drwxr-xr-x.   3 root root      101 921 02:33 abrt
-rw-r--r--.   1 root root       16 921 02:50 adjtime
-rw-r--r--.   1 root root     1518 67 2013 aliases
-rw-r--r--.   1 root root    12288 921 02:54 aliases.db
drwxr-xr-x.   3 root root       65 921 02:38 alsa
drwxr-xr-x.   2 root root     4096 921 02:39 alternatives
------------------------------此处省略n字-------------------------------
[user@localhost ~]$ ls -al /etc |less ==>查看的内容都是一样的,| less 可以前后翻
总用量 1404
drwxr-xr-x. 139 root root     8192 924 01:35 .
dr-xr-xr-x.  17 root root      224 921 02:50 ..
drwxr-xr-x.   3 root root      101 921 02:33 abrt
-rw-r--r--.   1 root root       16 921 02:50 adjtime
-rw-r--r--.   1 root root     1518 67 2013 aliases
-rw-r--r--.   1 root root    12288 921 02:54 aliases.db
drwxr-xr-x.   3 root root       65 921 02:38 alsa
drwxr-xr-x.   2 root root     4096 921 02:39 alternatives
------------------------------此处省略n字-------------------------------

1.cut

[user@localhost ~]$ echo ${PATH}  ==>读取{PATH}
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/user/.local/bin:/home/user/bin
[user@localhost ~]$ echo ${PATH}|cut -d ':' -f 5 ==>-d后':'所以按 :分行,-f 后加数字n,选取第n行
/bin
[user@localhost ~]$ echo ${PATH}|cut -d ':' -f 4
/usr/sbin
[user@localhost ~]$ echo ${PATH}|cut -c 12-20 ==>-c 选取字节的第12-20个字符
bin:/usr/

cut -c n- 从第n个开始向后所有的字符

2.last

[user@localhost ~]$ last  ==>输出[账号/终端/来源/日期]
user     pts/0        :0               Tue Sep 24 02:00   still logged in   
user     pts/0        :0               Tue Sep 24 01:36 - 01:36  (00:00)    
user     tty2                          Tue Sep 24 01:36 - 01:36  (00:00)    
user     tty2                          Tue Sep 24 01:32 - 01:36  (00:03)   

3.grep

[user@localhost ~]$ cat  > /tmp/test  ==>使用cat > 创建/tmp/test并写入
Hello!
This is /tmp/test
who are you?                         ==>【Ctrl+d】结束写入
[user@localhost ~]$ cat  /tmp/test   ==>查看/tmp/test
Hello!
This is /tmp/test
who are you?
[user@localhost ~]$ cat /tmp/test |grep 'is'  ==>  |grep 'is'==>含is的行
This is /tmp/test
[user@localhost ~]$ cat /tmp/test |grep 'e' ==>==>含e的行
Hello!
This is /tmp/test
who are you?

grep -v 不含查找字符

[user@localhost ~]$ cat /tmp/test |grep  -v 'is' ==>不含is的行
Hello!
who are you?
[user@localhost ~]$ cat /tmp/test |grep -v 'e' ==>不含e的行
[user@localhost ~]$ cat /tmp/test |grep  -vn 'is' ==>-n显示行号
1:Hello!
3:who are you?
[user@localhost ~]$ cat /tmp/test |grep  -c 'is'  ==>-c次数
2

4.sort

[user@localhost ~]$ cat /etc/passwd |sort  ==>默认以文字形式的首栏首字母来排列,所以从a开始排
abrt:x:173:173::/etc/abrt:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
chrony:x:993:988::/var/lib/chrony:/sbin/nologin
colord:x:997:995:User for colord:/var/lib/colord:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
------------------------------此处省略n字---------------------------------

-t :分隔符,默认是【Tab】
-k:第几个区来分,就是说按那个区段的首字母来排序
-n:按纯数字排序

[user@localhost ~]$ sort  -t ':' -k 3 /etc/passwd -n  ==>:分第三区按数字排列
root:x:0:0:root:/root:/bin/bash             ==>0
bin:x:1:1:bin:/bin:/sbin/nologin            ==>1
daemon:x:2:2:daemon:/sbin:/sbin/nologin     ==>2
adm:x:3:4:adm:/var/adm:/sbin/nologin        ==>3
----------------------------------此处省略n字------------------------------------------

5.uniq

uniq一般是排序后,对于重复的数据仅列出一个经行展示时使用

[user@localhost ~]$ last | cut -d ' ' -f1 |sort |uniq

reboot
user
wtmp
==>last列出[账号/终端/来源/日期]经过第一个管道,cut一行一行的处理,-d选项按' '==>隔,-f1 选取第一段分隔,所以是选取last结果的每一行的第一个分隔的内容。|sort也
==>就是排序,默认状态的排序是对字符的排序,uniq是对于重复的结果列出一个展示。
[user@localhost ~]$ last | cut -d ' ' -f1 |sort |uniq -c
      1 
     10 reboot
     30 user
      1 wtmp
==>下面做了技术处理|uniq -c 是对重复的结果列出同时统计重复的数量

6.wc

wc是统计文件里的字(英文字母)、行、字符的数量
-l:行
-w:字
-m:字符

[user@localhost ~]$ wc -l -w -m /etc/passwd 
  43   87 2259 /etc/passwd

7.tee

我们学的 > >> 2> 2>> 都是单向输出,如是我们既想输出到屏幕又想输出到文件,这时候我们就需要用到tee

[user@localhost tmp]$ cat /tmp/test|tee /tmp/test1  
Hello!                       ==>/tmp/test的数据输出到屏幕
This is /tmp/test
who are you?
[user@localhost tmp]$ cat /tmp/test1     ==>查看/tmp/test1的数据
Hello! 
This is /tmp/test
who are you?

8.tr

tr是用来删除文件数据或替换
-d :删除
-s : 替换

[user@localhost tmp]$ cat /tmp/test ==>查看/tmp/test
Hello!
This is /tmp/test
who are you?
[user@localhost tmp]$ cat /tmp/test | tr -d  'is'  ==>删除'is'
Hello!
Th  /tmp/tet
who are you?
[user@localhost tmp]$ cat /tmp/test | tr  -s  't' 'T' ==>替换t为T
Hello!
This is /Tmp/TesT
who are you?

9.col

-x 将tab键转化成对应的空格键 【tab】->空格,不转化是^I

10.join

连接两个文件,相同数据行相加

11.paste

同一行直接粘一起,中间用空格

12.expand

将【tab】转化为空格

13.split

将文件拆分

减号

  • 可以代替管道前面输出的stout和管道后面的stdin

总结

命令很多,多做实验,后续会慢慢熟悉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值