zoukankan      html  css  js  c++  java
  • Linux基本操作命令

    bash特性

    
    #1. tab键补全
    	命令补全
    [root@qls ~]# user
    useradd     userdel     usermod     usernetctl  users
    
    	选项补全
    	
    	参数补全
    [root@qls ~]# ls  /etc/sys
    sysconfig/          sysctl.conf         sysctl.d/           systemd/            system-release      system-release-cpe
    
    #2.快捷键
    Ctrl键+c		#终止当前的操作
    Ctrl键+d		#退出当前所登录的用户
    Ctrl键+l		#清屏
    Ctrl键+a		#将当前光标所在位置移动到命令行的行首
    Ctrl键+e		#将当前光标所在位置移动到命令行的行尾
    Ctrl键+u		#删除当前光标所在位置向前的所有字符
    Ctrl键+k		#删除当前光标所在位置向后的所有字符
    Ctrl键+y		#粘贴剪切板上面的内容
    Ctrl键+w		#删除当前光标所在位置向前的一组字符串
    Ctrl键+方向键	#向左或者向右移动一组字符串
    delete		#从前往后删除一个字符
    Ctrl键+r		#搜索历史命令
    Ctrl键+z		#把当前的任务放到后台运行
    Ctrl键+s		#锁屏
    Ctrl键+q		#解锁
    esc键+.		#使用上一条命令的最后的参数
    !!			#执行上一条命令
    !ls			 #执行最近的一次以ls开头的命令
    
    #3.历史记录history
    
    	选项:
    		-c		#清空的历史命令
    		-d		#指定删除历史命令,id
    		-w		#命令写入到文件中
    		
    #4.别名
    [root@qls ~]# alias tong='ping baidu.com'
    [root@qls ~]# tong
    PING baidu.com (39.156.69.79) 56(84) bytes of data.
    64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=1 ttl=128 time=29.8 ms
    64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=2 ttl=128 time=30.8 ms
    ^C
    --- baidu.com ping statistics ---
    3 packets transmitted, 2 received, 33% packet loss, time 2004ms
    rtt min/avg/max/mdev = 29.849/30.346/30.844/0.527 ms
    [root@qls ~]# unalias  tong
    
    #系统自带的别名
    [root@qls ~]# alias 
    alias cp='cp -i'
    alias egrep='egrep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias grep='grep --color=auto'
    alias l.='ls -d .* --color=auto'
    alias ll='ls -l --color=auto'
    alias ls='ls --color=auto'
    alias mv='mv -i'
    alias rm='rm -i'
    alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
    
    

    查看命令的帮助信息

    
    man		#查看命令的详细的帮助信息
    
    help	#查看内置命令的帮助信息,help  直接查看所有的内置命令
    
    #使用选项查看帮助信息
    [root@qls ~]# ss --help
    Usage: ss [ OPTIONS ]
           ss [ OPTIONS ] [ FILTER ]
       -h, --help          this message
    
    info	#显示命令帮助信息
    
    #网站命令帮助
    http://man.linuxde.net
    ​
    http://liunx.web3.xin
    ​
    http://linux.51yip.com
    
    

    关机和重启的命令

    关机

    
    shutdown   -h    0		#立刻关机  或者  now
    shutdown   -h    1		#1分钟之后进行关机,是以分钟为级别的
    shutdown   -h    11:00  #在11:00的时候会执行关机的命令
    
    shutdown  -c		#取消当前的关机操作
    
    poweroff 		#关机
    
    halt			#关机,只会关闭系统,不会关闭电源
    	-p			#关闭电源
    	
    init  0			#切换运行级别进行关机	
    
    

    重启

    
    shutdown   -r    0		#立刻重启  或者  now
    shutdown   -r    1		#1分钟之后进行重启,是以分钟为级别的
    shutdown   -r    11:00  #在11:00的时候会执行重启的命令
    
    reboot			#重启
    
    init  6    #重启
    
    

    注销

    
    logout		#注销
    Ctrl键+d		#快捷键注销
    exit		#退出当前用户
    
    

    显示ip地址的命令

    
    
    ip		#显示ip地址
    [root@qls ~]# ip address	#显示所有的ip地址
    [root@qls ~]# ip a
    
    [root@qls ~]# ip address  show  eth0	#显示某块网卡的ip地址
    [root@qls ~]# ip a s eth0
    
    ifconfig		#查看ip地址的命令
    
    [root@qls ~]# ifconfig   #查看所有的ip地址
    
    [root@qls ~]# ifconfig  eth0	#显示某块网卡的ip地址
    
    hostname		#本身显示主机名的命令
    
    [root@qls ~]# hostname  -i
    fe80::52f8:a673:eea3:dc47%eth0 fe80::e6c7:9516:7898:2bcb%eth1 10.0.0.100 172.16.1.100
    [root@qls ~]# hostname  -I
    10.0.0.100 172.16.1.100 
    
    

    文件管理

    目录结构

    
    一切以根为顶点的目录
    
    /bin		#普通命令的目录
    /usr/bin
    /sbin		#超级管理员所使用的命令目录
    /usr/sbin
    
    /boot		#引导目录
    
    /dev		#设备目录
    /dev/cdrom sr0	#光驱。光盘
    /dev/random		#产生随机数
    /dev/zero		#源源不断产生数据
    /dev/pts/		#虚拟终端
    /dev/sd*		#磁盘分区
    /dev/stderr		#错误输出 2
    /dev/stdin		#标准输入 0
    /dev/stdout		#标准输出  1
    /dev/null		#黑洞
    
    
    /etc		#配置文件
    /etc/sysconfig/network-scripts/ifcfg-eth*		#网卡配置文件
    /etc/hostname		#主机名配置文件
    /etc/resolv.conf	#本地的dns配置文件
    /etc/fstab			#挂载设备配置文件
    /etc/sysconfig/selinux	#安全策略
    /etc/motd			#登录系统前显示内容
    /etc/hosts		#本地域名解析的文件
    
    /home		#所有普通用户的家目录  /home/username
    /root		#超级管理员的家目录
    
    /lib		#库文件	32位
    /lib64		#库文件    64位
    lib -> usr/lib
    lib64 -> usr/lib64
    
    /media		#挂载点,可移动的设备
    
    /mnt		#临时挂载点
    
    /opt		#早期第三方软件安装目录
    
    /proc		#虚拟的信息,存放系统实时状态信息
    
    /run		#程序运行产生的pid文件存放点
    
    /srv		#物理设备的信息
    
    /sys		#物理设备
    
    /tmp		#文件的临时的存放点
    
    /usr		#安装软件目录
    /usr/local		
    
    /var		#可变的目录
    /var/run	#pid文件
    /var/log	#日志
    /var/log/messages	#系统日志
    /var/log/secure		#用户登录日志
    
    

    路径的定位

    
    linux中一个点和两个点是什么意思?
    
    .	#表示的是当前目录
    ..	#当前目录的上一级目录
    
    什么是绝对路径,什么是相对路径?
    
    以根为开头的路径就是绝对路径,以~开头也是绝对路径
    不是以根开头的路径就是相对路径
    
    [root@qls ~]# cd  /etc/sysconfig/					#绝对路径
    [root@qls /etc/sysconfig]# cd  network-scripts/		#相对路径
    
    

    文件管理的基础命令

    
    cd   	#切换目录
    
    cd   /		#切换到根目录
    cd	.		#保持当前目录
    cd ..		#切换到当前目录的上一级目录
    cd	~		#切换到当前用户的家目录下
    cd			#默认切换到当前用户的家目录下
    cd  -		#切换到上一次所在的目录
    
    pwd		#显示当前所在位置
    
    tree	#以树状形显示目录结构,yum install  -y tree
    
    选项:
    	-a		#显示隐藏文件
    	-d		#只显示目录
    	-f		#只显示文件
    	-F		#给目录加个标识符
    	-L		#查看目录的深度,层级,后面跟的是正整数
    
    
    ls		#显示目录列表
    
    选项:
    	-a		#显示所有文件,包括隐藏文件
    	-l		#以长格式显示目录列表,带属性信息
    	-d		#只显示目录本身信息
    	-i		#显示inode号
    	-h		#以人类可读的形式文件大小
    	-F		#给显示出来的目录加个标识符
    	-S		#根据文件大小排序
    	-t		#根据时间进行排序
    	-r		#倒序排序
    	-1		#显示列表
    
    mkdir		#创建目录
    
    选项:
    	-p		#递归创建
    	-v		#显示创建过程
    	-m		#创建给目录设置其他权限
    	{}		#生成序列,创建多个目录
    	mkdir  oldboy{a..z}
    	mkdir  oldboy{1..10}
    	mkdir  old{frank,tank,egon}
    	
    touch		#创建文件
    
    	1.在一个路径下,不能出现同名的文件,会改变原文件的时间戳
    	2.使用{},创建多个文件,区分大小写。
    	
    cp		#复制,拷贝
    
    选项
    	-r		#递归复制
    	-p		#保持属性
    	-d		#保持软连接
    	-t		#把原目标和目标位置进行替换
    	-a		=-pdr
    	-i		#交互式询问,系统自带别名
    	
    mv		#移动
    
    选项
    	-f		#强制覆盖
    	-t		#把原目标和目标位置进行替换
    	-i		#交互式询问,系统自带别名
    
    rm		#删除
    
    选项
    	-f		#强制删除
    	-r		#递归删除
    	-i		#交互式询问,系统自带别名
    	
    别名
    [root@qls ~]# alias   rm='echo rm command bny'
    [root@qls ~]# rm -rf  /opt/
    rm command bny -rf /opt/
    
    

    命令练习题

    
    1.如果我在当前在/目录下,之后执行了以下操作,请告诉我,最后我所在的目录位置
    ​
    cd /etc/sysconfig/
    ​
    cd ..
    ​
    cd ..
    ​
    cd -
    ​
    cd ~
    ​
    cd ..
    
    / 或 /home
    
    2.当前用户是root用户,当前所在位置是/usr/local ,输入cd命令后,当前所在目录是哪里?
    ​
    /root   ~
    
    3.显示当前所在位置信息
    
    pwd
    
    4.批量创建oldboy01,oldboy02,...oldoby05这几个目录
    
    mkdir  oldboy{01..05}
    
    5.显示/oldboy 下面所有文件(包含隐藏文件)的详细信息
    
    ls  -la
    
    6.在/oldboy目录下创建以你名字的目录。(已知oldboy目录不存在,请用一条命令实现)
    
    mkdir  -p   /oldboy/frank
    
    7.在你名字的目录下面创建两个文件,分别为test.txt,test.log
    
    touch  /oldboy/frank/test.{txt,log}
    
    8.把test.txt文件移动到/tmp目录下面
    
    mv   /oldboy/frank/test.txt   /tmp
    
    9.把test.log文件重命名为test.sh
    cd  /oldboy/frank/
    
    mv  test.log   test.sh
    
    10.删除test.sh这个文件
    
    rm  -f  test.sh
    
    11.删除oldboy这个目录
    
    rm -rf  /oldboy
    
    12.切换到/tmp目录下,查看当前的工作位置,同时创建data1、data2、data3、共三个目录。
    
    cd  /tmp
    
    pwd
    
    mkdir data{1..3}
    
    13.接上一题,分别在data1、data2、data3三个目录下创建3个文件,名字为oldboy1、oldboy2、oldboy3.然后查看/tmp目录的整个目录结构情况,最后检查下data1和oldboy1两个对象的属性。
    
    touch  /tmp/data{1..3}/oldboy{1..3}
    
    tree  /tmp
    
    ll  /tmp/data*/oldboy1
    
    ll -d  /tmp/data1
    
    
    14.把/etc/hosts文件复制到/tmp/data1目录下,然后把data1目录复制到/opt/目录下。
    cp  /etc/hosts   /tmp/data1
    cp  -a   /tmp/data1  /opt
    
    
    15.将/tmp/data1目录移动到/root目录下,然后删除/opt/data1目录下的hosts文件,最后删除/opt目录下的data1目录。
    
    mv  /tmp/data1  /root 
    rm -rf /opt/data1
    
    

    查看文件命令

    
    echo 		#所见即所得
    
    选项
    	-e		#支持特殊符号的含义
    			
    	换行符
    					tab键
    [root@qls ~]# echo $PS1
    [u@h W]$
    [root@qls ~]# echo '$PS1'
    $PS1
    [root@qls ~]# echo "$PS1"
    [u@h W]$ 
    
    单引号	强引用,所见即所得
    双引号	所见即所得,支持变量,会解析变量
    不加引号	所见即所得,出现空格不会看做是个整体,会解析变量,支持通配符
    反引号		先执行反引号里面的命令,把结果交给外面的命令。和$()作用一样
    
    [root@qls ~]# echo  hello  world  > oldboy.txt
    echo命令可以创建文件,也可以写入内容到文件中
    
    cat    #查看文件内容
    
    选项
    	-n		#给显示内容加上行号
    	-A		#给每行的结尾加上标识符
    
    #使用cat创建一个新文件。可以写入内容
    
    [root@qls ~]# cat  >oldboy.sh<<EOF
    > oldboy
    > egon
    > EOF
    
    cat >>oldboy.sh<<"EOF"
    tank
    $jason
    EOF
    
    more 		#分页显示文件内容,文件结束时,会自动退出文件
    
    选项	
    	-n(数字)  指定一页显示多少行
    	+n(数字)	指定从第几行开始显示
    	
    内部命令
    	空格或f	向下翻页
    	b		  向上翻页
    	回车		下一行
    	/		 搜索
    	=		 显示当前光标所在行
    	q		 退出
    
    less		#分页显示文件内容,文件结束时,不会自动退出
    
    选项
    	-N		#显示的时候加上行号
    	
    内部命令
    	空格或f	向下翻页
    	b		  向上翻页
    	回车		下一行
    	/		 搜索,会高亮显示,n向下查找,N向上查找
    	=		 显示当前光标所在页,第几行到第几行,会显示字节大小
    	q		 退出	
    	
    head 		#显示文件头部信息,默认显示前十行内容
    
    选项
    	-n  (数字)		#取消默认输出,指定显示几行
    	-n(数字)			#指定显示文件头部几行信息
    	-c					#显示头部几个字符
    
    tail		#显示文件尾部信息,默认显示十行内容
    
    选项
    	-n		#取消默认输出,指定显示几行 简写 -数字
    	-c		#显示尾部几个字符,最后一个是换行符
    	-f		#实时查看文件的更新
    	-F		#实时查看文件的更新,文件不存在时,不会退出,会一直尝试读取该文件
    	
    tailf		#实时查看文件的更新,在磁盘不更新时,不会读取磁盘,减少磁盘的读写。
    
    grep		#文本处理工具,过滤,加上颜色
    
    选项
    	-i		#忽略大小写
    	-v		#排除
    	-n		#给过滤出来的内容加上所在文件中的行号
    	-c		#统计过滤出来的内容总共几行
    	-w		#精确匹配,只过滤要过滤出来的字符,而不是包含该字符串的字符
    	-o		#只显示过滤出来的内容
    	-E		#支持使用扩展正则
    	-A		#匹配过滤的内容,在向下匹配n行
    	-B		#匹配过滤的内容,在向上匹配n行
    	-C		#匹配过滤的内容,在向上和向下各匹配n行
    	
    正则
    	^		#以什么开头
    	$		#以什么结尾
    	^$		#空行
    	.		#匹配任意一个字符
    	*		#前面一个字符出现0次或者0次以上
    	.*		#所有
    	[]		#整体,包含[]里面的字符
    	|		#或者
    	
    

    文件查找命令

    
    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
    
    
  • 相关阅读:
    测试用例编写方法
    mysql数据库在windows下安装与配置
    jQuery文字特效制作文字鼠标滑过多彩色变色显示
    基于浏览器的定位于搜索
    对不起,我又忍不住想你了
    痴语片言
    JQuery-Ajax后台提交数据与获取数据
    $.getJSON异步请求和同步请求
    七、多线程
    硬币收集问题--动态规划3
  • 原文地址:https://www.cnblogs.com/fuwei8086/p/11360594.html
Copyright © 2011-2022 走看看