导图社区 认识shell
shell 中文是贝壳 保护内核 用户与内核的交互!
编辑于2019-10-11 05:59:11shell
Bourne Again Shell(简称bash) 它包括了早期的Bourne Shell和Korn Shell的原始功能,以及某些C Shell脚本语言的特性。此外,它还具有以下特点:能够提供环境变量以配置用户Shell环境,支持历史记录,内置算术功能,支持通配符表达式,将常用命令内置简化。类别
shell
1.用户命令解析为操作系统所能理解的指令 2.用户与内核的交互! 3.直接用来管理和运行系统
1.贝壳,保护内核
2.翻译官(命令行解释器)
shell脚本
当需要重复执行若干命令,可以将这些命令集合起来,加入一定的控制语句,编辑成为Shell脚本文件,交给Shell批量执行。
shell命令
用户向系统内核发出控制请求,与之交互的文本流
体验Shell命令的乐趣
1.sudo shutdown -h now 系统立刻关机 2.sudo shutdown -r now 系统立刻重启 3.sudo reboot now 系统立刻重启 4.sudo shutdown -h +45 45min后关机 5.sudo shutdown -r +60 60min后关机
shell基本的命令格式
命令提示符: username@hostname:direction$ 用户名 主机名 目录名 命令格式: $ Command [-Options] Argument1 Argument2 … 指令 选项 参数1 参数2… 注意事项: a.一条命令的三要素之间用空格隔开; b.若将多个命令在一行书写,用分号(;)将各命令隔开; c.如果一条命令不能在一行写完,在行尾使用反斜杠(\)标明该条命令未结束。
命令行编辑
命令行编辑: ctrl+A 行首 ctrl+E 行尾 Ctrl+L 清屏 清除屏幕,并在屏幕顶端留下一行 Ctrl+K 剪切行尾 剪切文到该行末尾 Ctrl+U 剪切行首 剪切文到该行开头 Ctrl+C 删除整行 删除一整行,中止当前命令
命令行操作
补齐命令与文件名
TAB 连续按两下TAB
查询命令历史
按“∧”键,便可逐条向上追溯曾经使用过的命令,并显示在命令提示符处;按“∨”键,便可向下查询命令历史。 除了使用上下键,可以翻阅历史命令外,Bash Shell还提供了history命令。该命令将命令历史表按列表形式,从记录号1开始,一次性全部显示出来。 wdl@UbuntuFisher:~$ echo $HISTSIZE #显示历史命令容量 500 wdl@UbuntuFisher:~$ HISTSIZE=1000 #修改历史命令容量 wdl@UbuntuFisher:~$ echo $HISTSIZE 1000 查询历史命令; 上下箭头 history history n HISTSIZE history history 10 echo $HISTSIZE HISTSIZE=100 临时修改 echo $HISTSIZE history sudo vi ~/.bashrc 永久修改 source ~/.bashrc
定义命令别名
alias newname=‘oldname’ alias qwe='ls' 不用加sudo 临时修改 永久修改:vi ~/.bashrc source ~/.bashrc
Shell中的特殊字符
通配符
星号(*) 匹配任意长度的字符串 问号(?) 匹配一个长度的字符 方括号([…]) 匹配其中指定的一个字符(范围内) 方括号([ - ])匹配指定的一个字符范围 方括号([^…]) 除了其中指定的字符,均可匹配 注意: ? 只删除一个字符 [] 只删除一个字符
管道
管道符号:| wdl@UbuntuFisher:~$ ls /usr/bin | wc –w 1249 ls命令用于查看/usr/bin目录下的文件,“wc –w”命令用于统计指定文件的单词数。以上操作中,借助管道“|”,将ls的输出直接作为wc命令的输入。使用以上的命令组合,得到的是/usr/bin目录下文件的个数。
输入/输出重定向
1.默认:cd /dev 标准输入 stdin 键盘 0 标准输出 stdout 屏幕—终端窗口 1 标准出错 stderr 屏幕—终端窗口 2 属于硬件 linux下一切皆文件 控制硬件 操作文件 文件I/O 2.重定向:>>从键盘获取输出到文件 3.怎么实现?> 输出 <输入 >file ls > test 输出重定向(会覆盖) >>file ls >> test 输出重定向(追加) <file wc -w < test 输入重定向 2>file 或 &>file 出错重定向
命令置换
一个命令的输出作为另一个命令的参数 反引号`` cxk@mate20:~/myself$ echo ls ls cxk@mate20:~/myself$ echo `ls` 10.c 11.c 3.c a.c err test
man 查看帮助文档
man man 1 Executable programs or shell commands 可执行程序或shell命令 man 1 ls 2 System calls (functions provided by the kernel) 系统调用:系统提供的相关函数 man 2 socket 3 Library calls (functions within program libraries) 库调用:标准C库提供的函数 man 3 printf 在文件中直接跳到man文档:shift + k n shift+k
基本系统维护命令
passwd
passwd: 新的ubuntu先设置root密码:sudo passwd root 在普通用户下: passwd:修改当前用户密码,但只能往复杂修改。 sudo passwd:修改超级用户密码 在root用户下: passwd:修改root用户密码 passwd 用户名:修改某个用户密码
su命令
su 切换用户 变更为其他用户的身份 普通转超级 su - root 并输入超级用户的密码
mount 挂载分区
1、找到设备名称 sdb6 默认在 /media下的一个子目录下 IDE硬盘: hd*x SCSI和SATA硬盘:sd*x *:a b c 分别表示第一块、第二块...硬盘 x:1 2 3 分别表示硬盘的第一个、第二个...分区 2、设置挂载点 mkdir usb 3、挂载U盘与卸载文件系统 sudo mount /dev/sdb1 ~/usb sudo umount ~/usb
磁盘相关命令
使用fdisk必须拥有root权限 fdisk -l 查看硬盘分区情况以及对磁盘进行分区管理 1.df 命令 常用参数: -a :列出所有文件系统 -b :列出总的空闲空间(KB) -e :仅列出空闲的文件数 -k :列出磁盘的分配情况(KB) -h :同-k, 但大小以G、M,K单位显示 df -h 兆字节显示 -l :仅列出本地文件系统 例: #df -a 2.du命令,列出目录和文件所使用的磁盘块数,每块占512个字节。 常用参数: -a :仅列出空闲的文件数 -k :列出磁盘的使用情况(KB) -s :列出总的空闲空间(KB) 例: #du –k #du -as
其他
date clear
用户管理
Linux系统是多用户多任务的操作系统
用户的属性
用户清单文件:vi /etc/passwd root :x :0 :0: root: /root: /bin/bash 用户名 口令 用户ID 用户组id 相关信息 用户主目录 用户shell 用户ID为0表示 这个账号是系统管理员 默认用户家目录 /home/用户名
密码存放路径
/etc/shadow 加密的用户清单 使用passwd命令可以修改用户口令 root用户可以修改任何用户的口令 语法:passwd [-k] [-l] [u] [-f] [-d] [-S] username 使用方法: passwd username
组的作用
用户组是具有相同特征的用户的集合体。 /etc/group delgroup 语法: delgroup groupname 使用方法: delgroup groupname1
创建用户
添加用户:adduser user1 给用户添加临时管理员权限:sudo vi /etc/sudoers 补充: /etc/skel目录是被 /usr/sbin/useradd使用 把想要新用户拥有的配置文件拷贝到/etc/skel目录,常用的文件: .bash_profile .bashrc .bash_logout dircolors .inputrc .vimrc
删除用户
deluser --remove-home user1 删除用户user1的同时删除用户的工作目录
进程管理
进程与程序: 程序时静态的,是指令的集合; 进程是程序的一次执行过程,是动态的。 补充: 1.进程调度 所有进程都是既运行于用户方式下,又运行于系统方式下 进程每次调用一个系统调用时,都要从用户方式切换到系统方式,并继续执行 在Linux系统中,进程没有绝对的优先权,一个进程不能停止另一个正在运行的进程以便运行它自己 Linux系统使用一个基于调度算法的简单权限来决定运行哪个进程。 2.调度优先级 进程的“谦让度”可以作为向内核的数字暗示,通过它来表明一个进程在同其他进程竞争CPU时应如何对待它。 谦让值范围:-20~19 低谦让值表示进程具有高优先级 a.Nice 用于可以改变程序执行的优先权等级 语法: nice [-n <优先等级>][--help][--version][执行指令] 将ls的优先序加1并执行: nice -n 1 ls b.Renice 改变优先级可以通知系统给某个进程更多或者更少的CPU时间。 语法: renice increment [-g | -p | -u] ID -g <程序群组名称> 使用程序群组名称,修改所有隶属于该程序群组的程序的优先权。 -p <程序识别码> 改变该程序的优先权等级,此参数为预设值。 -u <用户名称> 指定用户名称,修改所有隶属于该用户的程序的优先权。 减小httpd进程125的优先级,运行下面的命令: renice 10 125
ps
显示进程 (process) 的动态
ps指令
语法: ps [options] 常见的参数: -A 列出所有的行程 -w 显示加宽可以显示较多的资讯 -au 显示较详细的资讯 -aux 显示所有包含其他使用者的行程 1.ps PID TTY TIME CMD 2533 pts/0 00:00:00 bash 2731 pts/0 00:00:00 ps 进程ID 终端 2.ps -au USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND cxk 2871 0.0 0.0 2012 280 pts/0 S+ 14:21 0:00 ./a.out 用户名 进程号 占用的CPU使用率 占用的记忆体使用率 占用的虚拟记忆体使用率 占用的记忆体大小 该进程的状态 进程的开始时间 执行的时间 3.ps -aux : 列出所有进程,包括没有终端的 补充: PID(Process Identification)操作系统里指进程识别号,也就是进程标识符。操作系统里每打开一个程序都会创建一个进程ID,即PID。 PID是各进程的代号,每个进程有唯一的PID编号。它是进程运行时系统分配的,并不代表专门的进程。在运行时PID是不会改变标识符的,但是进程终止后PID标识符就会被系统回收,就可能会被继续分配给新运行的程序。
STAT进程状态
STAT:进程状态 S 睡眠态(可以中断的睡眠) D 磁盘睡眠态(不可以中断的睡眠) R 正在运行 + 前台运行 s 进程领导者 l 线程领导者 Z 僵尸态 : 进程结束但是所占资源没有释放 N 低优先级 < 高优先级 T 暂停态
top
监视进程 通常会全屏显示,而且会随着进程状态的变化不断更新 整个系统的信息也会显示,为查找问题提供了便利 可以显示系统总共有多少CPU和内存资源以及负载平衡等信息。
pstree
pstree 以树的形式显示进程 将所有行程以树状图显示, 树状图将会以 pid (如果有指定) 或是以init这个基本进程为根,如果有指定使用者id, 则树状图会只显示该使用者所拥有的进程。 参数: -a 显示该进程的完整指令及参数, 如果是被记忆体置换出去的进程则会加上括号 -c 如果有重覆的进程名, 则分开列出
kill
给进程发送信号 使用kill命令终止进程 kill [-signal] PID signal是信号,PID是进程号 kill 命令向指定的进程发出一个信号signal,在默认的情况下,kill 命令向指定进程发出信号15,正常情况下,将杀死那些不捕捉或不忽略这个信号的进程 1.kill -l 2) SIGINT ctrl+c 9) SIGKILL 18) SIGCONT 19) SIGSTOP 2.kill -n 进程名 kill -n pid kill -3 3097 kill -SIGQUIT 3097 killall -n 进程名
补充system()
system() #include <stdlib.h> int system(const char *command);