Linux命令大全学习笔记01

Linux命令大全

文档

第六章:IO

6.1、stdout、stderr、stdin

stdout、stderr、stdin对应文件描述符的索引:0,1,2

6.1.1、stdout重定向( >/>> :重定向符)
  • 重定向功能可以选择将选择将标准输出发送到哪里
# 将ls -l的命令输出保存到ls-output.txt里面	(39971K)
[root@localhost ~]# ls -l /usr/bin > ls-output.txt 
[root@localhost ~]# ls -l ls-output.txt 
-rw-r--r--. 1 root root 39971 Apr 29 09:31 ls-output.txt

# 查看ls-output.txt内容
[root@localhost ~]# less ls-output.txt 
total 59740
-rwxr-xr-x. 1 root root     41496 Nov  5  2016 [
-rwxr-xr-x. 1 root root    107848 Apr  1 21:20 a2p
-rwxr-xr-x. 1 root root     52640 Apr  2 09:14 ab
......
  • 将目录名称转换为一个不存在的目录

(为什么错误显示在屏幕上:因为此时未将其重定向标准错误,只重定向了标准输出,故错误消息仍然在屏幕上)

[root@localhost ~]# ls -l /bin/usr > ls-output.txt 
ls: cannot access /bin/usr: No such file or directory

# 此时ls-output.txt 内容被重置为0
[root@localhost ~]# ls -l ls-output.txt 
-rw-r--r--. 1 root root 0 Apr 29 09:34 ls-output.txt

(文件大小为零的原因:因为当重定向符">"来重定向输出时,目的文件从开头部分开始改写,而ls未输出任何信息,只有一条错误信息显示在屏幕上,故重定向开始改写文件,并在错误时停止,故此时文件内容被删除)

  • 删除文件内容(或者创建一个新的空文件夹)
[root@localhost ~]# > ls-outout.txt

仅仅使用重定向符,在前面不加任何命令

  • 覆盖文件(从尾部添加元素)
[root@localhost ~]# ls -l /usr/bin >> ls-output.txt 
[root@localhost ~]# ls -l /usr/bin >> ls-output.txt 
[root@localhost ~]# ls -l /usr/bin >> ls-output.txt 

# (生成原来三倍大小的文件)
[root@localhost ~]# ls -lh ls-output.txt 
-rw-r--r--. 1 root root 118K Apr 29 09:45 ls-output.txt

使用重定向符:">>"

6.1.2、stderr重定向

将"2"放于重定向之前,错误将重定向到ls-error.txt

[root@localhost ~]# ls -l /bin/usr 2> ls-error.txt
6.1.3、stdout和stderr重定向到同一个文件
[root@localhost ~]# ls -l bin/usr &> ls-output.txt 

[root@localhost ~]# less ls-output.txt 
ls: cannot access bin/usr: No such file or directory

此时将stdout和stderr都重定向到了ls-output.txt文件

6.1.4、处理不想要的命令

(有时候命令执行后我们不想要得到输出,而是直接将输出丢弃,特别是输出错误和状态信息下,即抑制(隐藏)一个命令的错误信息)

# 重定向到/dev/null
[root@localhost ~]# ls -l /bin/usr 2> /dev/null
6.1.5、stdin重定向
  • cat:合并文件

格式:cat [file…]

作用:读取一个或者多个文件,并将其复制到标准输出文件中

# crtl+d:代表到了文件结尾了
[root@localhost ~]# cat
This is my cat 
This is my cat
[root@localhost ~]# 

# 输入到lazy_dog.txt文件里面
[root@localhost ~]# cat > lazy_dog.txt
This is my dog

# 为了看到结果:使用cat将文件复制到标准输出文件中
[root@localhost ~]# cat lazy_dog.txt 
This is my dog

# "<":将标准输出的源头从键盘转换为lazy_dog.txt文件
[root@localhost ~]# cat < lazy_dog.txt 
This is my dog

6.2、管道

管道操作符:’|’ 将一个命令的标准输出传送到另一个命令的标准输入

command1 | command2

# 通过这条命令可以查看任意一条生成标准输出的命令
[root@localhost ~]# ll /usr/bin | less

total 59740
-rwxr-xr-x. 1 root root     41496 Nov  5  2016 [
-rwxr-xr-x. 1 root root    107848 Apr  1 21:20 a2p
...

过滤器

sort–排序

目标:将/bin和usr/bin目录下的所有可执行文件合并成一个列表,并且按照顺序排列,最后查看这个列表

[root@localhost ~]# ls /bin/ usr/bin | sort | less

[
a2p
ab
addr2line
...
base64
basename
bash
...
uniq–报告或忽略重复行
[root@localhost ~]# ls /bin /usr/bin | sort | uniq | less

# 若想查看重复行 uniq -d
[root@localhost ~]# ls /bin /usr/bin | sort | uniq -d | less
wc-(word count)-打印行数、字数、字节数
[root@localhost ~]# wc lazy_dog.txt 
 1  4 15 lazy_dog.txt

[root@localhost ~]# ls /bin /usr/bin | sort | uniq | wc
706     705    6156

# -l:限制只报告行数	
# 查看排好序的条目数
[root@localhost ~]# ls /bin /usr/bin | sort | uniq | wc -l
706
grep–查找匹配文本

Usage: grep [OPTION]… PATTERN [FILE]…

# 查找文件名包含zip的文件	
[root@localhost ~]# ls /bin /usr/bin | sort | uniq | grep zip
gpg-zip
gunzip
gzip

-i:grep搜索时忽略大小写

-v:grep搜索时只输出与模式不匹配的行(取反)

head/tail:打印文件开头及结尾
# -n:调整输出行数
[root@localhost ~]# head -n 3 ls-output.txt 
total 59740
-rwxr-xr-x. 1 root root     41496 Nov  5  2016 [
-rwxr-xr-x. 1 root root    107848 Apr  1 21:20 a2p

[root@localhost ~]# tail -n 3 ls-output.txt 
-rwxr-xr-x. 1 root root      5916 Aug  2  2017 zgrep
-rwxr-xr-x. 1 root root      2041 Aug  2  2017 zless
-rwxr-xr-x. 1 root root      2859 Aug  2  2017 zmore

# 管道中应用
[root@localhost ~]# ls /usr/bin | tail -n 5
zgrep
zless
zmore
znew
zsoelim

tail的一个选项:查看实时文件(如观察正在被写入的日志文件)

# -f:tail可持续跟踪这个文件,一旦增加新行。会立即显示在屏幕上,ctrl+c终止
[root@localhost ~]# tail -f /var/log/messages
Apr 29 10:09:20 localhost NetworkManager[713]: <info>  [1588169360.0154] dhcp4 (ens33): state changed bound -> bound
Apr 29 10:09:20 localhost dbus[663]: [system] Activating via systemd: service name='org.freedesktop.nm_dispatcher' unit='dbus-org.freedesktop.nm-dispatcher.service'
Apr 29 10:09:20 localhost systemd: Starting Network Manager Script Dispatcher Service...
Apr 29 10:09:20 localhost dbus-daemon: dbus[663]: [system] Activating via systemd: service name='org.freedesktop.nm_dispatcher' unit='dbus-org.freedesktop.nm-dispatcher.service'
Apr 29 10:09:20 localhost dhclient[835]: bound to 192.168.0.103 -- renewal in 3160 seconds.
Apr 29 10:09:20 localhost dbus[663]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
Apr 29 10:09:20 localhost dbus-daemon: dbus[663]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
Apr 29 10:09:20 localhost systemd: Started Network Manager Script Dispatcher Service.
Apr 29 10:09:20 localhost nm-dispatcher: req:1 'dhcp4-change' [ens33]: new request (3 scripts)
Apr 29 10:09:20 localhost nm-dispatcher: req:1 'dhcp4-change' [ens33]: start running ordered scripts...

第七章:扩展与引用(echo)

echo:显示一行文本

1、扩展

[root@localhost ~]# echo this is a test
this is a test

[root@localhost ~]# echo *
anaconda-ks.cfg lazy_dog.txt ls-error.txt ls-output.txt

发生了什么?此时将 * 扩展为匹配文件名中的任意字符,故打印出全部文件名

路径名扩展
[root@localhost ~]# ls
anaconda-ks.cfg  lazy_dog.txt  ls-error.txt  ls-output.txt
[root@localhost ~]# ls a*
anaconda-ks.cfg

[root@localhost ~]# echo a*
anaconda-ks.cfg
[root@localhost ~]# echo *t
lazy_dog.txt ls-error.txt ls-output.txt

# 查看除主目录之外的其他目录
[root@localhost ~]# echo /usr/*/share
/usr/local/share

# 查看隐藏文件的路径名
# 此时扩展为以一个点字符开头的所有文件名,.后面至少要跟个字符
[root@localhost ~]# ls -d .[!.]?*
.bash_history  .bash_logout  .bash_profile  .bashrc  .cshrc  .tcshrc
波浪线扩展
# 默认:扩展为当前用户的主目录名
[root@localhost ~]# echo ~
/root

# 指定参数
[root@localhost ~]# echo ~mine
/home/mine
算术扩展(只支持整数)

格式:$((expression))

[root@localhost ~]# echo $((2+2))
4

[root@localhost ~]# echo $(($((5**2)) * 3))
75

[root@localhost ~]# echo $(((5**2)*3))
75

[root@localhost ~]# echo Five divided by two equals $((5/2))
Five divided by two equals 2

[root@localhost ~]# echo with $((5%2)) left over
with 1 left over
花括号扩展

花括号可包含一系列逗号分割的字符串,也可以包含一系列整数或者单个字符

[root@localhost ~]# echo Front-{A,B,C}-Back
Front-A-Back Front-B-Back Front-C-Back

[root@localhost ~]# echo Number_{1..5}
Number_1 Number_2 Number_3 Number_4 Number_5

[root@localhost ~]# echo {z..a}
z y x w v u t s r q p o n m l k j i h g f e d c b a

[root@localhost ~]# echo a{A{1,2},B{1,2}}b
aA1b aA2b aB1b aB2b

应用:生成日期

[root@localhost ~]# mkdir Pics
[root@localhost ~]# cd Pics/
[root@localhost Pics]# mkdir {2015..2018}-0{1..9} {2015..2018}-{10..12}
[root@localhost Pics]# ls
2015-01  2015-06  2015-11  2016-04  2016-09  2017-02  2017-07  2017-12  2018-05  2018-10
2015-02  2015-07  2015-12  2016-05  2016-10  2017-03  2017-08  2018-01  2018-06  2018-11
2015-03  2015-08  2016-01  2016-06  2016-11  2017-04  2017-09  2018-02  2018-07  2018-12
2015-04  2015-09  2016-02  2016-07  2016-12  2017-05  2017-10  2018-03  2018-08
2015-05  2015-10  2016-03  2016-08  2017-01  2017-06  2017-11  2018-04  2018-09
参数扩展

格式:$(变量)

[root@localhost ~]# echo $USER
root

# 查看可用变量名
[root@localhost ~]# printenv | less
XDG_SESSION_ID=2
HOSTNAME=localhost.localdomain
SELINUX_ROLE_REQUESTED=
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.0.104 54053 22
...

# 错误的变量名仍然会进行扩展,此时为空字符串
[root@localhost ~]# echo $da

命令替换(此时是括号)

格式:$(expression)

可以当成命令输出的扩展模式

[root@localhost ~]# echo $(ls)
anaconda-ks.cfg lazy_dog.txt ls-error.txt ls-output.txt Pics

# 应用于整个管道	此时管道输出的为file命令的参数列表
[root@localhost ~]# file $(ls /usr/bin/* | grep zip)
/usr/bin/gpg-zip: POSIX shell script, ASCII text executable
/usr/bin/gunzip:  POSIX shell script, ASCII text executable
/usr/bin/gzip:    ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=31a65cac38d3c43e1414595f0819a2b9b717b4cf, stripped

# 获取cp的完整路径(未成功实现)
[root@localhost ~]# ls $(which cp)
ls: invalid option -- '''
Try 'ls --help' for more information.

# 替代
[root@localhost ~]# which cp
alias cp='cp -i'
	/usr/bin/cp
[root@localhost ~]# ll /usr/bin/cp
-rwxr-xr-x. 1 root root 155168 Nov  5  2016 /usr/bin/cp

2、引用

有选择性的避免不必要的扩展

双引号

如果将文本放在反斜杠里面,那么所有特殊字符都将失去意义("$"、""、"’"除外)

如果一个文本名为two words.txt

# 此时可以访问到
ls -l "two words.txt"

# 改名
mv "two words.txt" two_words.txt

参数扩展、算术扩展、和命令替换在双引号中仍然生效

[root@localhost ~]# echo "$USER $((2+2)) $(cal)"
root 4      April 2020     
Su Mo Tu We Th Fr Sa
          1  2  3  4
 5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30

对字符的影响

# 默认都为4个不同参数,空格、制表符、换行符默认都为分隔符
[root@localhost ~]# echo this is a    test
this is a test

# 此时被当成参数的一部分
[root@localhost ~]# echo "this is a     test"
this is a     test

命令替换时的影响

# 默认为38个参数
[root@localhost ~]# echo $(cal)
April 2020 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

# 默认为一个参数
[root@localhost ~]# echo "$(cal)"
     April 2020     
Su Mo Tu We Th Fr Sa
          1  2  3  4
 5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
单引号

抑制所有扩展

# 三种进行比较
[root@localhost ~]# echo text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER
text /root/lazy_dog.txt /root/ls-error.txt /root/ls-output.txt a b foo 4 root

[root@localhost ~]# echo "text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER"
text ~/*.txt {a,b} foo 4 root

[root@localhost ~]# echo 'text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER'
text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER
转义字符(参考书籍即可)

第八章:常用快捷键

  • clear
  • history
    • 组合使用如:history | less
    • history | grep /usr/bin
  • ctrl+f:光标向前移动一个字符
  • ctrl+b:光标向后移动一个字符
  • ctrl+l:清屏
  • ctrl+p:向上
  • ctrl+n:向下
  • Tab
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值