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:

 

posted @ 2021-11-01 22:16  战斗小人  阅读(95)  评论(0编辑  收藏  举报