Shell 常用语句查询

目录

[TOC]


工作常用

df -TH  //查看磁盘大小,解决:删除比较大无用的文件
df -i  //查看inode:文件的字节数,拥有者id,组id,权限,改动时间,链接数,数据block的位置,解决:删除数量过多的小文件
  • Linux中查看各文件夹大小命令:https://www.cnblogs.com/iconfig/p/4863063.html
du -h --max-depth=1  //Linux中查看各文件夹大小命令
  • linux下查看当前用户的 三个命令
1,whoami;

2,id -un;

3,who -H  可以列出当前所有的    NAME (用户名)    LINE (窗口列表)    TIME(开启时间)     COMMENT(目录层次)

 (注:who 显示当前在线用户,加-H显示上边红字一栏,并且与下边信息对应)

比如:

[root@static-192-165-1-222 home]# who -H
NAME LINE TIME  COMMENT
home tty1 2016-06-30 14:28 (:0)
home pts/0 2016-07-01 10:12 (:0.0)
home pts/1 2016-07-01 11:33 (:0.0)
home pts/2 2016-07-04 18:13 (:0.0)

 

在linux下是对应的!下文将    介绍useradd 与usermod 中将叙述部分相关命令.

---------------------------------->人生犹如负重致远,不可急于求成。 自律使人自由!

【菜鸟教程】常用语句和命令

  • 菜鸟教程: https://www.runoob.com/linux/linux-tutorial.html

Bash shell基本命令

添加环境变量

  • https://os.51cto.com/art/201108/285338.htm

例如要将/home/rongdeguo/Code 加入到环境变量中,可以在shell中输入

export PATH=$PATH:/home/rongdeguo/Code

然后查看环境变量。

echo $PATH //查看PATH变量

set //查看当前的环境变量

删除环境变量使用unset。

unset lx //删除环境变量lx

Bash手册

  • Man命令用来访问存储在Linux系统上的手册页面。
    • Eg: man ls
  • Info页面信息
  • -help or --help

pwd命令

  • pwd命令显示当前目录。

cd命令

  • cd命令在Linux系统中 切换目录;
    • 单点符(.),表示当前目录;

    • 双点符(..),表示当前目录的父目录;

    • (/), 表示进入系统根目录,上面命令执行完后拿ls命令看一下,当前目录已经到系统根目录了

    • cd ~ 进入当前用户的家目录

    • cd 跟"cd ~"命令相同,都为进入当前用户的家目录

    • cd - 进入上次所在的目录

ls/l命令

  • ls命令列出当前目录中的文件和子目录。Ls命令有很多参数可以定制输出内容;
  • l命令长列表命令,按文件的时间排序
  • ll命令长列表命令,按文件名排序。等价于"ls -l"
  • 过滤输出列表,Eg:"ll my*"
  • 参数:

    • -F 在目录后面加(/),方便用户分辨目录;
    • -a 将以点号(.)开头的隐藏文件也显示出来,默认情况是不限制这些文件的;
    • -R 递归选项,列出当前目录下包含的子目录及其包含的文件;
    • -l 长列表格式输出,在每一行列出当个文件或目录。输出的第一行显示了目录中包含的总块数。
  • linux命令之ll按时间和大小排序显示

    • https://www.cnblogs.com/pipiyan/p/10600058.html
    # 代码示例
    ll -Sh       # 按大小排序
    ll -rt       # 按时间排序
    

touch命令创建文件

  • touch命令可以创建空文件和变更已有文件的访问时间或修改时间。

cp命令

  • cp命令将已有文件或目录复制到其他位置。

Eg: cp source destination
- source 源对象
- destination 目标对象
-

  • 参数:
    • -i 提示是否真的要文件复制;Eg: cp -i source destination

ln命令

  • ln命令可以实现文件链接,即在两个位置上拥有同一个文件且不用生成单独的副本。

mv命令实现文件重命名,在Linux中也称为移动文件

-- 重命名
mv source_file target_file

-- 重命名文件
mv user_image_monthly.txt user_image_monthly_20191113.txt

-- 移动文件(schedule_file是文件夹名)
mv user_image_monthly_20191113.txt schedule_file

mkdir命令

  • mkdir创建一个新的目录,即文件夹。

rm/rmdir命令

  • rm命令删除文件,在Linux中也称为移除文件。
    • rm -rf file/dir // 不要询问,递归删除
  • Rmdir命令删除目录,即文件夹。

find命令

  • find -name 文件名:查找文件

file命令

  • File命令查看文件类型。

cat命令

  • Cat命令显示文本文件的所有内容。
  • 参数:
    • -n 给所有行加行号;
    • -b 只给有文本的行加行号;
    • -T 用^I字符组合替换文中的所有制表符;

more命令

  • more命令显示分页文本文件的内容。
  • Eg: more file_name #显示文件的前面一部分内容

less命令

  • less命令( less is more )显示分页文本文件的内容,并且能识别上下键翻页。

tail命令

  • Tail命令显示文件最后几行内容,默认情况显示末尾10行。
  • 参数:
    • -n 控制显示的行数;
    • Eg: tail -n 20 file_name #显示文件的后20行

head命令

  • head命令显示文件开头几行内容,默认情况显示前10行。

vi/vim命令

  • vi/vim命令编辑文件
    • i 进入插入模式
    • "Esc"按键退出插入模式
    • :q 未修改退出
    • !q 强制退出
    • :wq 保存修改并退出
  • vim的查找功能
    vim是一款强大的编辑器。在vim下要查找字符串。
一,全匹配:

1,从上往下查找,比如“string” :   /string

2,从下往上查找,比如“string” : ?string 

 

二,模糊匹配(正则表达式)

1,. :通配1个字符 ,如 匹配 server, 可以用  /se...r

2,* :通配多个字符,如 匹配 privilege,可以用 p*ge

 

三,快速查找


1, Shift + * :让光标停留在想要查找的单词的任意一个字母上面, 然后输入 Shift + * ,即可快速选中该单词,并且通过 n  或  N 进行上一个或下一个的匹配。

2,yw :让光标停留在单词的第一个字母上, 然后输入yw拷贝该单词, 然后输入 / (Ctrl + R) 0 (即 /”0),回车, 就查找到了第一个匹配的单词, 并且通过 n  或  N 进行上一个或下一个的匹配。

chomd命令

  • chomd命令改变文件权限
    • Eg: chomd +x file_name #赋予文件属主执行文件的权限

文件的上传/下载

  • rz XXXXX.txt 上传
  • rz -y XXXXX.txt 覆盖上传
  • sz XXXXX.txt 下载

Linux下文件(文件夹)的压缩和解压

https://baijiahao.baidu.com/s?id=1640987338729787489&wfr=spider&for=pc

  1. zip命令

例如:zip -r mysql.zip mysql 该句命令的含义是:将mysql文件夹压缩成mysql.zip

zip -r abcdef.zip abc def.txt 这句命令的意思是将文件夹abc和文件def.txt压缩成一个压缩包abcdef.zip

  • unzip命令

与zip命令相反,这是解压命令,用起来很简单。 如:unzip mysql.zip 在当前目录下直接解压mysql.zip。

  • tar命令

例如:tar -cvf 123.tar file1 file2 dir1 该句命令实现一个tar压缩,它是将两个文件(file1和file2)和一个文件夹(dir1)压缩成一个123.tar文件。

tar -zxvf apache-tomcat-7.0.75.tar.gz 该命令在解压安装tomcat时使用,是将apache-tomcat.7.0.75.tar.gz直接解压到当前目录下。tar同时具有压缩的解压的功能,使用时根据参数和命令结构区分。


字符串操作

拼接字符串


your_name="runoob"

使用双引号拼接

greeting="hello, "{your_name} !"
echo greeting_1

使用单引号拼接

greeting_2='hello, '{your_name} !'
echo greeting_3

截取字符串

测试字符串
etl_date="2019-03-01-00-00"

  • 使用#截取"-"之后的内容

  • 使用%截取"-"之前的内容

符号 方向 前后字符串
#*- 从左往右 找第一个字符‘-’ 截取字符‘-’之后的字符串
%%*- 从左往右 找第一个字符‘-’ 之前
##*- 从右往左 找第一个字符‘- 之后的字符串
%*- 从右往左 找第一个字符‘- 之前
格式 说明
$${string: start :length}$ 从 string 字符串的左边第 start 个字符开始,向右截取 length 个字符。
${string: start} 从 string 字符串的左边第 start 个字符开始截取,直到最后。
${string: 0-start :length} 从 string 字符串的右边第 start 个字符开始,向右截取 length 个字符。
${string: 0-start} 从 string 字符串的右边第 start 个字符开始截取,直到最后。
${string#*chars} 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。
${string##*chars} 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。
${string%*chars} 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。
${string%%*chars} 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。
  • https://www.cnblogs.com/zwgblog/p/6031256.html

    first_day={etl_date:0-10:7} #从右边第10个字符开始,截取7个字符
    echo {var:0-7} #从右边第7个字符开始,一直到结束。
    注:(左边的第一个字符是用 0 表示,右边的第一个字符用 0-1 表示)

Shell使用date对输入时间进行加减

  • date +%Y-%m-%d #今天

  • date "+%Y-%m-%d %H:%M:%S" #带时间的格式

  • date -d "-1 day" +%Y-%m-%d #昨天

  • date -d "+1 day" +%Y-%m-%d #明天

  • 指定日期上加减

firstday='2019-01-01'


#加减一天

echo firstday 1 day" +%Y-%m-%d)

echo date -d "$firstday -1 day" +%Y-%m-%d


#加减一周

echo date -d "$firstday-1 week " +%Y-%m-%d

echo date -d "$firstday+1 week " +%Y-%m-%d


#加减一月

echo date -d "$firstday-1 month " +%Y-%m-%d

echo date -d "$firstday+1 month " +%Y-%m-%d


#加减一年

echo date -d "$firstday-1 year " +%Y-%m-%d

echo date -d "$firstday+1 year " +%Y-%m-%d

字符串替换的实现

  • 方法一:推荐使用,方便

    maxTime="2020-04-28"
    echo {maxTime//'-'/'_'} # 双斜杠替换所有匹配
  • 方法二:字符串替换tr实现
string="2020-03-22"  
echo $string | tr '-' '_'
>>2020_03_22

echo $string | tr '-' "" #报错tr: when not truncating set1, string2 must be non-empty
  • https://blog.csdn.net/u010003835/article/details/80750003


    string="hello,shell,split,test"
    array=({array[@]}
    do
    echo $var
    done

  • 示例


    date_flag="2020-03-22"
    my_array=({my_array[1]}""{my_array[0]}"_"{my_array[2]}"
    echo sample_p

function check(){
    local a="$1"
    printf "%d" "$a" &>/dev/null && echo "integer" && return
    printf "%d" "$(echo $a|sed 's/^[+-]\?0\+//')" &>/dev/null && echo "integer" && return
    printf "%f" "$a" &>/dev/null && echo "number" && return
    [ ${#a} -eq 1 ] && echo "char" && return
    echo "string"
}

常用函数变量

注意:在变量、等号=和值之间不能出现空格

  • yesterday=$(date -d "-1 day" +%Y-%m-%d) #昨天

  • month_max=$(date -d "-1 day" +%Y%m)

  • mytest=(one two three four five) #数组变量

    • echo(${mytest[2]})
    • echo(${mytest[*]})
  • 计算日期


    let dth=(date -d " -(date +%Y-%m)+'-01'
    etl_day=first_day -1 day" +%Y-%m-%d) #上月最后一天
    last_month=etl_day ,$last_month

  • echo 转义符 http://www.zsythink.net/archives/96


处理数据文件的命令

排序命令sort


Shell 的结构化命令

if语句

  • 语法 ------- P238 --------


    if [ condition1 ] #这里的方括号定义了测试条件,相当于test命令。注意,"["之后"]"之前必须加上一个空格, 判断符号前后也一定要有空格。
    then
    command set1
    elif condition2
    then
    command set2
    ......
    elif condition(n-1)
    then
    command set(n-1)
    else
    command setn
    fi

  • test命令可以判断三类条件

    • 数值比较符
数值比较符 符号描述 描述
n1 -eq n2 n1 == n2 判断n1是否等于n2
n1 -ne n2 n1 <> n2 判断n1是否不等于n2
n1 -ge n2 n1 >= n2 判断n1是否大于或等于n2
n1 -gt n2 n1 > n2 判断n1是否大于n2
n1 -le n2 n1 <= n2 判断n1是否小于或等于n2
n1 -lt n2 n1 <= n2 判断n1是否小于n2
    • 字符串比较符
字符串比较符 描述
str1 = str2 判断str1与str2是否相同
str1 != str2 判断str1与str2是否不同
str1 < str2 判断str1是否比str2小(短)
str1 > str2 判断str1是否比str2大(长)
-n str1 判断str1的长度是否为非0
-z str1 判断str1的长度是否为0
- 文件比较
文件比较符 描述
-d file 判断file是否存在,并且为目录(文件夹)
-e file 判断fifile是否存在
-f file 判断file是否存在,并且是一个文件
-r file 判断file是否存在,并且可读
-s file 判断file是否存在,并且非空
-w file 判断file是否存在,并且可写
-x file 判断file是否存在,并且可执行
-O file 判断file是否存在,并且属于当前用户
-G file 判断file是否存在,并且属于当前用户组
-L file 判断file是否存在,并且为符号链接
-h file 判断file是否存在,并且为软链接
file1 -nt file2 判断file1是否比file2新
file1 -ot file2 判断file1是否比file2旧
  • 示例
    • 判断文件夹是否存在


      dir_r="/home/edw/log"

      如果dir_r不存在则创建该文件夹,否则移除该文件夹

      if [ ! -d dir_r #mkdir创建文件夹
      else
      rmdir $dir_r #rmdir删除文件夹
      fi

    • 判断文件是否存在


      file_r="/home/edw/log/table_list_end.txt"

      如果file_r存在则清空文件内容,否则创建该文件

      if [ -f file_r #清空文件内容
      else
      touch $file_r #touch创建文件
      fi

for语句

  • 语法
    ------- P260 --------


    for var in list
    do
    commands
    done

  • 示例

    • 读取列表的值:


      for test in Alabama Alaska Arizona Arkansas
      do
      echo the next state is $test
      done

    • 读取列表中的复杂值(单引号)
      两种解决方法:

      • 使用转义符(\)来将复杂字符(比如单引号)转义


        for test in I don't know if this'll work
        do
        echo "word:$test"
        done

      • 使用双引号来定义用到单引号的值


        for test in I don't know if this'll work
        do
        echo "word:$test"
        done

    • 读取列表中的复杂值(空格)


      for test in Nevada New Hampshire New Mexico New York North Carolina
      do
      echo "Now going to $test"
      done

    执行结果并不是我们想要的结果。因为for命令用空格划分列表中的每个值,因此需要将代码改为:

    for test in Nevada "New Hampshire" "New Mexico" "New York" "North Carolina"
    do
    echo "Now going to $test"
    done

    • 读取文件中的值

      下面代码实现了一段这样的功能:从table_list.txt中筛选截止当前月的表名存放到table_list_end.txt

    file="/home/edw/log/table_list.txt" #存放原表名的列表
    file_r="/home/edw/log/table_list_end.txt" #筛选后的表名列表
    for table_nm in file)
    do
    if [ month_max ] #当文件名中的(倒数8-2数字表示文件的月份)小于等于当前月table_nm>>$file_r
    else
    break
    fi
    done

while语句

  • 语法
    ------- P270 --------


    while conditions #当conditions条件满足时,执行do--done循环;直到conditions条件不满足,才退出do--done循环
    do
    commands
    done

  • 示例


    cnt=1
    while [ cnt个epoch"
    cnt=cnt+1 ]
    done

  • 测试过的示例


    nowTime='2019-01-01'
    endTime='2019-01-05'
    while [[ endTime ]] # 双方括号允许高级字符串模式匹配运算,但是并不是所有的shell都支持双方括号
    do
    echo nowTime 1 day" +%Y-%m-%d`
    done

until语句

  • 语法
    ------- P272 --------


    until conditions #与while相反,当conditions条件不满足时,执行do--done循环;直到conditions条件满足,才退出do--done循环
    do
    commands
    done

  • 示例


    cnt=1
    while [ cnt个epoch"
    cnt=cnt+1 ]
    done

控制循环语句

  • break命令
    break命令跳出循环,可以用于任意类型循环
    • break n #n指定了跳出的循环层级;默认情况下,n=1表示跳出当前循环
  • continue命令
    continue命令可以提前中止某次循环中的命令,但是并不会完全终止整个循环
    • continue n #n指定要继续的循环层级;默认情况下,n=1表示跳出当前循环

Shell 定时任务

  • 菜鸟:https://www.runoob.com/linux/linux-comm-crontab.html
  • https://www.cnblogs.com/sharesdk/p/7852903.html

  Linux系统使用cron程序来执行定时任务,cron程序会在后台检查并运行cron时间表。该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。每个域之间使用空格或者制表符分隔。格式如下:

  • minute hour day-of-month month-of-year day-of-week commands

  合法值 00-59 00-23 01-31 01-12 0-6 (0 is sunday) commands(代表要执行的脚本)

  除了数字还有几个个特殊的符号就是"*"、"/"和"-"、",",*代表所有的取值范围内的数字,"/"代表每的意思,"/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字。

*    *    *    *    *
-    -    -    -    -
|    |    |    |    |
|    |    |    |    +----- 星期中星期几 (0 - 6) (星期天 为0)
|    |    |    +---------- 月份 (1 - 12) 
|    |    +--------------- 一个月中的第几天 (1 - 31)
|    +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)

设置需要执行的脚本P350

新增调度任务可用两种方法:

  1. 在命令行输入: crontab -e 然后添加相应的任务,wq存盘退出。
  2. 直接编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务。
  • 示例:
* 13 * * * 4  python3 /home/jovyan/work/梦楠的数据需求_周统计/mengnan_data.py >> /home/jovyan/work/梦楠的数据需求_周统计/mengnan_data.log

0 6 1 * * sh /opt/edw/edw_batch/script/hive/dwd/overdue_num_monthly.sh >> /home/edw/log/overdue_num_monthly_run.log 2>&1 

Linux shell中2>&1的含义解释:
https://blog.csdn.net/zhaominpro/article/details/82630528

温馨提示

如果shell脚本执行不成功, 可以查看:

  1. 文本权限 chmod +x filename.sh
  • 确认文本格式是fileformat=unix,而不是fileformat=dos(设置方法见常见错误1)

查看调度任务

  • crontab -e配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务

  • crontab -l //列出当前的所有调度任务

  • crontab -l -u jp //列出用户jp的所有调度任务

删除任务调度工作

  • crontab -r //删除所有任务调度工作

直接编辑

  • vim /etc/crontab ,默认的文件形式如下:

解决Crontab 获取/etc/profile中的系统变量的问题

  • https://www.cnblogs.com/kerrycode/p/11386074.html

在执行Python脚本时,获取/etc/profile中的系统变量(不同平台或不同环境有所区别)

方式一:直接添加语句

*/1 * * * * source /etc/profile && /usr/local/bin/python3.6 /home/konglb/python/crontab_env_test.py

方式二:使用shell包裹Python脚本

#!/bin/bash
 
source /etc/profile
 
/usr/local/bin/python3.6 /home/konglb/python/crontab_env_test.py

Shell 脚本文件

在创建shell脚本文件时,必须在文件的第一行指定要使用的shell。格式如下:

 #!/bin/bash

Shell 脚本文件中常用的日期参数


now=(date -d "-1 days" +%Y-%m-%d) #昨天

Shell 脚本文件中常用语句


0,获取当前Shell程序的路径
cd dirname $0,进入当前Shell程序的目录

shell脚本获取hive的查询结果,赋值给变量


result=hive -e "select etl_date from $1 where etl_date = '"$yesterday"' limit 1"
echo (hive -e "select etl_date from yesterday"' limit 1")
echo $result

一个完整的Shell 脚本文件参考

#!/bin/bash
# -------------说明------------- 
# Filename:  Azkaban_depend_table.sh
# Name : 
# Product : 
# Type :  
# Language : bash shell  
# Date : 2020-03-05  
# Author :cyh
# Modifid_date: 2019-12-19
# Modifid
# Revision:    1.0 
# Description :  略

source /etc/profile
#----------------------------------Define--------------------------------------------------

yesterday=$(date -d "-1 days" +%Y-%m-%d)         #昨天

# --------------------------------- Execute Hive ---------------------------------------------
hive<

一个完整的Shell 脚本文件参考《finishCheck.sh》

!/bin/bash

检查指定表的etl_date昨天的分区是否存在且至少有一条记录,检测有数据成功退出,没有错误退出

yesterday=$(date -d "-1 days" +%Y-%m-%d)

yesterday='2020-03-31'

tn="{tn:0-2}=='-m' ]
then
select_names='snapshot_date'
else
select_names='etl_date'
fi
echo $select_names

result=hive -e "select $select_names from $1 where $select_names = '"$yesterday"' limit 1"
echo result && yesterday$ ]]
then
echo "今天的数据运行成功!"
exit 0
else
echo "今天的数据运行失败!"
exit 1
fi

shell脚本运行python程序

  • 方法一:

    !/bin/bash

    python -c 'print "111";'

  • 方法二:

    -------------

    !/bin/bash

    python < print '11'
    EOF

    -----------

加个"-"最下面的EOF就可以不是行头但必须是 "tal"

1、考虑下面的需求,在主shell执行命令,进入其他的命令,后面的输入,想作为命令的输入,而不是主shell的输入,怎么办?

2、使用<

3、这里的EOF只是分界符,使用其他的字符也可以。


脚本读取文件内容并输出

  • 参考示例:
    https://www.runoob.com/w3cnote/shell-read-line.html

这里主要介绍三种方式:

方式一


#/bin/bash
while read line
do
echo $line
done < a.txt

方式二


#/bin/bash
cat a.txt | while read line
do
echo $line
done

方式三


for line in line
done

常见问答

条件判断[ -n str ]

问:linux里while [ -n "$1" ]这里的-n是什么意思?
答:-n str,字符串不为null,长度大于零

  • 示例

    if [ -n "$1" ]; then
    echo "包含第一个参数"
    else
    echo "没有包含第一参数"
    fi

exit n

  • exit 0 代表正常运行程序并退出程序,
  • exit 1 代表非正常运行导致退出程序

常见错误

解决“/bin/bash^M: bad interpreter: No such file or directory”

在执行shell脚本时提示这样的错误主要是由于shell脚本文件是dos格式,即每一行结尾以\r\n来标识,而unix格式的文件行尾则以\n来标识。
查看脚本文件是dos格式还是unix格式的几种办法。

  1. cat -A filename 从显示结果可以判断,dos格式的文件行尾为^M"。
  • od -t x1 filename 如果看到输出内容中存在0d 0a的字符,那么文件是dos格式,如果只有0a,则是unix格式。
  • vi filename打开文件,执行 : set ff,如果文件为dos格式在显示为fileformat=dos,如果是unxi则显示为fileformat=unix.

解决方法:

  1. 使用linux命令dos2unix filename,直接把文件转换为unix格式
  • 使用sed命令sed -i "s/\r//" filename 或者 sed -i "s/^M//" filename直接替换结尾符为unix格式
  • vi filename打开文件,执行 : set ff=unix 设置文件为unix,然后执行:wq,保存成unix格式。

swap file "*.swp" already exists!的解决方法

Linux下编程难免要开启多个vim共同编辑同一个文件,这时再次保存就会出现:

swap file "*.swp" already exists!

[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:

  • 原因:
    使用vim编辑文件实际是先copy一份临时文件并映射到内存给你编辑, 编辑的是临时文件, 当执行:w后才保存临时文件到原文件,执行:q后才删除临时文件。
    每次启动检索式否有临时文件, 有则询问如何处理,就会出现如上情景。
  • 解决方法:
    执行以下命令:找到临时文件,然后删除

ll -a //显示隐藏文件

rm .*.swp //删除隐藏文件

Sqoop 几种导入导出模式

  • https://blog.csdn.net/james__tao/article/details/78106396

全量导入

例如:


bin/sqoop import \ (输入命令)
--connect jdbc:mysql://bigdata.ibeifeng.com:3306/testdb \ (指定连接jdbc端口和数据库名称)
--username root \ (数据库用户名)
--password root123 \ (密码 若不适用明文指定数据库密码 则可以用-P)
--table user \ (指定数据库中的一张表)
--target-dir /input/import \ (指定数据导入到HDFS上的目录)
--delete-target-dir \ (如果目标目录已存在,则先删除)
--num-mappers 1 \ (指定使用导入数据的map个数,mapreduce(V1)中的方式可以用-m 1 代替(过时))
--fields-terminated-by "," (目标文件的分隔符, 默认情况下,导入HDFS的每行数据分隔符是逗号)


Shell 邮件发送

  • linux 发送邮件(含附件) https://www.iteblog.com/archives/2027.html?from=like#mailx

mailx邮件发送(比较好用)

  • https://www.cnblogs.com/Dicky-Zhang/p/6085212.html

假设邮件内容存储于msg文件中,那么可以用如下方法:

mailx -s "test mail" [email protected] < msg 

或者

cat msg | mailx -s "test mail" [email protected] 

把打印的内容作为标准输入,送给mail命令

echo -e $email_contents | mailx -s "test mail" [email protected] 

也可以直接从命令行输入邮件内容:

mailx -s "test mail" [email protected] 

上面这条命令会进入命令行输入状态,此时可以输入内容,按Ctrl+d键来结束输入。

其他选项

-r 指定发件人

-c 指定抄送人

-b 指定密送人

多个收件人之间用逗号分隔

cat msg | mailx -s "test mail" [email protected],[email protected],[email protected]

mail和mailx基本是一样的,用法差不多

六种使用Linux命令发送带附件的邮件

  • https://www.iteblog.com/archives/2027.html?from=like#mailx

你可能感兴趣的:(Shell 常用语句查询)