zoukankan      html  css  js  c++  java
  • linux学习:特殊符号,数学运算,图像与数组与部分终端命令用法整理

    指令:let、expr、array、convert、tput、date、read、md5、ln、apt、系统信息

    一:特殊符号用法整理

    系统变量

    $# 是传给脚本的参数个数

    $0 是脚本本身的名字
    $1 是传递给该shell脚本的第一个参数
    $2 是传递给该shell脚本的第二个参数
    $@ 是传给脚本的所有参数的列表
    $* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9
    $$ 是脚本运行的当前进程ID号
    $? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误

    算术比较
    -eq 等于
    -ne 不等于
    -gt 大于
    -lt 小于
    -ge 大于或等于
    -le 小于或等于
    -a 逻辑与 and &&
    -o 逻辑或 or ||
    [ $var -eq 0 ]    #当$var等于0时,返回真
    [ $var -ne 0 ]    #当$var为非0时,返回真
    [ $var1 -ne 0 -a $var2 -gt 2 ]
    [ $var1 -ne 0 -o $var2 -gt 2 ]

    字符串比较
    [[ $str1 = $str2 ]]     #当str1等于str2时,返回真。注意:=号前后各有一个空格,如果忘记加空格,则当成赋值处理
    [[ $str1 == $str2 ]]
    [[ $str1 != $str2 ]]
    [[ $str1 > $str2 ]]
    [[ $str1 < $str2 ]]
    [[ -z $str1 ]]   #如果str1包含的是空字符串,则返回真。
    [[ -n $str1 ]]   #如果str1包含的是非空字符串,则返回真。

    文件系统相关条件标志
    [ -f $var ]     #如果给定的变量名包含正常的文件路劲或文件名,则返回真。
    [ -x $var ]    #如果给定的变量包含的文件可执行,则返回真。
    [ -d $var ]    #如果给定的变量包含的是目录,则返回真。
    [ -e $var ]    #如果给定的变量包含的文件存在,则返回真。
    [ -c $var ]    #如果给定的变量包含的是一个字符设备文件的路劲,则返回真。
    [ -b $var ]    #如果给定的变量包含的是一个块设备文件的路劲,则返回真。
    [ -w $var ]   #如果给定的变量包含的文件可写,则返回真。
    [ -r $var ]    #如果给定的变量包含的文件可读,则返回真。
    [ -L $var ]   #如果给定的变量包含的是一个符号链接,则返回真。
    ----------------------------------
    fpath="/etc/passwd"
    if [ -e $fpath ]; then
    echo File exists;
    else
    echo Dones not exist;
    fi
    ----------------------------------

    重定向符号 ">" 和">>"
    echo "This is a sample text 1" > temp.txt    #输出重定向到文件并清空文件原本的内容
    echo "This is a sample text 2" >> temp.txt  #输出重定向到文件不清空文件原本的内容
    pwe >> temp.txt

    Shell重定向介绍:
    0表示标准输入
    1表示标准输出
    2表示标准错误输出
    > 默认为标准输出重定向,与 1> 相同
    2>&1 意思是把 标准错误输出 重定向到 标准输出.
    &>file 意思是把 标准输出 和 标准错误输出 都重定向到文件file中

    注意:
    &>file或n>&m均是一个独立的重定向符号,不要分开来理解。
    明确文件和文件描述符的区别。对于&1更准确的说应该是文件描述符1,而1标识标准输出,stdout。对于2,表示标准错误,stderr。
    2>&1 的意思就是将标准错误重定向到标准输出。这里标准输出已经重定向到了 /dev/null。那么标准错误也会输出到/dev/null
    这里的/dev/null是一个文件,这个文件比较特殊,所有传给它的东西它都丢弃掉。
    &>file表示重定向标准输出和错误到文件
    n>&m表示使文件描述符n成为输出文件描述符m的副本。不需要错误信息时:2>/dev/null,作用是不显示标准错误输出;需要错误信息时:2>&1,显示错误信息。

     例子:

    在crontab任务中经常可以看到:
    */2 * * * * root php /www/mysite/index.php task >/dev/null 2>&1
    将标准输出重定向到/dev/null,然后再将标准输出重定向到标准输出(结果也是到了/dev/null)。

     

     二:数学运算,图像与数组

    let 直接执行基本的算数操作
    let result=nol+nol2
    let no1++
    let no1--
    类似
    result=$[ no1 + no2 ]
    result=$[ $no1 + 5 ]
    result=$(( no1 + 50 ))

    expr 用于基本算数运算操作
    result=`expr 3 + 4`
    result=$(expr $no1 +5)

    bc 支持浮点数的高级数学运算工具
    echo "4 * 0.56" | bc
    ------------------------------
    no=54;
    result=`echo "$no * 1.5" | bc`
    echo $result
    ------------------------------

    数组
    array_var=(1 2 3 4 5 6)        #定义数组
    array_var[6]=7;
    echo ${array_var[6]}           #7
    -----------------------------
    index=5
    echo ${array_var[$index]}   #6
    -----------------------------
    echo ${array_var[*]}          #1234567 打印所有值
    echo ${array_var[@]}         #1234567
    echo ${#array_var[*]}        #7 打印数组元素个数
    --------------------------------------------------
    declare -A ass_array            #单独将变量名声明为关联数组
    ass_array=([index1]=var1 [index2]=var2)
    ass_array[index3]=var3;
    ass_array[index4]=var4;
    --------------------------------------------------
    echo ${!ass_array[*]}         #获取数组的索引列表
    echo ${!ass_array[@]}        #同上

    图像相关
    要使用convert需要iamgemagick支持。sudo apt-get install imagemagick
    convert image.png image.jpg      #将一种图像格式转换为另一种图像格式
    convert image.png -resize 1024x768 image.png    #改变WIDTHxHEIGHT调整图像大小,WIDTH和HEIGHT必须至少提供一个
    convert image.png -resize 1024x image.png         #提供了WIDTH,自动按照图像比例缩放
    convert image.png -resize "50%" image.png         #使用百分比缩放图像

    for i in *; do mencoder -oac mp3lame -lameopts vbr=3 -ovcxvid -xvidencopts fixed_quant=4 -of avi $i -o `echo $i | sed -e's/rmvb$/avi/'`; done      #批量将rmvb转为avi
    for i in *; do convert -resize 30%x30% $1 sm-$1; done            #批量缩小图片到30%
    for i in *; do convert $i `echo $i | sed -e 's/jpg$/png/'`; done   #批量转换jpg到png
    for i in *; do inkscape $i –export-png=`echo $i | sed -e 's/svg$/png/'`; done            #批量将svg转为png
    find . -name *.jpg -exec wc -c {} ; | awk '{print $1}'|awk '{a+=$1}END{print a}'   #统计当前目录下所有jpg文件的尺寸

    identify -verbose xxx.jpg        #去掉文件中的^M
    cat filename | tr -d "^M" > newfile     #获取jpg的扩展信息(Exif)
    sudo apt-get install abcde;abcde -o mp3 -b   #CD 抓轨为 mp3 (有损)
    sudo apt-get install abcde;abcde -o flac -b     #CD 抓轨为 Flac (无损)

    三:部分终端命令用法整理

    生成字符串的md5密文

    echo -n "123456" | md5sum

    符号链接

    ln  -s  [源文件或目录]  [目标文件或目录]

    常用的参数:

    -b 删除,覆盖以前建立的链接

    -d 允许超级用户制作目录的硬链接

    -f 强制执行

    -i 交互模式,文件存在则提示用户是否覆盖

    -n 把符号链接视为一般目录

    -s 软链接(符号链接)

    -v 显示详细的处理过程

    ln -s /usr/share/nginx/sbin/nginx   /sbin/nginx    #创建/sbin/nginx 镜像,链接到/usr/share/nginx/sbin/nginx 要删除该软链接,只需 rm /sbin/nginx 即可
    ln –snf  [新的源文件或目录]  [目标文件或目录]   #修改软链接

    这里有三点要注意:
    第一,ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;
    第二,ln的链接又软链接 和硬链接两种,
             软链接就是ln -s src  dst,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,
             硬链接ln src  dst,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件          都保持同步变化。 
    第三,指向一个文件的所有 硬链接都删掉的话文件的内容才会被删掉
    软链接只要删掉了源链接,软链接也就失效了

    终端信息

    tput cols       #获取终端列数
    tput lines             #获取终端行数
    tput longname     #获取终端名
    tput bold      #设置文本样式为粗体
    tput setb no     #设置终端背景色 no为0到7
    tput setf no      #设置终端前景色
    tput cup 100 100 #定位光标

    日期时间
    date           #打印纪元时
    date +%s           #打印此时的时间戳
    date -s mm/dd/yy     #设置日期
    date -s HH:MM      #设置时间

    date +%Y-%m-%d          #日期格式:2012-12-24

    date  +"%F"                   #同上

    date +%Y-%m-%d –date ‘-1 day'       #格式:2012-12-23

    date +%Y-m-%d –date ‘Dec 25'    #格式:2011-12-25
    date +%Y-m-%d –date ‘Dec 25 – 10 days'    #格式:2011-12-15

    date  +"%Y%m%d" -d  "+n days"         #今天的后n天日期  

    date  +"%Y%m%d" -d  "-n days"          #今天的前n天日期
    date +"%Y-%m-%d %H:%M:%S"        # 此时完整的时间格式:2017-07-18 05:17:01
    date +"%Y-%m-%d %H:%M:%S" -d "+10hour"    #10小时后的时间
    date +"%Y-%m-%d %H:%M:%S" -d "-5hour"      # 5小时前的时间
    date +"%Y-%m-%d %H:%M:%S" -d "+24hour"    #此时的时间加1天
    date +"%Y-%m-%d %H:%M:%S" -d "+20minute"  #20分钟后的时间
    date +"%Y-%m-%d %H:%M:%S" -d "-20minute"  #20分钟前的时间
    date +"%Y-%m-%d %H:%M:%S" -d "+2month"    #两个月后的时间
    date +"%Y-%m-%d %H:%M:%S" -d "+2year"       #两年后的时间
     

    cal             #显示日历
    hwclock –systohc      #将时间写入CMOS
    hwclock –show      #查看CMOS时间
    hwclock –hctosys     #读取CMOS时间
    sudo ntpdate ntp.ubuntu.com    #从服务器上同步时间
    sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime   #设置电脑的时区为上海
    sudo sed -ie ’s/UTC=yes/UTC=no/g’ /etc/default/rcS;sudo hwclock –systohc    #关闭UTC,将当前时间写入CMOS

    开关机
    sudo halt          #命令关机
    sudo shutdown -h now      #现在关机
    sudo shutdown -h 23:00   #晚上11点自动关机
    sudo shutdown -h +60      #60分钟后关机
    sudo reboot          #命令重启电脑
    sudo shutdown -r now       #现在重启电脑
    synclient touchpadoff=1    #关闭笔记本的触摸板
    synclient touchpadoff=0    #开启笔记本的触摸板

    系统信息

    which ls         #输出作为参数的命令的所在位置
    whereis ls      #输出作为参数的命令所在的位置和该命令手册的位置及源码的路劲
    whatis ls    #输出作为参数的命令的简短的描述信息,这些信息来之该命令的手册
    hostname    #输出系统的主机名
    uname -n      #同上
    uname -a       #打印Linux的内核版本、硬件架构等详细信息
    uname -r       #打印内核发行版本
    uname -m      #打印主机类型
    cat /proc/cpuinfo     #打印cpu相关信息
    cat /proc/meminfo   #打印内存的详细信息
    cat /proc/meminfo | head -l    #打印系统可用内存总量
    cat /proc/partitions    #列出系统的分区信息
    cat /proc/5346/status    #查看PID为5346的进程的信息
    cat /proc/cpuinfo | head -n 5 | tail -l    #打印处理器名称
    fdisk -l                    #同上
    lshw             #获取系统的详细信息
    lsmod              #查看内核加载的模块
    lspci             #查看PCI设备
    lsusb -v            #查看USB设备
    sudo lshw         #显示当前硬件信息
    sudo fdisk -l         #查看硬盘的分区
    sudo fdisk /dev/sda  #硬盘分区
    sudo iostat -x 2    #查看硬盘当前读写情况
    sudo mkfs.ext3 /dev/sda1    #硬盘格式化
    ulimit -n 4096 或 echo 4096 > /proc/sys/fs/file-max   #增加系统最大打开文件个数

    sleep 3              #延迟3秒再往下执行
    more file           #分页查看文件内容
    less file           #可控分页查看文件内容
    sudo vim /etc/motd          #修改系统登录信息
    logger LOG_MESSAGE      #向syslog中记录日志信息
    alias install='sudo apt-get install'    #别名:使用install来代替sudo apt-get install命令
    export http_proxy=http://xx.xx.xx.xx:xxx    #终端设置代理
    zenity --info --text "This is a message"    #用zenity创建一个信息框,上面显示文本“This is a message”
    convmv -r -f cp936 -t utf8 –notest –nosmart *    #转换文件名由GBK为UTF8
    iconv -f gbk -t utf8 $i > newfile    #转换文件内容由GBK到UTF8
    sudo apt-get install python-mutagen;find . -iname ‘*.mp3′ -execdir mid3iconv -e GBK {} ;    #转换 mp3 标签编码

     录制与回放终端会话

    ------------------------------------------------------------
    script -t 2> timing.log -a output.session    #开始录制终端会话
    type commands;    #要录制的会话命令
    ...
    ..
    exit    #结束录制
    scriptreplay timing.log output.session    #播放命令序列输出
    ------------------------------------------------------------
    打开两个终端:T1和T2
    在T1中输入命令:mkfifo scriptfifo
    在T2中输入命令:cat scriptfifo
    返回T1,输入:script -f scriptfifo
    要接受会话的话就输入exit
    ------------------------------------------------------------

     读取终端输入:read

    read -n 5 var    #从输入中读取5个字符并存入变量var
    read -s var       #用不回显的方式读取输入到变量var
    read -p "Enter input:" var    #显示提示信息
    read -t 5 var    #读取5秒内的输入到变量var
    read -d ":" var     #用界定符“:”结束输入行
    echo $var
    --------------------------------------
    输入密码时不显示:
    #!/bin/sh
    echo -e "Enter password:"
    stty -echo
    read password
    stty echo
    echo
    echo Password read.
    --------------------------------------

     环回文件与挂载

    dd if=dev/zero of=loopbackfile.img bs=1G count=1    #创建一个环回文件,大小为1GB
    mkfs.ext4 loopbackfile.img    #将文件格式化为ext4文件系统
    sudo file loopbackfile.img      #检查文件系统
    mount -o loop loopback.img /mnt/loopback    #将环回文件挂载到/mnt/loopback目录上(-o loop 用来挂载环回文件系统)
    losetup /dev/loop1 loopback.img    #(1)
    mount /dev/loop1 /mnt/loopback   #(2)将loopback.img 挂载到目录/mnt/loopback,这个环回文件连接到一个名为/dev/loop1的设备上
    losetup -o 32256 /dev/loop2 loopback.img    #在lookback.img中创建分区并挂载第一个分区,-o表示偏移量。第一个分区自硬盘第32256字节之后起始的。
    sudo umount /mnt/sda1    #卸载

     快速定位

    pushd /var/www    #将该目录压进栈,并切换到该目录
    pushd /usr/src      #同上
    dirs          #查看栈中的元素
    pushd +2         #切换到栈中第3个元素存放的目录
    popd +2       #移除栈中第3个元素存放的目录

     软件包相关

    apt search sqlite3                  #查找包含sqlite3字样的软件包
    aptitude search pakege    #查找软件库pakege中的软件
    dpkg -S filename         #查找文件属于哪个包
    dpkg -L xxx          #查看软件xxx安装内容
    apt-cache search partitions  #使用正则表达式partitions查找软件库中的软件
    apt-file search filename    #查找文件属于哪个包
    apt-cache depends xxx    #查询软件xxx依赖哪些包
    apt-cache rdepends xxx     #查询软件xxx被哪些包依赖
    apt-cache show k3b      #显示包的信息
    apt-cache pkgnames        #显示系统全部可用包的名称
    apt-cache stats        #显示系统安装包的统计信息
    sudo apt-cdrom add        #增加一个光盘源
    sudo apt-get autoclean    #清理旧版本的软件缓存
    sudo apt-get update
    sudo apt-get dist-upgrade   #系统升级
    sudo apt-get autoremove    #删除系统不再使用的孤立软件
    lsb_release -a 或 cat /etc/issue    #查看Ubuntu版本
    dpkg -l |grep ^rc|awk ‘{print $2}’ |sudo xargs dpkg -P    #清除已删除包的残馀配置文件
    export GIT_SSL_NO_VERIFY=1    #系统不信任github网站时执行

     

    设备:

    linux 设备里面有个比较特殊的文件:
    /dev/[tcp|upd]/host/port 只要读取或者写入这个文件,相当于系统会尝试连接host这台机器,对应port端口。如果主机以及端口存在,就建立一个socket连接。将在/proc/self/fd目录下面,有对应的文件出现。

    1.以读写方式打开/dev/tcp,并指定服务器名为:www.baidu.com,端口号为:80,指定描述符为8。(要注意的是:/dev/tcp本身是不存在的):
    exec 8<>/dev/tcp/www.baidu.com/80
    此时查看/proc/self/fd/或者/dev/fd/目录下会有8这个描述符(socket连接)生成。

    2. 向文件(socket连接)中随便写一些数据:
    echo -e "GET">&8

    3. 读取返回的信息并打印到终端(一般读取完后自动关闭该链接):
    cat<&8

    4.手动关闭连接
    exec 8>&-

  • 相关阅读:
    python 实现一个双色球生成程序
    python 列表排序方法sort、sorted技巧篇
    python 列表排序方法reverse、sort、sorted基础篇
    python random模块(获取随机数)的常用方法及示例
    python 开发在线音乐播放器-简易版
    用户画像从0到100的构建思路
    “营销数字化10讲”(3):营销数字化的灵魂是用户画像
    什么是用户画像(User Profile)
    精心整理了7种常用数据分析方法
    机器学习模型评估指标总结
  • 原文地址:https://www.cnblogs.com/LO-gin/p/6953183.html
Copyright © 2011-2022 走看看