• Linux 命令行基础(一)


    Linux命令基础

    标签(空格分隔):Linux实战教学笔记


    第1章 认识操作环境

    QQ20161225-104727@2x.png-38.5kB

    • root:当前登陆的用户名
    • @分隔符
    • chensiqi:主机名
    • ~:当前路径位置
    • 用户的提示符

    1.1 Linux系统命令操作语法的格式

    屏幕快照 2016-12-25 上午11.19.32.png-429.1kB

    提示:

    1. 一般情况下命令中的[]表示可选,既命令的参数及文件是可选的。
    2. 参数选项===>一个命令的不同的功能(不同的条件)。

    屏幕快照 2016-12-25 上午11.22.51.png-685.8kB

    1.2 Linux目录结构

    QQ20161225-112602@2x.png-67.8kB

    第2章 认识常用的Linux基础命令

    简单粗暴贯穿常用命令,对命令使用框架有个整体认识

    2.1 创建一个目录/data

    windows下面

    新建===>文件夹

    Linux下面

    • 创建目录 ===>makdirectory===>mk dir ===>mkdir

    mkdir /data 在当前目录下创建子目录
    cd / 回到根目录下
    mkdir data 创建data子目录

    • 查看目录===>列表===>list===>ls

    ls 查看当前目录内容
    ls -ld /data 查看/data目录详细内容
    举例
    ls / 查看根目录内容
    ls -l / 查看根目录下详细内容

    2.2相对路径与绝对路径

    绝对路径:从根开始的路径

    C:Program Files (x86)Microsoft Office

    从根开始的路径就是绝对路径

    绝对路径:/etc/sysconfig/network-scripts/ifcfg-eth0

    相对路径:不从“/”根开始,而是把当前所在路径当作根,目标文件或目录距离当前路径的“距离”。
    示例:
    QQ20161225-114958@2x.png-15.2kB
    小结

    多练
    多给别人讲解
    讨论相对路径与绝对路径

    mkdir 创建目录
    ls 查看目录内容
    cd 进入xxxx
    pwd 查看当前绝对路径

    2.3 在/data 下面创建文件 chensiqi.txt

    创建单个文件
    屏幕快照 2016-12-25 上午11.56.08.png-13.8kB
    创建多个文件
    屏幕快照 2016-12-25 上午11.58.14.png-113.9kB

    小结:

    touch 触摸 创建文件或修改文件时间戳(文件的属性)

    2.4 为chensiqi.txt 增加内容“I am studying linux"

    vi===>直接写入(关于vi和vim使用方法请自行查询vim tutor)
    echo进行追加
    屏幕快照 2016-12-25 下午12.03.55.png-25.8kB
    注意:
    1,我们通常在直接操作文件前要备份文件
    2,操作前先看一眼cat 一下

    特殊符号:
    “>” 重定向,清除原文件里面所有内容,然后把内容追加到文件的末尾
    “>>” 追加重定向,追加内容,到文件的尾部
    “1>" 输出重定向:把前面输出的东西输入到后边的文件中,会清除文件原有内容。
    “1>>" 追加输出重定向:把前面输出的东西输入到后边的文件中,不会清除文件原有内容,只是追加到最后一行。
    屏幕快照 2016-12-25 下午12.20.32.png-24kB
    <或0< 输入重定向:后跟字符串(不常用)
    <<或0<< 追加输入重定向:后跟字符串(不常用)
    2> 错误重定向:把错误信息输入到后面的文件中,会删除文件原有内容
    2>> 错误追加重定向:把前面错误信息追加到后边的文件中,不会清除文件原有内容
    屏幕快照 2016-12-25 下午12.36.32.png-23.1kB

    重定向小节:
    重定向:改变命令执行时,数据传输的方向
    箭头方向就是数据方向===>水流方向
    屏幕快照 2016-12-25 下午12.40.03.png-949kB

    2.5 把chensiqi.txt拷贝到/tmp目录下

    windows复制粘贴

    ctrl+c
    ctrl+v

    Linux下:
    复制====>copy===>cp
    屏幕快照 2016-12-25 下午1.26.13.png-29.4kB
    小结:

    cp 复制文件或目录(默认不能拷贝目录)
    -r:递归,复制目录,目录及其子孙后代
    -p:复制文件同时保持文件属性不变,
    -a ===-pdr

    2.6 把/data 移动到 /root 目录下面

    移动(搬家)====>move====>mv
    屏幕快照 2016-12-25 下午1.52.53.png-101.8kB

    cd /
    mv /data /root
    小结
    /data ===> /data 及/data下面的子孙后代
    /data/===> /data下面的子孙后代
    注意:这里目录的移动,如果想仅仅移动目录下面文件而不移动目录使用mv /data/* /root 即可

    2.7 进入/root 目录下的data目录,删除chensiqi.txt文件

    删除===> remove ====>rm
    屏幕快照 2016-12-25 下午1.57.47.png-70.5kB

    cd /root/data
    rm chensiqi.txt 默认只能删除文件
    会提示是否删除 y 即可
    rm -f chensiqi.txt 免提示一律yes
    注意:删除前要思考操作后是否能够恢复,若不能恢复择应该先cp备份,或者采取移走mv的办法进行删除。

    递归删除

    rm -rf data 删除目录必须加-r,-f免提示 删除data目录及目录下的所有东西
    注意:此命令非常危险,建议不用,采取移动mv的删除方式(在linux跟目录下建立一个垃圾箱文件夹,想删除的都mv过来)
    请熟记,运维人员的职责:安全稳定高效

    小结:

    rm 无后缀只能删除文件
    -f 免提式强制删除
    -r 删除目录(递归删除目录下所有东西)
    #慎用
    替代方法:mv 移动文件或目录

    提高删除的难度/门槛

    通过find命令提高删除的准确度
    屏幕快照 2016-12-25 下午2.15.21.png-68.9kB
    find data -type f -name "chensiqi.txt"
    -type:查找的目标的类型
    f : 文件类型
    -name + 文件名:文件的名字
    第一步:先找出文件
    第二步:再删除文件

    find小结

    find 查找范围 -type 文件类型 f(file) d(directory) -name 文件名

    管道
    管道命令:xargs
    之前的删除文件操作还可以这么处理:
    屏幕快照 2016-12-25 下午2.29.29.png-82.3kB

    • 如果前一条命令没法满足你的需求,那么需要续接一条命令来进行再处理,那么就需要管道符+管道命令(| xargs)来续接命令。
    • 也就是说,将管道符 | 左边的命令所执行的结果所为管道符 | 右边的命令的执行范围

    2.8 讨论

    生产环境下,运维人员如何最大限度的避免误删除文件

    1. 修改或删除数据前请务必备份,最好有异地备份,修改配置等先提交版本管理系统再发布到线上
    2. 运维新手删除应使用mv命令替代rm命令,无用的文件不要着急删除,而是移动到回收站/tmp里观察一段时间可以通过设置别名等手段屏蔽rm,这样一旦直接用到rm命令就是意识到(当然真想用有手段可以越过别名)。
    3. 如果非要删除数据,还可以find结合rm替代单纯的rm,包括设定定时任务等动作执行清理。
    4. 如果非要使用rm删除,请尽量先切换目录再删目录下的数据,能不用通配符就不用通配符
    5. 如果必须要使用rm -rf 命令强制且递归删除文件夹,最后的避免错误方法就是要用tab去不全文件夹名字,不要手敲任何字符,防止误删除
    6. 如果删除的不是目录,就不要用rm -rf,采用最小化的方法rm -f即可,甚至重要的少量文件,可以不用-f,以获得确认删除提示信息

    总结:

    a,删除数据后,多数情况是可以恢复的,但会影响业务
    b,例如:需要停机恢复,且数据丢了,较长时间用户访问不了对应数据了
    c,恢复工具诸如ext3grep等
    d.事情发生前未雨绸缪永远比发生了在解决好得多
    e,养成规范,专业科学的运维习惯,运维流程是避免当黑锅侠的关键!

    企业面试题
    问:linux下删除一个目录下的所有文件,但保留一个指定文件
    方法一:find(最重要必须会)
    屏幕快照 2016-12-25 下午2.54.49.png-52.2kB

    !:取反,也就是说删除目录下文件类型为f的所有文件但是排除-name为 file9 的文件

    方法二:grep过滤内容
    屏幕快照 2016-12-25 下午3.00.22.png-52kB

    通过find查出所有目标文件夹下的文件内容后,通过管道 | grep 过滤-v排除掉目标内容后再 | xargs 将内容传递给rm命令进行删除

    方法三:命令嵌套命令
    此方法只适用于删除当前目录下的内容
    屏幕快照 2016-12-25 下午3.12.50.png-57.5kB

    ··符号(tab键上边的~符号不按shift输入就是)它的意思是取符号内的命令的执行结果。本方法的意思就是rm删除掉··符号内的命令的执行结果的内容

    2.9 退出到上级目录删除data目录

    屏幕快照 2016-12-25 下午3.17.42.png-88.3kB

    cd /root/data 进入目录
    cd .. 退出当前目录回到上一级目录
    find 找出目标data目录
    | xargs 传递给rm删除

    特殊符号

    “.”(点):表示当前目录/路径
    “..”:表示当前目录的上级目录
    “#” :表示注释(linux会无视,略过)

    2.10 已知chensiqi.txt文件内容,去掉某行内容后,输出结果

    方法一:grep过滤
    屏幕快照 2016-12-25 下午3.28.14.png-48.6kB

    grep 过滤(默认)
    cat chensiqi.txt | grep "I am chensiqi" 只看过滤的内容

    -v: 排除
    cat chensiqi.txt | grep -v "I am chensiqi" 排除内容后,看其他内容

    方法二:通过head和tail拼接字符串
    head:从头开始查看文件内容,默认查看10行
    tail:从结尾开始查看文件,默认查看10行
    -n: n等于行数

    屏幕快照 2016-12-25 下午3.42.47.png-88.5kB

    && :特殊符号,并且的意思,可以拼接字符串结果

    方法三:awk 解决
    屏幕快照 2016-12-25 下午3.49.07.png-61.2kB

    !:取反

    方法四:sed 解决
    屏幕快照 2016-12-25 下午4.25.00.png-68.4kB

    了解就好,以后再细说
    /内容/d (删除)
    找到内容后,将内容删除后再输出

    2.11 请用一条命令完成创建目录/chensiqi/test,即创建/chensiqi 目录及/chensiqi/test

    屏幕快照 2016-12-25 下午4.43.06.png-85.5kB

    2.12 已知/chensiqi 目录下已经存在test.txt 文件,如何执行命令才能把/mnt/test.txt 拷贝到/tmp 下覆盖掉/chensiqi/test.txt.而让系统不提示是否覆盖(root权限)

    屏幕快照 2016-12-25 下午4.54.45.png-49.7kB

    /bin/cp:是复制命令的绝对路径,通过绝对路径来复制命令就不会有提示。

    知识扩展

    还记得我们的crond定时任务吗,当用定时任务触发脚本的时候,一般都要求脚本里的命令是绝对路径的书写方式(还不知道定时任务的,此处略过)

    2.13 只查看ett.txt(共100行)内第20到第30行内容

    方法一:head和tail通过管道符解决
    屏幕快照 2016-12-25 下午5.13.19.png-95.9kB

    head -30 文件路径:查看目标文件前30行
    tail -10 文件路径:查看目标文件后10行
    head -30 文件名 | tail -10 先查看目标文件前30行,再查看前30行内容的最后10行。

    方法二:sed解决
    屏幕快照 2016-12-25 下午5.20.49.png-73.8kB

    sed ‘’ 目标文件名:默认输出,全部内容
    sed -n “行数p” 文件名:读取目标文件的行数内容
    sed -n "行数,行数p" 文件名:读取目标文件的行数范围的内容

    方法三:awk解决
    屏幕快照 2016-12-25 下午5.29.11.png-80.9kB

    awk '行数' 目标文件名、
    NR == 行数
    && 并且拼接字符串

    知识扩展
    grep命令在这里无法解决该问题,grep命令主要是用来过滤内容的。而不能按行或者按列数来检索。

    grep -v :取反,排除
    grep -A 10:(after) 显示匹配行的后10行
    grep -B 10:(before) 显示匹配行的前10行
    grep -C 5:显示匹配的行的前后各5行

    2.14 把/chensiqi目录及子目录下所有以扩展名.sh 结尾的文件,文件中包含 chensiqi的字符串全部替换为welcome

    屏幕快照 2016-12-25 下午8.47.23.png-65.3kB

    此题可通过find先找出目标文件
    再用sed -i 直接对文件内容进行修改
    sed -i 需要接收的是文件名,而“|”传递的是字符串,“| xargs”传递的才是文件名,如果不理解请继续往后看,

    2.15 讨论

    管道符 | 和管道命令 xargs的区别

    • | 传递文本,文字,字符串
    • | xargs 文字,文本,字符串==(变成)=>文件名

    grep 过滤的是文件的内容,它过滤的是字符串,因此它天生就认识 管道符“|”
    屏幕快照 2016-12-25 下午8.54.24.png-17.8kB

    sed -i “s///g” 文件名:他后边需要接的是文件的名字,因此他不能直接认识字符串
    屏幕快照 2016-12-25 下午9.02.44.png-20.1kB
    所以就需要通过xargs这个管道符命令来将字符串转换成文件名
    屏幕快照 2016-12-25 下午9.04.51.png-41.7kB
    综上,这就是“|”和“|xargs”的区别,请仔细理解,很重要

  • 相关阅读:
    mysql perl 抓取update语句
    $/ 改变换行符
    $/ 改变换行符
    java读取jpg图片旋转按比例缩放
    感应器
    lisp分支
    鸡肋的Drools
    postgre去重复记录
    拖拽到指定位置
    base64coder调用
  • 原文地址:https://www.cnblogs.com/zpzp7878/p/10370668.html
Copyright © 2020-2023  润新知