linux基础命令
登录
- 完整的远程登录方式:ssh -p 端口号 用户名:用户密码@服务器地址
注:其中的端口号默认是22,默认值可以省略,服务器地址也可以是域名或者主机名
注:ssh服务的全局配置文件 /etc/ssh/ssh_config;
对应的服务名是sshd(以d结尾的一般都是守护进程); - 切换用户
su [用户名] : 切换用户,不跟用户名表示切换到root用户;- 用户名,表示切换用户的同时目录切入到用户家目录。
linux系统,一切皆文件。
shell快捷键
ctrl + c : 取消当前操作
ctrl + a : 移动光标至行首
ctrl + e : 移动光标至行尾
ctrl + l : 清屏操作,相当于clear
ctrl + h : 往前删除一个字符
ctrl + w : 往前删除一个单词
ctrl + u : 删除至行首
ctrl + d : 退出当前用户登录,相当于logout
系统目录
系统安装好后自动创建的一些有专门作用的目录
bin:(binary)用户命令,(普通用户就)可以执行的一些二进制文件;
sbin:(super binary),管理命令,需要超级用户权限才能运行的二进制文件;
usr:(universal shared read-only)核心功能程序,以及用户自己安装的软件默认都会安装与此。类似于windows下的program files;
dev:(device),该目录中主要存放的是一些外接设备,比如优盘、其他光盘等,在其中的设备是不能直接被使用的,需要挂载到某个文件下(类似windows下的分配盘符);
home:家目录,除了root用户以外的其他用户的家目录,是用户的相对独立的操作空间(类似windows下的user/用户目录);
proc:(progress),进程目录,在进程运行的过程中,产生代表这些进程的文件,伪文件系统,映射系统内核。
sys:伪文件系统,跟硬件设备相关的属性映射文件(常用来对设备调优等);
root:root用户的家目录;
tmp:系统和软件在运行中产生的临时文件;
var:存放系统或者程序的经常修改的文件,比如日志文件等,另外如mysql安装好后会该目录下创建一个目录---/var/lib/mysql,用来存放mysql数据库;所以这里东西一般是服务运行过程中自己产生的数据,一般不要手动修改。
mnt:设备挂载目录,额外的临时文件系统,比如额外新增的硬盘等。
media:设备挂载目录,长用于挂载移动设备,比如光驱、优盘等。
文件--增删改查
-
文件夹:
mkdir -p 文件夹名 --------- 创建文件夹,-p表示递归创建多级文件夹;
rmdir 文件夹名 ---------- 删除文件夹 -
文件:
touch 目录名/目录名/文件名 ------ 创建文件;(其实该命令原本目的不是用来创建文件的,而是用来改变文件的时间戳的,可以用man命令查看一下),-c不创建文件(文件存在就修改其修改时间戳--ctime, change time,没有也不创建文件),-a修改文件的访问时间戳(atime, access time,同时改变文件的修改时间戳),-m修改文件的改变时间戳(mtime, modify time ,同时改变文件的修改时间戳),-t修改文件的时间戳为指定时间。linux文件的三种时间属性分别为:
atime,为access time(访问时间)的缩写,显示的是文件中的数据最后被访问的时间,读一次这个文件的内容,这个时间就会更新,比如被系统的进程直接使用或者通过一些命令和脚本间接使用。(执行一些可执行文件、脚本)或对这个文件运用 more、cat等命令。ls、stat命令都不会修改文件的访问时间mtime,为modify time(修改时间)的缩写,显示的是文件的内容被改变时的最后时间,比如用vi编辑时就会改变(也就是Block的内容),ls -l列出的时间就是这个时间。
ctime,为change time(状态改动时间)的缩写,显示的是文件的权限,拥有者,所属的组,链接数发生改变时的时间。当然当内容改变时,也会改变。(也就是Inode内容发生改变和Block内容发生改变时),通过chmod、chown命令修改一次文件属性,这个时间就会更新。
rm -rf 目录名或者文件名 ------- 删除文件夹或者文件,(其中-r参数表示可以递归删除多级目录和文件,-f表示若文件夹或文件不存在,忽略错误提示)
-
查看:
ls -lah [文件名或目录名] --------- 查看文件或目录里的文件,省略文件或目录名,表示查看当前文件夹下的文件列表;-l 表示以列表的形式显示,-a表示查看全部文件(包含隐藏文件,隐藏文件的名称以.开头),-A显示全部(但不包含当前目录的.和父目录..),-h (human)表示以高可读性方式显示文件大小(显示kb等),-i 文件的索引节点号(index node,如同用户编号一样,每个文件在文件系统都有一个唯一编号),-r逆序显示(reverse),-R递归显示(recursive)。 -
复制剪切:
目录
cp -r 原目录名 新目录名 -------- 复制目录,如果新目录已存在,则将原目录复制到新目录下,如果新目录不存在,则将原目录复制为新目录,-r表示递归复制;-p保留源文件或目录的属性,包括所有者、所属组、权限与时间(默认的话,用户复制的文件的属主和属组都会是该用户),注意当原文件的属主和属组是root的时候,普通用户-p需要sudo。
mv -r 原目录名 新目录名 -------- 剪切目录,如果新目录已存在,则将原目录剪切到新目录下,如果新目录不存在,则将原目录剪切为新目录,-r表示递归剪切
文件
cp 原文件名 新目录名或文件名 ------- 复制文件,如果新的是个目录,则将原文件复制到该目录下,若不存在,则将文件复制为该新文件;-p保留源文件或目录的属性,包括所有者、所属组、权限与时间(默认的话,用户复制的文件的属主和属组都会是该用户),注意当原文件的属主和属组是root的时候,普通用户-p需要sudo。
mv 原文件名 新目录名或文件名 ------- 剪切文件,如果新的是个目录,则将原文件剪切到该目录下,若不存在,则将文件剪切为该新文件
注:cp、mv命令源可以是多个,但是目标只能是最后一个,即可以同时复制(剪切)多个文件到一个位置,所以复制(或剪切)多个文件(或目录)时最后一个参数一定要是一个存在的目录,而不能是文件。
mv默认可以递归,所以没有-r选项,这一点同cp命令不一样。
文本文件编辑查看
编辑
-
三种模式:命令模式、编辑模式(插入模式)、尾行模式
-
模式切换:首先通过vi或vim 文件名,刚进入文件就是命令模式;
命令模式-->编辑模式:
i键,进入编辑模式,光标定位在当前光标位置
a键,进入编辑模式,光标定位在当前光标下一个字符位置
A键,进入编辑模式,光标定位在行尾位置
o键,进入编辑模式,光标进入当前光标所在行的下一行行首
O键,进入编辑模式,光标进入当前光标所在行的下一行行首
命令模式-->尾行模式: :(冒号键)注:尾行模式和编辑模式之间不能直接切换,二者都通过命令模式切换
编辑模式-->命令模式:esc键
尾行模式-->命令模式:esc键 -
各模式功能
命令模式:快捷复制删除文本内容,快速移动光标位置
定位(光标移动)——
0 光标移动到行首
^ 光标移动到行首(确切的说是第一个非空白字符处); $ 光标移动到行尾
b 光标移动到词首(begin); e 光标移动到词尾(end); w 移动到后一个单词
h: 向前移动一个字符
j: 向下移动一行
k: 向上移动一行
l: 向后移动一个字符
gg 移至首行;
G 光标移动到文件尾行;
H 光标移动到屏首;
L 光标移动到屏尾;
M 光标移动到屏中;
C 删除当前至行尾字符并进入编辑模式;
ctrl + b:向上(back)翻屏;
ctrl + f:向下(forword)翻屏;
ctrl + u:向上(up)翻半屏;
ctrl + d:向下(down)翻半屏;
# G : 移动到第#行;
# ↑ :向上移动#行;
# ↓ :向下移动#行;
# → :向右移动#个字符;
# ←:向左移动#个字符;命令模式下的查找:
/ 要查找的内容:向下查找,n移动到下一个
? 要查找的内容:向上查找,n移动到上一个
参考文章
h或退格: 左移一个字符;
l或空格: 右移一个字符;
j: 下移一行;
k: 上移一行;
gj: 移动到一段内的下一行;
gk: 移动到一段内的上一行;
+或Enter: 把光标移至下一行第一个非空白字符。
-: 把光标移至上一行第一个非空白字符。
w: 前移一个单词,光标停在下一个单词开头;
W: 移动下一个单词开头,但忽略一些标点;
e: 前移一个单词,光标停在下一个单词末尾;
E: 移动到下一个单词末尾,如果词尾有标点,则移动到标点;
b: 后移一个单词,光标停在上一个单词开头;
B: 移动到上一个单词开头,忽略一些标点;
ge: 后移一个单词,光标停在上一个单词末尾;
gE: 同 ge ,不过‘单词’包含单词相邻的标点。
(: 前移1句。
): 后移1句。
{: 前移1段。
}: 后移1段。
fc: 把光标移到同一行的下一个c字符处
Fc: 把光标移到同一行的上一个c字符处
tc: 把光标移到同一行的下一个c字符前
Tc: 把光标移到同一行的上一个c字符后
;: 配合f & t使用,重复一次
,: 配合f & t使用,反向重复一次
上面的操作都可以配合n使用,比如在正常模式(下面会讲到)下输入3h, 则光标向左移动3个字符。
注:这里的光标移动和下面的编辑命令可配合使用,比如:
dgg:表示从当前行删除(剪切)至首行;
dG: 表示从当前行删除(剪切)至尾行;
d2G:表示从当前行删除(剪切)至第2行(含当前行)
d2↑:表示从当前行向上删除(剪切)3行(含当前行);
y命令同理,其它以此类推;
注:c命令同d命令一样的作用,只不过c命令在操作完成后,会自动进入编辑模式
复制 ——
yy 复制当前行
#yy 复制当前行至下面#行内容
yw 复制光标至词尾
p 将缓冲区内容粘贴到光标后面或下一行;
P 将缓冲区内容粘贴到光标前面或上一行;
删除(实际上是剪切)——
dd删除当前行(下行上移)
D删除至行尾(行不会被删除)
#dd 删除当前行至下面#行内容
de 删除光标至词尾
db 删除光标至词首
[#]x 删除光标后面#个字符
[#]X 删除光标前面#个字符
[#]s 删除光标后面#个字符,并进入编辑模式
[#]S 删除当前#行,并进入编辑模式
替换——
r 替换当前字符
R 连续替换,直至按下esc键取消
撤销操作——
[#]u 撤销上(#)次操作
ctrl + r:恢复撤销
重复操作——
. 重复上次操作
可视化模式(visual模式)——
v:进入字符可视化模式---移动光标可以选择代码区域(以字符为单位),然后对区域复制(y)或删除(d)等
V:进入行可视化模式---移动光标可以选择代码区域(以行为单位),然后对区域复制(y)或删除(d)等
ctrl + v:进入块状可视化模式---移动光标可以选择块状代码区域,然后对区域复制(y)或删除(d)等
快速保存并退出文件编辑——
命令行模式下
shift + zz(即ZZ),保存退出
shift + zq(即ZQ),不保存退出
编辑模式
常用快捷键:
alt + s:向前删除一个字符
ctrl + h:向前删除一个字符
ctrl + w :向前删除一个单词
ctrl + u :向前删除至行首
ctrl + j :回车
ctrl + m :回车
ctrl + e :复制下一行同位置的字符
alt + u:撤销并退出到命令行模式
ctrl + c :功能类似esc,退出到命令行模式(alt + e、w...等很多键都能起到类似效果)
尾行模式
- # 定位到第#行;
- set nu 显示行号; set nonu取消行号显示;set nu! 切换行号显示隐藏
- syntax on 启用语法高亮;syntax off 关闭语法高亮
- set ts=4 设置制表符的宽度为4个空格宽度
- set expandtab 设置自动将tab转换为4个空格
- set autoindent 自动缩进
- set nohls 设置搜索不高亮
- set ruler 在右下角动态显示光标当前所在位置;set noruler 不在右下角动态显示光标当前所在位置
- .,$d ,将当前行至尾行删除(剪切);1,.y,从第1行到当前行复制;3,+2d ,将3,4,5三行删除;
- u:撤销上次操作
-
wq或者x保存退出文件; q 不保存文件直接退出;q!不保存强制退出。(建议使用x来进行保存,一是简单,二是在没有更改文件的情况下退出,它是不会修改文件的的‘最后修改时间的’(编辑模式下直接shift+z+z退出也是这种效果),大写X表示对文件加密,一般不建议使用,加密后忘记密码就会打不开,加密后撤销加密的方式就是再次用X加密,密码设置空)
image.png
- 查找替换:
1、:s/要搜索的关键词或正则/要替换成的词 ---- 替换光标所在行的查找到的第一处
2、:s/要搜索的关键词或正则/要替换成的词/g ---- 替换光标所在行查找到的所有处
3、:%s/要搜索的关键词或正则/要替换成的词 ----- 替换所有行查找到的第一处
4、:%s/要搜索的关键词或正则/要替换成的词/g ----- 替换所有行查找到的所有处
注:%控制全行(也可以指定行,‘.’表示当前行,比如.,$表示当前行到尾行),g控制全列。如:
:5,$-3s/a/b/ig:表示将第5行至倒数第3行之间的所有大小写a替换成b;
注:最后的是控制器,有4个字母,igce:i--ignore忽略大小写,g--global全局,c--confirm逐个确认,e--error忽略错误
5、删除对应行、%和g的区别
-
:! 命令 :可在编辑文本文件的过程中,临时执行命令,命令执行完成后(按任意键)会回到文本编辑界面。
-
另外,不通过 ‘:’ ,通过‘/’或‘?’同样可以进入尾行模式,但是,这只用于查找文档中的关键词(‘?’是向上查找,‘/’是向下查找),类似于notepad中的查找功能,查找结果会以高亮显示(其实是添加了一个背景色,所以退出之前要用‘:nohl’,来取消高亮背景色,否下次再编辑该文件发现还会有高亮色),并且通过N/n来切换查到的上一个/下一个(光标移动)。如:
image.png -
多文件编辑
vim 命令后面跟多个文件可以同时打开多个文件
:ls :显示同时打开文件的列表
:b 编号:切换编辑文件 -
多窗口编辑模式
:vs:垂直拆分窗口
:sp:水平拆分窗口
ctrl + w + w :切换窗口
:qa:退出关闭全部窗口
:xa:保存并退出关闭全部窗口 -
配置
vim是一款编辑器,也是有配置文件的。
vim配置有三种情况:
①、在文件打开的时候在尾行模式下输入的配置,这种是临时配置。
②、个人配置文件 ~/.vimrc,没有可以自建(比如编写python文件时,通常会将set autoindent等含set的配置写进该文件中)。
③、全局配置文件(自带), /etc/vimrc 。 -
异常退出
vim软件在编辑文件的时候,会在当前文件夹中产生一个以 .swp结尾的同名隐藏文件(临时文件)。正常退出vim的时候,该文件会被自动删除,而如果没有正常退出的话,该文件会被残留,比如在用vim编辑文件的时候,突然关闭终端。当再次vim该文件的时候,会有错误提示(即该临时文件已存在),解决办法就是直接删除该临时文件。 -
sed:(stream editor),流式编辑器,功能也很强大,参考文章
查看
cat -n 目录名/文件名 : 查看文本文件内容,-n 显示行号;-b 显示行号(空白行不显示行号),-E显示行尾的换行符;
注:cat 后面如果没有跟文件的话,则是等待用户输入文本内容。单行输入也可以(backspace需要按ctrl键;通过ctrl + d 结束输入)。批量输入也可以,批量输入需要借助 << ,<< 称为此处文档,通常后面要跟一个开始结束标记(相同的标记),比如EOF(非固定,可以自定义,只要开始结束标记一致就可以了),在标记中间是文档内容。比如:
cat > 文件名:新创建一个文件,并将接下来的写的文本内容输入进该文件;cat >> 文件名表示将接下来写的的文本内容追加到该文件。(结束输入使用ctrl + d) image.png
nl 文本文件:同cat类似都是输出文本文件内容,并且会自动在非空行前面加上行号;
tac 目录名/文件名:同cat功能一致,只是从尾巴处开始倒过来显示;
rev #反向(从右往左)文件中的内容
more 目录名/文件名 : 分页显示文本文件内容,(f键,向前翻页;b键,向后翻页; 空格键,向后翻页; enter键,显示下行),翻到最后一行,自行退出;
less 目录名/文件名: 查看文件内容,但是操作用法同man类似(man实际上就是用less命令打开的手册文档),空格键向下翻页,b键向上翻页,回车键向下一行,k键向上一行,而且即便翻到最后也不会自动退出,在任意地方按q键都能退出;所以less比more更易用常用。
head -n 文件名: 查看文本文件头部内容前n行,不加-n选项是默认前10行
tail -n 文件名:查看文本文件底部n行,不加-n选项默认后10行。-f(follow, 表示追踪新增刷新,比如像日志文件新增内容)
wc 文件名:统计文件内容信息,-l表示lines行数,-w表示words单词数,-c表示bytes字节数。不加选项的话,这三项都输出。(注:常结合管道 | 对查询结果进行统计,比如ls -l | wc -l)
tail.JPG
cut 文件名:字符分割命令,以行为单位,-d 指定分割字符(默认是空格),-f显示分隔后的列号(可以跟多列);注:-d,-f一般同时使用,-d 是指定分割字符,另外-b是按字节分割,-c是按字符分割;在使用cut命令时,分割方式,-b,-c,-d必须指定其一。参考文档
sort 文件名:字符排序命令,以行为单位,-n以数值大小排序(默认按照字符编码排序),-f忽略大小写差别,-r倒序排序,-t指定分割字符(要和-k结合用,-k指定按照分割后的第几列进行排序),-u重复行只显示一行。参考文档
uniq 文件名:显示文本,相邻重复行只显示一行;-c显示文本,相邻重复行只显示一次,并在行首显示重复次数;-d只显示相邻重复行(也是只显示为一行);-D只显示相邻重复行(显示多行);
tr 字符替换:(translate),从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出;单个字符的替换,比如tr 'ab' 'AB' 标准输入,会将输入中的字符串中的a和b分别替换为A和B;-d 要删除的字符,用来删除字符;
tee 文件:一个标准输入,两个标准输出(可以同时输出到shell和文件,可以跟多个文件;如果不想输入shell ,可以重定向到黑洞文件> /dev/null,当然也可以管道流到下一个处理对象);-a表示追加到文件;
比如,ls | tee a.txt b.txt > /dev/null;
文本内容再次处理
程序:指令 + 数据;
读入数据:input;
输出数据:output;
打开的文件都有一个fd:file descriptor(文件描述符)
linux给程序提供三种I/O设备:
标准输入(stdin)- 0:默认接受来自键盘的输入;
标准输出(stdout)- 1:默认输出到终端窗口;
标准错误(stderr)- 2:默认输出到终端窗口;
I/O重定向:改变默认输入输出位置;
">和>>": 输出重定向,后面跟个文件,将标准输出重定向至该文件中,比如 “echo '打印这些内容,并写入文件中' > echoin.txt” 会将内容写入echoin.txt文件中(如果不存在表示创建),> 会覆盖文件中原有内容, >>表示在原文件中新起一行追加。(tee命令可以把数据流同时重定向到文件和屏幕,-a表示追加)
注:>和>>只能重定向标准输出,不能重定向错误输出;2>和2>>可以重定向错误输出,所以二者结合才可以根据实际情况定向输出,比如:ls /home > data.txt 2> err.log,如果没有错误,则是标准输出到data.txt文件,如果发生错误就错误输出到err.log;另外还有一个&>和&>>,不管是标准输出还是错误输出,都重定向输出到文件。
set - c:禁止重定向>覆盖功能;(该模式下要覆盖需用 >| 进行重定向的覆盖,否则提示错误)
set - c:启用重定向>覆盖功能;
“<”:输入重定向,后面跟个文件,将文件内容作为标准输出的入口;
如:tr 'ab' 'AB' < a.txt;将a.txt文件中的内容输出出来,然后将其中的a和b用A和B替换,显示在终端上。
grep: 通过正则表达式,对文本进行过滤,过滤出符合条件的行。用法“ grep 文本文件 规则”,比如 “grep 张 a.txt”,表示过滤出a.txt文件中含有‘张’的行。-n 表示显示行号,-v表示取反(过滤出不符合规则的行),-i表示忽略大小写。
| : 管道,前面命令的执行结果会作为后面命令的执行对象,常和grep联合使用,如‘ls -l | grep right’,表示显示列表中的right那一行;又如“rpm -qa | grep rz”,用来查看是否安装了rz程序,这个用法常用来查看是否安装了某个软件程序。
"echo": 命令行打印文本内容,如echo“ 这些内容会被打印出来”,会显示“这些内容会被打印出来”,一般结合重定向使用。
-
清空文件内容:
1、echo > 文件 (但是文件里会留下一个空行)
2、> 文件
3、利用黑洞文件, cat /dev/null > 文件 -
cmd <<< cmds
把命令语句和后面的换行作为输入提供给cmd去执行。
[zhang@zhang ~]$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
scale=2
5/3
1.66
quit
[zhang@zhang ~]$ echo "scale=2;5/3" | bc
1.66
[zhang@zhang ~]$ bc <<< "scale=2;5/3"
1.66
- :查找文件,-name 文件名,指定要查找的文件名;-type 类型(f表示文件,d表示目录)注:find命令的查找功能异常强大,几乎可以根据文件的任何属性查找,比如属主和属组、文件权限、文件改变时间、文件大小等等,甚至还有动作参数,来指定查找到对应的文件后进行什么样的操作
模板命令,符号 ``(同$(代码内容),功能一样)
可以嵌套在其他命令中,将执行结果作为其他命令的参数使用;
比如删除目录下的文件,不删除目录:rm -rf `find \home\zhang\ -type -f`;
比如删除除了01.js、01.py之外的其它文件: rm -rf `ls | egrep -v '(01.js | 01.py)'`
文件权限
查看
ls -lha 文件或文件夹:查看目录或文件,-l列表形式显示;-a显示所有文件(包含隐藏文件);-h以高可读性显示文件大小;-d查看当前目录。
此命令并可以看出用户或组(相当于角色),对该文件所拥有的权限。
以“drwxrwx---. 2 zhang zhang 4096 2月 22 14:53 test” 为例:
1、 “drwxrwx---”,第一个字母d 表示该文件是一个文件夹(d代表文件夹,-代表文件,l代表链接),后面9个字符分别分三组,每3个一组,第一组表示该文件的所有者对该文件所具有的权限;第二组表示文件所属组(角色)对该文件所具有的权限;第三组表示其它用户对该文件所具有的权限。(r可读权限,w可写权限,x可执行权限;对于文件目录而言,可读表示可以查看其内的文件列表,可写表示可以增删其内的文件,可执行表示可以对其使用命令,所以可执行权限是其他两项权限的前提)
2、“2”,表示该文件的硬链接数,即通过其它文件目录访问到该文件的路径数。
3、“zhang zhang”, 前一个‘zhang’表示该文件的所有者,后一个‘zhang’表示该文件所属组
4、‘4096’表示该文件(夹)大小(字节)
5、‘2月 22 14:53’表示该文件(夹)最后一次编辑时间
6、‘test’文件(夹)名(含路径)
修改权限
chmod : 两种模式,数字或字母。(给文件夹设置权限时,-R表示递归给其内的所有文件夹和文件设置相同权限)
数字:4 + 2 + 1 --- 可读r + 可写w + 可执行x
比如 chmod 764 test/,表示给test文件夹设置,所有者rwx权限,组rw-权限,其他用户r--权限;
字母 : r可读,w可写,x可执行; +增加权限,-减少权限,=设置权限; u给用户权限,g给组权限,a给所有用户、组权限,o给其他用户权限。
比如: chmod u-xr right 表示在原权限基础上,将所有者对该文件(right)的xr权限去掉; chmod g=rw right ,表示将所属组对该文件(right)的权限设置为rw-;chmod o+rx right ,表示对其它用户新增对该文件(right)的rx权限。当然用a的时候表示对文件的所有者所属组其它用户,同时设置权限,而且a可以省略。
注:同时分别给u、g、o设置不同权限时,可用‘,’连接。
chmod --reference=某文件 文件,表示将目标文件的权限修改为跟该参考文件一样;
修改文件所有者和所属组
chown 用户名 目录名或文件名 -R :只有管理员有此操作的权限,修改文件所有者为指定用户,-R表示同时递归修改目录和其内的文件所有者。(chown 用户名:组名 文件名 或者 chown 用户名.组名 文件名,可以同时修改文件的所有者和所属组,注:chown :组名 文件名,表示只修改文件的属组);--reference=某文件,表示将目标文件的属主和属组修改为跟该参考文件一样;
chgrp 组名 目录名或文件名 -R :只有管理员有此操作的权限,修改文件所属组为指定组,-R表示同时递归修改目录和其内的文件所属组。
高级权限
- 注:通过vim命令,编辑别人的只读文件时,如果提示文件是只读的,需要通过‘!’强制保存,如果我们编辑完后,通过尾行模式:‘wq!’是可以保存成功的,但是保存完成后,该文件的属主(所有者)和属组都会被修改成当前用户!!!
- 文件或文件夹的权限除了有rwx外,还有冒险位(s或S)、强制位(s或S)、粘滞位(t或T)。(添加这些特殊权限后,该文件或目录的u或g或o的最后一个权限,如果之前有x,则显示小写s或t,如果之前没有x,则显示大写S或T)
冒险位:通常是给可执行文件命令文件加的(只能给u加,方式是chmod u+s 文件,或chmod 4### 文件,即当用数字时,第一位4表示给文件设置冒险位),比如chmod u+s /usr/bin/vim (注vim命令的可执行文件可以用which查找),设置后通过ll命令可以看到该文件的u的可执行位变成了s;这样用户在用vim命令编辑其他文件时,即使没有该文件权限,也可以临时行使该文件的所有者权限,对文件编辑修改。(注:passwd命令的二进制文件就具有冒险位!:当用户在通过执行一个可执行文件来启动一个进程时,因为这个可执行文件本身是有属主、数组和其它用户对应的权限的,如果当前用户有该可执行文件的执行权限,那么可以执行并创建一个进程,并且这个进程的所有者是启动它的用户,而非可执行文件本身的属主;那么当前这个进程所拥有对其他文件的权限,是该启动用户对其它文件所具有的权限,而不是这个二进制文件本身的属主对其它文件所具有的权限。而冒险位其实是改变了这种规则,进程的拥有者仍然是可执行文件本身的属主,即进程执行起来后对其他文件所具有的权限仍然是其二进制文件的属主对其它文件所具有的权限。) image.png
image.png
强制位:通常是给目录添加的(所以设置方式是chmod g+s 目录 ,或chmod 2###,即当用数字时,第一位2表示给该目录设置强制位),设置了之后通过ll命令可以看到该目录的可执行位变成了s。设置了强制位的目录,不管任何用户,在其内创建的文件的所属组都是该目录的所属组。
粘滞位:通常也是给公共目录设置的(设置方式是chmod o+t 目录,或chmod 1###,即当用数字时,第一位的1表示给该目录设置粘滞位),设置了粘滞位的目录,其内的文件,只能被root用户和文件的所有者删除,其他人无法删除(即便是该文件的所属组的成员)。而且其它用户即便强制修改也不能修改只读文件了(但是可以强制修改后另存为一份其它文件)。
image.png
注:另外百度一下反掩码umask;
-
umask遮罩码
umask:也叫反向掩码,它是用来削去新创建的文件的默认权限的。该命令可以查看umask,后面如果跟上权限值,表示设置umask。管理员和普通用户的默认umask是不同的(都可以修改)。
新创建的文件的权限 = 666 - umask,(但是不管权限是啥,新创建的文件默认是不能有执行权限x的,当计算出来的默认权限上有执行权限x的时候,自动在其权限基础上加1);
新创建的目录的权限 = 777 - umask;
文件软链接和硬链接
ln -s 目录/文件名 链接文件名: 创建链接文件,-s表示创建软链接,不加-s表示创建硬链接。
软链接就类似window系统的文件链接,硬链接就像一个人有两个身份证。
用户和组
由于某些操作比较重要,所以需要管理员用户来操作,或者普通用户通过sudo来临时行使管理员权限。可以通过sudo行使权限的用户,必须是加入了sudo组的用户。命令:
sudo 命令 ;
sudo -l :查看当前用户可以借助sudo行使哪些管理员权限;
-
组
sudo groupadd 组名: 新建组,-g gid 设置自定义gid;-r 添加为系统组;
sudo groupdel 组名:删除组
sudo gpasswd 密码:修改组的密码
组信息保存在/etc/group文件中,可编辑可查看 -
用户
sudo useradd -m -g 组名或组id 用户名:新增用户,-m表示同时创建用户的同名家目录(通常和-k结合使用,-k是指在创建用户的同时,将/etc/skel/目录下的所有文件拷贝到用户家目录下,相当于给用户装修了家目录。注:centOS中即使不加该参数也会创建同名家目录),-g表示给用户设置主组(不加该参数,会自动创建一个跟用户名同名的组,并将其设置为该用户的主组)。-G,表示给用户设置附加组;-u id号表示自己设置用户id;-c给用户添加注释;-s指定用户的默认shell(注:该命令的默认配置在/etc/default/useradd文件中);-r添加为系统用户(系统用户没有家目录,且分配的uid在1-499之间,一般是为用来运行某个服务,所以最好设置bash为nologin,不允许登录)
注:用户分为管理员和普通用户,普通用户又分为 系统用户和一般用户,管理员具有所有权限,uid为0;系统用户常是一些守护进程的程序创建的用户,uid为0-499之间;一般用户为用户创建的普通用户,uid在500-56636之间;
sudo passwd 用户名:给用户设置(修改)密码(会提示输入密码);-l锁定用户(禁用用户);-u解锁用户;-d删除用户密码;
echo 密码内容 | passwd --stdin 用户名:直接给用户设置(修改)密码(注,密码中不要含‘!’等字符);
用户密码信息存储在/etc/shadow文件中
用户信息都保存在/etc/passwd文件中,可查看可编辑
image.png
pwck 用户名:检查用户账号完整性;
change 用户名:-d 修改用户密码的最近一次修改时间;-E修改用户密码的过期时间;-I 修改用户的非活动时间;-m 修改用户密码的最短使用时间;-M 修改用户密码的最长使用时间;-W 密码过期提前警告时间;sudo userdel -r 用户名: 删除用户,-r可以同时删除用户家目录,如果用户的主组和用户同名的话,默认会同时删除该组,-f会忽略错误提示,强制删除用户(f表示force)。
sudo usermod -G 组名 用户名: 给用户设置附加组(则该用户会拥有该组的所拥有的权限),-G是添加附加组(通常和-a一起使用,表示追加附加组,否则会覆盖之前的附加组),-g是设置主组,-c修改注释,-l修改登录名(login)即用户名,-d(重新指定家目录,一般和-m一起使用,move home搬家,将原家目录内容搬到指定新家目录);-L锁定用户(lock,即禁用用户);-U解锁用户(passwd -S 用户名,可以查看用户是否被锁定,另外,passwd -l 用户名 和 passwd -u 用户名 也可以用来加锁和解锁用户)。用户锁定和解锁
比如 通过root管理员账户,“usermod -G sudo zhang” ,给用户zhang设置附加组sudo,则会将zhang加入sudo组内,用户zhang可以通过sudo临时行使管理员权限(ubuntu系统默认是有sudo组的,centOS系统没有该组,需要通过visudo命令修改etc/sudoers文件的方式,来将用户加入sudo)。
newgrp 组名:该用户临时登入指定组,并临时指定该组为其主组(需要新组的密码),退出登录后即失效。
usermod -s /bin/bash 用户名: 设置用户使用的终端软件(默认是dash)(echo $shell:可以查到当前用户使用的shell)
groups [用户名]:查看用户加入的所有组,不加用户名的话,是查看当前用户的所有组。
id [用户名] : 查看用户的详细信息,包括用户id、所属组、组组等,不加用户名的话,则是查看当前用户的。-u代表uid,-g代表gid,-G代表附加组id,-un代表用户名。
finger 用户名:查看用户的账户信息;(新版可能废除了该命令)
gpasswd 组名:给组设置密码;-r 删除组密码; -d 用户名 组名 : 将用户从组中删除;-a 用户名 组名,表示将用户添加进组;
用户、权限、文件的关系
我们通过执行二进制文件来开启一个进程,进程都是有一个发起用户的;一个二进制文件本身也是有权限的,所以它并不是任何用户都可以执行的。所以一个用户执行可执行文件时,能否执行取决于该用户是否对该文件有执行权限,但是假如拥有执行权限,而且权限已经执行起来后,如果该进程需要操作另外一个文件,那么该文件是否允许该进程操作则也取决于该用户是否对该文件有相应的操作权限。
文件位置
which 命令名称: 在PATH变量指定的路径中查询可执行文件所在的位置(通常在/bin、/sbin、/sur/bin、/sur/sbin下)
whereis :主要用于定位可执行文件、源代码文件、帮助文件在文件系统中的位置。-b 定位可执行文件,-B 指定搜索可执行文件的路径;-m 定位帮助文件,-M 指定搜索帮助文件的路径;-s 定位源代码文件, -S 指定搜索源代码文件路径
locate 检索文件名称:同whereis类似,且它们使用的是相同的数据库,但whereis只能查找可执行文件、源代码文件、帮助文件等;想要获取更全面结果,使用locate,检索对象可用通配符匹配。-q 安静输入,不显示错误信息;-n 显示n行信息;-r 使用正则匹配;-v 显示版本信息;(功能类似find,但是没有find强大,所以一般使用find命令)
日期时间、磁盘大小、进程管理
date : 查看当前系统时间;“+%Y-%m-%d”和“+%F”等价;“+%F-%m-%d %H:%M:%S”和“+%F %T”等价,用来设置日期的显示格式。-s 时间 ,选项用来设置时间。
cal : (calendar)日历,查看当月日历,-y查看一整年日历
df : (disk free)查看磁盘使用和剩余情况,-h以高可读性显示大小;
du [目录或文件名]:(disk usage)查看目录或文件占用空间大小,不跟目录或文件名,则为查看当前目录占用空间大小,-h以高可读性显示大小,-s(sumarry)汇总显示文件夹整体大小。
ps aux 或ps auxf:(progress state)查看进程情况,不跟选项的话,表示查看当前用户通过终端开启的程序进程,选项a表示查看所有用户通过终端开启的进程,选项u显示详细信息,选项x查看所有进程(比较多,不止包括通过终端开启的),注意:ps命令的这几个选项不加‘-’。-e和a差不多,都是显示全部进程,-f显示全部列。
image.png
top : 动态显示进程情况,按占用资源大小排列
image.png
在显示过程中,按键:
M:按内存占用大小降序排列进程;
P:按cpu占用大小降序排列进程;
q:退出top显示
打包、压缩
-
打包
tar -cvf 打包后的文件名 待打进包内的文件1 待打进包内的文件2:打包。可同时将多个文件打进一个tar包内(可使用通配符匹配多个文件),打包后的总文件一般用一个.tar的后缀名。-c (create)打包,-v(verbose)显示详细过程,-f (file)指定文件;-p保留文件的原来属性;tar -xvf 待解包的包文件:解包,选项-C 目录名,可将文件解包到指定目录中。-x解包,-v显示过程,-f指定文件。
tar -tvf 包文件:不解包的情况下,预览包内容(对应压缩包文件也适用)。
参考文章 -
压缩 gzip
gzip 要压缩的文件:gzip对文件压缩后,原文件会消失,会生成一个文件名为原文件名后面加上.gz的文件。因为gzip不具有打包功能,所以其只能压缩文件,不能压缩目录,如果是目录的话,要加-r,表示递归压缩目录内的所有文件,每个文件被压缩后都会变成一个.gz的压缩文件。-d表示对文件解压缩(同样的,解压后压缩文件也会消失)。
注:默认tar命令只有打包功能,不具备压缩功能,但用tar打包时加上-z选项,可以同时调用gzip压缩工具,比如“tar -zcvf py.tar.gz 01.py 02.py”;
同样的解压解包tar.gz文件用tar -zxvf 待解文件,如“tar -zxvf py.tar.gz ”,选项-C 目录名,可将文件解包到指定目录中。
注:还有一个压缩软件bzip2,用法以及配合tar命令的用法,都和gzip一样,只不过压缩文件名的后缀bz2,是将-zcvf换成了-jcvf,-k表示压缩的是保留原文件;压缩软件xz,文件后缀名是.xz,配合tar的命令是-Jcvf。
zcat 压缩的文本文件:可以查看gzip压缩后的文本文件。
bzcat 压缩的文本文件:可以查看bzip2压缩后的文本文件。
xzcat 压缩的文本文件:可以查看xz压缩后的文本文件。
下载
wget 网址:从网络下载文件,- O 同时重命名下载文件