• 3


    Linux-day03

    显示/etc/services文件的第11行到第20行的内容
    
    [root@qls ~]# head  -20  /etc/services  | tail
    [root@qls ~]# grep  -n  '.'  /etc/services  | grep  -A 9  '^11:'
    
    

    文件查找命令

    locate		#根据本地数据库进行查找
    
    yum install  mlocate  -y		#下载软件包
    
    
    [root@qls ~]# updatedb		#需要更新数据库
    
    [root@qls ~]# locate  -r  hostname$			#支持正则,需加-r选项
    /etc/hostname
    /etc/selinux/targeted/active/modules/100/hostname
    /usr/bin/hostname
    /usr/bin/nmtui-hostname
    /usr/lib64/gettext/hostname
    
    which		#查找命令的绝对路径
    
    [root@qls ~]# which   hostname
    /usr/bin/hostname
    
    whereis		#查找文件
    
    [root@qls ~]# whereis   hostname
    hostname: /usr/bin/hostname /etc/hostname /usr/share/man/man1/hostname.1.gz /usr/share/man/man5/hostname.5.gz
    
    type		#查看命令类型
    
    -a		#查看内置命令的绝对路径
    
    [root@qls ~]# type  hostname
    hostname is /usr/bin/hostname
    [root@qls ~]# type  cd
    cd is a shell builtin
    [root@qls ~]# type  -a  cd
    cd is a shell builtin
    cd is /usr/bin/cd
    
    find	#查找文件
    
    [root@qls ~]# find  /  -type  f  -name "hostname"
    /proc/sys/kernel/hostname
    /etc/hostname
    /usr/bin/hostname
    /usr/lib64/gettext/hostname
    
    

    文件上传与下载

    #联网下载命令
    
    curl		#通过url的方式进行文件传输
    
    选项:
    	-o		#指定下载路径
    	
    [root@qls ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    
    wget		#下载软件包
    
    选项:
    	-O		#指定下载路径
    	
    [root@qls ~]# wget  -O  nginx-1.tar.gz  http://nginx.org/download/nginx-1.14.2.tar.gz
    
    
    #本地上传与下载命令
    
    yum install -y  lrzsz		#需要下载软件包
    
    rz  		#上传,支持上传4G以下的。
    
    -E		#出现名称相同进行重命名,名称规则整数(0-255)
    
    sz			#下载
    
    [root@qls ~]# sz  services
    
    

    字符处理命令

    sort		#排序
    
    #环境
    cat >> file.txt <<EOF
    b:3
    c:2
    a:4
    e:5
    d:1
    f:11
    EOF
    
    
    选项:
    	-t		#指定分隔符,默认以空白字符为分隔符
    	-k		#指定列数,默认是第一列
    	-n		#以数字的大小方式进行排序
    	-r		#倒序
    [root@qls ~]# sort  -t ':'  -rnk3  passwd
    
    
    uniq		#去重,统计,只能去重重复相邻的行
    
    选项:
    	-c		#统计次数
    
    cat  >>test.txt<<EOF
    egon
    tank
    egon
    tank
    oldboy
    frank
    EOF
    
    [root@qls ~]# sort  test.txt 
    egon
    egon
    frank
    oldboy
    tank
    tank
    [root@qls ~]# sort  test.txt  | uniq 
    egon
    frank
    oldboy
    tank
    [root@qls ~]# sort  test.txt  | uniq  -c
          2 egon
          1 frank
          1 oldboy
          2 tank
    [root@qls ~]# sort  test.txt  | uniq  -c | sort  
          1 frank
          1 oldboy
          2 egon
          2 tank
    [root@qls ~]# sort  test.txt  | uniq  -c | sort  -rn
          2 tank
          2 egon
          1 oldboy
          1 frank
    
    
    cut		#取列,默认是以tab键为分隔符
    
    选项:
    	-d		#指定分隔符
    	-f		#指定取出的列
    	-c		#取指定的字符
    
    [root@qls ~]# cut -d  ':'  -f7  passwd  | sort    |uniq  -c
          1 /bin/bash
          1 /bin/sync
          1 /sbin/halt
         16 /sbin/nologin
          1 /sbin/shutdown
    [root@qls ~]# cut -d  ':'  -f7  passwd  | sort    |uniq  -c |sort -n
          1 /bin/bash
          1 /bin/sync
          1 /sbin/halt
          1 /sbin/shutdown
         16 /sbin/nologin
    [root@qls ~]# cut -d  ':'  -f7  passwd  | sort    |uniq  -c |sort -rn
         16 /sbin/nologin
          1 /sbin/shutdown
          1 /sbin/halt
          1 /bin/sync
          1 /bin/bash
    [root@qls ~]# echo   'oldboyfgkhkjg'  |cut  -c  1-2
    ol
    [root@qls ~]# echo   'oldboyfgkhkjg'  |cut  -c  3-6
    dboy
    
    wc		#统计
    
    选项:
    	-l		#统计文件的行数
    	-c		#统计文件的字节数
    	-w		#统计文件的列数
    	
    tr		#替换
    
    选项
    	-d		#删除字符
    	
    tr	‘a’  'b' < file2.txt
    
    

    sed和awk

    sed		#擅长替换,增删改查
    
    选项
    	-i		#替换
    	-n		#取消默认输出
    	-r		#支持扩展正则
    	-i.bak	#先备份在替换
    	p		#打印
    	d		#删除
    	s		#替换
    	g		#全局
    	a		#追加
    	i		#插入
    	$		#结尾
    
    查
    
    [root@qls ~]# sed  -n '11,20p'  services 		#取出第11行到20行的内容
    # are included, only the more common ones.
    #
    # The latest IANA port assignments can be gotten from
    #       http://www.iana.org/assignments/port-numbers
    # The Well Known Ports are those from 0 through 1023.
    # The Registered Ports are those from 1024 through 49151
    # The Dynamic and/or Private Ports are those from 49152 through 65535
    #
    # Each line describes one service, and is of the form:
    #
    [root@qls ~]# sed  -n  '11p'  services		#取出单行
    # are included, only the more common ones.
    [root@qls ~]# sed -n  '11p;20p'    services		#取出不连续的多行
    # are included, only the more common ones.
    #
    
    [root@qls ~]# sed  -n  '/root/p'  passwd 	#过滤字符
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    
    [root@qls ~]# sed  -rn  '/root|halt/p'  passwd 	#过滤多个字符串
    root:x:0:0:root:/root:/bin/bash
    halt:x:7:0:halt:/sbin:/sbin/halt
    operator:x:11:0:operator:/root:/sbin/nologin
    
    删
    [root@qls ~]# sed  '5d'  test.txt
    egon
    tank
    egon
    tank
    frank
    [root@qls ~]# sed  '3,5d'  test.txt
    egon
    tank
    frank
    [root@qls ~]# sed  '3d;5d'  test.txt
    egon
    tank
    tank
    frank
    [root@qls ~]# sed  '/oldboy/d'  test.txt
    egon
    tank
    egon
    tank
    frank
    
    改
    [root@qls ~]# sed  's#oldboy#oldgirl#g'  test.txt 
    egon
    tank
    egon
    tank
    oldgirl
    frank
    [root@qls ~]# sed -i  's#oldboy#oldgirl#g'  test.txt 
    [root@qls ~]# cat test.txt
    egon
    tank
    egon
    tank
    oldgirl
    frank
    [root@qls ~]# sed 's#egon#jason#g'  test.txt	#查看修改之后的结果
    jason
    tank
    jason
    tank
    oldgirl
    frank
    [root@qls ~]# sed  -i.bak  's#egon#jason#g'  test.txt	#先备份,在修改
    [root@qls ~]# cat test.txt
    jason
    tank
    jason
    tank
    oldgirl
    frank
    [root@qls ~]# ll
    total 676
    -rw-r--r--. 1 root root     25 Aug 16 10:35 file2.txt
    -rw-r--r--. 1 root root     25 Aug 16 10:01 file.txt
    -rw-r--r--. 1 root root    938 Aug 16 10:06 passwd
    -rw-r--r--. 1 root root 670293 Aug 16 09:57 services
    -rw-r--r--. 1 root root     36 Aug 16 11:16 test.txt
    -rw-r--r--. 1 root root     34 Aug 16 11:14 test.txt.bak
    
    
    [root@qls ~]# sed  '1,3s#jason#egon#g'  test.txt	#按行进行替换	
    egon
    tank
    egon
    tank
    oldgirl
    frank
    jason
    [root@qls ~]# sed  '1s#jason#egon#g'  test.txt
    egon
    tank
    jason
    tank
    oldgirl
    frank
    jason
    
    
    #临时关闭selinux
    [root@qls ~]# getenforce 
    Enforcing
    [root@qls ~]# setenforce 
    usage:  setenforce [ Enforcing | Permissive | 1 | 0 ]
    [root@qls ~]# setenforce  0
    [root@qls ~]# getenforce 
    Permissive
    
    #永久关闭selinux
    [root@qls ~]# sed '7s#enforcing#disabled#g'  /etc/sysconfig/selinux -i
    
    增
    [root@qls ~]# cat test.txt
    jason
    tank
    jason
    tank
    oldgirl
    frank
    jason
    [root@qls ~]# sed  '2aegon'  test.txt
    jason
    tank
    egon
    jason
    tank
    oldgirl
    frank
    jason
    [root@qls ~]# sed   '3iegon'  test.txt
    jason
    tank
    egon
    jason
    tank
    oldgirl
    frank
    jason
    [root@qls ~]# sed  '$aegon'  test.txt
    jason
    tank
    jason
    tank
    oldgirl
    frank
    jason
    egon
    [root@qls ~]# sed '1iegon'  test.txt
    egon
    jason
    tank
    jason
    tank
    oldgirl
    frank
    jason
    
    后向引用
    [root@qls ~]# ip a s eth0 |sed  -n '3p'  |sed  -r 's#.*t (.*)/.*#1#g'
    10.0.0.100
    [root@qls ~]# ip a s eth0 |sed  -n '3p'  |sed  -r 's#(.*t )(.*)(/.*)#1#g'
        inet 
    [root@qls ~]# ip a s eth0 |sed  -n '3p'  |sed  -r 's#(.*t )(.*)(/.*)#2#g'
    10.0.0.100
    [root@qls ~]# ip a s eth0 |sed  -n '3p'  |sed  -r 's#(.*t )(.*)(/.*)#3#g'
    /24 brd 10.0.0.255 scope global noprefixroute eth0
    [root@qls ~]# ip a s eth0  |sed  -rn '3s#(.*t )(.*)(/.*)#2#gp'
    10.0.0.100
    
    awk
    
    选项
    	-F		#指定分隔符,默认以空白字符
    	NR		#行号
    	$n		#取某列
    	$NF		#最后一列
    	$0		#表示整行内容
    	!		#非,取反
    
    取行
    [root@qls ~]# awk  'NR==1'  passwd 
    root:x:0:0:root:/root:/bin/bash
    [root@qls ~]# awk  'NR==1,NR==3' passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    [root@qls ~]# awk  'NR==1;NR==3'  passwd
    root:x:0:0:root:/root:/bin/bash
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    [root@qls ~]# awk  'NR>=1'  passwd
    [root@qls ~]# awk  'NR>=1 && NR<=3'  passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    [root@qls ~]# awk  'NR<3 || NR>3' passwd
    
    #过滤
    [root@qls ~]# awk  '/root/'  passwd 
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    [root@qls ~]# awk  '/root|halt/'  passwd 
    root:x:0:0:root:/root:/bin/bash
    halt:x:7:0:halt:/sbin:/sbin/halt
    operator:x:11:0:operator:/root:/sbin/nologin
    [root@qls ~]# awk  '!//sbin/nologin/'  passwd 
    root:x:0:0:root:/root:/bin/bash
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    
    #取列
    [root@qls ~]# awk  -F '[:]'  '{print $7}'  passwd
    [root@qls ~]# awk  -F '[:]'  '{print $NF}'  passwd 
    
    [root@qls ~]# ip a s eth0
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:10:88:2d brd ff:ff:ff:ff:ff:ff
        inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::52f8:a673:eea3:dc47/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
    [root@qls ~]# ip a s eth0 |awk  'NR==3'
        inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
    [root@qls ~]# ip a s eth0 |awk  'NR==3'  | awk  -F '[ /]'  '{print $2}'
    
    [root@qls ~]# ip a s eth0 |awk  'NR==3'  | awk  -F '[ /]'  '{print $6}'
    10.0.0.100
    [root@qls ~]# ip a s eth0 |awk  'NR==3'  | awk  -F '[ /]*'  '{print $2}'
    inet
    [root@qls ~]# ip a s eth0 |awk  'NR==3'  | awk  -F '[ /]*'  '{print $3}'
    10.0.0.100
    [root@qls ~]# ip a s eth0 |awk  'NR==3'  | awk  -F '[ /]+'  '{print $3}'
    10.0.0.100
    [root@qls ~]# ip a s eth0 | awk  -F '[ /]+'  'NR==3{print $3}'
    10.0.0.100
    
    [root@qls ~]# ifconfig eth0 |  awk  'NR==2{print $2}'
    10.0.0.100
    [root@qls ~]# ifconfig   eth0 | sed  -nr  '2s#.*t (.*)  n.*#1#gp'
    10.0.0.100
    
    
    #显示行号
    [root@qls ~]# awk  '{print NR,$0}' passwd
    
    

    文件属性

    -rw-r--r--. 1 root root     25 Aug 16 10:01 file.txt
    
    -rw-r--r--.	 #类型和权限	 -	文件类型
    
    1			 #表示硬链接的数量
    
    root		 #属主
    
    root		 #属组
    
    25			 #文件的大小
    
    Aug 16 10:01 #最后修改的修改时间
    
    file.txt		#文件名
    
    文件类型
    -		#普通文件
    d		#目录
    l		#软连接文件
    b		#块设备
    c		#字符设备
    s		#套接字文件
    p		#管道文件
    
    [root@qls ~]# find  /  -type  p    -ls
    
    [root@qls ~]# find  /  -type  s    -ls
    
    file		#查看文件的类型
    
    扩展名
    	txt
    	log
    	sh
    	py
    	html
    	php
    	conf
    	xml
    	zip
    	tar.gz
    	cfg
    		
    

    链接文件

    用户数据:数据块,数据的真事儿存放位置,block
    元数据:文件属性信息,inode。
    
    软链接和硬链接
    
    [root@qls ~]# rm -f  nginx  &&  ln -s  nginx-1.17  nginx	#版本升级
    [root@qls ~]# rm -f  nginx  &&  ln -s  nginx-1.16  nginx	#版本回退
    
    软连接和源文件属于不同的类型的文件
    
    软连接文件中存放是源文件的路径
    
    软连接可以跨区创建,可以文件目录都可以创建
    
    删除源文件,软连接文件存在,会失效
    
    企业版本升级
    代码上线
    目录找不到
    
    ln命令默认创建硬链接文件
    硬链接文件跟源文件iNode号是相同的
    只能对文件创建硬链接,不能对目录创建
    
    软链接和硬链接的区别?
    
    从概念上面回答
    	软链接相当于windows上面的快捷方式
    	硬链接就是给源文件加个入口
    从创建
    	ln命令默认创建的是硬链接,只能对文件创建
    	ln命令加上选项-s创建软链接,可以跨区创建
    从删除方面
    	删除软链接文件,对源文件和硬链接文件没有影响
    	删除硬链接文件,对源文件和软链接没有影响
    	删除源文件,硬链接没有影响,软链接失效,红底白字闪烁状
    	只有删除源文件和硬链接文件,文件才会被真正的删除
    
    

    命令执行过程(扩展)

    hash表
    
    hash		#查看命令缓存
    hash	-d   name   #删除指定命令缓存
    hash	-r		#清空命令缓存表
    
    
    1) 检查执行的命令是否使用的是绝对路径执行的。
    ​
    2) 检查ping命令是否存在alias别名
    ​
    3) 检查ping命令是内部命令还是外部命令
    ​
    4) 如果是内部命令Bash直接执行,如果是外部命令,首先检查Hash缓存,存在则直接调取
    ​
    5) 如果该命令不存在Hash缓存,则通过PATH路径进行逐行查找该命令所在的位置
    ​
    6) 如果PATH路径没有查找到该命令所在的路径,则返回错误码。command not found
    
    

    vim文件编辑器

    命令模式(普通模式)
    
    编辑模式
    
    末行模式(底行模式)
    
    
    

    命令模式

    光标移动,删除,复制,粘贴
    
    l		#当前光标向右移动一个字符,nl,移动多个
    h		#当前光标向左移动一个字符,nh,移动多个
    j		#当前光标向下移动一个字符,nj,移动多个
    k		#当前光标向上移动一个字符,nk,移动多个
    ^		#当前光标移动当前行行首
    $		#当前光标移动当前行行尾
    G		#移动文件的行尾
    gg		#移动到文件的行首  1G
    ngg		#n=数字,跳转到某行  nG
    dd		#删除当前光标所在行
    ndd		#n=数字,删除当前光标所在行向下多少行,包含当前行
    dG		#删除当前光标向下的所有内容
    p		#在当前行的下一行粘贴,粘贴多次,np
    P		#在当前行的上一行粘贴,粘贴多次,np
    yy		#复制当前行
    nyy		#复制在当前行向下多少行,包含当前行
    r		#单个替换当前光标所在位置进行替换
    R		#多个替换
    u		#撤销
    ctrl键+r #回滚,回滚撤销
    de/dw	#删除当期光标向后的一组字符串
    D		#删除当前所在行光标向后的所有内容
    x/delete#当前光标所在位置从前向后删除一个
    X	    #当前光标所在位置从后向前删除一个
    
    文件过多
    Ctrl键+f		#向下翻页
    ctrl键+b		#向上翻页
    
    
    

    编辑模式

    i		#在当前光标所在字符前插入字符,
    I		#在当前光标所在行行首进行插入字符
    a		#在当前光标所在字符后插入字符
    A		#在当前光标所在行行尾进行插入字符
    o		#在当前向下另起一行进行编辑
    O		#在当前向上另起一行进行编辑
    C		#删除当前光标所在位置向后的当前行内容,并进入编辑模式
    ce/cw	#删除当前光标所在行的位置一组字符串,并进入编辑模式
    s		#删除当前所在字符,并进入编辑模式
    S		#删除当前所在行,并进入编辑模式
    
    退出编辑模式,按esc键
    
    
    

    末行模式

    :w		#保存
    :q		#退出
    :wq		#保存退出
    :x		#保存退出
    ZZ		#保存退出
    /		#搜索
    	n	#向下查找
    	N	#向上查找
    :n		#数字,跳转到某行
    :nd		#删除某行
    :n,md	#删除从n行删除到m行,n<m
    
    :w  /root/test.txt  #把当前文件的内容保存一个新的文件中
    :r	 /root/test.txt #从某个文件读入内容进入该文件
    :10r	/root/test.txt #从某个文件读入内容进入该文件放在第10行后面
    
    替换
    :%s#old#new#g    #全局替换
    :1,4s#old#new#g	 #进行某行替换
    
    
    

    视图模式

    批量添加
    		光标移动到要添加内容的第一行或最后一行
    		ctrl键+v		进入可视快模式
    		使用光标选中要添加的位置
    		shift键+i	进入编辑模式
    		输入要添加的内容,只输入一行
    		按esc键退出
    		见证奇迹的时刻
    		
    批量删除
    		光标移动到要删除内容的上面,第一行或最后一行
        	ctrl键+v		进入可视快模式
        	选中要删除的内容
        	按d/x	删除
       
    批量删除行(移动,剪切)
    		光标移动到要删除行的上面,第一行或最后一行
            shift键+v	进入可视行模式
            选中要删除的行
            d  删除
            
    批量复制行
    		光标移动到要复制行的上面,第一行或最后一行
    		shift键+v	进入可视行模式
    		选中要复制的行,
    		按yy
    		按p粘贴
    
    
    

    vim工作方式

    vim打开一个文件,进入的是命令模式
    
    在编辑文件的时候,系统会生成一个临时文件
    
    在退出文件之后,系统会自动删除临时文件
    
    
    

    vim故障

    在编辑文件时,非正常退出,
    
    再次进入时,会提示警告,
    E325: ATTENTION
    Found a swap file by the name ".services.swp"
              owned by: root   dated: Fri Aug 16 17:46:45 2019
             file name: ~root/services
              modified: YES
             user name: root   host name: qls
            process ID: 33989
    While opening file "services"
                 dated: Fri Aug 16 09:57:51 2019
    
    (1) Another program may be editing the same file.  If this is the case,
        be careful not to end up with two different instances of the same
        file when making changes.  Quit, or continue with caution.
    (2) An edit session for this file crashed.
        If this is the case, use ":recover" or "vim -r services"
        to recover the changes (see ":help recovery").
        If you did this already, delete the swap file ".services.swp"
        to avoid this message.
    
    Swap file ".services.swp" already exists!
    
    解决:
    vim  -r		filename
    
    保存退出
    
    删除临时文件
    
    rm -r  .services.swp
    
    
    

    vim变量

    :set nu 		#显示行号
    :set list		#给每行的结尾加个制表符
    :set  ic		#搜索时忽略大小写
    :noh			#取消高亮
    
    vim配置文件(个人)
    [root@qls ~]# cat  .vimrc 
    set nu
    
    全局
    /etc/vimrc
    
    
    

    文件比对

    diff  #不推荐使用
    vimdiff		#推荐使用
    
    [root@qls ~]# vimdiff  file.txt  file2.txt
    
    
    

    vim打开多个文件

    水平分割
    [root@qls ~]# vim -o  file.txt  file2.txt
    
    垂直分割
    [root@qls ~]#  vim -O  file.txt  file2.txt
    
    切换文件时,使用Ctrl键+ww
    
    
    
  • 相关阅读:
    JQuery图片预览
    1.数组
    1.什么是C++
    安装PHPCMS 遇到的问题(fsockpen)
    解决采集时提示”没有找到网址列表,请先进行网址采集“的问题
    JAVA 常用的网站
    页面静态化
    我的C笔记系列一
    PHP缓存技术
    PHPCMS 采集规则
  • 原文地址:https://www.cnblogs.com/chenwang-23/p/11854477.html
Copyright © 2020-2023  润新知