linux之笔记_linux 0775十六進制-程序员宅基地

授课环境:
    结束程序运行: ctrl + c
    共享目录(工作目录): /kyo /Videos
        访问共享目录流程:
            是否能连通服务器    ping 3.3.3.9
            是否服务器开启共享  showmount -e 3.3.3.9
            挂载共享目录到本地:
                mount 3.3.3.9:/kyo /mnt
            复制共享目录内容到家目录:
                cp /mnt/*  ~/
            取消挂载:
                umount /mnt

    通过git获取教师课件:
        首次使用:
            echo '3.3.3.1 g.iprintf.com' >> /etc/hosts
            cd 工作目录
            git clone http://g.iprintf.com/iprintf/linux-note.git

        以后使用更新linux-note项目:
            cd 工作目录/linux-note
            git pull

开机登录用户名及密码:root/123123

桌面快捷键:
    ctrl + alt + d      返回桌面
    alt + tab           切换程序
    alt + f10           放大窗口
    alt + f9            最小化窗口
    alt + f8            调整窗口大小
    alt + f7            移动窗口
    ctrl + alt + Backspace  注销
    alt + f2            打开运行
        gnome-terminal  终端
        ktouch          打字程序
    ctrl + alt + f2 - f6   进入虚拟终端
    ctrl + alt + f1     返回图形界面
    ctrl + alt + 方向键 切换屏幕
    alt + shift
    ctrl + space        切换输入法
    alt + f4            关闭程序

终端快捷键:
    ctrl + shift + n    创建新的终端
    ctrl + shift + t    创建新的标签
    alt + 1 - 9         切换标签
    ctrl + +            放大终端字体
    ctrl + -            缩小终端字体
    ctrl + c/ctrl + d   结束程序
    shift + pageUp/pageDown  滚动终端
    ctrl + shift + w    关闭标签(或者输入exit)
    tab                 命令补全
                        两次tab列出相关命令
    ctrl + l            清屏

    终端默认为vim操作模式
        i   输入命令
        v   进入vim进行编辑批量执行程序
        j/k 调用命令历史

基本命令:
    严格区分大小写
    命令划分:
        ls /
        ls代表命令
        /代表命令参数
        命令与参数 参数与参数之间必须有空格

    reboot          重启电脑
    poweroff        关机
    init 0          关机
    init 6          重启
    exit            退出当前终端
    gnome-terminal  打开图形终端
    ktouch          打字程序
    ktouch &        后台运行打字程序

命令分类(bash shell)
    内部命令    bash自带的命令
    外部命令    独立bash的应用程序
        man cd    获取bash的所有内部命令
        type 命令名  区别命令类别
             "shell builtin" 显示代表此命令为内部命令

帮助命令
    help    获取命令简单使用信息

    man     获取命令详细帮助信息
        man 内部命令可以获取bash提供的所有命令

文件系统的目录架构:
    /       根,文件系统开始
    bin             存储可执行命令(外部命令源文件) *
    boot            启动文件        *
    dev             存储设备文件    *
    etc             存储配置文件    *
    home            用户家目录
    lib/lib64       存储库          *
    lost+found      ext日志目录(ext3/ext4)
    media           用于挂载可移动设备的目录
    misc            用于自动挂载的目录
    mnt             用于用户自定义挂载目录
    net             用于网络相关的目录
    opt             用于第三方软件安装目录
    proc/sys        用于操作系统核心程序相关目录 *
    root            root用户家目录
    sbin            存储系统管理员的命令
    selinux         selinux相关目录
    srv             服务自定义目录
    tmp             临时目录            *
    usr             用户程序相关目录
    var             系统日志目录

路径概念:
    文件系统从根开始 /
    绝对路径    从根开始的路径
    相对路径    相对当前工作路径的路径

    查看当前路径    pwd
    切换路径        cd
        cd 绝对路径
        cd 相对路径
        cd ~        切换当前用户家目录
        cd ..       切换到上一级目录
        cd -        切换到上一次的目录
    创建目录        mkdir
        mkdir 文件夹名
        mkdir 绝对路径
        mkdir 绝对路径 -p 创建目录树

    删除目录        rmdir (只能空文件夹)
        rmdir 文件夹名

    查看目录内容    ls
        ls      查看当前目录内容
        ls 绝对路径...
        ls -l       列表显示详细信息
        ls -a       显示隐藏文件
        ls -d       显示目录详细信息

文件操作命令:
    创建            touch
        touch file
            文件不存在创建文件,文件存在会更新文件的时间(最后修改时间)

    编辑            vim
        vim file    使用vim打开文件
            普通模式        默认
            编辑模式        i/ESC
            命令行模式      在普通模式下按:
            i       进入插入模式
            ESC     返回普通模式
            :wq     保存退出
            :w      保存
            :q      退出
            :q!     强制退出

    查看            cat/more/less/head/tail
        cat 文件路径    直接文件内容显示在终端
        more 文件路径   一行一行显示文件内容
        less 文件路径   按vim模式查看文件
        head 文件路径   只查看文件内容前10行
        head -n 5 文件路径 只查看文件内容前5行
        tail 文件路径   只查看文件内容后10行
        tail -n 5 文件路径 只查看文件内容后5行

    复制            cp
        cp 源文件路径 目标路径     复制文件
        cp 源文件路径 目标路径 -r  复制目录

    剪切/重命名     mv
        mv 源文件路径 目标路径
        mv 源文件名 新文件名

    删除            rm
        rm 文件路径
        rm 文件路径 -f      强制删除不会提示
        rm 文件路径 -rf     强制删除目录

    重定向
        标准输入        0
        标准输出        1
        错误输出        2

        >       标准输出重定向, 清空原文件内容
        1>      标准输出重定向, 清空原文件内容
        2>      错误输出重定向, 清空原文件内容
        &>      所有输出重定向, 清空原文件内容

        >>       标准输出重定向,追加原文件
        1>>      标准输出重定向, 追加原文件
        2>>      错误输出重定向, 追加原文件
        &>>      所有输出重定向, 追加原文件

        <       标准输入重定向, 覆盖
        <<      标准输入重定向,追加

    管道 |
        |前命令的标准输出作为|后命令的标准输入

        取文件中第7行内容:
            head -n 7 file.txt | tail -n 1

VIM操作:
    三种模式:
        普通模式        默认 接受命令进行操作
            可视模式    v
        编辑模式
            插入模式    i
            替换模式    R
            返回普通    ESC
        命令行模式      在普通模式下输入:

        普通模式的命令:
            j           将光标往下移动一行
            k           将光标往上移动一行
            l           将光标往右移动一格
            h           将光标往左移动一格
            G           将光标移动到最后一行
            gg          将光标移动到第一行
            v           进入可视模式
            V           进入行可视模式
                y           复制选取一段
                p           粘贴
                x           删除选取一段
            x           删除一个字符
            i           在当前光标位置前进入插入模式
            a           在当前光标位置后进入插入模式
            I           在当前光标行首进入插入模式
            A           在当前光标行尾进入插入模式

            普通模式先输入数字再输入命令代表重复此数字的命令
            10j         将光标往下移动10行
            100x        删除100个字符

        命令行模式的命令
            :w          保存
            :q          退出
            :x          保存退出
            :144        将光标移动到144行

        分屏编辑
            垂直分屏
                vim file1 file2 -O
            水平分屏
                vim file1 file2 -o
            切换屏幕
                ctrl + w + w
                ctrl + w + j/k/l/h
            编辑时垂直分屏显示其它文件
                :vsp 文件路径
            编辑时水平分屏显示其它文件
                :sp  文件路径
            退出所有文档
                :qall
            运行shell命令
                :! ls
            运行shell命令将运行结果插入文档
                :r! ls

        进入vim帮助
            :h
            进入链接文档: ctrl + ]
            返回链接文档: ctrl + t

            vim初步教程命令: vimtutor


用户管理
    每个用户都有一个唯一用户ID(大于等于零的整型数)
        二进制      0-1
        十进制      0-9
        八进制      0-7
        十六进制    0-9 a-f
    超级管理员用户  root    0
    系统用户        1 - 500
    普通用户        501 - 65535

    查看当前登录用户的ID:id

    切换用户: su
        不完全切换: su kyo
        完全切换: su - kyo

    Linux特点: 一切皆于文件

    用户信息配置文件:
        /etc/passwd
            root:x:0:0:root:/root:/bin/bash
            第一个字段: 用户名
            第二个字段: 早期密码字段
            第三个字段: 用户ID(UID)
            第四个字段: 所属组的ID(GID)
            第五个字段: 描述
            第六个字段: 用户家目录
            第七个字段: 登录运行程序(SHELL)

    用户密码配置文件:
        /etc/shadow

    用户组配置文件:
        /etc/group
            root:x:0:
            第一个字段: 组名
            第二个字段: 用户组密码
            第三个字段: 组ID
            第四个字段: 组成员列表

    用户组密码配置文件:
        /etc/gshadow

    对用户操作的命令:
        useradd     添加用户
        userdel     删除用户
        passwd      修改密码

    手动创建用户:
        vim /etc/passwd
            kyo:x:500:500:kyo:/home/kyo:/bin/bash
        vim /etc/group
            kyo:x:500:
        vim /etc/shadow
            grub-md5-crypt  生成密码
            kyo:$1$qK.xw$YmywT0cXEqF49C5TKTqOc/:17036:0:99999:7:::
        vim /etc/gshadow
            kyo:!::
        mkdir /home/kyo
        cp /etc/skel/.bash* /home/kyo/
        chown kyo:kyo /home/kyo -R
        chown 700 /home/kyo -R

===================================================

权限
    ls -l /etc/passwd
-rw-r--r-- 1 root root 1618 8月  25 14:39 /etc/passwd
    第一段代表文件类型和权限
    第二段代表硬链接数
    第三段代表文件所属用户
    第四段代表文件所属用户组
    第五段代表文件大小  字节
            1G = 1024M
            1M = 1024K
            1K = 1024字节
    第六段代表文件最后修改时间
    第七段代表文件名

    -rw-r--r--  文件类型和权限
    -           文件类型
        -       普通文件
        d       文件夹
        l       软链接
        c       字符设备文件
        b       块设备文件
        p       管道文件
        s       套接字文件

    rw-r--r--   文件权限
        分成三段:
            rw-     所属用户对此文件的操作权限(u)
            r--     所属用户组对此文件的操作权限(g)
            r--     其它用户对此文件的操作权限(o)

            r       读
                针对文件, 是否能对此文件进行读取内容
                针对目录, 是否能ls列出目录内容
            w       写
                针对文件,是否能对此文件进行修改
                针对目录,是否能在此目录里创建文件或子目录
            x       执行
                针对文件,可执行文件没有x权限是不能运行
                针对目录,是否能切换进目录(cd)

    设置的权限对超级管理员用户没有意义

    修改权限:chmod
        chmod u=r-x,g=r-x,o=r-- file
        chmod u+x,g+w,o-w file
        chmod 0755 file
        chmod u=r-x,g=r-x,o=r-- 目录路径 -R

        ---    000      0
        --x    001      1
        -w-    010      2
        -wx    011      3
        r--    100      4
        r-x    101      5
        rw-    110      6
        rwx    111      7

    修改文件所属用户: chown
        chown 用户名:组名 文件路径
        chown 用户名:组名 目录路径 -R

    权限掩码:umask
        打印当前权限掩码: umask

        修改当前权限掩码: umask 新的权限掩码

        创建文件的默认权限:
            普通文件:0666  rw-rw-rw-
            目录:    0777  rwxrwxrwx

        实际文件权限默认权限减去权限掩码
            权限掩码为: 0002
                普通文件: 0664
                目录:    0775

linux系统管理习惯:
    强制普通用户登录
    如何将普通用户加入到sudoers文件,使普通用户能使用系统管理员命令(用法: 在命令前加sudo )
        首先切换root用户,visudo
            自动打开文件编辑,找到root  ALL=(ALL) ALL并且复制修改用户名为普通用户即可

特权位
    默认执行命令,命令的运行权限是当前登录用户
    有了特权位的命令,运行权限是命令的所属用户
    chmod u+s 可执行文件
    chmod g+s 可执行文件

    ls -l列表显示用户权限有s, 小写s代表文件有执行权限,大写s代表文件没有执行权限

    例:切换用户要验证密码,但/etc/shadow没有任何权限(不能给权限,否则任何用户都可以去修改别人密码)
        把su命令所属用户设置为root并且设置用户特权位,让su运行权限为root

粘贴位 让用户不能操作其它用户的东西
    应用场景:目录具备所有权限,可以让任何用户操作此目录, 但用户创建的文件不能被其它用户操作(编辑/删除)
    只能针对目录的其它用户权限(o)
    chmod o+t 目录路径

===================================================
网络基本配置
    ping        检查与其它主机是否连通
    ifconfig    查看/配置网卡信息
        ifconfig    列出所有网卡信息
            lo      回环网卡,代表本机本身
            eth0    第一张有线网卡
            wlan0   第一张无线网卡
        ifconfig eth0   获取指定网卡信息

    ifdown eth0     关闭网卡
    ifup  eth0      开启网卡

    dhclient    自动获取IP地址
        dhclient eth0   让eth0网卡自动获取IP地址
                        自动获取过再获取需要重启网络

    mii-tool    检查网卡网线是否连通
        mii-tool eth0

    手动设置IP地址:
        临时:
            ifconfig eth0 3.3.3.199 netmask 255.255.255.0

        永久:
            eth0网卡的配置文件
            vim /etc/sysconfig/network-script/ifcfg-eth0
            DEVICE="eth0"             #网卡设备名
            BOOTPROTO="static"        #代表静态IP
            BOOTPROTO="dhcp"          #代表动态IP
            HWADDR="68:B5:99:F1:FB:4D" #代表网卡硬件地址
            ONBOOT="yes"            #代表网卡是否开机启动
            TYPE="Ethernet"         #代表网卡类型 以太网
            IPADDR=3.3.3.9          #代表网卡IP地址
            NETMASK=255.255.255.0   #代表网卡子网掩码
            GATEWAY=3.3.3.1         #网关

        重启电脑或重启网络才能生效
        service network restart

    hostname    主机名(尽量使用域名格式)
        临时修改主机名: hostname 新主机名
        永久修改主机名: vim /etc/sysconfig/network
            NETWORKING=yes
            HOSTNAME=新的主机名(域名形式)

        域名或主机名的本地解析文件: vim /etc/hosts
            格式:ip地址 域名或主机名
            ::1     主机名(代表图形界面, 如果图形界面慢,检查::1对应的主机名是否正确)

    域名解析配置文件: vim /etc/resolv.conf
        nameserver 223.5.5.5
        nameserver 223.6.6.6
        nameserver 8.8.8.8

    网络排错:
        第一步: 检查网线 mii-tool eth0
        第二步: 检查IP地址 ifconfig eth0
            本机IP不通(网卡出错, 操作系统的TCP/IP协议栈错误, 多张网卡设置同网段IP)
        第三步: 检查与网关是否连通 ping 网关(3.3.3.1)
        第四步: 检查外网是否连通 ping 223.5.5.5(阿里云域名解析服务器(DNS))
            提示: connect: 网络不可达(网关问题)
                route -n    检查是否设置网关
                route add default gw 3.3.3.1(网关地址)

        第五步: 检查域名解析是否正常 ping www.baidu.com
            提示:unknown host(没有添加DNS)
                vim /etc/resolv.conf
                    nameserver 223.5.5.5

作业:
    1. 将主机设置静态IP地址
    2. 手动创建一个用户
    3. vimtutor看完

定时任务: crontab

    ubuntu: service cron status
    centos: service crond status

    编辑当前用户的定时任务: crontab -e
    当出当前用户的定时任务: crontab -l
    当出指定用户的定时任务: crontab -l -u root
    删除当前用户的所有定时任务: crontab -r
    删除当前用户的所有定时任务(提示是否删除): crontab -i


    设定全局配置文件: /etc/crontab
        分钟 小时 日 月 星期 执行用户 执行命令
         *    *   *  *   *    root     echo "hello" > /dev/pts/24

         *      代表每分钟、每小时、每日、每月、每星期
         ,      分隔时间  19,24 * * * *  每小时的19和24执行
         -      时间段    19-24 * * * *  每小时的19分到24之间每分钟都执行
         /n     每隔n个单位  */2 * * * * 每小时的每两分钟去执行

        星期与日期是或的关系
        */30 */2 15 6 7

======================================================================
ssh远程管理:
    服务器必须开启sshd服务
        ubuntu: apt install openssh-server
        centos: yum install sshd

    ssh         sshd的客户端
        ssh [email protected]       远程使用you用户登录3.3.3.135

        远程登录的前提:
            知道远程管理电脑的IP
            知道远程管理电脑的用户名及密码
            远程管理电脑必须开启sshd服务
            远程管理电脑的端口号(默认为22)

    为了提高安全: 使用证书登录
        生成证书(公钥/私钥)
            公钥可以给任何人,使用公钥必须使用私钥进行解密
            ssh-keygen  默认生成在家目录的.ssh目录下 也可以指定私钥密码(默认为空密码)
        把公钥复制到服务器上
            scp id_rsa.pub 3.3.3.135:~

        登录3.3.3.135机执行下面命令:
            mkdir -p ~/.ssh
            cat ~/.id_rsa.pub >> ~/.ssh/authorized_keys
            chmod 400 ~/.ssh/authorized_keys

    ssh安全设置:
        sshd服务的配置文件 /etc/ssh/sshd_config
            1. 改变端口号
                Port 22(将22改成自定义端口)
            2. 不允许root登录
                PermitRootLogin no
            3. 只允许证书登录,不允许密码登录
                PasswordAuthentication no

        重启sshd服务才能生效: service sshd restart

    ssh工具格式:ssh 用户名@IP地址 -p 端口号 -i 私钥路径

    ssh config配置:简化ssh登录操作
        vim ~/.ssh/config
            Host 135        主机自定义名
                HostName 3.3.3.135      主机IP或域名
                Port 9999               主机端口号
                User you                登录用户名
                PubKeyAuthentication yes    证书登录
                IdentityFile /kyo/135.key   私钥路径

        输入: ssh 135 就可以登录3.3.3.135

-----------------------------------------------------------------------------
git工具     版本控制工具(svn) 代码 团队开发协作工具
    github  开源中国osc

集中管理    项目代码放在服务嚣 大家与服务嚣
    从服务嚣上更新代码下来
    进入代码编辑
    提交修改到服务嚣(如果发现服务器有更新必须先更新代码合并代码再提交)

    不能离线工作

分布式管理
    服务器只是作为中转站
        服务器上项目是只一份拷贝,所有开发人员都对此项目有一份拷贝
    独立工作,不依赖服务嚣
    也可以使用集中管理模式来开发

日志查询
版本切换无成本
分支功能 基本上无成本

官网: git-scm.com
git官方中文文档:http://g.iprintf.com

git基本配置:
    /etc/gitconfig      系统全局配置 git config --system
    ~/.gitconfig        当前用户的配置 git config --global
    当前仓库目录.git/config

    一般针对当前用户配置:
        配置仓库提交者及email
            git config --global user.name "kyo"
            git config --global user.email "[email protected]"

        配置git使用的文本编辑器
            git config --global core.editor vim

    列出当前仓库使用配置:
        git config --list

    列出当前仓库某个配置的值:
        git config user.name

    创建git命令别名:
        git config --global alias.c config
        git config --global alias.c 'config core.editor'

    获取配置帮助信息:
        git config --help
        git help config
        man git config

git的基本操作:
    仓库创建: git init
        在创建仓库目录下运行: git init

    仓库克隆: git clone
        默认在当前目录下创建远程仓库名
        git clone file:///opt/git-srv

        克隆远程仓库到当前指目录
        git clone file:///opt/git-srv mygitname

    仓库状态:git status
        工作目录    当前工作目录
        暂存区      git add
        仓库        git commit

    将文件添加至仓库:git add
        添加当前仓库所有未暂存的文件, 不包括隐藏文件
        git add *

        忽略文件 在当前仓库路径创建.gitignore
            vim .gitignore
                fa.wmv

    移除操作: git rm
        git rm -f   强制删除
        git rm -r   删除目录
        git rm --cached 从暂存区删除

    移动:git mv
        git mv old_name new_name

    提交修改: git commit
        git commit -m "编写提交说明"

        弹出vim编写提交历史: git commit
            第一行为标题,第二为空行,第三行后为详细说明

        修改最后一次提交
            git commit --amend

    查看差异: git diff
        对比最后一次提交与本此工作目录的差异

    查看提交历史:git log
        git log -p  查看每次提交的内容差异
        git log -2  查看最近两次提交
        git log --oneline  简约一行显示提交历史
        git log --grep add  查看有关键词add的提交历史

        单行显示历史并且显示所有分支信息(图形显示分支结构)
        git log --oneline --decorate -all -graph

    远程仓库:
        列出远程仓库
            git remote
        列出远程仓库的url
            git remote -v
        添加远程仓库
            git remote add 远程仓库名 仓库地址
        拉取远程仓库数据 (不会合并分支)
            git fetch 远程仓库名
            git merge 远程仓库名/远程仓库分支名
        拉取并合并远程仓库数据
            git pull 远程仓库
        推送当前分支到服务器
            git push 远程仓库名 推送分支
        修改远程仓库地址
            git remote set-url 远程仓库名 新的远程仓库地址
        删除远程仓库
            git remote rm 远程仓库名

        服务嚣搭建git仓库:
            服务器:
                添加git用户,修改git用户家目录为git仓库根目录,修改git的bash为git-shell
                在git用户家目录创建一新文件夹(git-srv)并且切换进目录
                git init --bare

            客户端:
                添加远程仓库
                    git remote add iprintf [email protected]:/git/git-srv
                    git pull iprintf

    标签 tag
        列出仓库标签
            git tag
        创建标签
            git tag 标签名
            git tag -a 标签名 -m "标签说明"
        查看标签详细信息
            git show 标签名
        删除标签
            git tag -d 标签名

        指定commit设置标签
            git tag -a 标签名 commit标识

        检出标签
            git checkout -b 新分支名 标签名

    分支 branch
        列出分支
            git branch

        列出分支对应提交
            git branch -v

        创建分支
            git branch 分支名

            创建分支并且切换分支
                git checkout -b 分支名
        切换分支
            git checkout 分支名

        删除分支
            git branch -d 分支名

        合并分支
            git merge 合并的分支

    重置 reset
        暂存区      --mixed 默认
        索引区      --soft
        工作目录    --hard  真正会改变实际文件,慎用

        操作历史:reflog
            git reflog

        git reset commit --hard

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

安装chromium浏览器:
    apt install chromium-browser
    cd ~
    git clone http://g.iprintf.com/iprintf/vimium.git
    chromium-browser &

    打开设置 -> 扩展 -> 开发者模式 -> 加载选择家目录下载的vimium
    ?   获取帮助


Shell脚本开发:
    SHELL   一种软件的统称,当前系统使用bash Shell
    Bash Shell的特点:
        tab键命令补全
        命令历史(执行命令历史)
        命令别名
        bashrc配置文件
        Bash Shell脚本

脚本编程语言:
    变量        方便替换
    流程控制    分支结构/循环结构
    函数        代码打包
    数组        扩展变量

学习编程流程:
    找语言编程入口 打印hello world
    变量的定义 - 数据类型 - 运算符
    流程控制(if/case/for/while)
    函数
    数组


脚本对应一个普通文件,可以通过解析器来执行
Bash Shell的解析器:/bin/bash

Bash Shell脚本文件的格式:
    第一行指定脚本的解析嚣路径
    #!/bin/bash
    一行一个命令顺序向下编写与执行
    通过;将多条命令隔开写在一行中

Bash Shell变量:
    变量命令规则:
        大小写严格区分
        数字与字母组合但不能以数字开头
        可以和特殊字符组合(只推荐使用下划线), 可以以特殊字符开头

    变量的类型:字符串类型

    变量的定义: 变量名=变量值
    变量的访问: $变量名 / ${变量名}
    变量的删除: unset 变量名

    变量定义等于号两边不能有空格

    环境变量(bash获取操作系统的信息保存到环境变量中)
        env     列出所有环境变量
            PS1     控制命令提示符
                \u  当前登录用户名
                \h  当前主机名
                \w  当前路径
                \W  当前目录名

            PATH    控制所有命令的路径, 不用输入命令的全路径

        新建环境变量: export 环境变量名=环境变量值


    普通变量与环境变量的区别:
        环境变量会影响子进程,普通变量不会影响子进程
        子进程会复制父进程的环境变量, 子进程对环境变量修改不会影响父进程
        bash shell脚本是开启一个新进程运行
        通过.或source命令去执行脚本是在当前进程执行

变量的特殊访问方法:
    ${变量名}               输出变量值
    ${变量名#*分隔符}       输出变量值中第一个分隔符后面的内容
    ${变量名##*分隔符}      输出变量值中最后一个分隔符后面的内容
    ${变量名%分隔符*}       输出变量值中最后一个分隔符前面的内容
    ${变量名%%分隔符*}      输出变量值中第一个分隔符前面的内容
    ${变量名:起始数:个数}   输出变量值从起始数开始指定个数字符
    ${变量名/指定/替换}     输出变量值将指定第一个关键词替换
    ${变量名//指定/替换}    输出变量值将指定全部关键词替换
    ${#变量名}              输出变量值的长度

练习: 编写脚本获取当前有线网卡的IP地址

Bash Shell的特殊字符:
    *               通配符 代表所有
    !               执行命令历史
    .               代表当前路径
    ..              代表上一级目录
    :               永真
    -               在外部命令后代表短参数
    &               在后台运行程序, 程序后加&
    $               访问变量
    #               注释, 在命令前加不会执行此命令
    /               根目录
    ~               家目录
    |               管道
    >               重定向
    >>              追加
    =               变量赋值
    ;               命令结束符
    \               脱义单个字符
    ""              不完全的批量脱义 $不脱义
    ''              完全的批量脱义
    ``              将引起来内容当作命令去执行,将命令执行的结果替换
    []              条件判断
    {}              范围 {1..10}代表1到10的数字 {a..z}代表a到z字母
    $()             功能与反引号一样,替代反引号

Bash Shell的内置变量:
    $0              代表脚本名称
    $1...$n         代表脚本的参数
    $#              保存脚本的参数个数
    $@/$*           保存脚本的所有参数
    $$              保存当前脚本的PID
    $?              输出上一条命令运行是否正确(0代表正确,非0代表错误)

Bash Shell的输入输出:
    输出        echo/printf
    输入        read
        -p      指定输入提示语句
        -s      关闭回显, 输入不显示
        -n      指定输入字符个数
        -t      指定输入的时间(秒)

    cat如果没有跟文件会读标准输入
    重定向cat到文件即标准输入重定向到文件
    脚本中生成其它文件:
        cat > yum.repo << EOF
        [kyo]
        name=kyo
        baseurl=http://3.3.3.1/centos1
                http://3.3.3.1/centos2
        enabled=1
        gpgcheck=0
        EOF

    双向重定向: tee
        标准输出和文件两向输出
        将ls -l的标准输出重定向到test文件中并且输出到终�
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/fxy832231/article/details/59073992

智能推荐

linux c 读写mbr_Linux系统启动那点事-程序员宅基地

文章浏览阅读66次。一图流理解:Linux系统启动过程中都经历了什么?将主要过程提取出来,接下来我们将按顺序分析每个条目每一级引导都是查找并执行下一级动作BIOS自检 检测硬件故障;选择磁盘驱动器读取MBR主引导记录(Master Boot Record)读取GRUB菜单选择启动哪个操作系统/内核启动内核初始化设备运行 init初始化操作系统运行其它程序启动完成一.MBR主引导记录,一般是磁盘的第一个扇区,编号..._c 如何读mbr

Bishop 模式识别与机器学习读书笔记_ch3.3 广义线性回归模型_bishop书后习题-程序员宅基地

文章浏览阅读412次。广义线性回归及正则化方法_bishop书后习题

【eclipse技巧】:AmaterasUML工具使用、eclipse保存自动格式化设置、代码自动补全提示设置-程序员宅基地

文章浏览阅读2.2k次,点赞3次,收藏17次。【eclipse技巧】:AmaterasUML工具使用、eclipse保存自动格式化设置、代码自动补全提示设置_amaterasuml

Python大数据之PySpark(四)SparkBase&Core-程序员宅基地

文章浏览阅读1.3k次,点赞2次,收藏13次。executor-memory 默认1G,Memory per executor (e.g. 1000M, 2G) (Default: 1G) ,每个executour的内存。–executor-memory 默认1G,Memory per executor (e.g. 1000M, 2G) (Default: 1G) ,每个executour的内存。Yarn的回顾:Driver------AppMaster------RM-----NodeManager—Continer----Task。_pyspark

scrapy_当你准备启动一个项目时,可以从这个教程开始-程序员宅基地

文章浏览阅读446次。scrapyScrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。_当你准备启动一个项目时,可以从这个教程开始

树莓派中SIM7600G-H 4G DONGLE模块使用记录(二)使用花生壳服务器实现数据的远程传输_树莓派有sim卡模块吗-程序员宅基地

文章浏览阅读4.7k次,点赞11次,收藏18次。项目场景:在之前对树莓派进行PPP拨号上网/4G上网后,需要对树莓派中采集到的数据远程上传,并能接收云端软件下达的指令。然而在实现过程中,我们并不能够直接通过ITCP/IP通信实现数据的远程传输,还需要一个服务器作为中间桥梁,将云端主机的IP端口映射在全网上,这样树莓派才能通过映射后的IP地址与云端主机建立连接,实现数据的远程传输。花生壳花生壳是一款能够免费进行内网穿透与端口映射的服务器工具,可以在官网上直接搜索无需配置。支持多种通信格式,这里我们使用TCP通信类型。网络调试助手由于项目主体_树莓派有sim卡模块吗

随便推点

【前端】搭建Vue3框架_前端框架vue如何搭建-程序员宅基地

文章浏览阅读8.8k次,点赞5次,收藏15次。搭建Vue3框架_前端框架vue如何搭建

汉诺塔(Tower of Hanoi)--------递归思路_汉诺塔递归-程序员宅基地

文章浏览阅读4.7k次,点赞23次,收藏77次。汉诺塔问题的递归思路:将 n 个圆盘分为 n-1 (即除最低层的圆盘)与 1 (即最底层的圆盘),将n-1个圆盘移动到中转位置,将1移动到目的位置,再将 n-1 分为 (n-1)- 1与 1,将(n-1)- 1 移动到中转位置,将1移动到目的位置_汉诺塔递归

蓝牙AOA高精度定位_aoa 定位算法 java-程序员宅基地

文章浏览阅读8.3k次,点赞4次,收藏58次。01—蓝牙AOA定位技术原理2019 年初,蓝牙技大联盟宣布蓝牙 5.1 引入了新的“寻向”功能,这个功能可检测蓝牙信号的方向,将大幅提高蓝牙定位的精确度,提供更好的位置服务, 结束了以往..._aoa 定位算法 java

CSDN头版头条 《近匠》 Wijmo 5 CTO:从Web到移动,我的25年编程生涯-程序员宅基地

文章浏览阅读2.5k次。《近匠》第64期,Wijmo 5是由GrapeCity旗下ComponentOne公司开发的新一代HTML5/JavaScript控件库。本期近匠采访了Wijmo 5 CTO Bernardo Castilho先生,听他讲述从Web到移动的25年编程生涯,以及Wijmo 5的开发故事。

几行代码轻松实现,Tensorlayer 2.0推出深度强化学习基准库_tensorlayer 2.0+-程序员宅基地

文章浏览阅读494次。2019-11-11 16:37:04机器之心发布机器之心编辑部强化学习通过使用奖励函数对智能体的策略进行优化,深度强化学习则将深度神经网络应用于强化学习算法。深度强化学习由于其可扩展性,受到科研界和工业界越来越多的关注,其应用包括简单的基于图像的游戏,和高度复杂的游戏如星际争霸,以及棋牌类游戏如围棋、德州扑克等,在机器人控制领域也逐渐被科研人员采用。近日,为了让工业界能更好地..._tensorlayer 2.0+

vivado中各个文件的含义_vivado 文件集-程序员宅基地

文章浏览阅读5.6k次,点赞4次,收藏31次。大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。今天给大侠带来了Xilinx vivado中各个文件的含义,话不多说,上货。在Xilinx ISE中不同的操作都有不同的文件类型对应,例如综合、布局、布线、生成比特流等都会产生特定格式的文件,在vivado中也是一样,只不过在vivado中,文件的格式相比于ISE中更加统一。1,.dcp文件,在ise中每个过程都会产生特定格式.._vivado 文件集

推荐文章

热门文章

相关标签