• linux基本知识2


    vi/vim工具使用


    vi三种模式:
    1.浏览模式(命令模式)
    2.输入模式
    3.末行模式


    三种模式切换:
    浏览模式(命令模式)    按"i" "a"      输入模式
    输入模式   按"esc"        浏览模式(命令模式) 
    浏览模式(命令模式)    按shif+:      末行模式


    浏览模式经常使用的命令:
    删除一行  dd
    删除多行  ndd (n=1,2,3)
    复制一行  yy
    复制多行  nyy (n=1,2,3)
    粘贴      pp
    大写写切换  shift+~
    光标文件开头 :gg
    光标文件结尾 :GG
    排版 :gg=GG


    末行模式使用命令:
    wq :保存退出
    q!:不保存退出
    w  文件名称 :另存为
    !shell命令   :运行shell命令
    set nu :显示行号
    set nonu:取消显示行号
    u:撤销上一次改动
    %s/源字符/新字符/ :替换每一行第一次出现源字符
    %s/源字符/新字符/g :替换全部源字符
    %s/ad/88888/g
    %s//home/etc/1231232/g //转移字符""


    linux用户管理
    /etc/passwd:用户信息(password凭证)
    /etc/group:用户组信息
    /etc/shadow:用户password及其password有效期


    root:   x         :0    :0   :root:    /root:   /bin/bash
    username  password凭证   uid  gid   初始组名 用主文件夹  shell脚本解                                                  释器
    root::0:0:root:/root:/bin/bash//取消"x",能够不须要password


    uid>=0  && uid<=999  系统预留UID
    uid>=1000 系统一般用户
      
    添加用户命令
    useradd/adduser  username
    useradd test//改动/etc/passwd  /etc/shadow /etc/group   /home/test
    -d:指定用户主文件夹名称
    -u:指定uid
    -M:不会创建用户主文件夹


    初始组:
    a.adduser创建用户时,系统自己主动创建一个与username同名组
    b.-g:选项指定新用户所属初始组(组必须先存在,可能与username一样)


    有效组:
    a.-G:指定用户除了属于初始组之外的组
    一个用户能够有多个有效组,仅仅能有一个初始组
    -g:指定用户初始组
    adduser -g test test4 //初始组:test


    -G:指定用户有效组
    adduser -G test  test5//初始组:test5  有效组:test


    设置/改动password
    passwd username
    [root@localhost etc]# passwd  test
    [root@localhost etc]# passwd  //改动当前rootpassword




    切换用户
    su
    root -->一般用户: su test//无需输password
    一般用户-->root : su  /su root//须要输入root用户password
    [root@localhost etc]# su test
    [test@localhost etc]$ su 


    改变用户信息
    a.username
    b.用户提示信息
    c.冻结/解冻用户
    usermod
    usermod  -l   usernewname   useroldname
    usermod -c "sdfdsfdsfsd"  test
    usermod -L  test //冻结用户
    usermod -U  test //解冻用户


    添加组
    groupadd  
    groupadd  group1


    删除用户
    userdel
    userdel  test2//删除username,用户主文件夹不会删除 rm -rf test2 
    userdel  -r test4//删除username,用户主文件夹也删除


    删除组
    groupdel 
    groupdel group1


    网络常使用命令
    /etc/sysconfig/network-scripts/ifcfg-p3p1 //网卡配置文件
    网卡一般为:eth0  eth1 ethn


    查看网络信息:
    ifconfig


    设置IP地址:
    1.设置永久性
       setup
       servie network restart|start|stop //必需要重新启动服务,否则设置将无效
    2.暂时 ifconfig  p3p1  192.168.226.3 netmask 255.255.255.0


    linux 与window 网络通信:
    1.查看网络适配器(VMware Network Adapter VMnet1),ip:192.168.80.1//每台机器不一样
    2.vm-->setting-->network adapter  右下角 选择第四项(customer adapter -->vm1(host only))
    3.[root@localhost network-scripts]# ifconfig p3p1  192.168.80.3 netmask 255.255.255.0
    4.[root@localhost network-scripts]# ping 192.168.80.1//linux ping window
    5.ping  192.168.80.3 //window  ping linux


    关闭防火墙:
    linux:setup --->firewall config


    samb共享服务
    linux共享文件 window訪问
    samb服务配置步骤:
    1.[root@localhost network-scripts]# service  start
    2.[root@localhost home]# mkdir share  //创建共享文件夹
    3.[root@localhost etc]# cd /etc
      [root@localhost etc]# cd samba/
    4.[root@localhost samba]# cp smb.conf  smb.conf4  //备份配置文件
    5.改动smb.conf配置文件
       vim   smb.conf
       118   security = share


       322 [share]
    323         comment= wshare
    324         path= /home/share
    325         public= yes
    326         guest ok =yes
    327         writable= yes


    6.[root@localhost samba]# service smb restart//重新启动服务
    7.window   执行:\192.168.80.3
    8.改动权限
        [root@localhost /]# chmod  777 home
        [root@localhost home]# chmod 777 share
        [root@localhost home]# setenforce 0


    重新启动机器后须要设置:
    1.[root@localhost network-scripts]# ifconfig p3p1  192.168.80.3 netmask 255.255.255.0
    2.[root@localhost samba]# service smb restart//重新启动服务
    3.window   执行:\192.168.80.3
    4.[root@localhost home]# setenforce 0
       


    linux 进程管理命令


    进程与程序差别
    进程:动态 正在执行的程序
    程序:静态 实现代码


    查看显示进程
    ps
    ps -aux 
    a:显示全部进程(前台进程与后台进程)
    x:显示内核进程(内核服务)
    u:显示当前用户的进程
    ef:显示父亲进程(PPID)


    进程状态:
    S:睡眠状态
    R:正在执行状态
    D:睡眠状态不可中断
    T:暂停
    Z:僵死


    "&":运行命令时,直接成为后台进程
    ctrl+C:结束当前进程
    ctrl+D:把当前进程改为后台进程
    fg +pid //把后台进程改变成前台进程
    fg +pid
    [root@localhost share]# fg + 4641
    top:动态查看当前进程状况
    pstree :树结构显示进程 
    kill pid //进程ID杀死
    kill -9 pid//强制杀死进程
    killall bc//进程名
    killall -9 bc//强制杀死进程
    清屏
    clear
    echo -e '33c'


    作业:
    1,创建组account,mis,sales
    groupadd account
    groupadd  mis
    groupadd sales
    2,创建用户a
    adduser a
    3,创建用户b,不创建家文件夹
    adduser -M b
    4,创建用户c,家文件夹为/home/cc
    并设置初始化组为sales,有效组为mis
    adduser -d /home/cc   -g  sales -G mis   c
    5,改动a用户的password为a123456
    echo a12345 |  passwd a --stdin
    6,把c用户冻结
    usermod  -L c
    usermod -U c
    8,删除sales组
    groupdel sales




    环境变量
    为了保存系统一些信息,定义的变量
    环境变量名通常是大写


    常见的环境变量
    PATH:保存系统shell命令可运行文件路径
    HOSTNAME:主机名
    LD_LIBRARY_PATH:动态库载入路径
    USER:当前登录username


    查看环境变量命令
    env
    env | grep  HOSTNAME
    echo  $HOSTNAME//输出HOSTNAME变量值
    echo  HOSTNAME//输出变量名HOSTNAME
    echo $PATH


    export 导入
    让改动环境变量新值有效


    改动PATH环境变量值:
    1.暂时改动
      [root@localhost etc]# export PATH=$PATH:/sbin:/bin
      
    2.永久改动
       一般用户:
       /home  .bash_logout  .bash_history
         .bash_profile(用户环境变量或启动程序设置)  
         .bashrc  
       root用户:
         .bash_logout  .bash_history
         .bash_profile(用户环境变量或启动程序设置)  
         .bashrc  


       etc: bashrc  profile


       PATH永久设置:
          用户:  .bash_profile 
                  export PATH=$PATH:/sbin:/bin
          /etc:   profile
                  export PATH=$PATH:/sbin:/bin


    自己定义换将变量
    root@localhost etc]# export AA=12345
    [root@localhost etc]# unset AA  //删除环境变量


    [root@localhost etc]# export AA=12345
    [root@localhost etc]# readonly AA




    linux 解压/压缩
    .tar.gz
    .tar.gz2
    .rpm


    解压/压缩命令
    tar
    -x:解压
    -c:压缩
    -v:输出压缩解压的信息
    -z:压缩文件gzip/zip
    -f:文件名称(一般放在选项最后面)
    -C:改变指定解压文件的文件夹(默认解压到当前文件夹)


    压缩文件:
    tar -cvzf
    tar -cvf


    [root@localhost yj]#tar -cvzf  abc.tar.gz  a b c
    [root@localhost yj]# tar -cvf  abc.tar.gz2  a b c
    解压文件:
    [root@localhost yj]# tar -xvzf abc.tar.gz 
    [root@localhost yj]# tar -xvf abc.tar.gz2 
    [root@localhost yj]#tar -xvzf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz  -C/usr/local


    linux文件安装
    a.带源代码安装
    b.解压安装


    带源代码安装步骤:
    以安装:sqlite-3.3.7.tar为例:
    1.tar -xvzf sqlite-3.3.7.tar.gz  -C /usr/local
    2.cd sqlite-3.37
    3.[root@localhost sqlite]# ./configure  --prefix=/usr/local/sqlite //生成一个makefile文件
    4.make //编译
    5.make install //安装


    RPM包(reahat package manager)
    rpm 经常使用选项:
    -q:查询
    -a:全部包
    -i:安装
    -e:删除
    -v:验证
    -h:显示安装进度


    vim-filesystem-7.3.315-1.fc16.i686.rpm
    vim-filesystem:包名(功能)
    7.3.315-1:版本号
    fc16:os版本号
    i686:处理器类型


    rpm  -qa  包名//依据包名搜索安装包
    rpm  -ivh vim-filesystem-7.3.315-1.fc16.i686.rpm
    rpm  -evh 包名


    linux挂在cdrom步骤:
    1.vm-->setting-->cd dvd   勾选connected   指定虚拟镜像文件
    2.[root@localhost /]# mount /dev/cdrom   /media
    3.cd media


    正則表達式
    一种用来来描写叙述文本模式的特殊语法


    由普通字符(比如a到z 0-9)以及特殊字符(称为元字符,如.*[]^{}+?|() $等)组成
    ^a
    b$
    @.qq.com
    abcd123qwer
    *


    正則表達式特殊符号:
    ^:以字符开头 如:^a  ^abc  ^aabc
    $:以字符结尾 如:cdf$  cf$ f$
    .:匹配随意单个字符: 如:a.d 匹配:a1d aad add 
    *:前面一个字符反复出现0次/1次/多次
      如:da*cd  匹配:dcd   dacd daacd daaaacd 
    :转义字符  如:a.c
    {n}:前面单个字符连续出现n次(n=0,1,2...)
    {n,}:前面单个字符至少连续出现n次(>=n)
    {n,m}:前面单个字符连续出现次数为:n<=次数<=m
    [list]:从list集合中选择随意一个字符 a[123]c  a1c a2c a3c
    [list1-list2]:从list1-list2区间集合中选择随意一个字符 
           a[0-9]z  a0c a1c ... a9c
           a[A-Z]z  aQc aAc ... aZc
    [^list]:除开list集合中随意字符  a[^0-9]b   aab  a+b
    +:前面单个字符仅仅能出现1次  多次  a+b   ab aab aaab
    ?:前面单个字符仅仅能出现0次  1次   a?b   b   ab
    |:二选1  1a|b4  1a4  1b4
    (|):多选1      1(ab|cd|ef|23)9 1ab9  1cd 9 1ef9 1239w
    /d:数字[0-9]
    /D:非数组[^0-9]
    /w:字母[a-zA-Z]
    /W:非字母[^a-zA-Z]
    ^a[0-9]{2}[A-Z]{3,4}s$
    a23ASDs
    a23ASDFs


    abcd123qwer
    [a-zA-Z]{4}[0-9]{3}[a-zA-Z]{4}


    grep  搜索查找字符命令
    -n:输出目标字符所在行号
    -c:统计目标字符查找出现的次数
    -i:忽略大写和小写
    -a:在二进制文件查找


    [root@localhost yj]# grep  'root'  passwd
    [root@localhost yj]# grep -n 'root'  passwd
    [root@localhost yj]# grep -ni 'root'  passwd
    [root@localhost yj]# grep -n  't[ae]st'  passwd
    [root@localhost yj]# grep  -n  'ro{2,4}t'  passwd
    [root@localhost yj]# grep -n 'r[^g]o'  passwd
    [root@localhost yj]# grep -n 'r[^a-z]o' passwd
    [root@localhost yj]# grep -n 'r[^a-z0-9A-Z]o' passwd
    [root@localhost yj]# grep -n  '^$'  passwd
    [root@localhost yj]# grep -n '^r'  passwd
    [root@localhost yj]# grep -n  '^[0-9]' passwd
    [root@localhost yj]# grep -n  '^[a-zA-Z]' passwd
    [root@localhost yj]# grep -n '.$' passwd


    egrep  查找,主要是适合(+ ?

    * | (|))
    [root@localhost yj]# egrep  -n 'ro+t'  passwd
    [root@localhost yj]# egrep  -n 'ro?t'  passwd
    [root@localhost yj]# egrep  -n 'ro*t'  passwd


    练习:
    写出一个正則表達式:
     字母'm'开头后面是4个连续的随意字母后面是':'后面是3个连续的字母'a'最后是's'结尾
     [root@localhost yj]# grep -n  '^m[a-zA-Z]{4}:a{3}s$'  passwd


    awk  使用
    依据指定符号对一行数据分解成多个数据域
    数据域:数据行依据指定符号分解之后产生的子数据


    -F  符号
    awk -F ,
    awk 默认分解符号是空格


    awk 命令语法:


    awk  -F  分解符号  '命令'  数据源(文档 管道输入数据)


    特殊符号
    $0:全部数据域
    $1:第一个数据域
    $2:第二个数据域
    $3:第三个数据域


    [root@localhost yj]# awk  -F ,  '{print $4}'  awkfile 
    [root@localhost yj]# awk  -F ,  '{print $0}'  awkfile
    [root@localhost yj]# awk  -F ,  '{print $1" "$3" "$5}'  awkfile 
    [root@localhost yj]# awk  -F ,  '{print $1" "$3" "$5}'  awkfile 
    [root@localhost yj]# awk  -F ,  '{print $1,$3,$5}'  awkfile 
    [root@localhost yj]# awk '{print $1}'  awkfile 


    awk   运行命令组成部分:
    1.BEGIN
    2.数据行
    3.END


    [root@localhost yj]# awk -F , 'BEGIN{ print "adfdsfdsf"}' awkfile 
    [root@localhost yj]# awk -F , 'BEGIN{ print "name score"} {print $1" "$6}' awkfile 
    [root@localhost yj]# awk -F , 'BEGIN{ print "name score"} {print $1" "$6} END{print "total="}' awkfile 
    [root@localhost yj]# awk -F , 'BEGIN{total=0} {print $1" "$6;total=total+$6} END{print "total="total}' awkfile 
    [root@localhost yj]# awk -F ,  '{if($4=="Yellow") print $0;else print "error"}'  awkfile 
    [root@localhost yj]# awk -F , '{if($4=="green" || $4=="Green") print $0}' awkfile 
    [root@localhost yj]# awk -F , '{if($4 ~/[gG]reen/) print $0}' awkfile 
    [root@localhost yj]# awk -F , '$4~/[gG]reen/' awkfile 
    [root@localhost yj]# awk -F , '{if($4 !~/[gG]reen/) print $0}' awkfile 
    [root@localhost yj]# awk -F , '{if($6<=$7) print $0}'  awkfile 
    [root@localhost yj]# awk -F , '{if($5<=$6 && $6<=$7) print $0}'  awkfile 
    [root@localhost yj]# awk -F , '$1~/^...a/' awkfile 
    [root@localhost yj]#awk -F , '$4 ~ /Yellow|Brown/' awkfile
    [root@localhost yj]#awk -F , '$0 ~ /^J/' awkfile
    [root@localhost yj]# cat awkfile  |  awk -F , '{print $2}'
    [root@localhost yj]# echo "a,b,c,d" | awk -F , '{print $2}'
    [root@localhost yj]# echo "a,b,c:1,2,3:e,r,t" | awk -F : 'print $1" "$2" "$3}' | awk -F , '{print $2}'
    [root@localhost yj]# data=`echo "a,b,c:1,2,3:e,r,t" | awk -F :         '{print $1" "$2" "$3}' `
    //反 `` 把``中的命令运行的数据赋值给变量
    [root@localhost yj]# data=`echo "a,b,c:1,2,3:e,r,t" | awk -F : '{if($0!~/^$/) print $1" "$2" "$3}' | awk -F , '{print $2}'`


    awk内部特殊变量
    FILENAME:文件名称
    NR:行数
    NF:列数


    ARGC           命令行參数个数
    ARGV           命令行參数排列
    ENVIRON        支持队列中系统环境变量的使用
    FILENAME       awk读取的文件名称
    FNR            当前文件已处理的记录行数
    FS             设置域分隔符。相当于-F
    NF             域的列数  $NF标识最后处理域
    NR             已处理的记录总行数
    OFS            设置输出字段域分隔符
    RS/ORS         换行符


    [root@localhost yj]# awk -F , '{print NR " " NF " " FILENAME}'  awkfile
    [root@localhost yj]# awk -F , '{if(NR==3) print $0}'  awkfile 


    练习:
    1.数据/etc文件夹下全部一般文件大小总和
    [root@localhost etc]# ls -l | grep  '^-' | awk  'BEGIN{total=0} {total=total+$5} END{print total/1024}'




    sed
    sed是在缓冲区中对文档中的内容 改动 添加  删除 替换,改动的结果都不会影响到原文件,利用管道把改动的内容提交到原文件里
    sed语法
    sed  -nfi 'commad'   文件名称
    -n:仅仅输出sed改动的内容
    -f:直接改动文件里内容(非缓冲区)
    -i:直接对文件编辑


    sed经常使用的命令
    d:删除
    a:添加一行和多行
    p:打印输出
    c:替换数据行
    i:插入新行
    s:替换数据行的局部数据
    g:全部字符


    删除行
    [root@localhost yj]# sed  '1d' awkfile //删除第一行
    [root@localhost yj]# sed  '1,2d' awkfile //删除第一行到第二行
    [root@localhost yj]# sed  '$d' awkfile //删除最后一行
    [root@localhost yj]# sed '2,$d' awkfile 


    输出行
    [root@localhost yj]# sed  -n '1p' awkfile //输出第一行
    [root@localhost yj]# sed  -n '1,2p' awkfile 
    [root@localhost yj]# sed -n '$p' awkfile 


    模式查找
    root@localhost yj]# sed -n '/green/p' awkfile 
    [root@localhost yj]# sed -n '///p' awkfile 


    添加数据行
    oot@localhost yj]# sed  '1a qweqwewq213123213'  awkfile 
    [root@localhost yj]# sed  '1,2a qweqwewq213123213'  awkfile //在第一行和第二行后面分别添加一行新数据
    [root@localhost yj]# sed  '1a qweqwewq213123 21376567567'  awkfile //添加多行数据


    替代一行或多行
    [root@localhost yj]# sed '1c 3123123' awkfile 
    [root@localhost yj]# sed '1,2c 3123123 qqwqw' awkfile 


    直接编辑文件
    [root@localhost yj]# sed -i  '$a 123123' awkfile


    对一行局部数据替换
    [root@localhost yj]# sed -n  '/green/p' awkfile  | sed -i  's/green/aaaa/g' awkfile 
    [root@localhost yj]# sed -n  '/aaaa/p' awkfile  | sed -i  's/aaaa//g' awkfile 


    获取字符长度
    [root@localhost yj]# name=yj
    [root@localhost yj]# echo  ${#name}


    截取字符
    ${name:startpos:charlen}//startpos从0開始  charlen所取字符个数
    [root@localhost yj]# echo  ${name:1:4}


    shell脚本语句


    shell脚本文件


    /bin/bash:shell脚本文件解释器
    shell脚本文件特点:
    1. .sh结尾
    2.shell脚本文件能够直接运行


    #!/bin/bash//shell脚本文件解释器


    #ls -l //"#"凝视符号


    shell脚本运行:
    1.sh  shell脚本文件
    2. [root@localhost shell2]# chmod 755 sh1.sh //授予运行权限
       [root@localhost shell2]# ./sh1.sh


    shell 脚本变量定义
    变量名=值//变量名通常是小写,与环境变量区分


    输出变量值
    echo $变量名


    name=aaa
    age=20
    score=34.56
    echo '$name' //输出$name  
    echo "$age"
    echo '$s"co"re'
    echo "$n'am'e";




    age=20;变量名一般用'{}'括起
    echo "my age is ${age}ee"


    read 从输入设备读取数据给变量
    read 变量名1  变量名2//输入值是,空格区分值分配,假设变量已经分配完毕,最后全部的值赋给最后一个变量


    shell脚本參数值
    ./sh1.sh abcf 121 466
    位置參数获取值:
    $0:运行文件名称
    $1:获取第一个參数值
    $2:获取第二个參数值
    $@:获取全部的參数值
    $*:获取全部的參数值


    几个特殊符号:
    $$:获取当前进程ID(pid)
    $?:上一次命令运行成功与否(0:成功 非0:失败)


    echo 输出控制
    :换行
    :tab
    c:下一个echo不换行输出
    -e  :针对    c 特殊输出


    ``
    [root@localhost shell2]# da=`date`


    语句结构:
    a.顺序
    b.选择
      if  条件
        then  
            //满足条件运行语句
      else
            //不满足条件运行语句
      fi


       if  条件;then  
            //满足条件运行语句
       else
            //不满足条件运行语句
       fi


       if  条件;then  
            //满足条件运行语句
       elif 条件
         then        
    //满足条件运行语句
       else
          //不满足条件运行语句
       fi




    条件
    条件格式:
    1.test 比較
    2.[ 比較 ]
    比較的结果:$?


    文件測试:
    -d 測试文件是否是文件夹文件
    -f 測试文件是否存在
    -w 測试文件是否可写
    -r 測试文件是否可读
    -s 測试文件是否非空
    -L 測试文件是否是符号连接 
    -x 測试文件是否可运行


    [root@localhost shell2]# test -d aaaa
    [root@localhost shell2]# echo $?




    [root@localhost shell2]# [ -d aaaa ]
    [root@localhost shell2]# echo $?


    数字比較
    -eq:相等
    -ne:不等
    -le:小于等于
    -ge:大于等于
    -lt:小于
    -gt:大于


    字符比較
    = :相等
    !=:不等
    -z:空字符
    -n:非空字符


    -a:多个条件而且
    -o:多个条件或者




    case语句
    case语法:
    case  var  in
     value1) 运行语句;;
     value2) 运行语句;;
    esac




    [root@localhost shell2]# echo `expr $a + $b `
    [root@localhost shell2]# echo $[$a+$b]
    [root@localhost shell2]# echo $[a+b]
    [root@localhost shell2]# let 'a=1+2'
    [root@localhost shell2]# echo $a


    练习:
    case实现+-*/四则运算


    c.循环

  • 相关阅读:
    char , varchar和Nvarchar区别
    练习2-11 计算分段函数[2] (10 分)
    练习2-10 计算分段函数[1] (10 分)
    练习2-9 整数四则运算 (10 分)
    练习2-8 计算摄氏温度 (10 分)
    练习2-6 计算物体自由下落的距离 (5 分)
    练习2-4 温度转换 (5 分)
    练习2-3 输出倒三角图案 (5 分)
    MySQL之Xtrabackup备份与恢复
    MySQL中show语法
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7186422.html
Copyright © 2020-2023  润新知