目前全网最全Linux学习笔记



操作系统

用户和计算机的接口,同时也是计算机硬件和其他软件的接口;

用户程序是运行的操作系统之上;

功能:

管理计算机系统的硬件、软件及数据资源,控制程序运行,改善人机界面,为其他应用软件提供支持等,使计算机系统所有资源最大限度地发挥作用,提供了各种形式的用户界面,使用户有一个好的工作环境,为其他软件的开发提供必要的服务和相应的接口

位置:

硬件->内核(驱动硬件)->系统服务->用户程序

架构图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3VbOKzOI-1678184928881)(C:\Users\86166\AppData\Roaming\Typora\typora-user-images\image-20210613151810409.png)]

发展历程:

系统方面:人工操作->批处理系统->分时系统->实时系统

人工操作:没有程序设计语言,程序员就是操作工

批处理系统:计算机能够自动地,成批地处理一个或多个用户的作业

分时系统:允许多个用户通过主机的终端,以交互的方式使用计算机

实时系统:系统能够及时响应随机发生的外部事件,并在严格的时间范围内完成对该事件的处理

用户方面:单用户单任务->单用户多任务->多用户多任务

Unix操作系统
诞生:

第一台计算机(1946)->IBM发布第一款现代意义的操作系统(1964)->大而全的Multics(1965)->unics出世,一切皆文件的思想形成(1969)->里奇发明c语言,重写Unix,行业基石(1973)->Unix7.0贝尔实验室回收版权(1979)

Linux操作系统
诞生:

Unix7.0贝尔实验室回收版权(1979)->谭邦宁开始研发Minix,为期两年(1984)->Linux在论坛上发布Linux(1991)

linux操作系统分支:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bj2XesyO-1678184928882)(C:\Users\86166\AppData\Roaming\Typora\typora-user-images\image-20210613162813690.png)]

vim使用

打开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终端

终端(terminal)= tty(Teletypewriter,电传打印机),作用是提供一个命令的输入输出环境,在linux操作系统下使用组合键ctrl+alt+T打开的就是终端,可认为terminal和tty是同义词

shell命令解析器

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 +软件名

nethogs:

检测系统占用宽带情况

命令:

进入:sudo nethogs 、 sudo nethogs -d n (每n秒更新一次)、 sudo nethogs ethn(通过n网卡查看流量,如eth0)

退出:q

排序:s(按sent排序)、r(按received排序)

切换接收流量的单位:m

htop:

交互式(鼠标可以操作)的浏览器

命令:

进入退出:htop、q

选查目标用户名的信息:htop -u user

选查目标PID的信息:htop -p PID

功能:

Help:

Setup:设置htop界面

Search:

Filter:

Tree:

SortBy:

Nice:

Nice +:

Kill:

Quit:

nmon:

监视和分析性能

dstat:

系统资源信息的统计工具

命令: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

七种基本文件
-:regular file 普通文件

(文本(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

#更改文件权限

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

#更改文件所属用户

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

#更改文件所属组

chgrp root file #修改file所属的组为root

初始用户
root和普通用户

root:超级管理员。root拥有系统的完全控制权,所以在使用Linux系统时,需要慎重使用root用户,更多的自由与权限同样也意味着更大的风险。

普通用户:普通用户拥有的权限就没有root用户那么大了,它只能做系统允许做的事。普通用户可以执行大部分的命令,但是root专有的命令却不能执行。

sudo:切换为超级管理员模式,拥有超级管理员权限

切换用户:su - username

修改密码:passwd命令修改

退出用户:exit或logout退出用户,ctrl+d

新建用户:useradd

家目录:用户也拥有自己的家目录

组:用户也有组的概念(id)

zsh环境
安装

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元字符:$用于变量的替换,`用于命令替换,\用于转义单个字符

Linux系统信息的获取
uptime

打印系统运行时长和平均负载(平均负载:单位时间内,系统处于【可运行状态R】或【不可中断状态D】的平均进程个数。也就是进程平均活跃数)

grammer:uptime [options]

options

-n:以漂亮的格式显示时间

-s:系统启动的时间

-V:输出版本信息

w

当前用户列表及正在执行的任务

grammer: w[options]

options

-h :不打印头信息

-s :使用短输出格式

-f :切换显示FROM项,默认显示

who

显示当前登录系统的用户信息

grammer:who[options]…[FILE | ARG1 ARG2]

options

-H:显示各栏的标题信息列

-u:显示空置时间

-q:只显示登入系统的用户名称和总人数

whoami

打印当前有效的用户名称

last

显示用户最近登录信息

lastlog:打印每个账号的最近登录时间

grammer:last[options] [< username >…] [< tty>…]

options:

-f< file>:指定记录文件

-n< num>:指定输出记录

-x:显示系统关机,重新关机等信息

uname

打印当前系统信息

grammer:uname [options]

options

-a:全部信息

-s:内核名字

-n:网络主机的名称

-r:系统发行编号

-v:os版本与时间

-m:主机类型

-p:处理器类型

-i:硬件平台

-o:操作系统名称

date

显示或设置系统时间与日期

grammer:date [options]…[+FORMAT]

options

-d”string”:显示字符串所指的日期

-s“string”:设置时间

-u:显示GMT(如果是CST的情况下)

< +FORMAT>:显示使用的日期格式

cal

显示日历

write

给其他用户发送信息

grammer:write user [tty]

如果不想接受信息:mesg n

wall

给其他登录用户广播信息

grammar:wall “message”

文件与目录

基本操作
cd:

切换当前工作目录

cd 路径 #直接切换到某路径下

cd … #切换到上层目录

cd . #切换到当前目录

cd #切换到当前用户家目录

cd ~ #切换到当前用户家目录

cd - #切换到上次的工作目录

pwd:

打印当前工作目录

grammer:pwd [options]

options:

-L:显示逻辑工作目录

-P:显示物理工作目录

mkdir:

创建目录

grammer:mkdir[pm] < dir>

-p:自动创建目录

-m:设置权限

rmdir:

删除目录

grammer:rmdir[p]< dir>

-p:删除祖先

文件与目录的管理
ls

显示文件及目录信息

-la:显示常用文件

-ald:显示目录

cp

拷贝(可以用来改文件名)

grammar:cp [aption]…< sour>< des>

options:

-i:若文件存在,询问用户

-r:递归复制

-a:pdr的集合

-p:连同文件属性一起拷贝

-d:若源文件为连续文件的属性,则复制连接文件的属性

-s:拷贝为软连接

-l:拷贝为硬连接

-u:源文件比目的文件新才拷贝

rm

删除

grammer:rm[optiom]…< dir_or_file>

optioms:

-i:互动模式

-r:递归删除

-f:force

mv

移动(可以用来改文件名)

grammer:mv < source…>< dest>

mv source1 source2 source3 dir

option:

-i:互交模式

-f:force

-u:源文件更新才会移动

basename

取文件名

dirname

取文件名

文件内容的查阅
cat

正向连续读

grammer :cat [options] < file>

options:

-A:相当于-vET

-V:列出看不出的字符

-E:显示断行符为$

-T:显示TAB^I

-b:列出行号

-n:列出行号,连同空行也编号

tac

反向连续读

nl

输出行号显示文件

grammar : nl [options] < file>

options:

-b:行号指定的方式

-b a:相当于cat -n

-b t:相当于cat -b

-n:列出行号的表示方法

-n ln:行号在屏幕最左边显示

-n rn:行号在自己字段的最右边显示

-n rz:行号在自己字段的最右边显示,前面自动补全0

-w < num>:行号所占位数

more

一页一页地显示文件内容

grammar:more < file>

operation:

/string :向下查找string关键字

:f:显示文件名称和当前显示文件的行数

q:离开

?:查看其他命令

less

与more相似,比more厉害

grammar:less < file>

operation:

/string:向下查找

?string:反向查找

n:继续向下查找

N:继续反向查询

q:退出

head

只看头几行

grammar:head [option] < file>

options:

-n num:显示前num行

-n -num:除了后num行外,,其他得都显示

tail

只看末尾几行

grammar:tail [option] < file>

options:

-n num:显示文件后num行

-n +num:除了前num - 1行外,,其他得都显示

od

以二进制方式查看文件内容

修改文件的时间(ACM)

打印文件属性:stat [file]

atime:

access time,内容被取用时,更新这个读取时间

ctime:

status/change time,权限,属性,所有者改动时,更新这个时间

mtime

:modify time,内容数据改动时,更新这个时间

touch

如果不存在目标文件就创建文件,如果有则统一时间

grammar:touch [aption] < file>

options:

-a:仅修改访问时间

-c:仅修改文件的时间,若文件不存在,不新建

-d:修改文件日期

-m:仅修改mtime

-r:使两个文件时间相同

-t:修改文件时间[yymmddhhmm]

文件的隐藏属性

查看文件时在[option]里加-d可换查看目录

lsattr

grammar : lsattr[-adR] < file_or_dir>

options:

-a:打印隐藏文件的隐藏属性

-d:如果是目录,仅打印目录的信息

-R:递归

chattr

修改文件的隐藏属性

grammar:chattr [ ±= ] [option] < file_or_dir>

options:

A:不修改atime

S:同步写入

a:只能增加数据

c:自动压缩,解压

d:不会被dump程序备份

i:不能删除,修改,建立连接

s:文件删除时,直接从磁盘删除

u:文件删除时,数据内容存在磁盘中

文件的特殊权限
SUID

set_uid

权限:s(4)

作用对象:二进制程序文件,非脚本

效果:用户在执行该程序时获取程序所有者权限

注意:如果文件权限中s为小写则有x权限,如果是S大写则没有

SGID

set_gid

权限:s(2)

作用对象:目录和二进制程序文件

效果:用户在该目录里,有效组变为目录所属组

注意:如果文件权限中s为小写则有x权限,如果是S大写则没有

SBIT

sticky bit(1)

权限:t

作用对象:目录

效果:在该目录下,用户只能删除自己创建的内容

命令与文件的定位查询
which

寻找执行文件

grammar:which name #查找PATH路径下所有的可执行文件

whereis

寻找特定文件

grammar:whereis [option] < file_or_dir>

options:

-b:只查找二进制文件

-m:只查找manual路径下的文件

-s:只查找source 源文件

-u:查找其他文件

locate

搜索文件(可部分查找)

grammar:locate[sption] < keyword>

options:

-i:忽略大小写

-r:后面可接正则表达式

相关文件:

/etc/pdatedb.conf

/var/lib/mlocate

find

多样化高级查找

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

用户管理

用户管理的重要配置文件
/etc/passwd

内容:用户名 密码位 用户编号 归属组编号 姓名 $HOME Shell

/etc/shadow

内容:用户名 已加密密码 密码改动信息 密码策略

内容:账户名称 密码 修改密码的日期 密码不可改动日期 密码需要重新修改的日期 密码变更期限前的警告日期 密码过期的宽限时间 账号失效日期 保留

/etc/group

内容:群组名 密码位 群组编号 组内用户

/etc/gshadow

内容:群组密码相关文件

/etc/sudoers
用户管理
su

切换用户

grammar:su [-lmpfc] < username>

operation:

-l | - :重新登录

-m | -p:不更改环境变量

-c comand :切换后执行命令,并退出

sudo

临时切换为root用户

grammar:sudo [-siul] < command>

operation:

-s:切换为root shell

-i:切换为root shell ,并初始化

-u username | uid:执行命令的身份

-l:显示自己的权限

passwd

设定用户密码

grammar:passwd [-dleSxnsf] < username>

operation:

-d:清除密码

-l:锁定密码

-e:使密码过期

-S:显示密码认证信息

-x days:密码最大使用天数

-n days:密码冻结后最小使用时间

-s:更改登录shell

-f:更改用户信息

gpassw:

设定群组密码

grammar:gpasswd[-adrAM]< groupname>

operation:

-a username:将用户加入群组

-d username:将用户从群组中删除

-r:删除密码

-A username:将用户设置为群管理员

-M username1,username2…:设置群组成员

chsh

更改用户shell

grammar:chsh [-s]< shell_path>

operation:

-s shell_path:shell修改为shell_path

usermod

修改用户账户

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:解除密码锁定

useradd

新建用户

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/ 新建用户默认文件

userdel

删除用户

grammar:userdel [-r] < username>

operation:

-r:删除用户相关文件和目录

id

显示用户信息

grammar:id [-gGnru] < username>

operation:

-g:下属所属组ID

-G:显示附加组ID

-n:显示用户,所属组码,或附加群组的名称

-u:显示用户ID

-r:显示实际ID

进程管理

free:

打印系统情况和内存情况

grammar:free[-bkmgotsh]

operation:

-b | k | m | g:以字节,KB,M,G显示

-o:忽视缓冲区调节列

-s second:每隔second执行一次

-h:以可读形式显示

top:

显示当前系统进程情况,内存,CPU等x信息

grammar:top [-bcdsSupnq]

operation:

-b:以批处理模式操作

-c:显示完整的命令

-d:屏幕刷新间隔时间

-s:以安全模式运行

-S:累积模式

-u uname:指定username

-p pid:指定PID

-n nums:循环显示次数

-q:root时,给尽可能高的优先级

dstat:

实时监控磁盘,CPU等

grammar:dstat [operation]

operation:

num1:每num1秒更新1次

num1 num2:每num1秒更新一次,更新num2次

–list:列出内部和外部插件的名称

–output:结果输出为CSV文件

ps:

报告当前进程状态

grammar:ps[-auxef]

operation:

ps -aux

ps -ef

pstree:

以树状显示进程派生关系

grammar:pstree[-acGhHlnpuU]

operation:

-a:显示每个程序的完整指令

-n:使用PID排序

-p:显示PID

-u:显示用户名

-l:使用长列格式显示树状

pgrep:

查找进程ID

grammar:pgrep[-onlpgtu]< 进程名>

operation:

-o:起始进程号

-n:结束进程号

-l:显示进程名称

-p pid:指定父进程

-g gid:指定进程组

-t tty:指定开启的进程终端

-u uid:指定uid

kill:

删除执行中的程序和工作

grammar:kill[-alpsu]< PID>

operation:

-a:处理当前进程时,不限制命令名和进程号的对应关系

-l 信号ID:不加信号ID。则列出全部信号

-p pid:给pid的进程只打印相关进程号,而不发送任何信号

-s 信号ID|信号name:指定要发出的信号

-u:指定用户

kill -9 pid

kill pid

pkill:

批量按照进程名杀死进程

grammar:pkill [-onpgt] < PID>

operation:

-o:起始pid

-n:结束pid

-p pid:指定父进程号发送信号

-g:指定进程组

-t tty:指定终端

数据提取

cut

切分

grammar:cut [-dfc]< file>

-d c:以c字符分割

-f num:显示num字段的内容[n- ; n-m; -m; m,n]

-b num:字节

-c num:字符

grep

检索

grammar:grep [-cinvw] < string>< file>

-c:统计搜寻到的次数

-i:忽略大小写

-n:顺序输出行号

-v:反向输出(输出没找到的

-w:匹配整个单词,而不是单词的一部分

sort

排序

grammar:sort[-fMnructk]< file_or_stdio>

-f:忽略大小写

-M:以月份名称排序

-n:根据数值小到大进行排序

-r:反向排序

-u:uniq去重

-c:检查文件是否有序

-t:分隔字符:指定排序时用的栏位分隔字符

-k:以那个区间排序

+:排序栏位,第一栏为0,按顺序优先排序

wc

统计字符、字数、行数

grammar:wc[-lwmcL]< file_or_stdin>

-l:仅列出行号

-w:仅列出多少字

-m:仅列出多少字符

-c:仅列出多少字节

-L:列出最长一行的字符长度

uniq

去重(临近的去重,所以之前要排序)

grammar:uniq[-ic]

-i:忽略大小字符的不同

-c:进行计数

-u:只输出无重复的行

tee

双重重定向(重定向到终端和文件)

grammar:tee[-a]file

-a:append追加

split

文件切分

grammar:split[-bl]< file> PREFIX

-b SIZE:切分为SIZE大小的文件

-l num:以num(行)为大小切分

xargs

参数代换

grammar:xargs[-pne]< command>

-eEOF:当xargs读到EOF时停止

-p:执行指令前询问

-n num:每次执行command时需要的参数个数

tr

替换、压缩和删除

grammar:tr[cdst] <字符集>< 字符集>

-c:取代所有不属于第一字符集的字符

-d:删除所有属于第一字符集的字符

-s:将连续重复的字符以单独一个字符表示

-t:先删除第一字符集较第二字符集多出的字符

小写换大写:tr “[:lower:]” “[:upper:]”

删除字母:tr -d “[:alpha:]”

数字:“[:digit:]”

bc:计算

shell教本编程

建立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

输入输出
read

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中的输入,而不是标准输入

echo

grammar:echo string

echo -e “Hello KKB\n” #开启转义

echo “Hello $name, This is KKB”

echo " \ "Hello KKB\ “”

printf
递归
#!/bin/bash
cnt=0
//递归函数
function count(){
    for i in `ls -A $1`;do
        if [[ -f $i ]];then
            let cnt++
            echo "$1/$i"
        fi
        if [[ -d $1/$i ]];then
            count $1/$i
        fi
    done
}

count $1//调用函数

echo "$cnt"
函数
#!/bin/bash
function __printf__() {
    echo "$1"
    return 123
}


__printf__ abc//传入参数123
__printf__ $3 $2 $4//传第三个参数

if分支

test表达式:[[ xxx ]]

#!/bin/bash
read start end
for i in `seq ${start} ${end}`;do
    if [[ $[i % 2] -eq 0 ]];then
        echo $i
    fi
done

case
#!/bin/bash
read num
flag=$[ $num % 2 ]
case ${flag} in
    0 )
        echo "偶数"
        ;;
    1 )
        echo "奇数"
        ;;
esac

for循环
//第一种
for x in `ls`;do
    echo ${x}
done

for i in a b c d e;do
    echo $i
done


for j in 1 2 3 4 5 6;do
    echo $j
done

for i in `seq 0 100`;do
    echo $i
done
//第二种
    #!/bin/bash
for (( i=0; i < 100; i++ ))do
    echo $i
done
while循环
#!/bin/bash
read num
while [[ ${num} -gt 0 ]];do
    echo ${num}
    num=$[$num - 1]
done

until循环
#!/bin/bash
read num
i=1
until [[ ${i} -eq ${num} ]];do
    echo $i
    let 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中的输入,而不是标准输入

echo

grammar:echo string

echo -e “Hello KKB\n” #开启转义

echo “Hello $name, This is KKB”

echo " \ "Hello KKB\ “”

printf
递归
#!/bin/bash
cnt=0
//递归函数
function count(){
    for i in `ls -A $1`;do
        if [[ -f $i ]];then
            let cnt++
            echo "$1/$i"
        fi
        if [[ -d $1/$i ]];then
            count $1/$i
        fi
    done
}

count $1//调用函数

echo "$cnt"
函数
#!/bin/bash
function __printf__() {
    echo "$1"
    return 123
}


__printf__ abc//传入参数123
__printf__ $3 $2 $4//传第三个参数

if分支

test表达式:[[ xxx ]]

#!/bin/bash
read start end
for i in `seq ${start} ${end}`;do
    if [[ $[i % 2] -eq 0 ]];then
        echo $i
    fi
done

case
#!/bin/bash
read num
flag=$[ $num % 2 ]
case ${flag} in
    0 )
        echo "偶数"
        ;;
    1 )
        echo "奇数"
        ;;
esac

for循环
//第一种
for x in `ls`;do
    echo ${x}
done

for i in a b c d e;do
    echo $i
done


for j in 1 2 3 4 5 6;do
    echo $j
done

for i in `seq 0 100`;do
    echo $i
done
//第二种
    #!/bin/bash
for (( i=0; i < 100; i++ ))do
    echo $i
done
while循环
#!/bin/bash
read num
while [[ ${num} -gt 0 ]];do
    echo ${num}
    num=$[$num - 1]
done

until循环
#!/bin/bash
read num
i=1
until [[ ${i} -eq ${num} ]];do
    echo $i
    let i++
done

数组

grammar: declare -a a

name[subscript] = value

name = (valuel value2 …)

输出数组内容

${arry[*]}

${arry[@]}

确定数组元素个数

${#arry[@]}

找到数组的下标

${!arry[@]}

数组追加

arry += (a b c)

数组排序

sort

删除数组与元素

unset

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扑天鹰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值