程序:指令+数据
读入数据:Input
输出数据:Output
在linux中一条指令或者程序,可以分为三种形式:
标准输入:-0 默认接受来自键盘的输入
标准输出:-1 默认输出到终端窗口
标准错误: - 2 默认输出到终端窗口
I/O重定向:改变默认位置
把输出和错误重新定向到文件
支持的操作符号包括:
> 把STDOUT重定向到文件,这里默认的是1,省略
2> 把STDERR重定向到文件
&> 把所有输出重定向到文件
需要注意的是,多次> 会覆盖,而并非追加到文件里面的内容
/dev/null是一个类似于回收站的东西,且不能删除此文件,经常利用这个文件来配合使用重定向
例如;给 ttyang用户修改密码123456
echo 123456 | passwd --stdin ttyang > /dev/null
> 文件内容会被覆盖
set -C 禁止将内容覆盖已有文件,但可追加
>| file 强制覆盖
set +C 允许覆盖
>> 原有内容基础上,追加内容
例如;此用法了解即可
[root@centos7 data]#echo time out > /data/stdout.log
[root@centos7 data]#set -C
[root@centos7 data]#echo time out > /data/stdout.log
-bash: /data/stdout.log: cannot overwrite existing file
2> 覆盖重定向错误输出数据流
2>> 追加重定向错误输出数据流
标准输出和错误输出各自定向至不同位置
COMMAND > /path/to/file.out 2> /path/to/error.out
>默认就是1,标准输出 2>标准错误
合并标准输出和错误输出为同一个数据流进行重定向
&> 覆盖重定向
&>> 追加重定向
两种写法;
COMMAND > /path/to/file.out 2>&1 (顺序很重要)
COMMAND >> /path/to/file.out 2>&1
之前其实一直不懂第一种写法, 是这样理解的,将标准输出追加到/path/to/file.out,2放到1里面,而1前面已经定义。所以是将所有信息打印到/path/to/file.out
tr 转换和删除字符
Usage: tr [OPTION]... SET1 [SET2]
Translate, squeeze, and/or delete characters from standard input,
writing to standard output.
-c –C --complement:取字符集的补集
-d --delete:删除所有属于第一字符集的字符
-s --squeeze-repeats:把连续重复的字符以单独一个字符表示
-t --truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符
[:alnum:]:字母和数字 [:alpha:]:字母 [:cntrl:]:控制(非打印)字符
[:digit:]:数字 [:graph:]:图形字符 [:lower:]:小写字母 [:print:]:可打印字符
[:punct:]:标点符号 [:space:]:空白字符 [:upper:]:大写字母
[:xdigit:]:十六进制字符
例如:
1.[root@centos7 ~]#tr abc 123
asfjhvbb
1sfjhv22
其他参数上面所解释搭配使用
从文件中导入标准输入
使用 < 来重定向标准输入
某些命令能够接受从文件中导入的STDIN
tr ‘a-z’ ‘A-Z’< /etc/issue
该命令会把/etc/issue中的小写字符都转换成大写字符
tr –d abc < /etc/fstab
删除fstab文件中的所有abc中任意字符
cat > file
mage
wangxiaochun
按ctrl+d离开,可以使用文件来代替键盘的输入
cat < file1 > file2
cat < file1 >> file1
把多行发送给STDIN
使用“<<终止词”命令从键盘把多行重导向给STDIN
直到 终止词 位置的所有文本都发送给STDIN
有时被称为就地文本(here documents)
例如:
1.[root@centos7 ~]#cat <<$
> sdfnv
> adwhdweuyfg
> 123
> $
sdfnv
adwhdweuyfg
123
2.还有另外一种多行重定向的方式EOF,end of file;它是C语言中生成用于表示文件结束的表示方法。
[root@centos7 ~]#cat <<EOF > test.txt EOF 后面有空格
> lindahd
> sadjwfw
> deiu23
> EOF
[root@centos7 ~]#
[root@centos7 ~]#
[root@centos7 ~]#cat test.txt
lindahd
sadjwfw
deiu23
pidof bash查看某个进程的进程编号
| 只能传输标准输出,而不能传输标准错误
通过 2>&1、|& 将标准输出和标准错误均通过管道传输
mail: 通过电子邮件发送输入
echo "test email" | mail -s "test" wang@example.com
其中 test为邮件标题,用双引号连起来
例如:mail -s help root <<EOF
> Hello,i am $USER,The system version is here,please help me to check
> it ,thanks!
> EOF
bc:算术运算
echo "2^3" |bc
tee命令,配合管道使用,既要打印在屏幕,又可以重定向到文件里
[root@centos7 ~]#hostname |tee /data/f2.log
centos7.localdomain
tee -a <append> 不覆盖,只是追加的效果
计算1+2+3+...+99+100的总和
echo {1..100}| tr ' ' '+' |bc
或者seq -s+ 100|bc
windows中查看用户账号 net user
查看组账号 net localgroup
查看口令期限: net account