zoukankan      html  css  js  c++  java
  • Linux(2):基础命令

    linux 的规则:

    1. linux 命令行组成结构:如下

    [root@neo ~]#
    [用户名@主机名 当前工作路径]#
    ~ 用户的家目录

    2. linux系统命令操作语法的格式(命令的样子):

    命令 空格 -[参数选项(条件)] [文件或路径(你要处理的内容)]
    如: rm -f /tmp/test/txt

    提示:

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

    3. linux目录结构:

    windows目录: C:windows  #  反斜线
    linux目录:/etc/hosts    # / 根目录 (一切从根开始);并且 路径的分割符号 / 斜线

    3.1 创建目录:

    # 创建一个目录 /data
    创建目录 ===> make directory  ===> mk dir  ===> mkdir
    
    ls /data  # 查看 /data 目录下的内容
    ls -l /data  # 查看 /data 目录下的详细信息
    ll /data  # 查看 /data 目录下的详细信息

    3.2 # 创建文件:

    # 在 /data 目录下创建一个文件 test.txt
    touch /data/test.txt  # touch 命令 创建文件;touch 其实是用于更新文件的时间戳(如果文件不存在则创建,存在则更新文件时间)

    3.3 # 为 test.txt 增加内容 "i am studying linux":

    # 方法一:vi # 相当于 "记事本" ;vim # 相当于 "notepad++" (多用vim)

    vi /data/test.txt  # 编辑文件内容
    cat /data/test.txt  # 查看文件内容

    # 方法二: echo 命令

    echo 内容  # echo 命令会将它后面的内容 显示到屏幕上
    echo 内容 >>/路径/文件  # > 就相当于一个漏斗(重定向符号),>> 作用是追加(追加重定向符号;把内容放在文件的最后一行),把 echo 后的内容放到一个地方,如:echo hello world >>/data/helloworld.txt

    # 方法三:向一个文件中放入多行内容

    cat >>/路径/文件<<EOF  # >>表示追加; << 就固定写法,后面是结束标识符;EOF:end of file
    内容1
    内容2
    ...
    EOF  # EOF 要和第一行的 EOF完全一致;不能有空格
    # 如:
    cat >>/data/test.txt<<EOF
    hello
    world
    EOF

    漏斗家族:漏斗 即 重定向符号

    > 和 >>

    > 或 1>  :标准输出(正确的内容)重定向:会清除文件原有内容,把 > (或 1>)前面的内容输入到后边的文件中
    >> 或 1>> : 追加输出重定向:把前面的东西输入到后边的文件中,还会清除文件原有内容,只是追加到文件的最后一行
    # 1 表示 标准输出:执行正确的内容才会通过漏斗; 1> 相当于 > , 1>> 相当于 >>
    # 除了能写 1 外,还可以写 2; 2> 表示 标准错误重定向 ,2>> 表示 错误追加重定向,(只有错误的信息能通过)如下:
    eco hello 2>>/data/helloworld.txt # 错误信息放入 /data/helloworld.txt 中
    
    eco hello >>/data/helloworld.txt 2>>/data/helloworld.txt  # 正确信息 和 错误信息 都放入 /data/helloworld.txt 中
    # 上面的命令可简写为:
    eco hello >>/data/helloworld.txt 2>&1  # 2>&1 的作用: 把错误的信息放入到对的信息中,结果就是对的、错的信息都在一起

    < 和 <<

    <   :输入重定向 (很少使用)
        # 示例:
            [root@neo ~]# echo 1 2 3 4 5 >/data/num.txt  # 创建环境
            [root@neo ~]# cat /data/num.txt 
            1 2 3 4 5
            [root@neo ~]#  xargs -n2 </data/num.txt     # xargs 用于分列, -n 表示分为几列
            1 2
            3 4
            5
            
    <<  :追加输入重定向
        # 示例:
            cat >>/data/test.txt<<EOF
            hello
            world
            EOF

    linux下的复制粘贴:

    复制文件:把 /data/helloworld.txt 复制到 /tmp 目录下

    # cp  # 复制的命令
    cp /data/helloworld.txt /tmp/  # 复制文件
    
    # 注意:操作前要备份,操作后检查
    # 备份:
    cp /data/helloworld.txt /data/helloworld.txt.bak  # 备份文件

    复制文件夹: 把 /data 目录复制到 /tmp 下

    # linux 下好多命令无法直接处理目录(文件夹)
    cp -r /data/ /tmp/  # cp -r 表示复制这个目录(文件夹)及这个目录下的所有文件和文件夹; -r 表示递归
    cp -a /data/ /opt/  # cp -a 也表示复制文件夹
    
    # cp 命令的参数:
        -r  --- 递归复制;复制目录及目录里面的内容
        -p  --- 复制的时候保持属性不变
        
        -a  --- 相当于 -pdr , 表示复制所有

    linux下的移动:

    mv  # 移动的命令;移动文件或文件夹
    # 把 /data 目录移动到 /root 目录下:
    mv /data/ /root/

    linux下的删除:

    删除文件:

    # 进入 /root 目录下的 data目录,删除 helloworld.txt 文件
    # 注意:删除前要先备份
    rm helloworld.txt  # 这种方式的删除会有询问是否删除
    rm -f helloworld.txt  # -f  直接删除

    删除目录:

    rm -r /tmp/data/   # rm -r  删除目录,这种方式的删除会有询问
    rm -rf /tmp/data/  # rm -rf 直接删除目录 ; 注意:这种删除方式要慎用
    
    # rm 参数:
        -r --- 递归删除
        -f --- 强制删除

    删除的安全方式:

    find 命令:

    find 路径 -type f -name "文件名"  # 查找文件; -type f 表示 文件类型, -name "文件名"  表示要查找的文件名(文件名必须完全匹配才能找到;也可用正则匹配),如下:
    find /root/ -type f -name "helloworld.txt"  
    
    find 命令参数:
    -type  # 找什么类型的
        f --- file 文件
        d --- directory 目录

    管道 ---》|

    管道的概念: 把前面命令的结果 通过“管道”传递给后面的命令

    find ...|xargs # find | xargs 是固定搭配,如下:
    [root@neo ~]# find /root/data/ -type f -name "*.txt"|xargs ls -l
    -rw-r--r--. 1 root root 12 Mar  8 15:09 /root/data/helloworld.txt
    -rw-r--r--. 1 root root 10 Mar  8 14:52 /root/data/num.txt
    -rw-r--r--. 1 root root 33 Mar  8 00:28 /root/data/test.txt
    # find /root/data/ -type f -name "*.txt"|xargs ls -l  # 命令解释:find 找到的结果 通过管道 传递给 xargs 后面的命令,即把 find结果放到 ls -l 后面
    
    # 通过find 能够更精确地找到要删除的文件,降低误删

    grep & head/tail & awk & sed 命令:

    # 要求:已知文件 test.txt内容如下:
    test
    neo
    zheng
    # 要求输出 test.txt 文件内容时,不包含 zhe 字符串
    
    # 创建测试文件:
    mkdir /data
    cat >/data/test.txt<<EOF
    test
    neo
    zheng
    EOF

    方法一:

    # grep "内容" 文件名 :过滤 --- 在文件中找到你想要的内容(找到一行内容)
    [root@neo ~]# grep "zhe" /data/test.txt 
    zheng
    
    # grep -v : 用于排除 (排除内容所在的那一行)
    [root@neo ~]# grep -v "zhe" /data/test.txt 
    test
    neo

    方法二:

    # head 命令: 取一个文件的前几行可用 head 命令
    head 文件  # 默认取出文件的前10行,如下:
    [root@neo ~]# head /data/test.txt 
    test
    neo
    zheng
    
    # 取出前2行命令:head -n2 test.txt  或者  head -2 test.txt
    [root@neo ~]# head -n2 /data/test.txt 
    test
    neo
    [root@neo ~]# head -2 /data/test.txt 
    test
    neo
    
    # tail 命令:取出文件的最后多少行(用法和heah一样)
    tail 文件名 # 默认显示文件的最后10行
    [root@neo ~]# tail /data/test.txt 
    test
    neo
    zheng
    
    # 取出文件的最后2行:
    [root@neo ~]# tail -2 /data/test.txt 
    neo
    zheng

    方法三:

    # awk 命令:awk '/内容/' 文件  # 单引号斜线中 是过滤的内容,如下:
    [root@neo ~]# awk '/zhe/' /data/test.txt 
    zheng
    
    # awk 排除: awk '!/内容/' 文件  # awk 中 ! 表示取反
    [root@neo ~]# awk '!/zhe/' /data/test.txt 
    test
    neo

    方法四:

    # sed 命令:sed '/内容/d' 文件  # 去掉文件中的内容,如下:
    [root@neo ~]#  sed '/zhe/d' /data/test.txt 
    test
    neo

    mkdir -p 命令:

    要求:使用一条命令完成创建目录 /neozheng/test,即创建 /neozheng目录及 /neozheng/test

    # mkdir 命令默认一次只能创建一层目录
    # mkdir -p 命令可以一次创建多层目录
    [root@neo ~]# mkdir /neozheng/test
    mkdir: cannot create directory `/neozheng/test': No such file or directory
    [root@neo ~]# mkdir -p /neozheng/test
    [root@neo ~]# ls /neozheng/
    test

    linux 别名:

    要求: 已知 /tmp 下已经存在 helloworld.txt 文件,要求执行命令把 /mnt/helloworld.txt 拷贝到 /tmp 下覆盖掉 /tmp/helloworld.txt,而让系统不提示是否覆盖(root权限下)

    1. 创建环境

    touch /tmp/helloworld.txt /mnt/helloworld.txt  # touch 可一次创建多个文件
    
    [root@neo ~]# cp /mnt/helloworld.txt /tmp/
    cp: overwrite `/tmp/helloworld.txt'? ^C
    [root@neo ~]#

    方法一:撬棍(反斜线 )

    # 在 cp 前加上   :cp
    
    [root@neo ~]# cp /mnt/helloworld.txt /tmp/
    [root@neo ~]#

    方法二:使用命令的绝对路径(全路径)

    # 找一个命令的位置(如:cp 命令): which cp
    [root@neo ~]# which cp
    alias cp='cp -i'
        /bin/cp
    [root@neo ~]# /bin/cp /mnt/helloworld.txt /tmp/
    [root@neo ~]#
    
    
    # 为什么我们执行 cp 命令的时候就相当于 cp -i  # -i 是提示的作用 
    # 为什么我们执行 rm 命令的时候就相当于 rm -i 
    ### 是因为 linux 的别名
    # linux 别名的作用:
    1. 防止运行危险命令
    2. 简化命令

    如何设置一个别名 ?

    1. 查看系统中的别名:alias 命令

    [root@neo ~]# alias
    alias cp='cp -i'
    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'
    
    # 查看某些命令的别名:
    [root@neo ~]# alias cp mv rm
    alias cp='cp -i'
    alias mv='mv -i'
    alias rm='rm -i'

    2. 模仿

    # 执行rm命令的时候提示 do not use rm 
    # 利用: alias rm='echo do not use rm'   # 1. = 左右两边不能有空格;2. = 右边是 单引号;3. 单引号中必须是一个命令 # 注:这是一种临时性的别名更改,如重新连接后就会变成以前的别名(不再是你设置的别名)
    [root@neo ~]# rm /tmp/helloworld.txt 
    do not use rm /tmp/helloworld.txt
    [root@neo ~]# rm -f /tmp/helloworld.txt 
    do not use rm -f /tmp/helloworld.txt
    [root@neo ~]# rm -rf /tmp/helloworld.txt 
    do not use rm -rf /tmp/helloworld.txt
    [root@neo ~]#
    
    # 这种情况下,如果真的想删,还是可以用上面的两种方式(撬棍和命令的绝对路径),因为这两种方法是临时取消别名的方法;如下:
    [root@neo ~]# 
    m /tmp/helloworld.txt   
    [root@neo ~]# ls -l /tmp/
    total 0
    [root@neo ~]# cp /mnt/helloworld.txt /tmp/
    [root@neo ~]# ls -l /tmp/
    total 0
    -rw-r--r--. 1 root root 0 Mar 10 00:02 helloworld.txt
    [root@neo ~]# /bin/rm /tmp/helloworld.txt 
    [root@neo ~]# ls -l /tmp/
    total 0

    3. 永久生效的别名:写入到 /etc/profile 文件

    # 3.1 把 alias rm='echo do not use rm' 这条命令保存到 /etc/profile 文件中
    # 3.2 让 /etc/profile 文件生效: source /etc/profile 
    [root@neo ~]# tail -1 /etc/profile
    alias rm='echo do not use rm'
    [root@neo ~]# source /etc/profile
    [root@neo ~]# alias rm
    alias rm='echo do not use rm'
    [root@neo ~]# rm -f /mnt/helloworld.txt 
    do not use rm -f /mnt/helloworld.txt
    
    # 补充: vim 快捷键
    # 移到光标到文件的最后一行(命令行状态): G
    # 把光标移动到文件的第一行(命令行状态): gg  
    # 在光标所在位置的下一行插入一个空行,并进入编辑状态: o  (小写的o)

    4. 填坑:上面的第3种方法有个坑: rm cp 和 mv 这三个命令修改别名时,需要修改 /root/.bashrc 这个文件,把对应的命令别名前加上注释 # ;要不然重启连接 xshell 后别名又恢复成了原先的

    [root@neo ~]# vim /root/.bashrc 
    # .bashrc
    
    # User specific aliases and functions
    
    # alias rm='rm -i'
    alias cp='cp -i'
    alias mv='mv -i'
    
    # Source global definitions
    if [ -f /etc/bashrc ]; then
            . /etc/bashrc
    fi
    
    [root@neo ~]# rm /mnt/helloworld.txt 
    do not use rm /mnt/helloworld.txt
    
    # 这样重新连接后也是 cm mv 和 cp 这三个命令的别名也仍然是你自己修改的别名;这样当你真的想删除文件时,在 rm 前加上 撬棍 --- 
    m

    要求: 只查看 ett.txt 文件(共100行)内第20到第30行的内容

    1. 准备环境

    # seq 数字  # 生成 数字 ,如下:
    [root@neo /]# seq 10.1
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@neo /]# seq 100 >/neozheng/ett.txt  # 创建环境
    [root@neo /]# tail /neozheng/ett.txt 
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100

    方法一:sed 命令

    # sed 命令是默认输出:sed命令会把文件的内容 默认都显示出来
    sed '20p' /neozheng/ett.txt  # '20p'  --- 20 表示第20行,p 表示在终端显示;这条命令会把第20行在屏幕显示出来,由于 sed 命令会默认把文件内容都显示出来,所以第20行会显示2遍,如下:
    1
    ...
    20
    20
    ...
    100
    
    # sed -n 表示取消默认显示,如下:
    [root@neo ~]# sed -n '20p' /neozheng/ett.txt 
    20
    
    # 显示第20行到第30行: sed -n '20,30p' 文件
    [root@neo ~]# sed -n '20,30p' /neozheng/ett.txt 
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30

    方法二: head + tail

    # 先利用 head 命令取出前10行,通过“管道”再利用 tail 取出后11行,如下:
    [root@neo ~]# head -30 /neozheng/ett.txt | tail -11 
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30

    方法三: awk 命令

    # awk 'NR==20' : 在 awk 命令中, NR表示 行号,== 表示 等于,20表示行号,如下:
    [root@neo ~]# awk 'NR==20' /neozheng/ett.txt 
    20
    
    # 第20行到第30行
    [root@neo ~]# awk 'NR==20,NR==30' /neozheng/ett.txt 
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    
    # grep 命令补充: grep -A数字 '内容' 文件  # 在文件中找到该内容所有行的内容,并再显示出 该内容所在行的下面多少行的内容(-A 后面的数字)
    [root@neo ~]# grep -A3 '20' /neozheng/ett.txt 
    20
    21
    22
    23

    要求:把 /neozheng 目录及其子目录下所有以扩展名 .sh 结尾的文件中, 文件包含 neozheng 的字符串全部替换为 NEOZHENG

    1. 创建测试环境:

    mkdir -p /neozheng/test
    cd /neozheng
    echo "neozheng">test/del.sh
    echo "neozheng">test.sh
    echo "neozheng">t.sh
    touch neo.txt
    touch alex.txt

    方法一:find ... |xargs sed -i 命令

    # find 命令: find 后面什么都不加的时候 表示 显示当前目录下所有的信息,如下:
    [root@neo neozheng]# find
    .
    ./ett.txt
    ./test.sh
    ./t.sh
    ./neo.txt
    ./alex.txt
    ./test
    ./test/del.sh

    2. 找出你要的文件

    [root@neo neozheng]# find /neozheng/ -type f -name "*.sh" 
    /neozheng/test.sh
    /neozheng/t.sh
    /neozheng/test/del.sh
    [root@neo neozheng]#

    3. 把一个文件的内容从 neozheng 替换为 NEOZHENG

    # sed 命令的替换: sed 's#找的内容#替换为什么#g' /路径/文件   # 要用 单引号
    [root@neo neozheng]# cat /neozheng/t.sh 
    neozheng
    [root@neo neozheng]# sed 's#neozheng#NEOZHENG#g' /neozheng/t.sh
    NEOZHENG
    [root@neo neozheng]# cat /neozheng/t.sh  
    neozheng
    [root@neo neozheng]#
    # 由上可知, sed 命令只是让修改的内容在屏幕显示,并没有真正修改文件的内容
    
    
    # linux 下大部分命令都没有办法直接改文件的内容(除了vi 和 vim )
    # sed 命令修改文件的内容: sed -i 命令
    [root@neo ~]# sed -i 's#neozheng#NEOZHENG#g' /neozheng/t.sh 
    [root@neo ~]# cat /neozheng/t.sh 
    NEOZHENG
    [root@neo ~]#

    4. 把 find 命令找到的所有文件交给sed命令处理 (重点*)

    [root@neo ~]# find /neozheng/ -type f -name "*.sh"
    /neozheng/test.sh
    /neozheng/t.sh
    /neozheng/test/del.sh
    [root@neo ~]# find /neozheng/ -type f -name "*.sh"|xargs sed 's#neozheng#NEOZHENG#g'
    NEOZHENG
    NEOZHENG
    NEOZHENG
    [root@neo ~]# find /neozheng/ -type f -name "*.sh"|xargs sed 's#neozheng#NEOZHENG#g' -i
    [root@neo ~]# find /neozheng/ -type f -name "*.sh"|xargs cat
    NEOZHENG
    NEOZHENG
    NEOZHENG
    [root@neo ~]#
    
    
    # 补充命令: man 
    # linux 中查询帮助: man 命令

    运维常用工具:

    word优化:
    "文件" ---> "选项" ---> "校对" ---> 
        1. "在Word中更正拼写和语法时" 这个选项下面的都 取消掉
        2. 点击 "自动更正选项(A)..."  --->
            2.1 "自动更新"---取消 "键入时自动替换";并取消 "更正前两个字母连续大写""句首字母大写""表格单元格的首字母大写""英文日期第一个字母大写""更正意外使用大写锁定键产生的大小写错误"
            2.2 "键入时自动套用格式" --- 取消 "直引号替换为弯引号""连字符替换为长划线"
            2.3 "自动套用格式" --- 取消 "直引号替换为弯引号""连字符替换为长划线"
            
    "文件" ---> "选项" ---> "保存" ---> 
        设置 "保存自动恢复信息时间间隔""自动恢复文件位置"
        
        
    notepad++ 设置:
    "设置" ---> "首先项" ---> 选上"多选显示" --->
        1. "常用" ---> 选上"多选显示"
        2. "文件关联" ---> Notepad --> .txt 和 .log
        3. "备份" ---> "备份" 选择 "简单备份",并选上 "使用自定义备份目录"
        
    picpick 设置:
    "程序选项" ---> 
        1. "常规" ---> 修改 "语言"
        2. "截取" ---> 选上 "总是复制截图到剪贴板"
        3. "文件名""日期"
        4. "自动保存" ---> 选上 "自动保存图像"
        
    
    亿图 设置:
        1. 安装 破解版
        2. "选项" ---> "常规" ---> 
            2.1 修改 "自动保存间隔""撤消次数"
            2.2 取消 "在程序启动时自动检验更新"
            
        3. "选项" ---> "Quick Access T..." ---> "视图" ---> "显示库窗口" --- Add
  • 相关阅读:
    java基础——标准输入输出重定向,数据流
    java基础——对象流,序列化机制Serializable
    java基础——包装流
    java基础——随机访问流
    java基础——流体系,字符流和字节流基本用法
    读取 xml 文件 获取其中保存的数据信息
    批处理 获取某个文件的,特定 两列,可以修改用来做相关的操作
    写一个最简单的 Server
    对 JDBC 做一个轻量封装,待完善。。。
    从source folder 下将其所有子文件夹的*.* 文件拷贝到 target folder (不拷贝文件夹名仅拷贝文件)
  • 原文地址:https://www.cnblogs.com/neozheng/p/10493519.html
Copyright © 2011-2022 走看看