linux基本命令3

命令:
1.shell 简介
    命令 :用户向内核发起的控制请求
        cd ; ls ;mkdir;rm;
    命令行解释器 用户命令与内核交互工具
        sh->csh->ksh->zsh->bash
    脚本: 
        超多命令有序地放在一个文件中,用来完成一定的功能。
    
    1.0shell执行过程:
        Step1: 用户输入shell命令
        Step2: shell去解释内核所能理解的二进制指令
        Step3: 内核响应(调用驱动代码),控制相关硬件
        Step4: 内核获取硬件的执行结果,交给shell
        Step5: Shell将内核返回的结果展示给用户。

    1.1关机命令:
        halt 关机
        reboot  重启
        shutdown -h now 关机
        shutdown -r now 重启
        shutdown -k 
        shutdown -c 
        init 0
2.命令格式与编辑
    2.1终端:
        用户名@主机名:工作目录 提示符
        whoami 
                hostname
                        pwd   
                                $普通用户
                                #超级用户
        echo $PS1
        PS1='\u@\h:\w\$'  提示符格式变量
        \u  username
        \h  hostname 
        \w  绝对路径
        \W  当前目录名
        \$  用户提示符
        PS2  用户命令未写完提示符
        
    2.2命令格式:
        ls    [option]...   [file]...
        命令  [参数]   [目标]...
                -a 短参
                --all 长参
                
        [ ]可选标志
            ls  -l  jielun  
            ls  
        ... 多参机制
            ls -la 
        ; 多个命令放在同一行输入
        \ 表示命令没有输入完整,下一行继续输入,\用来转义回车,所以\后直接回车
        
        自动补全
            Tab      
            Tab Tab 补全提示
            Esc 
            
    2.3 history  查看当前终端缓存区中的历史命令
        每一个终端都有一个历史列表缓存区,(history可查看)
        每一个用户有一个历史命令文件.bash_history
        history -c 清空缓存区列表
        history -w 保存缓存区列表到文件中
        history -r 从历史文件读到缓存区
        帮助手册有两个man  history; help history
            
        !! 执行上一条命令
        !2010 执行history中编号为2010的命令
        !-2 执行列表中倒数第二个命令
        文件列表中历史命令的个数是由 HISTSIZE决定 echo $HISTSIZE
        历史文件.bash_history的个数由HISFILESIZE决定 echo $ISTFILESIZE     (~/.bashrc)
        
        内置命令:命令的二进制文件保存在内核中(history,cd).通常的命令保存在硬盘中 /bin/ls,执行时先从硬盘读到内存再交给内核执行.
            
        当一个用户开机登录系统后执行了哪些配置文件
        /etc/profile  为所有用户配置数据,eg:自启动软件 开机就执行的指令
        /etc/bash.bashrc  为所有打开bash的用户配置shell数据
        ~/.profile  为当前用户的配置数据
        ~/.bashrc   为当前用户配置shell的数据
        
        
3.shell特殊字符
    * 任意长度的任意字符个数
        ls  file*.c 
    ? 单个任意字符
        ls file?.c  file??.c 
    [...] 指定匹配括号中的字符
        ls file[13579].c 
        ls file1[89].c  file2[012345].c 
    [-]  指定匹配括号区间中的字符
        ls file[1-9].c 
        ls file[a-z].c 
    [^...]  匹配除了括号中之外的字符
        ls file[^1357].c 
        scanf("%[^\n]", buff);
            
    
    管道 |
        command1 | command2
        左输出 | 右输入
        command1 必须有标准输出数据;comman2必须能接收输入
        command1和command2同时运行,command2会阻塞等待输入数据
        dpkg -l | less 
        ls /usr/bin/ | wc -w 
    
    重定向 
    /***************************************************
    everthing is file     一切皆文件
    standard input  标准输入  <键盘>   0
    standard output 标准输出  <显示屏>  1  缓存区满或 程序结束或 调用刷新函数fflush(stdout)
    standard err      标准出错              2  出错就立刻打印
    *****************************************************/
    > == 1>  输出重定向,会覆盖之前内容 
        echo "hello  world" > jielun 
    >> == 1>> 追加,在文件尾添加数据
        echo "hello  echo" >>jielun
    < 输入重定向
        wc < jielun 
    2> 2>> 表示错误信息定位
        ls -l naying 2> log
    &> &>> 表示正确和错误都输出到指定文件
        ls -l naying jielun &> log 
        
    比较特殊的文件            
        /dev/null  无底洞文件,数据保存进去后会消逝.
            echo "hello" &> /dev/null 正确信息和错误信息全部丢弃到/dev/null中.
            cat /dev/null  > ~/.bash_history 清空 历史命令文件.
        /dev/zero 总是能产生'\0', 
            cat /dev/zero  一直读取到'\0',能一直从zero中读取出'\0'/dev/random 产生随机数,数量有限.
        
    命令置换
        comman1  `command2`将第二个命令的输出作为前面命令的目标/参数
        ls  `pwd`   
        相当于:ls   /home/fs/Bangwanglong
    
4.基本维护命令:
    ls -R  /tree 
    less 
    grep 
    head/tail 
    sort -t: -k 4 -n 
        cat /etc/passwd | sort -t:  -k 4 -n 
        
    cut -d: -f 4 
        cat /etc/passwd  | cut -d:  -f 4 
        
        cat /etc/passwd  | sort -t: -k 3 -n | cut -d : -f3 将文件的第3列排序并输出
        
    file 查看文件信息
        file  /bin/ls 查看二进制文件ls的文件信息
        
    grep
        grep -c 匹配到的次数
        grep -i 匹配时忽略大小写
        grep -n 匹配输出时显示行号
        grep -v 反向输出.
            cat /etc/passwd   | grep 'fs'     
    终端:    
        tty: 设备终端->显示屏
        pts: 虚拟终端->Terminal
        pty: 伪终端    ->远程连接

帮助手册:
    man info  help 
        man  1   命令或程序
        man  2   系统调用函数
        man  3   库函数
        whatis  command  查看命令分类
        
    
    挂载命令:
        sudo mount  -t vfat  /dev/sdb2    /home/fs/Bangwanglong
            -t 指定U盘类型
            /dev/sdb2 指定文件的设备节点,可能是sdb3或其他。
            /home/fs/Bangwanglong 指定挂载位置,挂载成功通过此目录访问U盘
        sudo umount  /home/fs/Bangwanglong 
            卸载挂载点,成功后不可通过/home/fs/Bangwanglong访问U盘
            
            
            
    已知strcpy函数的原型是    char *strcpy(char *strDest, const char *strSrc);
strDest是目的字符串,strSrc是源串。(不调用C的字符串库函数,编写函数 strcpy
    略头文件:#include <string.h> 和 #include <stdio.h>
功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。

        char * strcpy( cahr * strDest, const char * strSrc)
        {
            if ( ( strDest == NULL) || (strSrc == NULL) ) // 检查指针的有效性
            // (( !strDest) || (strSrc)或(! ( strDest && strSrc)) (忽略了类型转换, char* 转换为bool是 隐士转换)
            // (( strDest == 0) || ( strSrc == 0)) 维护性差。
                throw “ Invalid argument(s)” ; //
            char * strDestCopy = strDest; //
            while(( *strDest++ = *strSrc++) != ‘\0’); //
                return strDestCopy;
    }
/* 
while(*srtDest ++ = *strSrc++)// 类型转换忽略
*/

/*
while(*strSrc != ‘\0’)
    *strDest++ = *strSrc++; //边界遗漏,没有在strDest字符串末尾正确加上’\0’.
*/
 
最简单的实现
char * strcpy( char *des, const char * source)
{
    char *r = des;
while( *dest ++ = *source++); //复制到NULL后,循环才停止
    return;
}

 

posted @ 2017-12-12 20:52  进心进利  阅读(430)  评论(0编辑  收藏  举报