linux学习笔记10 shell与shell script的学习

目录

1.查询命令是否为内置命令

2.变量的使用与设置

3.环境变量的功能

利用 env 显示所有环境变量

利用 set 显示所有变量

4.语系变量 locale

5.键盘读取变量

6.变量类型声明

7.数组的设置

8.文件系统及程序的限制

9.变量内容微调

删除

替换

测试变量内容

10.命令别名 alias

11.命令历史 history

12.命令的执行顺序

13.bash的登陆欢迎界面 /etc/issue   /etc/motd

14.bash的环境配置文件

login shell与non-login shell

/etc/profile

~/.bash_profile

source

~/.bashrc

其他影响到bash的配置文件

15.终端的环境设置:stty、set

16.通配符与特殊符号

17.数据流重定向

(stdout)standard output与(stderr)standard error output

数据垃圾桶 /dev/null

stdin:< 与 <<

为什么学习数据流重定向

18.命令执行的判断根据

不考虑命令相关性 command;command

考虑命令相关性 &&与||

19.管道命令 |

选取命令 cut grep

排序命令 sort wc uniq

双向重定向  tee

字符转换命令 tr col join paste expand

划分命令 split

参数代换 xargs

- 用途


1.查询命令是否为内置命令

type [-tpa] command        无参数显示内部还是外部命令

-t        显示 file:为外部命令;alias:该命令为命令别名;builtin:为bash内置命令

-p        若command为外部命令则显示完整文件名

-a        由PATH变量定义的路径中,将所有含command的命令列出,包括alias

2.变量的使用与设置

echo $变量        利用echo读出变量的内容

变量=        设置变量的值

变量设置的规则:等号两边不能有空格,若有空格,可用""或''将变量内容结合;

变量名称只能是英文与数字,但开头不能是数字;

""内的特殊字符保有原本特性,''内的特殊字符无意义;

转义符 \ 起效果;

可用`命令`(反单引号)或$(命令)来显示命令提供的信息;

"$变量名"或${变量}或$变量 用于扩增变量内容

父程序的自定义变量无法继承给子程序

若变量需要在其他子程序执行,则用 export 变量 来使变量成为环境变量

通过 unset 变量名 来取消变量设置

大写的变量名基本上是系统内定变量

3.环境变量的功能

利用 env 显示所有环境变量

HOME 用户家目录

SHELL 目前环境使用的shell程序

HISTSIZE 历史命令保存条数

MAIL 使用mail收信时系统读取的邮箱文件

PATH 执行文件查找的路径,目录顺序也很重要

LANG 语系数据

RANDOM 随机数

利用 set 显示所有变量

PS1 命令提示字符

\a 响铃

\d 星期 月 日

\h 仅取主机名在第一个小数点之前的名字

\H 完整主机名

\j 当前由shell管理的作业数量

\l shell终端设备名的基本名

\t 24小时制 HH:MM:SS

\T 12小时制 HH:MM:SS

\@ 12小时制 am/pm格式

\A 24小时制 HH:MM

\u 目前用户名

\v bash版本信息

\w 完整工作目录名称

\W 仅会列出最后一个目录名

\! 此命令的历史使用次数

\# 执行的第几个命令

\$ 提示符,root为#,其他的为$

$ 代表目前shell的进程号 PID

? 代表上一个命令返回的值,上一个命令执行成功则返回0,否则返回非0

OSTYPE,HOSTTYPE,MACHTYPE 主机硬件与内核等级

export 将自定义变量转换成环境变量,自定义变量无法被子程序继续引用,环境变量可以

4.语系变量 locale

locale -a        查看目前系统支持的语系(可在/usr/lib/locale内查询)

locale        显示目前设置的编码

整体系统默认语系定义在 /etc/locale.conf 中

5.键盘读取变量

read -p 提示字符 变量名

read -t 等待秒数 变量名

read 变量名

read -p please keyin your name: -t 30 name

提示字符最好用双引号括起来

read -p "please keyin your name:" -t 30 name

6.变量类型声明

declare [-aixr] 变量名

-a        将变量定义为数组

-i        将变量定义为整数

-x        将变量变成环境变量        +x 可取消设置

-r        将变量设置为readonly,无法更改内容也不能unset,通常要注销才能恢复

 变量默认为字符串类型,若想 sum=1+2 为 sum=3,则要 declare -i sum=1+2

bash环境中的数值运算只到整数形式

7.数组的设置

arr[num]=

echo ${arr[num]}

8.文件系统及程序的限制

利用bash限制用户的系统资源,可开启文件数量,可使用内存等等

ulimit [-SHacdfltu] 配额

-S soft limit,可超过此配额,不过会有警告

-H hard limit,无法超过此配额

-a 可列出所有限制额度

-c 限制每个内核文件(程序出错时,系统会将内存信息写成文件)的最大容量

-d 程序可使用的最大段内存容量

-f 此shell可以建立的最大文件容量,单位为Kbytes

-l 可用于锁定的内存量

-t 可使用的最大CPU时间(秒)

-u 单一使用者可以使用的最大进程数量

9.变量内容微调

所有变量内容的保存只需 var=${...} 即可

删除

利用#实现从变量内容最前面开始向右删除,且删除符合条件的最短的,而##则是符合条件最长的

[root@zjw ~]# name=abcedfedf
[root@zjw ~]# echo $name
abcedfedf
[root@zjw ~]# echo ${name#a*e}    代表从 a删除到e(符合条件的最短的)
dfedf
[root@zjw ~]# echo ${name##a*e}    (符合条件最长的)
df

相反,%表示从最后向前删除,%%与##类似

[root@zjw ~]# echo ${name%e*f}
abcedf
[root@zjw ~]# echo ${name%%e*f}
abc
[root@zjw ~]# 

替换

[zjw@zjw ~]$ name=zzjjww
[zjw@zjw ~]$ echo $name
zzjjww
[zjw@zjw ~]$ echo ${name/z/J}
Jzjjww
[zjw@zjw ~]$ echo ${name//z/Z}
ZZjjww

/ 表示只替换第一个符合条件的字符,// 表示替换所有符合条件的字符,z 为旧字符,后面的为新字符

测试变量内容

用于判断一个变量是否存在,可以利用 echo ${name-root} 给予变量一个root的内容,若变量原无内容,则给予后内容为 root,若变量原已有内容,则内容不变

注意,直接 echo 查看变量若显示为空,有可能无内容,也有可能被赋值了空字符

[zjw@zjw ~]$ echo $name

[zjw@zjw ~]$ name=${name-root}
[zjw@zjw ~]$ echo $name
root

赋值成功说明 name 变量原本没有内容

[zjw@zjw ~]$ name=""
[zjw@zjw ~]$ echo $name

[zjw@zjw ~]$ name=${name-root}
[zjw@zjw ~]$ echo $name

先给变量赋值空字符,显示结果与无内容一样,但是无法被给予 root

[zjw@zjw ~]$ echo ${name:-root}    加上 : 后变量无内容或为空字符,都能替换内容
root

能替换的前提是变量为空字符或未设置内容。

[root@zjw ~]# echo $name    name未设置内容

[root@zjw ~]# echo ${name+root}

[root@zjw ~]# echo ${name:+root}

[root@zjw ~]# name=""    name设置为空字符
[root@zjw ~]# echo ${name}

[root@zjw ~]# echo ${name+root}    与 - 相反,只有空字符的时候可以替换
root
[root@zjw ~]# echo ${name:+root}

[root@zjw ~]# name=zjw    name设置为 zjw
[root@zjw ~]# echo ${name+root}
root
[root@zjw ~]# echo ${name:+root}
root
由此可见,与 - 相反,+ 在变量未设置时无法替换,添加 : 在未设置与空字符时都无法替换,只有在设置了非空字符时才可以替换

具体变化可查看下表,以赋值root为例

变量设置方式str未设置str为空字符str已设置非空字符
var=${str-root}var=rootvar为空字符var=$str
var=${str:-root}var=rootvar=rootvar=$str
var=${str+root}var为空字符var=rootvar=root
var=${str:+root}var为空字符var=为空字符var=root
var=${str=root}

str=root

var=root

str不变

var=为空字符

str不变

var=$str

var=${str:=root}

str=root

var=root

str=root

var=root

str不变

var=$str

var=${str?root}root输出到屏幕var为空字符var=$str
var=${str:?root}root输出到屏幕root输出到屏幕var=$str

10.命令别名 alias

alias的定义规则与变量定义规则几乎相同

alias 别名='命令 选项'

alias    用于查看命令别名
unalias 别名    用于删除别名

11.命令历史 history

history n        列出最近的 n 行命令

-c 清除shell中所有history

-a 将新增history命令加入histfiles中,默认写入~/.bash_history

-r 将histfiles的内容读到目前的shell的history记录中

-w 将目前history记录写入histfiles中

可以通过列出history命令来直接调用

!number        执行第number条命令

!abc        就近执行命令开头为abc的命令

!!        执行上一个命令

12.命令的执行顺序

以相对路径与绝对路径执行命令;由alias执行;由builtin执行;通过$PATH内目录顺序执行

13.bash的登陆欢迎界面 /etc/issue   /etc/motd

issue内各代码的意义

\d 本地端时间中的日期

\l 显示第几个终端界面

\m 显示硬件等级

\n 显示主机的网络名称

\O 显示domain name

\r 操作系统版本(uname -r)

\t 显示本地端时间中的时间

\S 操作系统名称

\v 操作系统版本

在 /etc/issue 中编辑信息即可在开机后显示在tty中

在/etc/motd 中编辑信息即可在登陆后显示在tty中

14.bash的环境配置文件

login shell与non-login shell

login shell:获取bash时需要完整登陆流程,如tty的登陆

non-login shell:不需要登陆的bash,如X Window中的终端,bash子进程等等

一般来说,login shell只会读取两个配置文件

/etc/profile:系统整体的设置,最好不要改

~/.bash_profile或~/.bash_login或~/.profile:用户个人设置

/etc/profile

每个用户登陆bash时都会读取的文件,可以在这帮所有用户设置整体环境,且会调用外部配置文件

/etc/profile.d/*.sh:规定了bash操作界面的颜色、语系、命令别名等

/etc/locale.conf:即/etc/profile.d/lang.sh调用的语系的配置文件

/usr/share/bash-completion/completions/*:用于命令的选项及参数补齐的配置文件

~/.bash_profile

bash读取完整体配置profile文件后,会读取用户的个人配置文件,顺序依次是

~/.bash_profile

~/.bash_login

~/.profile

且只会读取其中一个

source

利用 source 读入环境配置文件,这样就不需要注销再登陆来使得配置文件生效

source 配置文件名

~/.bashrc

取得 non-login shell 时,该bash只会读取 ~/.bashrc 文件,如果bash命令提示符出问题基本上问题出在此文件上

其他影响到bash的配置文件

  • /etc/man_db.conf:该文件规范了 man 命令查找手册的路径,若装的软件的man手册路径不在此文件中,则使用man命令时就无法查询
  • ~/.bash_history:历史命令记录
  • ~/.bash_logout:注销bash后,系统帮忙善后的事,可自行写入任务让bash执行

15.终端的环境设置:stty、set

stty -a        列出所有参数

几个重要关键词

intr:终止正在运行的程序

quit:发送quit信号给正在运行的程序

erase:删除字符

kill:删除目前命令行上所有文字

eof:结束输入

start:某个程序停止后,重启output

stop:停止目前屏幕输出

susp:送出一个terminal stop 的信号给正在运行的程序

set [-uvCHhmBx]        -变+可取消设置

-u 默认不启用,启用后当使用未设置变量时,会显示错误信息

-v 默认不启用,启用后在信息被输出前,会先显示信息的原始内容

-x 默认不启用,启用后在信息被执行前会显示命令内容

-h 默认启用,与历史命令有关

-H 默认启用,与历史命令有关

-m 默认启用,与任务管理有关

-B 默认启用,与中括号[]有关

-C 默认不启用,若使用>等,则若文件存在,不会被覆盖

[zjw@zjw ~]$ echo $-
himBHs

 变量- 的内容即为 set 的所有设置

bash默认组合键

ctrl+c终止命令
ctrl+d输入结束,也可用于退出终端
ctrl+m回车
ctrl+s暂停屏幕输出
ctrl+q恢复屏幕输出
ctrl+u删除命令提示符后的所有字符
ctrl+z暂停目前的命令

16.通配符与特殊符号

利用wildcard可更加方便的处理数据

*代表 0个到无穷多个 任意字符
?代表 一定有一个 任意字符
[ ]代表一定有一个在括号内 的字符,如[abc]代表一定有一个字符为a或b或c
[-]如 [0-9] 代表0和9之间的所有数字
[^]反向,如[^abc]代表一定有一个非a b c 的字符
/etc/abc*    表示/etc下abc开头的文件
/etc/?????    表示/etc下文件名为5个字符的文件
/etc/*[0-9]*    表示文件名中含有数字的文件
/etc/[^a-z]*    表示开头为非小写字母的文件
等

特殊符号(文件名尽量不要用到下面的特殊符号)

#注释符号
\转义符号
|管道,分隔两个管道命令的符号
;连续命令执行分隔符,区别于管道
~家目录
$变量前导符
&任务管理:将命令变成后台任务
!逻辑非
/路径分隔符
>        >>数据流输出重定向,分别是替换与累加
<        <<数据流输入重定向,
' '内容为纯文本,不具有变量替换功能
" "具有变量替换功能
` `可先执行的命令,亦可使用$()
( )在中间为子shell的起始与结束
{ }在中间为命令区块的组合

17.数据流重定向

(stdout)standard output与(stderr)standard error output

stdout用于输出命令执行成功所返回的正确信息,stderr用于输出命令执行失败所返回的错误信息

  • stdin        代码为0,使用 < 与 <<
  • stdout     代码为1,使用 > 与 >>
  • stderr      代码为2,使用 2> 与 2>>

使用输入重定向,则不会将数据输出到屏幕,而转到~/abc文件中

ls > ~/abc

在 ~/abc 文件存在的基础上使用 ls -al > ~/abc 则原文件会被清空,再将新数据写入

所以文件的建立方式为

  • 若文件不存在,则自动建立新文件
  • 若文件已存在,则系统会先将原文件清空,再将新数据写入
  • 将 > 改为 >> 则可以在原文件存在的基础上添加新内容而不是覆盖旧内容

2> 或 2>> 是将错误的数据输出到指定的文件或设备上,功能与 1> 1>> 一样

若命令执行后输出的是成功的信息,则用 2> 无法将此信息输出到文件中,同样 > 无法将错误的返回信息输出到文件中,可用命令分别将正确的与错误的信息输出到不同的文件

command 1> file1 2> file2

利用特殊语法可将正确信息与错误信息共同写入同一个文件中

command > file 2>&1
command &> file

数据垃圾桶 /dev/null

/dev/null可以消除任何导向此文件的数据,所以可以利用输出流重定向将正确信息筛选出来

command 2> /dev/null

这样正确的信息会输出到屏幕,错误的信息会直接被删除且不输出

stdin:< 与 <<

可利用 cat 向文件中写入数据

cat > zzjjww
zjw
zzjjww
[ctrl+d 取消输入]

[zjw@zjw ~]$ cat zzjjww
zjw
zzjjww

[zjw@zjw ~]$ cat > zzjjww2 < zzjjww    将zzjjww文件内容写入zzjjww2文件中,由于zzjjww2文件不存在,所以会自动建立
[zjw@zjw ~]$ cat zzjjww
zjw
zzjjww
[zjw@zjw ~]$ cat zzjjww2
zjw
zzjjww
会发现两个文件内容一模一样

<<用于检测结束输入字符

[zjw@zjw ~]$ cat > zzjjww << eof    结束输入字符为 eof
> zjw
> eof    输入eof后结束,代替了ctrl+d
[zjw@zjw ~]$ cat zzjjww 
zjw

为什么学习数据流重定向

  • 用于存取屏幕输出信息
  • 在后台执行中的程序,不希望它干扰屏幕正常的输出结果
  • 存取命令的执行结果
  • 消除错误信息(/dev/null)
  • 分别输出正确与错误信息

18.命令执行的判断根据

不考虑命令相关性 command;command

利用 ; 将命令分开实现先后执行命令

考虑命令相关性 &&与||

根据前一个命令的返回值来判断接下来的命令是否执行

cmd1 && cmd2

cmd1执行返回正确($?=0)则执行cmd2

cmd1执行返回错误($?非0)则不执行下面的命令

cmd1 || cmd2

cmd1返回正确则cmd2不执行

cmd1返回错误则cmd2执行

19.管道命令 |

不同于连续执行命令,管道命令仅能处理由前一个命令传来的正确的信息,错误信息无法处理,如

ls /etc | less

此命令可将ls输出的信息用less处理,使得输出的信息拥有less的功能

管道后接的命令一定是能够接收标准输入的命令如 more less head tail等

管道命令仅会处理标准输出,对于标准错误会予以忽略

选取命令 cut grep

选取命令即将接收到的数据分析后取出需要的

cut的处理以行为单位用于选取每一行中需要的数据

cut -d '分隔符' -f 第几段

cut -c 字符区间        用于排列整齐

-d 后面接分隔字符,与-f一起用

-f 利用-d的分隔符将数据划分成数段,后面接需要第几段

-c 取出固定字符区间内的字符

[zjw@zjw ~]$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
[zjw@zjw ~]$ echo $PATH | cut -d ':' -f 2,3
/usr/local/bin:/usr/bin
以:为分隔符,取出第二段与第三段,则取出的为usr/local/bin:/usr/bin
[zjw@zjw ~]$ cat zzjjww
abcabc
abcdef
abczzjjww
[zjw@zjw ~]$ cat zzjjww | cut -c 4-
abc
def
zzjjww
命令中 4- 即为选取从第四个字符开始直到最后,若 4-5即第四个第五个字符

cut在处理多空格相连的数据时可能会有问题

grep的处理方式是分析每一行的数据,有需要的信息就取出该行

grep [-acinv] [--color=auto] '字符' filename

-a 将二进制文件以文本文件的方式查找数据

-c 计算找到 '字符' 的次数

-i 忽略大小写

-n 输出行号

-v 反向操作,即显示出没有 '字符' 的行

[zjw@zjw ~]$ grep --color=auto 'MANPATH' /etc/man_db.conf
取出/etc/man_db.conf 中含有 MANPATH 的行,可直接利用 filename来查找

排序命令 sort wc uniq

sort用于根据不同的数据形式来排序排序的字符与语系的编码有关

sort [-fbMnrtuk] [file or stdin]

-f 忽略大小写

-b 忽略最前面的空格字符

-M 以月份的名字排序

-n 使用数字排序

-r 反向排序

-u 相同的数据中,仅出现一行

-t 分隔符,默认tab

-k 以某个区间排序

[root@zjw ~]# cat /etc/passwd | sort | less
这样会默认按照文字形式排序
[root@zjw ~]# cat /etc/passwd | sort -t ':' -k 3
这样会以 : 为分隔符,选取第三段为排序标准,默认还是文字形式排序
[root@zjw ~]# cat /etc/passwd | sort -t ':' -k 3 -n
加 -n 则使用数字排序

 uniq用于将重复的数据只输出一个代表

uniq [-ic]

-i 忽略大小写

-c 进行计数

[zjw@zjw ~]$ last | cut -d ' ' -f 1 | sort | uniq -c
      1 
     80 reboot
     40 root
      1 wtmp
     59 zjw
通过这种方法可以将所有登陆过此系统的账户列出,并且统计一共登陆过的次数
一般利用uniq的步骤为:列出所有数据,选取需要的部分,排序,只显示一个

wc可用于计算输出数据的整体信息

wc [-lwm]

-l 仅列出行

-w 仅列出多少字母

-m 列出多少字符

[zjw@zjw ~]$ cat /etc/passwd | wc
     22      45    1144
[zjw@zjw ~]$ cat /etc/passwd | wc -l
22
[zjw@zjw ~]$ cat /etc/passwd | wc -w
45
[zjw@zjw ~]$ cat /etc/passwd | wc -m
1144
[zjw@zjw ~]$ cat /etc/passwd | wc -lwm
     22      45    1144
默认输出顺序为 lwm

双向重定向  tee

利用 tee 可以在将数据输入到文件的同时将数据以需要的形式输出到屏幕上,而数据流重定向只能将数据输入文件却不好输出到屏幕,这就是区别

tee [-a] file

-a 以累加的方式将数据输入到file中

[zjw@zjw ~]$ last | tee last.test | cut -d ' ' -f 1
last的输出数据会被写入 last.test,屏幕输出的是处理后的数据,两个数据不一样

默认tee后接的文件会被覆盖,所以要加上 -a

字符转换命令 tr col join paste expand

tr可以用来删除一段信息中的文字,或进行文字信息的替换

tr [-ds] char ...

-d 删除信息中的 char 字符

-s 替换掉重复的字符

[zjw@zjw ~]$ last | tr '[a-z]' '[A-Z]'
此命令可以将last输出的数据中所有的小写改为大写,重点在于tr替换的命令

这是个很有用的替换命令

col有其他特殊用途,不过大多数时候用来处理将tab转换成对等的空格

col [-xb]

-x 将tab转换成空格

-b 不输出退格

cat /etc/man_db.conf | col -x | cat -A | more    将^I(tab)转换成空格

join将两个文件中有相同数据的一行加在一起

join [-ti12] file1 file2

-t join默认以空格做分隔符,对比第一栏位数据,若相同,则将两条数据连成一行

-i 忽略大小写

-1 第一个文件要用哪个栏位分析

-2 第二个文件用哪个栏位分析

[root@zjw ~]# head -n 3 /etc/passwd /etc/shadow
==> /etc/passwd <==
root:x:0:0::/root:/bin/bash
bin:x:1:1::/:/usr/bin/nologin
daemon:x:2:2::/:/usr/bin/nologin

==> /etc/shadow <==
root:$6$/sn3rWBXLbSqNZI4$dz0kIZQ1Yo.pkaPgUChVsU0PnKaZWYDjmRo4raEFbLNie6LOfqf9xT8zCdSg/d4NgGb24Mn/XwHwZ0z1iqTT6/:19182::::::
bin:!*:19182::::::
daemon:!*:19182::::::
[root@zjw ~]# join -t ':' /etc/passwd /etc/shadow | head -n 3    以:为分隔符,默认分析两个文件的第一个栏位
root:x:0:0::/root:/bin/bash:$6$/sn3rWBXLbSqNZI4$dz0kIZQ1Yo.pkaPgUChVsU0PnKaZWYDjmRo4raEFbLNie6LOfqf9xT8zCdSg/d4NgGb24Mn/XwHwZ0z1iqTT6/:19182::::::
bin:x:1:1::/:/usr/bin/nologin:!*:19182::::::
daemon:x:2:2::/:/usr/bin/nologin:!*:19182::::::
输出结果即为将两个相同栏位的数据合并成一行

对于两个文件栏位不同的情况下,则需要分别确定栏位

join -t ':' -1 4 /etc/passwd -2 3 /etc/group | head -n 3
与上一个输出类似,都是将相同栏位部分提到最前面

使用join的前提是将两个文件排序,排序后利用重定向输出到第三方文件,再join

paste相较于join更加简单粗暴,直接将两行贴在一起,中间以tab隔开

paste [-d] file1 file2

-d 接分隔字符,默认以tab分隔

- 若file部分写成-,则表示来自标准输入的数据

expand用于将tab转换成空格,unexpand用于将空格转换成tab

expand [-t] file

-t 接数字,用于自定义一个tab代表多少个字符

划分命令 split

split用于将一个大文件依据文件大小或行数进行划分

split [-bl] file PREFIX

-b 接欲划分成的文件的大小,可加单位

-l 以行数进行划分

PREFIX 指定划分成的小文件的文件名前缀,小文件会以xxxaa,xxxab,xxxac的方式命名

若想将小文件合并成一个大文件,可用数据流重定向

ls -al / | split -l 10 - lsroot    每10行划分成一个小文件
10后面的 - 按照语法应该是file,但是ls出来的不是文件,所以用 - 代表stdin

参数代换 xargs

xargs用于产生命令的参数,可以将stdin的数据以空格符或换行符作为识别符分隔成为参数

xargs [-0epn] command

-0 将特殊字符如空格字符还原成一般字符

-e eof,当xargs分析到后面接的字符后就会停止

-p 执行每一条命令时都会询问

-n 每次command命令执行时,要使用几个参数

xargs后面未接任何命令时,默认以echo输出

[zjw@zjw ~]$ cut -d ':' -f 1 /etc/passwd | head -n 3 | xargs -n 3 id
uid=0(root) gid=0(root) groups=0(root)
uid=1(bin) gid=1(bin) groups=1(bin),3(sys),2(daemon)
uid=2(daemon) gid=2(daemon) groups=2(daemon),999(adm),1(bin)
用id命令将每个账号内容显示出来,但是id命令只能接受一个参数且不是管道命令,所以只能用xargs多次调用id命令
[zjw@zjw ~]$ cut -d ':' -f 1 /etc/passwd | xargs -e'sync' -n 1 id
显示出所有id内容,但是到sync截止。-e'sync'之间没有空格

xargs是个非常实用的命令,很多不支持管道的命令都可以利用xargs来提供stdin

- 用途

tar -cvf - /home | tar -xvf - -C / tmp/homeback
将 /home 内的文件打包作为stdout,所以新文件名部分填“-”,通过管道作为stdin给后面的tar,所以待解压文件名部分填“-”
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值