【Linux---07】Linux常用命令

0. 特别说明

  1. Tab键能将命令自动补全

  2. 命令过长,若要换行,可以输入\
    在这里插入图片描述

  3. 查看命令帮助:命令 --help

  4. 命令的多个可选项可以分开,也可以放在一起。\
    在这里插入图片描述

  5. 可选项可以合在一起,也可以分开。比如rm -r -f /a.sh可简写为rm -rf /a.sh

  6. 当路径中存在通配符时:不要用引号(单引号、双引号),否则会报错,因为在引号里面通配符会被当做是字符。

    mypath=./local_tds_operator
    # 1. 正确 
    ls -l $mypath/*/*/bin  
    
    # 2. 错误 
    (1) 双引号
    ls -l "$mypath/*/*/bin"  echo "$mypath/*/*/bin" # 输出:./local_tds_operator/*/*/bin 
    (2) 单引号 
    ls -l '$mypath/\*/\*/bin' echo
    '$mypath/\*/\*/bin' # 输出:$mypath/\*/\*/bin 
    
  7. 如果在shell脚本执行另一个shell脚本必须进行正确性判断,判断该脚本是否执行成功。

    # 第一种:适合执行失败就直接退出的场景
    sh run.sh || exit 1
    
    # 第二种:适合执行失败后还需要进行一系列逻辑处理的场景
    sh run.sh
    if [ $? == 0 ]; then
       	echo "ok"
    else
       	echo "fail"
    fi
    

1. 权限相关

  1. 管理员登陆:su root

  2. sudo 具体命令:给用户配置管理员权限后,再配合sudo指令,用户就可以使用管理员权限运行此指令。比如:sudo reboot

  3. chown:修改组权限 https://blog.csdn.net/qq_27870421/article/details/92823275

  4. chmod:更改用户对文件的权限

    1. 修改权限位:chmod 权限位 文件路径
      在这里插入图片描述

      第一个字符表示的是文件的类型,后面的 9 个字符,3个 3个 为一组,从左向右 分别表示的是 拥有者 所属组 其他人

    2. 一次只添加一种权限:chmod a+w 文件名 其中a是所有人,+表示添加,w是可写入权限
      #! /bin/bash
      chmod a+x spark-shell.sh # 为所有用户添加spark-shell.sh文件的可执行权限,权限位变成 --x --x --x
      chmod +x spark-shell.sh  # 为当前用户添加spark-shell.sh文件的可执行权限,权限位变成 --x --- ---
      
  5. 查看当前用户:whow

  6. 查看所有用户:ls /home

  7. 增/删用户:Linux创建新用户

  8. 切换用户:https://blog.csdn.net/liu_chen_yang/article/details/123630099

2. 打印相关

  1. 打印该变量的值或打印某段话: echo $变量名

    如果要取消换行可以加入可选项n,如: echo -n "abc"

  2. 打印文件内容:
    1. cat 文件路径:查看文件所有内容
    2. tail -200 文件路径:查看文件末尾200行内容

3. 路径相关

  1. 打印当前绝对路径:pwd

  2. 打印某个文件的目录路径,相当于移除了文件名:dirname 文件名
    在这里插入图片描述

  3. 切换路径:

    • 切换到任意路径:cd 绝对路径。比如切换到root:cd /root

    • 进入子文件夹:cd 子文件夹名。比如当前在/root,要进入/root/file,则:cd file

    • 返回到上个文件夹:cd .. ,对于文件中运行该命令也是返回父文件夹。
      在这里插入图片描述

    • cd /:切换到根目录

    • cd .:切换到当前目录 (.表示当前目录,但这个命令好像没有太大作用,基本不用)

    • cdcd ~:回到当前用户目录

4. 文件相关

4.1 文件增加

  1. 创建文件夹:
    1. 不嵌套创建:mkdir 文件夹名
    2. 嵌套创建:mkdir -p 文件夹名, 比如mkdir aaa/bbb/ccc
  2. 创建文件:详细情况
    1. > 文件名
    2. touch 文件名
    3. vim 文件名

4.2 文件删除

  1. 删除当前目录
    1. 单个删除:rm -f 文件名
    2. 多个文件:rm -f 文件名1 文件名2 文件名3
    3. 配合正则表达式批量删除文件:rm -f part*
  2. 删除当前目录以及子文/目录:在上面的基础上加上可选项r,如:rm -r -f 文件夹名或文件名
    1. rm命令是remove的简写,用于删除文件;
    2. -r:是rm命令的可选项,表示递归处理,将指定目录下的所有文件与子目录一并处理;
    3. -f:是rm命令的可选项,表示强制删除文件或目录。

4.3 文件修改

  1. 修改文件内容
    1. 方式一:vim 文件路径 (常借用Tab键补全文件名)
    2. 方式二:使用echo命令,echo 字符串/文件名
      • echo '要追加的文字'或文件路径 >> 文件路径:追加到文件末尾
        echo 'export SPARK_HOME=/usr/local/spark' >> /etc/profile
        
      • echo '要追加的文字'或文件路径 > 文件路径:覆盖写入
  2. 修改文件名:mv 原文件名 新文件名

4.4 文件查看

  1. 打印当前目录下的所有文件和目录:

    1. 命令:
      1. ls [-选项] [相对或绝对路径]:看文件简要信息
        • 查看文件类型ls -l
      2. ll [-选项] [相对或绝对路径]:看文件详细信息 点击见详情
    2. 选项:
      1. -a:可以显示所有文件包括隐藏文件
      2. -h:已适当单位显示文件大小,默认是单位是B
        在这里插入图片描述
  2. 在某个路径下递归查找某个文件/目录:

    1. 命令:find 路径 选项
    2. 可选项:
      1. -name 文件名:根据文件名查找

        注意:这里的文件名可以用正则表达式

      2. -type f|d:根据文件类型查找,f表示普通文件,d表示文件夹
        在这里插入图片描述
  3. 查看文件个数:

    ll | grep '^-' | wc -l
    
  4. 打印文件内容:

    1. 小文件:
      1. cat 文件路径:不显示行号
        cat -n 文件路径:显示行号
      2. head -n 数字 文件路径tail -n 数字 文件路径:查看前n行,后n行
        tail -f 文件路径:动态打印文件内容,在查看动态生成的日志时非常有用
    2. 大文件:less,需要yum intsall less,且不常用,不介绍。
    3. more:命令允许用户逐页查看内容,这对于阅读大型文件特别有用。常结合上面的指令使用。
      在这里插入图片描述
      # 例子
      cat filename | more
      
  5. 查看文件的行数:-l选项表示"lines",即行数,而filename则是你要检查的文件的名字。

    wc -l filename  # 
    

4.5 文件复制

  1. 复制文件:cp 文件路径 目的路径
  2. 复制整个目录以及子文件/目录:cp -r 目录路径 目的路径

4.6 文件合并

文件合并:
在这里插入图片描述
>是覆盖写入
>>是追加写入

5. 内容筛选(三剑客)

5.1 筛选行:grep

  1. 语法:grep [选项] '搜寻字符串' 文件名

    注意:是以行为单位进行查找,并能跨行查找

  2. 说明:

    1. 可选项说明
      1. -i:不区分大小写
      2. -v:反向选择,当前的结构取反
      3. -n:顺便输出行号
        在这里插入图片描述
      4. -E:要搜寻的字符串可以使用可扩展的正则表达式
      5. -r:递归查询,如果当前为文件夹,则会在该文件夹下的所有文件中查找
    2. 搜寻字符串说明:默认就可以使用正则表达式
      1. ^a:依次查找所有行,返回以 a开头 的行
      2. a$:依次查找所有行,返回以 a结尾 的行
      3. [abc]或者[a-c]:原子匹配字符
      4. .:除\n\r的单个字符
      5. *:0个1个或多个字符
      6. +:1个或多个字符
  3. 例子:

    # 创建grepf1文件, 内容如下
    [root@localhost ~]# vim grepf1
    aabbccaa
    ddaamm
    bbddee
    hello world
    one world 
    one dream
    
    
    # 筛选带有aa的行
    [root@localhost ~]$ grep aa grepf1
    aabbccaa
    ddaamm
    
    
    # 筛选不带有aa的行
    [root@localhost ~]$ grep -v aa grepf1
    bbddee
    hello world
    one world
    one dream
    
    # 筛选以a开头的行
    [root@localhost ~]$ grep ^a grepf1
    aabbccaa
    
    
    # 筛选以a结尾的行
    [root@localhost ~]$ grep a$ grepf1
    aabbccaa
    
    
    # 筛选a-c范围的行
    [root@localhost ~]$ grep [a-c] grepf1
    aabbccaa
    ddaamm
    bbddee
    one dream
    
    
    [root@localhost ~]$ grep a.b grepf1
    aabbccaa
    
    
    [root@localhost ~]$ grep ab. grepf1
    aabbccaa
    
    [root@localhost ~]$ grep a*b grepf1
    aabbccaa
    bbddee
    
    
    [root@localhost ~]$ grep ab* grepf1
    aabbccaa
    ddaamm
    one dream
    

5.2 切分并筛选列:awk

5.3 筛选|删除|替换:sed

对比于grep的筛选行,sed的筛选不支持正在表达式,主要用来进行字符串替换。

  1. 语法:

    1. 从文件中查找内容:/../p是查找
      # 1. 第N行匹配,此行匹配到字符串,则输出此行
      sed -n 'Np' 文件名
      
      # 2. 第N1到N2逐行匹配,此行匹配到字符串,则输出此行
      sed -n 'N1,N2p' 文件名
      
      # 3. 逐行匹配,此行匹配到字符串,则进行字符串替换,再输出替换后的行
      sed -n '/sss/p' 文件名
      
    2. 从文件中删除行:/../d
      # 逐行匹配,此行匹配到字符串,则删除此行
      sed '/sss/d' 文件名
      
    3. 从文件中查找并替换,并修改原文件:s/../../s/../../g (没有g表示只对符合要求的第一个进行替换,有g表对所以符合的都替换)
      # 1. 逐行匹配,将此行中匹配到的字符串进行替换,并将替换后的内容输出到屏幕(不修改文件内容)
      sed 's/搜寻的字符串/替换的字符串/g' 文件名
      
      # 2. 从N1到N2行中,逐行匹配,将此行中匹配到的字符串进行替换,并将替换后的内容输出到屏幕(不修改文件内容)
      sed 'N1,N2 s/搜寻的字符串/替换的字符串/g' 文件名
      
      # 3. 加上-i参数,代表对原文件生效
      sed -i 's/搜寻的字符串/替换的字符串/g' 文件名
      sed -i 'N1,N2 s/搜寻的字符串/替换的字符串/g' 文件名
      

      注意:

      1. tr也可以用于替换,但是只能用于字符替换。
        echo 'aaa bbb' | tr ' ' '\n'
        # 输出:
        aaa
        bbb
        
      2. 如果要替换的内容有/,那么可使用|替换原本的/
        # 比如这里要将 /bin 替换为 空
        opertor_paths=$(ls -d ./local_tds_operator/*/*/bin | tr ' ' '\n' | grep "/bin" | sed 's|/bin||')
        
  2. 例子:

    # 【模拟替换】全局搜寻inet替换为hhhh,并将替换后的内容输出到屏幕, ip_file文件内容不变
    [root@localhost ~]$ sed 's/inet/hhhh/g' ip_file
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        hhhh 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        hhhh6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:e3:58:3f brd ff:ff:ff:ff:ff:ff
        hhhh 192.168.142.177/24 brd 192.168.142.255 scope global noprefixroute ens33
           valid_lft forever preferred_lft forever
        hhhh6 fe80::20c:29ff:fee3:583f/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
    [root@localhost ~]$ 
    # ip_file文件内容不变
    [root@localhost ~]$ cat ip_file
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:e3:58:3f brd ff:ff:ff:ff:ff:ff
        inet 192.168.142.177/24 brd 192.168.142.255 scope global noprefixroute ens33
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fee3:583f/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
    
    # 【真正替换】 ip_file文件内容改变
    [root@localhost ~]$ sed -i 's/inet/hhhh/g' ip_file
    [root@localhost ~]$ cat ip_file
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        hhhh 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        hhhh6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:e3:58:3f brd ff:ff:ff:ff:ff:ff
        hhhh 192.168.142.177/24 brd 192.168.142.255 scope global noprefixroute ens33
           valid_lft forever preferred_lft forever
        hhhh6 fe80::20c:29ff:fee3:583f/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
    
    # 【模拟替换】 搜寻1到2行中link替换为mmmm,并将替换后的内容输出到屏幕
    [root@localhost ~]$ sed '1,2 s/link/mmmm/g' ip_file 
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        mmmm/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        hhhh 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        hhhh6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:e3:58:3f brd ff:ff:ff:ff:ff:ff
        hhhh 192.168.142.177/24 brd 192.168.142.255 scope global noprefixroute ens33
           valid_lft forever preferred_lft forever
        hhhh6 fe80::20c:29ff:fee3:583f/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
    # 文件并没有改变
    [root@localhost ~]$ cat ip_file
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        hhhh 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        hhhh6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:e3:58:3f brd ff:ff:ff:ff:ff:ff
        hhhh 192.168.142.177/24 brd 192.168.142.255 scope global noprefixroute ens33
           valid_lft forever preferred_lft forever
        hhhh6 fe80::20c:29ff:fee3:583f/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
    # 【真正替换】 文件内容改变,但也只改变强两行符合条件的数据
    [root@localhost ~]$ sed -i '1,2 s/link/mmmm/g' ip_file
    [root@localhost ~]$ cat ip_file
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        mmmm/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        hhhh 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        hhhh6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:e3:58:3f brd ff:ff:ff:ff:ff:ff
        hhhh 192.168.142.177/24 brd 192.168.142.255 scope global noprefixroute ens33
           valid_lft forever preferred_lft forever
        hhhh6 fe80::20c:29ff:fee3:583f/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
    

6. 计算相关

  1. 统计命令:wc 选项 文件名
    1. 选项:
      1. -l:计算行数。例如,wc -l file.txt会输出file.txt中的行数。
      2. -w:计算单词数。例如,wc -w file.txt会输出file.txt中的单词数。
      3. -c:计算字节(byte)数。例如,wc -c file.txt会输出file.txt中的字节数。
      4. -m:计算字符数。例如,wc -m file.txt会输出file.txt中的字符数。
    2. 不带选项:会输出行数、单词数、字节数
      echo -e "hello world\nhow are you" | wc
      # 输出:
            2       5      24
      
    3. 一些案例
      1. 计算当前目录的子目录数量:
        ls -l | grep "^d" | wc -l
        
      2. 计算当前目录和所有子目录的目录数量:
      find . -type d | wc -l
      

6. 管道符号

使用|可将多个命令串行执行,示意图如下:
在这里插入图片描述
比如:

# 打印spark-shell.sh文件,筛选出前20行显示在屏幕上
cat spark-shell.sh | head -n 20

7. 输入输出重定向

在Linux和其他Unix-like系统中,有三种基本的文件描述符:stdin(标准输入),stdout(标准输出)和stderr(标准错误)。

  1. stdin(文件描述符为0):这是程序读取输入的地方。默认情况下,这是你的键盘。
  2. stdout(文件描述符为1):这是程序写入输出的地方。默认情况下,这是你的终端或屏幕。大多数程序的输出都写入stdout。比如,当你运行ls命令时,所有的目录和文件列表都输出到stdout。
  3. stderr(文件描述符为2):这是程序写入错误消息的地方。默认情况下,这也是你的终端或屏幕。当程序不能正常工作时,它会把错误消息写入stderr。这样,即使stdout被重定向到其他地

7.1 输出重定向

linux执行任何一个命令,会存在两种种情况:

  1. 执行成功了,会把成功结果输出到屏幕。
  2. 命令执行有错误,会把错误也输出到屏幕上面。

默认都是将结果输出到屏幕,也就是默认 采用stdout(文件描述符为1)。如果需要将结果写入到文件,而不打印到屏幕上,就需要用到重定向。

  1. 重定向语法:

    1. >表示覆盖写入文件。
      cat spark-shell.sh > temp
      
    2. >>表示最加写入文件。
      cat spark-shell.sh >> temp
      
  2. 筛选输出:

    1. >1> (>表示输出,默认是1):正确信息重定向。

    2. 2>:修改错误信息重定向。

    3. 在命令最后加上2>&1:错误信息和成功信息一起重定向
      在这里插入图片描述

      # 将错误信息存放到日志中
      ls zhangsan wangwu 0> log
      # 将正确信息存放到日志中
      ls zhangsan wangwu > log
      # 将错误和正确信息全部存放到日志中
      ls zhangsan wangwu > log 2>&1
      
  3. 无底洞:如果执行结果不需要写入到日志,也不需要打印到屏幕时,可以写入到 /dev/null

    echo "aaaa" > /dev/null
    cat /dev/null  # 会发现null文件中没有内容
    

7.2 输入重定向

  1. 使用 <0< 符号可以完成输入重定向,它俩是等价的。例子:
    1. 从键盘文件读取什么,就向显示器文件写入什么
      在这里插入图片描述
    2. 将创建文件,并输入文件内容,同时将文件内容作为输入
      在这里插入图片描述
  2. 语法:命令 << 自定义结束符。例子:
    1. 例子1:输入数据,以aaa结束输入,然后将输入数据打印
      在这里插入图片描述
    2. 例子2:输入数据,以aaa结束输入,然后将输入数据输出到log文件中
      在这里插入图片描述

8. 系统操作

  1. 退出当前执行:exit 数字
    exit 0表示执行成功
    exit 非数字0表示执行失败
  2. 重启:
    1. 重启网络:service network restart
    2. 主机重启:reboot
  3. 清屏:clear 或 按快捷键ctrl + l
  4. 结束进程:kill -p 进程号 【kill命令详细描述】
  5. 将windows下复制的内容粘贴到CentOS系统的终端中:ctrl + shift + v
  6. 复制CentOS系统的终端中的内容:ctrl + shift + c
  7. source 脚本名:命令可以使得脚本中定义的变量和函数等在当前shell中保留。
  8. 程序休眠:sleep
    sleep 5   # 暂停5秒
    sleep 1m  # 暂停1分钟
    sleep 2h  # 暂停2小时
    sleep 3d  # 暂停3天
    
  9. wait命令:等待命令执行完毕,返回命令执行状态。如果有多个命令,则返回最后一个命令的状态。
    1. 提供进程ID,则只会等待所给的进程ID
      #!/bin/bash
      
      command1 &
      pid1=$!
      
      command2 &
      pid2=$!
      
      wait $pid1
      echo "Command1 has finished"
      
      wait $pid2
      echo "Command2 has finished"
      
    2. 不提供进程ID,则等待wait命令之前的所有命令执行完毕。
      #!/bin/bash
      
      command1 &
      command2 &
      
      wait
      echo "All commands have finished"
      

9. 日期命令

  1. 语法:date 选项 时间格式
  2. 选项
    1. -d 字符串:将字符串按照指定时间输出。字符串前后必须加上双引号。
      [wanghao115@gzxj-sys-rpm001-3eed8.gzxj.baidu.com ~]$ date -d "2012-11-20 14:21:31" +"%Y/%m/%d %H:%M.%S"
      2012/11/20 14:21.31
      
    2. -s 字符串 :根据字符串来设置当前时间。字符串前后必须加上双引号。只有root权限才能设置,其他只能查看
      date -s "2012-05-23 01:01:01"
      
  3. 时间格式: +"格式化字符",将时间以指定格式显示。常见date +"%Y%m%d"
    1. 格式化字符

      %%   输出字符 %
      %a   星期几的缩写 (Sun..Sat)
      %A   星期的完整名称(Sunday..Saturday)%b   缩写的月份名称(例如,Jan)
      %B   完整的月份名称(例如,January)
      %c   本地日期和时间(例如,Thu Mar  3 23:05:25 2005)
      %C   世纪,和%Y类似,但是省略后两位(例如,20)
      %d   日 (01..31)
      %D   日期,等价于%m/%d/%y
      %e   一月中的一天,格式使用空格填充,等价于%_d
      %F   完整的日期;等价于 %Y-%m-%d
      %g   ISO 标准计数周的年份的最后两位数字
      %G   ISO 标准计数周的年份,通常只对%V有用
      %h   等价于 %b
      %H   小时 (00..23)
      %I   小时 (01..12)
      %j   一年中的第几天 (001..366)
      %k   小时,使用空格填充 ( 0..23); 等价于 %_H
      %l   小时, 使用空格填充 ( 1..12); 等价于 %_I
      %m   月份 (01..12)
      %M   分钟 (00..59)
      %n   新的一行,换行符
      %N   纳秒 (000000000..999999999)
      %p   用于表示当地的AM或PM,如果未知则为空白
      %P   类似 %p, 但是是小写的
      %r   本地的 12 小时制时间(例如 11:11:04 PM)
      %R   24 小时制 的小时与分钟; 等价于 %H:%M
      %s   自 1970-01-01 00:00:00 UTC 到现在的秒数
      %S   秒 (00..60)
      %t   插入水平制表符 tab
      %T   时间; 等价于 %H:%M:%S
      %u   一周中的一天 (1..7); 1 表示星期一
      %U   一年中的第几周,周日作为一周的起始 (00..53)
      %V   ISO 标准计数周,该方法将周一作为一周的起始 (01..53)
      %w   一周中的一天(0..6),0代表星期天
      %W   一年中的第几周,周一作为一周的起始(00..53)
      %x   本地的日期格式(例如,12/31/99)
      %X   本地的日期格式(例如,23:13:48)
      %y   年份后两位数字 (00..99)
      %Y   年
      %z   +hhmm 格式的数值化时区格式(例如,-0400)
      %:z  +hh:mm 格式的数值化时区格式(例如,-04:00)
      %::z  +hh:mm:ss格式的数值化时区格式(例如,-04:00:00)
      %:::z  数值化时区格式,相比上一个格式增加':'以显示必要的精度(例如,-04,+05:30)
      %Z  时区缩写 (如 EDT)
      
    2. 案例:

      # 默认格式
      [wanghao115@gzxj-sys-rpm001-3eed8.gzxj.baidu.com ~]$ date
      Wed Aug  7 15:01:30 CST 2024
      
      # 指定格式 (当前日期)
      [wanghao115@gzxj-sys-rpm001-3eed8.gzxj.baidu.com ~]$ date +"%Y%m%d"
      20240807
      
  4. 日期加减
    # 当前日期加减
    date -d "+1 day" +%Y%m%d       # 显示后一天的日期
    date -d "-1 day" +%Y%m%d       # 显示前一天的日期
    date -d "-1 month" +%Y%m%d     # 显示上一月的日期
    date -d "+1 month" +%Y%m%d     # 显示下一月的日期
    date -d "-1 year" +%Y%m%d      # 显示前一年的日期
    date -d "+1 year" +%Y%m%d      # 显示下一年的日期
    
    # 2. 指定日期加减
    date -d "2024-05-16 +1 day" +"%Y%m%d"     # 显示后一天的日期
    date -d "2024-05-16 -1 day" +%Y%m%d       # 显示前一天的日期
    date -d "2024-05-16 -1 month" +%Y%m%d     # 显示上一月的日期
    date -d "2024-05-16 +1 month" +%Y%m%d     # 显示下一月的日期
    date -d "2024-05-16 -1 year" +%Y%m%d      # 显示前一年的日期
    date -d "2024-05-16 +1 year" +%Y%m%d      # 显示下一年的日期
    

5. 压缩/解压/安装

  1. .tar文件解压/打包:tar -zxvf 文件路径 [- C 目标路径]
    tar:用于处理tar文件
    -z:表示tar文件是用gzip压缩的,所以需要用gzip进行解压。
    -c:压缩文件
    -x:解压
    -v:这是“verbose”的缩写,表示命令在运行的时候会显示详细信息。
    -f:这表示后面跟的是要处理的文件名。
    --exclude:打包时,将指定文件排除在外。

    # 1. 解压文件
    # 将output.tar文件加压到当前目录
    tar -zxvf output.tar.gz
    # -C 表示使用临时目录,可将包解压到/path/to/directory目录下
    tar -zxvf output.tar.gz -C /path/to/directory
    
    # 2. 压缩文件
    # 将/path/to/your/directory目录,以及/path/to/your/directory下的所有文件一起打包,打包后名称为output.tar.gz
    tar -zcf output.tar.gz /path/to/your/directory  
    # -C 表示使用临时目录,可临时切换到目录,只打包/path/to/your/directory下的文件,避免将/path/to/your/directory目录打包进去
    tar -zcf output.tar.gz -C /path/to/your/directory .
    
    # 3. --exclude案例
    tar -C $path -zcf $file_name.tar.gz --exclude=build.sh  .
    

    细节:

    • 问:tar可以同时打包多个路径tar -zcvf archive_name.tar /path/to/directory1 /path/to/directory2 /path/to/directory3,但是由于打包会将层级打包进去,而一条命令只能使用一次-C。所以多路径打包,会存在路径问题。如何解决?
    • 可以使用cp -r 原文件路径 目的文件路径命令将剩余的n-1个文件夹的内容复制到某一个文件夹,然后对该文件夹进行打包。
  2. .jar文件打包/解压:

    # 1. 解压
    #   如果没有 unzip 命令,则需要先安装
    sudo apt-get install unzip
    #   对文件进行解压:将file.jar文件解压到/path/to/directory目录下
    unzip file.jar -d /path/to/directory
    
    # 2. 打成jar包:将/path/to/files目录下的文件打包为file.jar
    jar cf file.jar /path/to/files
    
  3. .rpm文件安装:

    # 默认安装到 /user/local/ 目录下
    rpm -ivh 文件路径  其中(-i表示安装,-v表示详细输出,-h表示显示进度)
    # --prefix 将软件包安装到由 指定的路径下,例如到/opt下
    rpm -ivh --prefix=/opt  文件路径
    

6. 软连接

软连接/文件快捷方式:ln -s 文件地址 软连接地址 https://cloud.tencent.com/developer/article/1934913
在这里插入图片描述

7. 可选参数

  1. -C:用于使用该命令使,临时改变当前目录。等价于临时cd 目的目录处理完后,再回到原始目录。这在执行某些命令时非常有用的,例如在复制、移动文件或在不同的目录中执行脚本时。

    注意:不是所有的 Linux 命令都接受 -C 选项,所以最好查阅该命令的 man 页面或帮助文档以确认其用法。

8. 查看环境变量的命令

  1. which:查看环境变量的值。不能使用echo,这个命令只能查看变量的值。

    which hadoop
    which echo
    

8. 跨服务器

  1. 服务器间的文件复制:
    1. scp复制:复制所有文件
      在这里插入图片描述

      scp -r /opt/module/jdk1.8.0_212/ hao@hadoop103:/opt/module/
      
      # 也可以在hadoop103上使用scp从hadoop102上拉取,比如:
      scp -r hao@hadoop102:/opt/module/hadoop-3.1.3 /opt/module/
      
    2. rsync同步:只复制名称或内容不相同的文件。在这里插入图片描述

    1. 区别:前者是复制所有文件,所以慢;后者是复制名称或内容不相同的文件,所以快。
    2. 使用场景:前者用于文件的第一次复制;后者用于文件的后继复制。

9. JDK特有

jps:目标系统上的Java进程基本信息。 https://www.cnblogs.com/gonggy/p/17892704.html

10. 创建快捷命令

  1. 打开用户目录下的.bashrc文件:

    vim ~/.bashrc
    

    注意:

    1. .bashrc 文件是一个存在于用户主目录的隐藏文件,当你启动一个新的bash shell(即打开一个新的终端窗口)时,它会被自动执行。
    2. 如果需要临时设置快捷命令或环境变量,可以在任意地方创建一个任意名称的脚本,编写完毕之后,source该文件。
      这个环境变量只对当前的 shell 会话有效,如果你打开一个新的终端窗口或者启动一个新的 shell 会话,那么这个环境变量将不再存在。因此,如果你希望一个环境变量在每次 shell 会话中都可用,你应该将相关的 export 命令添加到你的 ~/.bashrc 或者 ~/.bash_profile 文件中。
    3. .bash_profile.bashrc 都是 Bash shell 启动时会读取的配置文件,但它们的使用场景有所不同。
      • .bash_profile:当你登录系统或者启动一个登录 shell(例如新的终端会话)时,Bash 会读取这个文件。这个文件通常用于执行一次性的任务(例如设置环境变量、运行脚本等),以及启动其他的 shell。
      • .bashrc:当你在当前会话中启动一个新的 Bash 实例(例如新的子 shell 或者新的脚本)时,Bash 会读取这个文件。这个文件通常用于包含在每个子 shell 中都需要的命令,例如别名和函数。
        在这里插入图片描述
  2. 创建快捷命令:

    alias 快捷命令='具体的命令'
    

    在这里插入图片描述

  3. 让文件生效

    source ~/.bashrc
    
  4. 使用which 快捷命令
    在这里插入图片描述

xx 使用tree展示目录结构

  1. 没有任何参数直接使用tree则展示目录下所有子目录和文件

    tree /proc/self/
    
  2. -d参数则只展示目录

    tree -d /proc/self/
    
  3. -L参数可以指定最大递归层数

    tree -L 2 -d /proc/self/
    
  4. -F参数可以在目录和文件上添加一些有用的标识

    tree -F /proc/self/
    

    具体-F做了如下标记:

    Append a `/' for directories, 
    	   a `=' for socket files, 
    	   a `*' for executable files, 
    	   a `>' for doors (Solaris) 
    and a `|' for FIFO's, as per ls -F
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ElegantCodingWH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值