linux用户文件权限:
<用户权限>
linux用户类型:
- root用户 —- 超级用户 —- 相当于企业大boss
- 普通用户 —- 张三李四 —- 打工仔,小员工,权利小
-
su命令:(命令用户切换)
- 用户名 切换用户

不建议,su 用户名 格式的命令,这样子,切换的用户,没有同时切换环境变量sudo命令:(用户马甲)
利用这个命令,我们可以代替某用户进行浏览系统,默认为root,就好比root用户创建的内容,普通用户是看不见的,但是我们利用命令披上马甲,系统会认为你是root用户。
语法:sudo + 你要干的事情(比如查看root目录) 提权命令,让普通用户可以访问root用户的文件内容
在root用户输入,visudo,会进入一个文本编辑文件,然后利用/root,搜索内容,跳转页面,直到显示如图下显示。
在上图内容中,加入与root一行内容一致的普通用户的内容,就等于将权限放给他了,这个时候在普通用户上,利用sudo命令,就可以查看到root用户的内容了
创建普通用户
useradd命令:(创建用户)
useradd 用户名 #只有在root权限的时候才能创建,且保存的用户实际上都是保存在/etc/passwd 文件当中的
-p 设置密码
id 用户名 #也可以看到用户的一些基础信息
passwd命令:(修改密码)
-n 设置密码的最短生存期,即不能修改密码
- 创建用户,设置密码,禁止该用户登陆,且不创建该用户的家目录
useradd chaoge -p chaoge666 -M -s /sbin/nologin
- 设置账号7天内不能修改密码,允许30天后修改,账号过期7天通知,过期10天禁止登陆
passwd -n 7 -x 30 -i 10 -w 7 chaoge
创建用户的流程
usermod命令:(修改用户信息)
userdel命令:(删除用户)
chpasswd命令:(批量更改用户密码)
直接输入命令回车,然后是输入 用户名1:新密码(回车)用户名2:新密码(ctrl + d结束输入) 就会一下子更改了两个用户的密码了
查看用户
在 /etc/passwd 当中包含了我们的用户信息,我们利用tail命令来查看
tail -5 /etc/passwd #查看最后5行,我们就可以看到我们其他用户的信息
<文件权限>
文件权限类型:
- 属主,属于某个用户,属于谁谁谁
- 属组,属于哪个组的
- 其他人

r read 可读 可以使用cat more less head tail 等命令查看文件内容
w write 可写 可以使用vim 重定向符号等,向文件中写入内容
x exec 可执行,文件是可以执行的
- 没有权限
所以我们通过查看文件信息,也能够很直观的看出这个文件是属于谁的,并且对应的用户都可以做些什么操作。
属主(user)、属组(group)、其他人(other)
并且,我们对于文件夹权限删减增加的时候,必须要有x权限,否则文件夹是不能够打开的,因为就等于这个文件夹不可执行,所以对于文件夹权限,如果我们想要增删改查,x权限至关重要。
chmod命令:(更改文件权限)
语法:chmod change mode
第一种用法:更改为可执行文件
chmod u+x lianxi.sh #将一个普通文件编程了可执行文件
./lianxi.sh #就可以作为一个可执行文件,将文件内容读出来了
这里的 u + x 的命令含义是,给user属主添加一个x可执行命令
第二种用法:将文件所有权限取消
chmod 0 lianxi.txt #这个文件的所有权限都会取消
其实这个命令很简单,我们哪个位置缺少什么权限,我就用哪个位置加上需要的权限,如果不需要就减去某个权限,如 u+x ; u-x。
并且在有了数字表示的情况下,这种命令格式将变得更加简单,首先我们要先明白,rwx的顺序是默认不可更改的,ugo的权限分配也是不可更改的
字母:chmod u=rw,g=rw,o=r lianxi.txt
(另外还有一个a代表的所有用户,a=r,即所有用户都是只读)
数字:chmod 664 lianxi.txt
上面的两种写法所达到的效果是一模一样的~
chown命令:(修改文件属主组信息)
语法:
chown 属主名字 文件/文件夹
chown :属组 文件/文件夹
chown 属主:属组 文件/文件夹
-R 递归修改文件内容
chgrp命令:(更改用户组)

umask命令:(权限控制)
用于限制文件创建时的权限,防止文件创建后权限过大。umask的默认配置在 /etc/profile 61-64行,如果有需要,也是可以进行修改的。但是要知道其中的原理,umask直接在终端输入,是会显示其遮罩码的,而默认的文件权限,是由linux默认最大权限-遮罩码得到的。
比如在root用户是,显示遮罩码为022,即最大权限相减就是644和755,所以在vim进入文本编辑器的时候,更改的也是遮罩码的值,记住这一点就可以了,防止不会更改~
linux默认的最大权限,文本是666,文件夹是777。
root用户创建时的默认权限,文本是644,文件夹是755。
普通用户创建时的默认权限,文本是664,文件夹时775。
chattr命令:(更改扩展属性)
a 只能向文件中添加数据,不得删除,且只能用>>重定向添加,覆盖或vim写入是不行的,
-R 递归更改目录属性
-V 显示命令执行过程
普通的查看文件属性,是看不到这些设置的特殊扩展属性的。
查看文件的特殊属性:lsatter 文件/文件夹
目录文件管理命令:
ls命令:(列出文件夹中的内容)
-a 显示出所有文件以及隐藏文件
-l 详细输出文件夹中的内容(权限,大小,修改时间)
-h 以人类可阅读的方式输出文件内容 —> 与-l拼接为-lh
—full-time 以完整的时间格式输出
-t 根据最后修改的时间进行文件排序
-F 在不同的问文件结尾输出不同的特殊符号
以/结尾就是文件夹
以结尾就是可执行文件
以@结尾就是软连链接,快捷方式
普通文件类型,结尾什么都没有
-d 显示文件夹本身信息,不输出其中的内容
-r 逆转排序
-S 针对文件大小进行排序
*-i 显示文件的inode信息(文件的身份证号,存储了文件的元信息,文件的大小,位置,权限等等)
cd命令:(更改目录)
语法:cd 路径 #就会将自己当前的位置替换成对应路径
几个特殊的目录符号:
. 当前的工作目录
.. 上一级的工作目录
- 上一次的工作目录
~ 当前系统登陆的用户
mkdir命令:(创建文件夹)
+ 文件夹名 创建一个文件夹
+ {文件夹名1,文件夹名2} 创建多个文件夹名
+文件夹名{1..100} 以文件夹名1,文件夹名2,,文件夹名100的形式创建共100个文件夹
-p +文件指定路径 递归创建文件夹,在绝对路径之下创建文件夹
touch命令:(创建和修改)
两个作用:
1.创建普通文件,在linux下文件的后缀格式仅仅是一个名字而已,通过touch创建的都是普通文件
2.修改文件的时间
+文件名{1..100} and +文件名{a..z} 创建多个文件序列,以文件名1,文件名2,,文件名100(文件名a,文件名b,,文件名z)的形式创建共100个文件
-c , —no-create 不创建任何文件
-t STAMP 使用[[CC]YY]MMDDhhmm[.ss]格式的时间替代当前时间
tonch -t 08251002 xx.txt 即将文件的时间更改为8月25日10点02分
-r , —reference=文件 使用指定文件的时间属性替代当前文件时间
cp命令:(复制粘贴)
1.复制普通文件
cp 复制的文件 复制之后的文件名
2.复制普通文件,且改名放入到另一个文件中
cp xx.txt ./dzc/ #复制放入其他文件夹,并保留原文件名
cp xx.txt ./dzc/xxx.txt #复制放入其他文件夹,并更改文件名
3.一次性多次复制文件,放入到另一个文件夹中
cp xx.txt yy.txt ./dzc/
4.复制整个文件夹,必须加上-r参数
cp -r xxx xxx2
5.复制且保持文件属性不变,-p参数用法
cp -p xx.txt yy.txt
-r 递归式复制目录,即目录下所有子文件 -p 复制的时候,属性保持不变(修改时间即各项参数保持原文件)
-d 复制的时候保持软连接(快捷方式)
-a 等于-pdr
-i 覆盖前询问提示
默认系统做了alias别名功能,让我们输入cp的时候其实是cp -i。所以如果我们需要复制成的文件名存在,系统则会提示我们是否覆盖,y则确认覆盖,n则取消覆盖
mv命令:(移动或重命名)
1.移动文件到另一个文件夹
mv ./xx.txt ./xxx #把xx.txt文件移动到xxx文件夹单中
2.移动多个文件,放到另一个文件夹
mv xxx ./xxx/ #将当前目录所有以xxx开头的文件,文件夹都移动到对应文件夹中
3.重命名的用法
mv 旧的文件名 新的文件名
-i 覆盖前询问,系统别名功能,mv其实也是mv -i,进行操作是存在同名都会提示是否覆盖
*-f 覆盖前不询问,强制性覆盖文件
rm命令:(删除)
1.删除普通文件
rm xxx.txt #删除会提问,默认添加了-i参数
2.一次性删除多个文件
rm xx(1).txt xx(2).txt #删除时会依次提问
3.删除文件夹(默认的删除操作只能删除文件,所以我们要利用参数)
rm -r xxx #删除文件夹及其子文件,并且会递归式的确认,依旧是 -i 的别名功能
4.强制删除所有文件和文件夹
rm -f -r ./ 重要!!!这行代码看清楚再执行很危险,如果少一个点,会直接删除根目录下的所有内容!
-f 强制删除,并不提示(f参数基本就是强制性的操作)
-d 只能删除空目录
-r 递归删除目录及其内容
*-v 删除显示过程
shred命令:(粉碎文件)
shred -u 文件名
会将文件的内容用乱码覆盖,并且删除
vim命令:(文本编辑器)
windows平台的文本编辑器
- 记事本 一般用于编写普通的txt文本文件
- notep++ 可以用于写代码支持编程,颜色区分等功能的编辑器
linux平台的文本编辑器
- vi 命令,如同windows的记事本,功能较少
- vim 命令,如同notepad++,功能强大
yum install vim -y #通过yum软件管理工具,安装命令vim,且默认是yes,这个命令得保证机器可以上网
当vim打开不存在的文件的时候,默认会创建文件
vim 文件名 #打开文件
输入 字母i(在光标位置)、字母o(在光标下一行) 进入编辑模式,esc 退出编辑模式,输入冒号:进入底线命令模式
:wq! 退出文本,强制写入文件并退出vim
:q! 不保存退出文本
vim快捷键
h 向左; j 向下; k 向上; l 向右;w 移动到下一个单词;b 移动到上一个单词;数字0 移动到行首;字符$(4) 移动到行尾 ;g 文章开头 ; G 文章结尾 ;H 移动到屏幕的开头 ; L 移动到屏幕的结尾 ; M 移动到屏幕的中间
命令模式下:
/内容 #就可以找到文本中你光标所处位置开始向下关于此内容的存在位置,按n跳转到下一个字符位置
?内容 #在光标位置向上寻找此内容的存在位置,n跳转上一个字符
输入 yy 复制光标所在行 —->> 输入 4yy 复制4行内容
输入 p 打印粘贴的内容
输入 dd 删除光标当前行
输入 D 删除光标当前位置到行尾的内容
输入 x 删除光标当前字符,向后删除
输入 X 删除光标当前字符,向前删除
输入 u 撤销上一步的动作
输入 C 删除光标所在位置,到行尾的内容,且进入编辑模式
输入 o 在当前光标的下一行开始编辑
输入 O 在当前光标的上一行开始编辑
输入 A 快速进入行尾,且进入编辑模式
输入 ZZ 快速保存退出
快捷操作:
快捷删除
- 输入ctrl + v 进入可视块模式
- 用上下左右命令,选择操作的块
- 选中块后,输入d 删除内容
快捷插入多行
- 选中块后,输入大写的I,进行写代码
- 按下esc两次,会自动生成多行代码
常见的vim异常情况:
- 在编辑过程中如果异常关闭了系统,在文件夹中会生一个同名以swp后缀的临时文件,里面保存了异常关闭前的编辑内容,进入文档的时候也会提示是否恢复,恢复文件后,如果不再需要这个临时文件删了即可
ps:vim /etc/motd #进入文本后,可以更改其中的内容,可以是图案也可是激励的话等等,这样在登陆这台机器的时候就会显示这些内容啦~~~~
重定向符号:(传递文件)
- 读取文件内容,且写入到另一个文件中,覆盖写入文件内容
cat wenjian1.txt > wenjian2.txt
- 追加写入文件内容
cat wenjian1.txt >> wenjian2.txt
- 重定向写入符
cat < wenjian2.txt #把文件中的数据,发送给cat命令去读取
文本内容拆分(xargs命令)
xargs -n 4 < wenjian1.txt #把文件内容拆分成每4个字符一行
- 重定向追加写入符
cat >> wenjian1.txt <
上图对于重定向符也是至关重要的,举个栗子🌰
- lsafqf >> cuowu.txt
- lsdsf 2>> cuowu.txt
类似于这样的错误命令,只有加上描述符,他才能够进行重定向操作的
不仅如此,还有 2>&1 把标准错误,重定向到标准输出
cat命令:(读取文件内容)
-n 对每一行进行编号
-b 对非空行进行编号
-s 不输出多行空行,变成一个空行
-E 在每行结束显示$
合并多个文本内容:
cat wenben1.txt wenben2.txt > wenben3.txt
清空文件的用法:
- echo > wenjian1.txt #直接清空文件,留下一个空行
wenjian1.txt #直接清空文件,不留空行
- cat /dev/null > wenjian1.txt #利用cat读取一个黑洞文件,然后清空其他文件
冷知识:/dev/null是linux下一个无内容的文件,称之为“黑洞文件”。
其他读取文件的命令:
tac命令
管道符: |
对字符串进行二次过滤
cat wenjian1.txt | gerp”d”
就会显示 wenjian1.txt 文件当中所有包含字母“b”的行了
grep命令:过滤字符串信息
more命令 less命令 :
more 文件名 #分屏显示文件的内容,类似于阅读模式一样
按下回车是下一行;空格是向下滚动一个屏的大小;=显示当前行号;按下Q是退出more
head命令 tail命令:
head命令用于查看文件开头的n行
head -5 wenjian1.txt #显示文件的前五行内容,默认是10行
-c 指定字符数量,根据 -c 数字 来指定显示的字符数
tail命令则是从后向前查看行,默认数值和用法一致
—关于实时监控
-f 实时刷新文件内容变化,常用于检测日志变动,例如在另一台机器更改了此文本内容的时候的时候,你能能够看到tail -f 命令的内容一直在变化
-F 不断的打开文件,如果文件不存在,-f是不无法检测的,但是-F可以继续检测,如果创新了此文件名的文件内容共,会更新在检测的机器当中
cut命令:(切割字符)
-c 切割字符,-c 4 则取每一行第四个字符,-c 4-7 则取每一行第四个到第七个字符,-c 4,7 则是取每一行第四个和第七个字符,-7 则只取每一行前七个字符, 7- 则取后七个字符【类似于python索引】
-d 自定义分隔符,默认以tab为分隔符 ——>> -b “:”
-f 与-d一起使用,指定显示哪个区域,依旧是用数字索引的方式,来取每一行的分隔后的第几块内容
sort命令:(排序)
-n 对文件第一个字符进行排序,默认从小到大
-r 逆向排序,从大到小
-u 排序去重
-t 指定分隔符进行排序
-k 指定区域进行排序
sotr -n -t “.” -k 4 wenjian.txt #利用“.“进行分隔,然后选择第四个区域进行排序
uniq命令:(输出或忽略重复)
- uniq只会清除连续的重复行,结合sort排序进行去重
sort -n wenjian.txt | uniq
-c 显示重复的次数
-d 只输出重复的行
-u 只显示出现过一次的行
wc命令:(统计信息数)
-c 打印字节数
-m 打印字符数,字符串结尾会存在一个$,所以字符数大多会+1 ——->> cat -E 可以验证思想
-l 打印行数
-L 打印最长行的长度
-w 打印单词数,有一个空格,就产生了一个单词
tr命令:(替换字符)
-c 取代所有不属于第一个字符集的字符
-d 删除所有属于第一个字符的字符
-s 把连续重复的字符以单独一个字符表示
-t 先删除第一个字符集较第二个字符集多出的字符
- 替换标准输入中的大小写
echo “my name” | tr ‘[a-z]’ ‘[A-Z]’ #结果会变成都是大写的内容
- 删除一句话中的指定内容
echo “my name” | tr -d ‘a’ #结果会将所有“a”全部去掉
把文件作为标准输入
tr ‘a’ ‘A’ < wenjian.txt #则wenjian.txt中所有“a”字符会变成“A”
#这里当时想错了,cat是打印出来,再利用管道符进行第二步的替换,虽然能打印出对应的内容,但是文本内容是没有修改的,所以得用重定向符,将更改的形式写入到文件当中才是做到了真正意义上的修改
stat命令:(显示文件状态)
主要信息中包括访问时间(access);修改时间(modify);更改时间(change)
-L 跟随连接
-f 显示文件系统状态而非文件状态
-c 使用
find命令:(查找文件)
语法:find 处理符号链接 要查找的路径 参数 限定条件 执行动作
-name “名字” 增添名字参数,名字中加入的符号,代替是任何单位的位置,如 .txt,则是.txt前不顾为任意内容的所有文件
-maxdepth 数字 最大级目录的层数,如填2,则是最大级目录两层之内的文件内容
-type 指定文件类型,加上字母f,则是指定文本类型,加上字母d,则是指定文件夹类型
-delete 这是执行动作,加在最后放,则会将搜索到的所有文件进行删除
-size 文件大小数值单位 指定搜索的文件大小
-path 加入指定文件路径
-prune 忽略
-ok 执行动作,询问用户是否进行下步操作
-exec 应该是执行动作中不询问用户然后进行下一步操作,这里还需要询问下,当时实验-ok目前认为是都会进行询问,不管之后的操作是否强制
- 根据名字进行全盘搜索
find / -name “*.txt” #会得到整个根目录下所有包含.txt的文件
- 根据文件时间进行搜索
find . -atime -2/2/+2 #则会得到当前目录下访问时间在两天内/两天/超过两天的文件
- find反向查找
find . -maxdepth 1 ! -type d #意思是在当前目前下,最大目录级为1,且不是文件夹类型的所有文件
- find根据文件夹大小搜索
find . -type f -size +200M #意思是在当前目录下的所有文本格式中文件大于200M的所有文件
- find指定文件路径
find . -path “./ttt” -prune -o -name “*.txt” -print 忽略文件夹 找出想要的文件
#意思是在当前目录下,忽略到某文件,然后找出带有某字符的所有文件
- find执行-ok动作
find . -type f -name “*.txt” -ok rm {} \; # {}代替了前面的文件内容
xargs命令:(管道命令)
-d 指定一个分隔符
echo “ddd,ggg,aaa,3eee” | xargs -d “,” #会将内容中以“,”为分隔进行分割
-i 用{}代替传输的数据
find . -name “*.txt” | xargs -i mv {} opt/ #将搜索的内容移动到opt/路径之下,{}代替前者的搜索结果
-I 用字符串替换数据
find . -name “*.txt” | xargs -I dzc mv dzc opt/ #将搜索的内容命名为dzc后移动到opt/路径之下
-n 限制每行输出个数
xargs -n 2 < lianxi.txt #将lianxi.txt的文件内容以每行两个字符的方式读取,如果没有-n参数,则以单行读取
file命令:(查看文件类型)
file + 文件名 #会得到一个文件基本类型
readlink:(查看软连接)
readlink + 文件名 #会得到软连接对应文件的路径
which命令:(查找环境变量中的文件)
查找path环境变量中的文件,Linux内置命令不在path中
whereis命令:(定位二进制)
用来定位指令的二进制程序、源代码文件和man手册页等相关文件的路径。
du命令:(显示文件大小)
-h 直接显示文件的大小
压缩命令:
tar命令:(压缩)
语法:tar 参数 压缩后的文件名 压缩的内容
- 打包文件
tar -cvf yasuo.tar ./* #将当前目录下的所有文件进行打包
- 解压文件
tar -xvf yasuo.tar ./ #将压缩文件解压到当前目录
- 打包且压缩文件,解压文件
tar -czvf yasuo.tar.gz ./* #将当前目录下的所有文件打包并压缩文件
tar -xzvf yasuo.tar.gz ./ #解压的方式也是一样的,只是依旧调用来z参数,并且文件的后缀是有gz的,这也是一种文件的表明手段,对文件本身是没有任何影响的
tar -xzvf yasuo.tar.gz -C ./zhiding/ #指定目录解压缩
- 列出压缩文件中的内容
tar -ztvf yasuo.tar.gz #会显示压缩文件的文件内容
tar -ztvf yasuo.tar.gz ./文件名 #会单独的将文件给提取出来
- 排除文件解压缩
tar -zxvf ./yasuo.tar.gz —exclude paichu.txt #排除指定文件解压
- 针对软连接只要他的源文件进行压缩
tar -zchf yasuo.tar.gz ./ruanlianjie.txt #这是压缩的文件是软连接的源文件
- 对指定类型的文件进行压缩,利用find和$()
tar cf lianxi.tar.gz $(find ./.txt)
tar cf lianxi.tar.gz `find ./txt`
#两者的运行结果是相同的,因为$()和``用法相同,最终都能够讲find命令找到的内容进行压缩操作
这里特别要注意用法,虽然前面都加入了v参数,但是最主要的还是记住,cf是打包,xf是解压,tf是查看压缩文件,v参数不过是能够看到压缩过程,不要因为这些参数记岔了!!z参数是压缩文件的大小!!
gzip命令:(压缩机器)
语法:gizp 文件名
可以将文件压缩的更小,但注意gzip不能压缩文件夹,需要利用tar打包后才能压缩
zip命令:(跨平台压缩工具)
语法:zip 参数 压缩文件名 要压缩的内容
- 压缩和解压
zip yasuo.zip ./* ——-[解压]—>>>>> unzip yasuo.zip
