Linux基础05 上传下载lrzsz, wget, curl; 查找命令which, whereis, type; 排序sort, 去重uniq, cut截取, 统计wc, 替换删除字符tr, 内部命令, Hash缓存表,paste
文件的上传下载
lrzsz
[root@oldboyedu ~]# yum install -y lrzsz rz:上传文件 (xshell可以直接拖拽文件,它会用rz -E命令有-E参数是为了windows转码。自己写不用) 1)不支持上传超过4G的文件 2)不支持断点续传
3) 不可以上传目录 sz:下载文件
xshell中可以使用XFTP代替,支持断点传输
XFTP使用 (下载https://blog.csdn.net/weixin_42531931/article/details/109854406)
注: mac本上使用上传下载命令需要下方操作
一. 下载item2 mac系统自带的终端不支持lrzsz的,所以需要下载安装item2 下载地址: http://www.iterm2.com/downloads.html 二. 安装brew ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" brew在mac中就有点类似于linux中的yum 例: brew install wget brew install lrzsz 三. 安装iterm2-zmodem脚本 安装脚本到mac指定目录
从外网下载文件
wget
下载软件包命令,主要用于下载软件包,不加参数也会下载到本地
如果没有则,安装:yum install -y wget
-O:指定下载的路径,可以改名
从外网下载文件
curl
下载命令,主要用于访问或者测试网站使用,不加参数不会下载到本地
-o:指定下载的路径,可以改名 # curl www.baidu.com 爬取百度
# curl www.baidu.com > index.html # curl -o baidu.html www.baidu.com # 爬取百度到文件
-s:静默输出
查找命令
which 查看命令的绝对路径
注:ubuntu中的which不显示别名
显示的第一个为优先使用的命令
[root@oldboyedu ~]# which mv alias mv='mv -i' /usr/bin/mv [root@oldboyedu ~]# which cp alias cp='cp -i' /usr/bin/cp [root@oldboyedu ~]# which ls alias ls='ls --color=auto' /usr/bin/ls [root@oldboyedu ~]# which useradd /usr/sbin/useradd ll `which mv` 相当于ll命令参数是which mv的结果(如结果有alias别名会显示无效选项)
whereis 查找包含命令名称的文件绝对路径
[root@oldboyedu opt]# whereis ifconfig ifconfig: /usr/sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
内部命令
流程:
命令, 回车, 提交给 bash
先判断是不是内部命令,如果是,执行
如果不是,就去磁盘的环境变量PATH中找可执行的二进制文件
找到了, 把路径记下来(Hash缓存), 下一次就不用找了, 执行
找不到, command not found
type 显示命令的绝对路径
-a 显示所有绝对路径(如果是内部命令, 也有外部命令, 那么这些外部名就是内部命令的备胎)
可以区分内部命令还是外部命令。内部命令为shell内置的命令,非内置为外部命令
注: echo是shell的内部命令,当前的shell是 /bin/bash,所有/bin/bash中有echo 但是,如果有一天,我们不用/bin/bash当shell,这么保证echo能执行成功。就需要外部命令做备胎
因为不是所有主机都适用标准shell,所以常用内部命令会有一个外部命令的备份,房子内部命令执行失败。
[root@oldboyedu ~]# type -a ls ls is aliased to `ls --color=auto' # 是别名 ls is /usr/bin/ls [root@oldboyedu ~]# type -a for for is a shell keyword # 是shell脚本的关键字 [root@oldboyedu ~]# type -a cd cd is a shell builtin # shell的内置命令 cd is /usr/bin/cd # 外部命令,备胎 [root@oldboyedu ~]# type -a for for is a shell keyword [root@oldboyedu ~]# type -a [ [ is a shell builtin [ is /usr/bin/[
#显示所有的内置命令 [root@rocky ~]# enable enable . enable : enable [ enable alias
help命令
可以查看内部命令的帮助,本身也属于内部命令
[root@rocky ~]# help echo echo: echo [-neE] [arg ...] Write arguments to the standard output.
Hash缓存表
hash只记外部命令,不记内部命令
系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的 路径记录到hash表中,
当再次使用该命令时,shell解释器首先会查看hash表,存在将执行之,如果不 存在,将会去PATH路径下寻找,
利用hash缓存表可大大提高命令的调用速率。
hash 只对当前用户的当前终端进程有效,是一组临时数据;
切换用户后无效;
退出重新登录后会被重置;
[mage@ubuntu ~]$hash hits command 1 /usr/bin/which #1表示使用次数 1 /usr/bin/ls 1 /usr/bin/cat
字符处理
字符处理-排序
sort
-t:指定分隔符
-k:指定第几列的内容(按分隔符),不指定分隔符,默认是空格为分隔符
-n:按照阿拉伯数字的大小顺序排序
-r:倒叙
# qe.txt如下 b:3:A c:2:C a:4:K e:5:G d:1:Q f:11:Z
[root@oldboyedu ~]# sort qe.txt # 根据第一列排序 [root@oldboyedu ~]# sort -t ":" -k 2 -n qe.txt # 根据:分隔符,选第二列,按照阿拉伯数字排序
字符处理-去重
uniq
必须是相邻的,去重,统计
-c:显示去重后的数量(count)
-d:仅显示重复出现的行列
-u:仅显示出一次的行列
# uniq.txt abc 123 abc 123
[root@oldboyedu ~]# uniq uniq.txt #无法去重,重复行必须是上下行才能去重 [root@oldboyedu ~]# sort uniq.txt |uniq # 排序后再去重 [root@oldboyedu ~]# sort uniq.txt |uniq -c # 排序后再去重, 显示重复数量
字符处理-截取
cut
-d:指定分隔符
-f:指定第几列
-c:根据字符来取数据
--output-delimiter=STRING #输出的时候用指定字符代替分割符
# info.txt I'm zls,18 years old QQ 133411023
[root@oldboyedu ~]# cut -d ' ' -f 2,6 info.txt # 结果 zls,18 133411023 [root@oldboyedu ~]# cut -d ' ' -f 2,6 info.txt|cut -d ',' -f 1 # 结果 zls [root@localhost ~]# cut -c 2-6 info.txt # 结果 'm zl [root@localhost ~]# cut -c 2-6,7-10 info.txt # 结果 'm zls,18
[root@ubuntu2204 ~]# echo {1..100}| cut -d ' ' -f1-100 --output-delimiter="+" |bc 5050
字符处理-统计
wc
-l:统计行数
-c:统计字节数
-w:统计单词数,默认以空白字符分割
[root@localhost ~]# wc /etc/services # 结果 11176 61033 670293 /etc/services 第1个行号, 第2个单词数, 第3个统计字节数
替换删除字符
tr
替换命令,单对单替换
-d 删除字符
语法: tr '源' '目标' <
tr [OPTION]... SET1 [SET2] #常用选项 -c|-C|--complement #用SET2替换SET1中没有包含的字符 -d|--delete #删除SET1中所有的字符,不转换 -s|--squeeze-repeats #压缩SET1中重复的字符,即删除重复的字符 -t|--truncate-set1 #将SET1用SET2替换,SET2中不够的,就不处理 #常用通配符 [:alnum:] #字母和数字 [:alpha:] #字母 [:digit:] #数字 [:lower:] #小写字母 [:upper:] #大写字母 [:space:] #空白字符 [:print:] #可打印字符 [:punct:] #标点符号 [:graph:] #图形字符 [:cntrl:] #控制(非打印)字符 [:xdigit:] #十六进制字符
[root@ubuntu2204 ~]# tr 123 abc 123123 abcabc 1233333 abccccc #小写转大写 [root@ubuntu2204 ~]# tr a-z A-Z 123abcd 123ABCD [root@ubuntu2204 ~]# tr [:lower:] [:upper:] 123abc 123ABC #非123就替换成x [root@ubuntu2204 ~]# tr -c 123 x 13579 13xxxx #非2-5的内容替换成 x [root@ubuntu2204 ~]# tr -c '2-5' x 123456789 x2345xxxxx #删除2-5 [root@ubuntu2204 ~]# tr -d '2-5' 1234567 167 #删除大写字母 [root@ubuntu2204 ~]# tr -d [:upper:] 123abcABC456 123abc456
[root@oldboyedu opt]# tr '1' '2' < oldboy.txt # 注tr命令后面文件前要加<,代表输入 oldboy 223 oldboy 223 # 注是一对一的替换, 1会替换成4, 2会替换成5...如果是单个1,2,3也会被替换(被替换和替换的字符长度应保持一致) [root@oldboyedu opt]# tr '123' '456' < oldboy.txt [root@oldboyedu opt]# tr -d 1 < oldboy.txt # 删除1的字符串(如果是123, 那么删除所有1,2,3的字符) oldboy 23 oldboy 23
# cut -d ' ' -f 3,5 zls.txt |tr ',' ' ' # 把截取出的内容,把,替换成空格
合并多个文件 paste
paste 合并多个文件同行号的行到一行
paste [OPTION]... [FILE]... #常用选项 -d|--delimiters=LIST #指定分割符,默认用TAB -s|--serial #合成一行显示 -z|--zero-terminated #以 NUL 字符而非换行符作为行尾分隔符 [root@ubuntu2204 ~]# cat alpha.log a b c d e f g h [root@ubuntu2204 ~]# cat seq.log 1 2 3 4 5 [root@ubuntu2204 ~]# cat alpha.log seq.log a b c d e f g h 1 2 3 4 5 [root@ubuntu2204 ~]# paste alpha.log seq.log a 1 b 2 c 3 d 4 e 5 f g h [root@ubuntu2204 ~]# paste -d":" alpha.log seq.log a:1 b:2 c:3 d:4 e:5 f: g: