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; }