用户和计算机的接口,同时也是计算机硬件和其他软件的接口;
用户程序是运行的操作系统之上;
管理计算机系统的硬件、软件及数据资源,控制程序运行,改善人机界面,为其他应用软件提供支持等,使计算机系统所有资源最大限度地发挥作用,提供了各种形式的用户界面,使用户有一个好的工作环境,为其他软件的开发提供必要的服务和相应的接口
硬件->内核(驱动硬件)->系统服务->用户程序
系统方面:人工操作->批处理系统->分时系统->实时系统
人工操作:没有程序设计语言,程序员就是操作工
批处理系统:计算机能够自动地,成批地处理一个或多个用户的作业
分时系统:允许多个用户通过主机的终端,以交互的方式使用计算机
实时系统:系统能够及时响应随机发生的外部事件,并在严格的时间范围内完成对该事件的处理
用户方面:单用户单任务->单用户多任务->多用户多任务
第一台计算机(1946)->IBM发布第一款现代意义的操作系统(1964)->大而全的Multics(1965)->unics出世,一切皆文件的思想形成(1969)->里奇发明c语言,重写Unix,行业基石(1973)->Unix7.0贝尔实验室回收版权(1979)
Unix7.0贝尔实验室回收版权(1979)->谭邦宁开始研发Minix,为期两年(1984)->Linux在论坛上发布Linux(1991)
打开vim资源文件(可配置vim):vim .vimrc
打开学习vim资料:vimtutor(英文版)vimtutor zh(中文版)
普通模式(😃——>命令模式(ESC)——>普通模式
普通模式(I、i、A、a、O、o)——>插入模式(ESC)——>普通模式
I:行首插入
i:当前光标位置插入
a:插入光标后一格
A:光标移到行末
O:光标的上一行从行首插入
o:光标的下一行从行首插入
普通模式(V)——>可视模式(选中模式)(V、ESC、y、d)——>普通模式
删除操作:x(删除当前光标),dd(删除一行),ndd(从光标行删除到下面的第n行),dw(删除当前光标的一个单词),d$(从光标删除到行末),d^(从光标删除到行首),dG,dnG/dngg(从光标行向上删除到第n行),dgg(从光标行删掉上面的所有),dGG(全部删除)
复制:y,yy(复制一行),nyy(从光标行往下复制n行),yG(复制到文本末尾),ygg(从光标行复制到第一行),ynG(从光标行往上复制n行),y$(从光标复制到行末),y^(从光标复制到行首)
粘贴:p(往下一行粘贴),P(往上一行粘贴)
移动光标:gg(回到第一行),GG(回到最后一行),ngg/nG(回到第n行),
替换:r,R,cc,cG,cnG,c$,c^
undo redo 可视块操作:u(恢复),ctrl+r(再恢复上一条操作)
快编辑模式:ctrl+V选中一列,然后按i插入,然后输入内容,选中的一列被替换成输入的内容
跳转到某函数:ctrl+],跳回:ctrl+o
文件的保存与退出操作::w , :q , :wq , :x , :wq! , :q!
显示文件名称,切换文件::args
打开a.txt::e a.txt
另存为~/b.txt: :saveas ~/b.txt
切分窗口::split :vsplit(ctrl+w)
字符串替换:s/string1/string2(替换光标一个),😒/string1/string2/g(替换一行),:%s/string1/string2/g(替换全部)
设置选项::set;:set nu/nonu(是否要行号);
挂起(放在后台):ctrl+z
返回前台:fg{jobs显示所有后台任务,根据序号fg n返回前台}
查找:/searchstring
修改主机名字:sudo hostnamectl set-hostname 新主机名字
man手册:man 章节 命令
tldr:自动显示常用命令
apt:软件安装包源
pwd:打印路径
which:查看可执行命令路径
终端(terminal)= tty(Teletypewriter,电传打印机),作用是提供一个命令的输入输出环境,在linux操作系统下使用组合键ctrl+alt+T打开的就是终端,可认为terminal和tty是同义词
chsh:改变登录的shell
shell是一种人机交互接口。shell有壳的意思,是值“提供使用者使用界面”的软件,是一种命令解析器,是linux内核的一个壳,负责外界与Linux内核的交互。
常见的shell
sh、bash、zsh
提示符:
root@hostname:~#
username@hostname:~$
root、username:用户名,root表示超级用户,其他用户为普通用户
@:分割符号,分隔用户名和主机名
./: 表示用户当前的目录, ~为家目录
#、$ :命令提示符,表示登录用户的权限等级。#表示root用户,$表示普通用户
命令是人和计算交互的基本单位,人使用命令将要做什么事传达给计算机,计算机做出解析,并做出回应。
命令 [选项] [选项参数] ···[参数] ··.
谓语动词也就是[命令主体]
[参数]是该命令要处理或修改的事物,是宾语
[选项]是命令执行的方式,属于定状补的成分,一般以——或者—开始
命令名:命令名标识了命令的功能
分隔符:分隔符通常为空格,连续的多个空格会被视为一个空格
选项:命令的选项通常用 - 连接,通常为一个字母,是选项的首字母。大多数命令都可以使用-h来查看该命令的帮助
操作对象:操作对象为该命令动作的承受者
程序是一个编译好的二级制可执行的文件,一般存储在存储介质上,如磁盘。计算机程序是指一组指示计算机执行动作或做出判断的指令,通常用某种程序设计语言编写,运行于某种目标体系结构上。
是程序在内存中的镜像,是运行着的程序
ps:查看进程
ps -fe:常用,查看具体进程信息
绝对路径的起始点为根目录/,例如/usr/bin/cp就是一个绝对路径
相对路径的起始地点为当前路径,加入用户当前目录为/home/Vincent,则上诉目录的相对路径…/…/usr/bin/cp
~:家目录
—:上次工作目录
/ :根目录
··:上层目录
· :当前目录
scp a.txt Vincent@IP:./b.txt
把a.txt拷贝到用户IP的b.txt
wget 网址:端口/data/install_vim.sh
协议 主机 用户 端口 密码 主机文件系统中的位置
一个软件包含的内容会分别被拷贝到同级别的bin、lib、share和/etc目录下。
bin:存放程序的可执行文件,在系统环境变量中将该路径添加进去,就可以直接执行程序
lib:库文件集中存放,方便共享
share:存放程序需要的其他资源
/etc:配置文件存放路径,大部分的程序的配置文件都可以在这个路径下找到
把远端的源的软件版本、依赖关系、下载地址等等下载到本地:sudo apt update
把远端的软件包tldr安装到本地:sudo apt install tldr
文件类型:下载.deb使用dpkg -i .deb安装
解压:下载压缩包.tar,tar命令解压
安装:apt安装
安装来源:需要配置合适的下载源
命令:sudo apt install +软件名
检测系统占用宽带情况
命令:
进入:sudo nethogs 、 sudo nethogs -d n (每n秒更新一次)、 sudo nethogs ethn(通过n网卡查看流量,如eth0)
退出:q
排序:s(按sent排序)、r(按received排序)
切换接收流量的单位:m
交互式(鼠标可以操作)的浏览器
命令:
进入退出:htop、q
选查目标用户名的信息:htop -u user
选查目标PID的信息:htop -p PID
功能:
Help:
Setup:设置htop界面
Search:
Filter:
Tree:
SortBy:
Nice:
Nice +:
Kill:
Quit:
监视和分析性能
系统资源信息的统计工具
命令:dstat num1 num2(每num1秒更新一次,到五次结束)
1、使用纯文本的配置文件来配置
2、配置文件分为:全局配置文件和用户配置文件
全局配置文件:一般放在/etc/目录下
用户配置文件:在用户目录下,以隐藏文件的形式存在
linux下一切皆文件:一切设备抽象的进程,运行数据甚至CPU等都可以在文件系统中找到相关的文件
/etc/passwd
/etc/group
ect:全局配置文件夹
其他命令:usermod 、userdel 、id
目录创建:mkdir 文件名目录
空白文件创建:touch 文件名
文件系统:树形结构
切换目录:使用cd,如果有GUI也可使用
查看目录内容:可以使用ls命令查看目录下的文件
盘符:Linux只有一棵树,一个根目录
隐藏文件都是以“.”开头的
显示隐藏文件:ls -a
查看文件:ls -la
(文本(ascll编码的),二进制,数据)
查看文件登录信息:ls -l 文件名
查看文件属性:file 文件名
数据文件读取:last -f 文件名
d:directory 目录
l:link 链接
b:block 块设备 存储数据以供系统存取的接口设备,就是硬盘
c:character 字符设备 串口设备,键盘,鼠标等
s: socket 套接字
p: pipe 管道
纯文本文件 使用ASCII编码
二进制文件 系统中的可执行文件,不包括脚本文件
数据格式文件 例如:/var/log/wtmp
命令 :ls -al 可查看权限/ls -lh、ls -lha 可查看权限却其中添加了单位
1、每个文件都有一个拥有用户User与拥有组Group
2、文件User可以不在Group中
3、除User和Group外,其余用户都是Others
4、对于不同的身份,对文件有各自不同的权限操作
5、权限有r、w、x三种权限分别表示可读、可写、可执行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q2nOaZ0v-1678184928883)(C:\Users\86166\AppData\Roaming\Typora\typora-user-images\image-20210616212400670.png)]
有关命令:
#更改文件权限
chmod a+x file #给file文件的ugo都赋予执行的权限
chmod o-x file #将file文件o减去执行权限
chmod 755 file #设置file文件的权限为rwxr-xr-x
chmod u=rwx,go=rx file #设置file文件的权限为rwxr-xr-x
#更改文件所属用户
chown mengdi:zys_ergou file #修改file的所属用户memgdi,所属组为zys_ergou
chown -R memgdi:zys_ergou directory #修改目录directory及目录下的所有文件的所属用户是mengdi,所属组为zys_ergou
chown mengdi file #修改file的所属用户为mengdi
#更改文件所属组
chgrp root file #修改file所属的组为root
root:超级管理员。root拥有系统的完全控制权,所以在使用Linux系统时,需要慎重使用root用户,更多的自由与权限同样也意味着更大的风险。
普通用户:普通用户拥有的权限就没有root用户那么大了,它只能做系统允许做的事。普通用户可以执行大部分的命令,但是root专有的命令却不能执行。
sudo:切换为超级管理员模式,拥有超级管理员权限
切换用户:su - username
修改密码:passwd命令修改
退出用户:exit或logout退出用户,ctrl+d
新建用户:useradd
家目录:用户也拥有自己的家目录
组:用户也有组的概念(id)
sudo apt update
sudo apt install zsh
默认修改解释器修改
chsh -s /bin/zsh
~/.zshrc /etc/zshrc
~/.zlogin /etc/zlogin
~/.zlogout /etc/zlogout
~/.zprofile /etc/zprofile
Unix/Linux:使用ssh进行远程Linux
连接命令 :ssh 本地名字 + @ + IP地址
命令别名:alias x = “ssh IP地址”
隐藏文件:. zsh rc
免密登录原理:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qMauvyP7-1678184928884)(C:\Users\86166\AppData\Roaming\Typora\typora-user-images\image-20210614215644389.png)]
手动:拷贝公钥到认证文件
自动:ssh-copy-id(公钥发送到authorized_keys)
自动有关流程命令:
ssh-keygen//生成密钥
ssh-copy-id + 用户名@主机名//公钥复制到远程云主机
//
scp 文件名 用户名@主机名:目的位置 //从本地拷贝到远程
scp 用户名@主机名:文件名 目的位置//从远程位置拷贝文件到本地
修改密码命令:passwd
source 目录
向后 ctrl+b
向前 ctrl+f
移动至行首 ctrl+a
移动至行尾 ctrl+e
向后删除光标所在字符 ctrl+d
删除至行尾巴 ctrl+k
向前删除一个单词 ctrl+w
清空整行 ctrl+u
ctrl+s 向前查找
ctrl+r 向后查找
显示历史查找目录 ,按 d ,然后根标号按数字可跳转到需要的历史目录
打印别名:alias
使某种类型文件名规定操作:alias -s 文件类型(后缀)= 命令
如alias -s c=vim,下次在终端直接输入a.c即可打开a.c
?:代表单个字符
*:代表几个任意字符
[charlist]:匹配charlist中任意单一字符
[^charlist]:匹配除charlist中的任意单一字符
[c1-c2]:匹配字母或数字c1到c2之间任意单一字符
(string1|string2|string3):匹配其中一个字符
< num1-num2 > :匹配任何在num1到num2之间的数字。缺省num1表示从0开始,缺省num2表示到无穷尽
&:加在整条命令后面表示后台执行
;:加在命令中间表示顺序执行
&&:连续两个命令表示“与”
||:连续两个命令表示“或”
`` :命令中如果包含另一个命令,用 ’ '包括的命令将优先执行
ctrl+z:命令挂起
bg:将挂起的命令后台执行
fg:将挂起的命令或后台执行的命令,变为前台运行
jobs:查看后台执行的和挂起的任务及任务编号
“>”:重定向符号,从命令到文件的重定向
“>>”:追加符号,从命令到文件的追加
“<”:重定向符号,从文件到命令的重定向
“<<”:表示命令要的输入不是从文件中来着,而是从后面的代码段中来,当输入<<后面的字符串结束代码段中输入,如./a.out<< haha > a.txt,到输入haha结束
连续操作命令
创建管道:mkfifo 管道名
|:匿名管道,将上一个命令的标准输出作为下一个命令的标准输入
\:反斜杠,转义,去除其后紧跟的元字符或通配符的特殊意义
’ ‘:硬转义,硬引用,其内部所有的shell元字符,通配符都会被关掉。注意,硬转义中不允许出现 ’ ‘
” “:软转义,软引用,其内部只允许出现特定的shell元字符:$用于变量的替换,`用于命令替换,\用于转义单个字符
打印系统运行时长和平均负载(平均负载:单位时间内,系统处于【可运行状态R】或【不可中断状态D】的平均进程个数。也就是进程平均活跃数)
grammer:uptime [options]
options:
-n:以漂亮的格式显示时间
-s:系统启动的时间
-V:输出版本信息
当前用户列表及正在执行的任务
grammer: w[options]
options:
-h :不打印头信息
-s :使用短输出格式
-f :切换显示FROM项,默认显示
显示当前登录系统的用户信息
grammer:who[options]…[FILE | ARG1 ARG2]
options:
-H:显示各栏的标题信息列
-u:显示空置时间
-q:只显示登入系统的用户名称和总人数
打印当前有效的用户名称
显示用户最近登录信息
lastlog:打印每个账号的最近登录时间
grammer:last[options] [< username >…] [< tty>…]
options:
-f< file>:指定记录文件
-n< num>:指定输出记录
-x:显示系统关机,重新关机等信息
打印当前系统信息
grammer:uname [options]
options:
-a:全部信息
-s:内核名字
-n:网络主机的名称
-r:系统发行编号
-v:os版本与时间
-m:主机类型
-p:处理器类型
-i:硬件平台
-o:操作系统名称
显示或设置系统时间与日期
grammer:date [options]…[+FORMAT]
options:
-d”string”:显示字符串所指的日期
-s“string”:设置时间
-u:显示GMT(如果是CST的情况下)
< +FORMAT>:显示使用的日期格式
显示日历
给其他用户发送信息
grammer:write user [tty]
如果不想接受信息:mesg n
wall
给其他登录用户广播信息
grammar:wall “message”
切换当前工作目录
cd 路径 #直接切换到某路径下
cd … #切换到上层目录
cd . #切换到当前目录
cd #切换到当前用户家目录
cd ~ #切换到当前用户家目录
cd - #切换到上次的工作目录
打印当前工作目录
grammer:pwd [options]
options:
-L:显示逻辑工作目录
-P:显示物理工作目录
创建目录
grammer:mkdir[pm] < dir>
-p:自动创建目录
-m:设置权限
删除目录
grammer:rmdir[p]< dir>
-p:删除祖先
显示文件及目录信息
-la:显示常用文件
-ald:显示目录
拷贝(可以用来改文件名)
grammar:cp [aption]…< sour>< des>
options:
-i:若文件存在,询问用户
-r:递归复制
-a:pdr的集合
-p:连同文件属性一起拷贝
-d:若源文件为连续文件的属性,则复制连接文件的属性
-s:拷贝为软连接
-l:拷贝为硬连接
-u:源文件比目的文件新才拷贝
删除
grammer:rm[optiom]…< dir_or_file>
optioms:
-i:互动模式
-r:递归删除
-f:force
移动(可以用来改文件名)
grammer:mv < source…>< dest>
mv source1 source2 source3 dir
option:
-i:互交模式
-f:force
-u:源文件更新才会移动
取文件名
取文件名
正向连续读
grammer :cat [options] < file>
options:
-A:相当于-vET
-V:列出看不出的字符
-E:显示断行符为$
-T:显示TAB^I
-b:列出行号
-n:列出行号,连同空行也编号
反向连续读
输出行号显示文件
grammar : nl [options] < file>
options:
-b:行号指定的方式
-b a:相当于cat -n
-b t:相当于cat -b
-n:列出行号的表示方法
-n ln:行号在屏幕最左边显示
-n rn:行号在自己字段的最右边显示
-n rz:行号在自己字段的最右边显示,前面自动补全0
-w < num>:行号所占位数
一页一页地显示文件内容
grammar:more < file>
operation:
/string :向下查找string关键字
:f:显示文件名称和当前显示文件的行数
q:离开
?:查看其他命令
与more相似,比more厉害
grammar:less < file>
operation:
/string:向下查找
?string:反向查找
n:继续向下查找
N:继续反向查询
q:退出
只看头几行
grammar:head [option] < file>
options:
-n num:显示前num行
-n -num:除了后num行外,,其他得都显示
只看末尾几行
grammar:tail [option] < file>
options:
-n num:显示文件后num行
-n +num:除了前num - 1行外,,其他得都显示
以二进制方式查看文件内容
打印文件属性:stat [file]
access time,内容被取用时,更新这个读取时间
status/change time,权限,属性,所有者改动时,更新这个时间
:modify time,内容数据改动时,更新这个时间
如果不存在目标文件就创建文件,如果有则统一时间
grammar:touch [aption] < file>
options:
-a:仅修改访问时间
-c:仅修改文件的时间,若文件不存在,不新建
-d:修改文件日期
-m:仅修改mtime
-r:使两个文件时间相同
-t:修改文件时间[yymmddhhmm]
查看文件时在[option]里加-d可换查看目录
grammar : lsattr[-adR] < file_or_dir>
options:
-a:打印隐藏文件的隐藏属性
-d:如果是目录,仅打印目录的信息
-R:递归
修改文件的隐藏属性
grammar:chattr [ ±= ] [option] < file_or_dir>
options:
A:不修改atime
S:同步写入
a:只能增加数据
c:自动压缩,解压
d:不会被dump程序备份
i:不能删除,修改,建立连接
s:文件删除时,直接从磁盘删除
u:文件删除时,数据内容存在磁盘中
set_uid
权限:s(4)
作用对象:二进制程序文件,非脚本
效果:用户在执行该程序时获取程序所有者权限
注意:如果文件权限中s为小写则有x权限,如果是S大写则没有
set_gid
权限:s(2)
作用对象:目录和二进制程序文件
效果:用户在该目录里,有效组变为目录所属组
注意:如果文件权限中s为小写则有x权限,如果是S大写则没有
sticky bit(1)
权限:t
作用对象:目录
效果:在该目录下,用户只能删除自己创建的内容
寻找执行文件
grammar:which name #查找PATH路径下所有的可执行文件
寻找特定文件
grammar:whereis [option] < file_or_dir>
options:
-b:只查找二进制文件
-m:只查找manual路径下的文件
-s:只查找source 源文件
-u:查找其他文件
搜索文件(可部分查找)
grammar:locate[sption] < keyword>
options:
-i:忽略大小写
-r:后面可接正则表达式
相关文件:
/etc/pdatedb.conf
/var/lib/mlocate
多样化高级查找
grammar:find [PATH] [option] [action]
options:
与时间相关的参数:-atime,-ctime,-mtime
-mtime n: n天前的“一天之内”修改文件
-mtime +n: n天之前,不包含n,修改过的文件
mtime -n: n天之内,包含n,修改过的文件
-newer file:比file还要新的文件
与用户或用户组相关的参数:
-uid n:用户UID为n
-gid n:群组GID为n
-user name:用户名为name
-group name:群组名为name
nouser:文件所有者不存在
nagroup:文件所在组不存在
与文件权限就名称有关的参数:
-name filename:文件名为filename
-size [±] SIZE:查找比SIZE大或小的
-type TYPE:f b c d l s p
-perm mode:mode 刚好等于的文件
-perm -mode:全部包含mode的文件(mode为权限编号)
action:
用 -exec 连接
如find . -size 0k rm -r {} ; #其中的{}为把find找到的文件执行rm后放在{}里面
内涵利用文件描述符fd(file descriptor)来访问文件
文件描述符
0:stdio:标准输入
1:stdout:标准输出
2:stderror:标准错误输出
三个宏定义,定义在open、read、write函数的头文件中
0:STDIN_FILENO
1:STDOUT_FIFLENO
2:STDERR_FILENO
内容:用户名 密码位 用户编号 归属组编号 姓名 $HOME Shell
内容:用户名 已加密密码 密码改动信息 密码策略
内容:账户名称 密码 修改密码的日期 密码不可改动日期 密码需要重新修改的日期 密码变更期限前的警告日期 密码过期的宽限时间 账号失效日期 保留
内容:群组名 密码位 群组编号 组内用户
内容:群组密码相关文件
切换用户
grammar:su [-lmpfc] < username>
operation:
-l | - :重新登录
-m | -p:不更改环境变量
-c comand :切换后执行命令,并退出
临时切换为root用户
grammar:sudo [-siul] < command>
operation:
-s:切换为root shell
-i:切换为root shell ,并初始化
-u username | uid:执行命令的身份
-l:显示自己的权限
设定用户密码
grammar:passwd [-dleSxnsf] < username>
operation:
-d:清除密码
-l:锁定密码
-e:使密码过期
-S:显示密码认证信息
-x days:密码最大使用天数
-n days:密码冻结后最小使用时间
-s:更改登录shell
-f:更改用户信息
设定群组密码
grammar:gpasswd[-adrAM]< groupname>
operation:
-a username:将用户加入群组
-d username:将用户从群组中删除
-r:删除密码
-A username:将用户设置为群管理员
-M username1,username2…:设置群组成员
更改用户shell
grammar:chsh [-s]< shell_path>
operation:
-s shell_path:shell修改为shell_path
修改用户账户
grammar:usermod [-cdefgGlLsuU] < username>
operation:
-c string:修改备注信息
-d dir:修改$HOME
-e days:用户期限
-f days:密码过期后宽限的日期
-g groupname:修改用户所属群组
-G groupname:修改用户所属附加群组
-l username:修改用户账号名称
-L:锁定用户密码,使密码无效
-s shell:修改用户登录后所使用的shell
-u uid:修改用户ID
-U:解除密码锁定
新建用户
operation:
-d dir:指定$HOME
-m:自动建立$HOME
-M:不自动建立$HOME
-s shell:设置用户登录shell
-u uid:设置用户编号
-g groupname:设定用户归属群组
-G groupname:设置用户归属附加群组
-n:不建立以用户名称为群组名称的群组
-e days:设置账号过期时间
-f days:缓冲时间,days天后关闭账号
-c string:设置用户备注
-D [表达式]:更改预设值
/etc/login.defs 新建用户规则
/etc/skel/ 新建用户默认文件
删除用户
grammar:userdel [-r] < username>
operation:
-r:删除用户相关文件和目录
显示用户信息
grammar:id [-gGnru] < username>
operation:
-g:下属所属组ID
-G:显示附加组ID
-n:显示用户,所属组码,或附加群组的名称
-u:显示用户ID
-r:显示实际ID
打印系统情况和内存情况
grammar:free[-bkmgotsh]
operation:
-b | k | m | g:以字节,KB,M,G显示
-o:忽视缓冲区调节列
-s second:每隔second执行一次
-h:以可读形式显示
显示当前系统进程情况,内存,CPU等x信息
grammar:top [-bcdsSupnq]
operation:
-b:以批处理模式操作
-c:显示完整的命令
-d:屏幕刷新间隔时间
-s:以安全模式运行
-S:累积模式
-u uname:指定username
-p pid:指定PID
-n nums:循环显示次数
-q:root时,给尽可能高的优先级
实时监控磁盘,CPU等
grammar:dstat [operation]
operation:
num1:每num1秒更新1次
num1 num2:每num1秒更新一次,更新num2次
–list:列出内部和外部插件的名称
–output:结果输出为CSV文件
报告当前进程状态
grammar:ps[-auxef]
operation:
ps -aux
ps -ef
以树状显示进程派生关系
grammar:pstree[-acGhHlnpuU]
operation:
-a:显示每个程序的完整指令
-n:使用PID排序
-p:显示PID
-u:显示用户名
-l:使用长列格式显示树状
查找进程ID
grammar:pgrep[-onlpgtu]< 进程名>
operation:
-o:起始进程号
-n:结束进程号
-l:显示进程名称
-p pid:指定父进程
-g gid:指定进程组
-t tty:指定开启的进程终端
-u uid:指定uid
删除执行中的程序和工作
grammar:kill[-alpsu]< PID>
operation:
-a:处理当前进程时,不限制命令名和进程号的对应关系
-l 信号ID:不加信号ID。则列出全部信号
-p pid:给pid的进程只打印相关进程号,而不发送任何信号
-s 信号ID|信号name:指定要发出的信号
-u:指定用户
kill -9 pid
kill pid
批量按照进程名杀死进程
grammar:pkill [-onpgt] < PID>
operation:
-o:起始pid
-n:结束pid
-p pid:指定父进程号发送信号
-g:指定进程组
-t tty:指定终端
切分
grammar:cut [-dfc]< file>
-d c:以c字符分割
-f num:显示num字段的内容[n- ; n-m; -m; m,n]
-b num:字节
-c num:字符
检索
grammar:grep [-cinvw] < string>< file>
-c:统计搜寻到的次数
-i:忽略大小写
-n:顺序输出行号
-v:反向输出(输出没找到的)
-w:匹配整个单词,而不是单词的一部分
排序
grammar:sort[-fMnructk]< file_or_stdio>
-f:忽略大小写
-M:以月份名称排序
-n:根据数值小到大进行排序
-r:反向排序
-u:uniq去重
-c:检查文件是否有序
-t:分隔字符:指定排序时用的栏位分隔字符
-k:以那个区间排序
+:排序栏位,第一栏为0,按顺序优先排序
统计字符、字数、行数
grammar:wc[-lwmcL]< file_or_stdin>
-l:仅列出行号
-w:仅列出多少字
-m:仅列出多少字符
-c:仅列出多少字节
-L:列出最长一行的字符长度
去重(临近的去重,所以之前要排序)
grammar:uniq[-ic]
-i:忽略大小字符的不同
-c:进行计数
-u:只输出无重复的行
双重重定向(重定向到终端和文件)
grammar:tee[-a]file
-a:append追加
文件切分
grammar:split[-bl]< file> PREFIX
-b SIZE:切分为SIZE大小的文件
-l num:以num(行)为大小切分
参数代换
grammar:xargs[-pne]< command>
-eEOF:当xargs读到EOF时停止
-p:执行指令前询问
-n num:每次执行command时需要的参数个数
替换、压缩和删除
grammar:tr[cdst] <字符集>< 字符集>
-c:取代所有不属于第一字符集的字符
-d:删除所有属于第一字符集的字符
-s:将连续重复的字符以单独一个字符表示
-t:先删除第一字符集较第二字符集多出的字符
小写换大写:tr “[:lower:]” “[:upper:]”
删除字母:tr -d “[:alpha:]”
数字:“[:digit:]”
bc:计算
建立shell脚本文件:xxx.sh
调试shell脚本文件:bash -x xxx.sh
运行shell脚本文件:bash +x xxx.sh /bash xxx.sh
set -x
echo "zhangyansong"
set +x
echo "zhangyangbo"
//以上为从-x后面开始调试到+x结束,调试内容会被输出
a=12
a=helloword
a= pwd
a=$a:a
$0:获取当前执行shell脚本的文件名,包括路径
$n:获取当前执行脚本的第n个参数,如果n大于9,则需要将n使用大括号括起来
$*:获取当前shell的所有参数,将所有命令参数视为单个字符串
$#:得到执行当前脚本的参数个数
$@:获取这个程序所有参数,并保留参数之间的任何空白,相当于“$1”“”$2"“$3”,这是将参数传给其他程序的最好办法
#!/bin/bash
echo "\$0 is $0"
echo "\$1 is $1"
echo "\$2 is $2"
echo "\$3 is $3"
echo "\$4 is $4"
echo "\$5 is $5"
echo "\$* is $*"
echo "\$# is $#"
echo "\$@ is $@"//命令:bash xx.sh 1 2 3 4 5 6//输出
$0 is 4.sh
$1 is 1
$2 is 2
$3 is 3
$4 is 4
$5 is 5
$* is 1 2 3 4 5 6 7
$# is 7
$@ is 1 2 3 4 5 6 7
$?:判断上一指令是否成功执行,0为成功,非零为不成功
$ $:取当前进程的PID
$!:上一个指令的PID
grammar:read [-options] [variable…]
-a array:把输入赋值到数组array中,从所引号零开始
-d delimiter:用字符串delimiter中的第一个字符指示输入结束,而不是一个换行符
-e :使用Readline来处理输入。这使得与命令行相同的方式编辑输入
-n num:读取num个输入字符,而不是整行
-p prompt:为输入显示提示信息,使用字符串prompt
-r:Raw mode。不把反斜杠字符解释为转义字符
-s:Silent mode(终端不显示)
-t seconds:超时
-u fd:使用文件描述符fd中的输入,而不是标准输入
grammar:echo string
echo -e “Hello KKB\n” #开启转义
echo “Hello $name, This is KKB”
echo " \ "Hello KKB\ “”
#!/bin/bash
cnt=0
//递归函数
function count(){for i in `ls -A $1`;doif [[ -f $i ]];thenlet cnt++echo "$1/$i"fiif [[ -d $1/$i ]];thencount $1/$ifidone
}count $1//调用函数echo "$cnt"
#!/bin/bash
function __printf__() {echo "$1"return 123
}__printf__ abc//传入参数123
__printf__ $3 $2 $4//传第三个参数
test表达式:[[ xxx ]]
#!/bin/bash
read start end
for i in `seq ${start} ${end}`;doif [[ $[i % 2] -eq 0 ]];thenecho $ifi
done
#!/bin/bash
read num
flag=$[ $num % 2 ]
case ${flag} in0 )echo "偶数";;1 )echo "奇数";;
esac
//第一种
for x in `ls`;doecho ${x}
donefor i in a b c d e;doecho $i
donefor j in 1 2 3 4 5 6;doecho $j
donefor i in `seq 0 100`;doecho $i
done
//第二种#!/bin/bash
for (( i=0; i < 100; i++ ))doecho $i
done
#!/bin/bash
read num
while [[ ${num} -gt 0 ]];doecho ${num}num=$[$num - 1]
done
#!/bin/bash
read num
i=1
until [[ ${i} -eq ${num} ]];doecho $ilet i++
done
grammar: declare -a a
name[subscript] = value
name = (valuel value2 …)
${arry[*]}
${arry[@]}
${#arry[@]}
${!arry[@]}
arry += (a b c)
sort
unset
num:读取num个输入字符,而不是整行
-p prompt:为输入显示提示信息,使用字符串prompt
-r:Raw mode。不把反斜杠字符解释为转义字符
-s:Silent mode(终端不显示)
-t seconds:超时
-u fd:使用文件描述符fd中的输入,而不是标准输入
grammar:echo string
echo -e “Hello KKB\n” #开启转义
echo “Hello $name, This is KKB”
echo " \ "Hello KKB\ “”
#!/bin/bash
cnt=0
//递归函数
function count(){for i in `ls -A $1`;doif [[ -f $i ]];thenlet cnt++echo "$1/$i"fiif [[ -d $1/$i ]];thencount $1/$ifidone
}count $1//调用函数echo "$cnt"
#!/bin/bash
function __printf__() {echo "$1"return 123
}__printf__ abc//传入参数123
__printf__ $3 $2 $4//传第三个参数
test表达式:[[ xxx ]]
#!/bin/bash
read start end
for i in `seq ${start} ${end}`;doif [[ $[i % 2] -eq 0 ]];thenecho $ifi
done
#!/bin/bash
read num
flag=$[ $num % 2 ]
case ${flag} in0 )echo "偶数";;1 )echo "奇数";;
esac
//第一种
for x in `ls`;doecho ${x}
donefor i in a b c d e;doecho $i
donefor j in 1 2 3 4 5 6;doecho $j
donefor i in `seq 0 100`;doecho $i
done
//第二种#!/bin/bash
for (( i=0; i < 100; i++ ))doecho $i
done
#!/bin/bash
read num
while [[ ${num} -gt 0 ]];doecho ${num}num=$[$num - 1]
done
#!/bin/bash
read num
i=1
until [[ ${i} -eq ${num} ]];doecho $ilet i++
done
grammar: declare -a a
name[subscript] = value
name = (valuel value2 …)
${arry[*]}
${arry[@]}
${#arry[@]}
${!arry[@]}
arry += (a b c)
sort
unset
上一篇:SpringMVC自定义处理多种日期格式的格式转换器
下一篇:函数的极限