Linux
Linux没有盘符这个概念,只有一个根目录 / ,所有文件都在它下面。
- ./ 当前目录
- ../上一级目录
Linux主要目录速查表
/
根目录,一般根目录下只存放目录,在linux下有且只有一个根目录,所有的东西都是从这里开始
。
在终端里输入 /home,其实是在告诉电脑,先从 /(根目录)开始,再进入到 home 目录
/bin、/usr/bin
可执行二进制文件
的目录,存放常用命令,如 ls、tar、mv、cat 等。
/boot
放置linux系统启动时
用到的一些文件,如linux的内核文件:/boot/vmlinuz,
系统引导管理器:/boot/grub
/dev
放置linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,
常用的是挂载光驱 mount /dev/cdrom /mnt
它里面的每一个子目录对应一个外设
,比如我们的光盘驱动器的文件就在这里面
/etc
系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有
- /etc/inittab
- /etc/fstab
- /etc/init.d
- /etc/X11
- /etc/sysconfig
- /etc/xinetd.d
(类似于Windows下的path)
/home
- 系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下
- 表示当前用户的家目录
~edu 表示用户 edu 的家目录
/lib、/usr/lib、/usr/local/lib
系统使用的函数库
的目录,程序在执行过程中,
需要调用一些额外的参数时需要函数库的协助
/lost+fount
系统异常产生错误时,会将一些遗失的片段放置于此目录下
/mnt、/media
光盘默认挂载点,通常光盘挂载于 /mnt/cdrom下,也不一定,
可以选择任意位置进行挂载
/media 媒体,可移动的外设
(USB盘、SD卡)插入电脑时,
Linux可以让我们通过media的子目录来访问这些外设的内容
/mnt Mount的缩写,表示挂载,类似media,一般表示临时挂载一些装置
/opt
给主机额外安装软件所摆放的目录
比如开发者安装一个ORALCE数据库则就可以放到这个目录下,默认是空的
/proc
此目录的数据都在内存中,如系统核心,外部设备,网络状态,
由于数据都存放于内存中,所以不占用磁盘空间,
比较重要的文件有:/proc/cpuinfo、/proc/interrupts、/proc/dma、
/proc/ioports、/proc/net*等
这个目录是一个虚拟的目录,它是系统内存的映射,
我们可以通过直接访问这个目录来获取系统信息
/root
系统管理员root的家目录
/sbin、/usr/sbin、/usr/local/sbin
放置系统管理员使用的可执行命令,
如fdisk、shutdown、mount等。与/bin不同的是,
这几个目录是给系统管理员root使用的命令,一般用户只能“查看”
而不能设置和使用
/tmp
一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,
重要数据不可放置在此目录下
/srv
服务启动之后需要访问的数据目录,如www服务需要访问的网页数据存放在
/srv/www内
service的缩写,该目录存放一些服务启动之后需要提取的数据
/run
一些运行过程中跟用户和进程有关的数据,属于内核文件
/usr
应用程序存放目录
这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,
类似于windows下的program files目录
/usr/bin:存放应用程序
/usr/share:存放共享数据
/usr/lib:存放不能直接运行的,却是许多程序运行所必需的一些函数文件
/usr/local:存放软件升级包
/usr/share/doc:系统说明文件存放目录
/usr/share/man:系统说明文件存放目录
/var
放置系统执行过程中经常变化的文件
variable的缩写,表示动态的,通常包含程序的数据,比如Log文件
/var/log:随时更改的日志文件
/var/spool/mail:邮件存放的目录
var/run:程序或服务启动后,其PID存放在该目录下
Linux常用命令
查看文件信息:ls(英文全拼 list files)
ls 常用参数
-a 显示指定目录下所有子目录与文件,包括隐藏文件
-l 以列表方式显示文件的详细信息
-h 配合 -l 以人性化的方式显示文件大小
(ls -alh 可以这样配合使用)
切换工作目录:cd (英文全拼 change directory)
命令
后面可以跟绝对路径,也可以跟相对路径。
如果省略目录,则默认切换到当前用户的主目录。
cd 切换到当前用户的主目录(/home/用户目录),用户登录的时候,
默认的目录就是用户主目录(跟 cd ~ 一样)
cd .. #切换到上一级目录
cd - #切换到上次所在的目录
显示当前工作路径:pwd(英文全拼 print working directory)
使用pwd命令可以显示当前的工作目录,该命令很简单,直接输入pwd即可,后面不带参数。
创建目录:mkdir(英文全拼 make directory)
通过mkdir命令可以创建一个新的目录。参数 -p可递归创建目录。
需要注意的是新建目录的名称不能与当前目录中已有的目录或文件同名,
并且目录创建者必须对当前目录具有写权限。
mkdir -p test/a1/b1 #递归创建
mkdir aa bb cc #创建多个目录,用空格隔开
删除文件:rm (英文全拼 remove file)
可通过rm删除文件或目录。使用rm命令要小心,因为文件删除后不可恢复。
为了防止文件误删,可以在rm后使用 -i 以逐个确认要删除的文件。
rm -r 123.txt
rm 1.txt 2.txt #删除多个文件用空格隔开
rm 常用参数
-i 以进行交互的方式执行
-f 强制删除,忽略不存在的文件,无需提示
-r 递归地删除目录下的内容,删除文件夹的时必须加此参数
rm本身只能删除文件,如果要删除目录,
或连着目录文件一起删的时候一定要带上 -r
一般不论删除任何文件或目录,都带上 -r,会有提示
rm -rf 强制删除并没有提示(慎用)
创建文件:touch
touch test.txt
touch 123.txt 456.txt #创建多个文件,用空格隔开
touch aa/123.txt #创建文件到指定目录下
拷贝:cp(英文全拼 copy file)
cp命令的功能是将给出的文件或目录复制到另一个文件或目录中,
相当于DOS下的copy命令。
(复制多个文件用空格隔开)
cp 1.txt ../2.txt 将文件1.txt复制到上级目录,并重命名为2.txt,
如果上级目录中存在同名文件,会询问是否覆盖
【注意:不加参数-r或-a只能复制文件,不能复制目录】
常用选项说明
-a 该选项通常在复制目录时使用,它保留链接、文件属性,
并递归地复制目录,简而言之,保持文件原有属性。
(即连着目录文件一起拷贝)
-f 覆盖已存在的目标文件而不提示
-i 交互式复制,即提示让用户确认
-r 若给出的是目录文件,则cp将递归复制该目录下的所有
子目录和文件,目标文件必须为一个目录名。
-v 显示拷贝进度
【示例】
现在tmp文件夹下,有1个文件99.txt,一个目录a1,一个目录a2
cp 99.txt a1 将文件99.txt 复制到a1文件夹中,
没指定新文件名所以还是99.txt
cp 99.txt a1/55.txt 将文件99.txt 复制到a1文件夹中,
且将99.txt重命名为55.txt
cp -r a1 a2 将a1目录及其下文件,复制到目录a2中去
cp -r a1 a2/newa 将a1目录及其下文件,复制到目录a2中去,
且将a1重命名为newa
【总结】
cp复制文件或者目录到一个 新的目录,
只写新的目录的时候,即在那个新目录下创建同名文件或者文件夹
写 新的目录/新文件或目录名 的时候,就是会重命名源文件复制过去
具体看示例(复制目录要用-r或-a)
移动、重命名:mv(英文全拼 move file)
用户可以使用mv命令来移动文件或目录,也可以给文件或目录重命名
(删除和复制需要-r来确定是否递归,移动不需要)
(移动多个文件的时候用空格隔开)
示例:现在tmp文件夹下,有1个文件99.txt,一个目录a1,一个目录a2
mv 99.txt 98.txt 就是把99.txt 移动至当前目录,并重命名为98.txt
mv 99.txt a1/97.txt 就是把99.txt 移动至a1目录,并重命名为97.txt
mv 99.txt a1 将文件99.txt 移动至a1目录
mv a1 a2 将目录a1及其下所有文件移动至目录a2中
mv a1 a2/a5 将目录a1及其下所有文件移动至目录a2中,并重命名目录a1为a5
如果移动时有重名文件,默认会询问是否覆盖
-f 直接覆盖,不提示
-i 会提示是否覆盖
-v 显示移动进度
输出重定向命令:>
Linux允许将命令执行结果重定向到一个文件
,本应显示在终端上的内容保存到指定文件中
。
ls > test.txt(如果test.txt不存在,则创建,存在则覆盖,不会提示)
(先创建后打印,所以test.txt本身也会被打印进去)
【注意】:> 输出重定向会覆盖原来的内容,>> 输出重定向则会追加到文件的尾部。
查看或者合并查看文件内容:cat
cat test1.txt test.txt
cat -n 1.txt #查看文件内容以及行号
tac 1.txt #从最后一行开始反向查看一个文件的内容
管道:一个命令的输出可以通过管道作为另一个命令的输入。
管道我们可以理解为现实生活中的管子,一头塞东西进去,另一头取出来,
这里"|"的左右分为两端,左端塞东西(写),右端取东西(读)。
ls / | more
管道一般可以用于 “过滤” ,“特殊” ,“扩展处理”。
管道不能单独使用,必须需要配合其它指令来一起使用,其作用主要是辅助作用。
用法一:过滤
语法:#ls 【想要过滤的目录地址】 | grep 【想要查找的东西】
过滤案例:需要通过管道查询出根目录下包含“n”字母的文档名称
ls / | grep n
用法二:特殊(了解)
语法:#cat(用来查看文件的指令) 路径 | less
作用:通过管道的操作方法来实现less的等价效果
通过less查看一个文件,#less 路径
通过管道查看一个文件,#cat 路径 | less
用法三:扩展处理
在Linux中的指令有时候是无法达到我们想要的操作的,
而管道就可以结合多个指令来达到我们想要的操作。
问题:请使用管道和其它的命令一起来统计根目录下文档的总个数?
答:#ls / | wc -l
建立链接文件:ln(英文全拼 link files)
Linux链接文件类似于Windows下的 快捷方式
链接文件分为软链接和硬链接。
软链接:软链接不占用磁盘空间,源文件删除则软链接失效。
硬链接:硬链接只能链接普通文件
,不能链接目录。
使用格式:
硬链接
ln 源文件 链接文件
软链接
ln -s 源文件 链接文件/链接目录
如果没有 -s 选项代表建立一个硬链接文件,两个文件占用相同大小的硬盘空间,
即使删除了源文件,链接文件依然存在,所以 -s 选项是更常见的形式。
注意:如果软链接文件和源文件不在同一个目录,【源文件要使用绝对路径】,不能使用相对路径。
ln -s /tmp/1.txt /1.txt.l 创建一个软链接,源文件的绝对路径为 /tmp/1.txt
链接文件以及所在目录为 /1.txt.l
不论软硬链接,修改链接文件内容,源文件内容都会跟着变动
文本搜索:grep
Linux系统中grep命令是一种强大的 文本 搜索工具,grep允许对文本文件进行模式查找。
如果找到匹配模式,grep打印包含模式的所有行。
grep一般格式为:
grep [-选项] '搜索内容串' 文件名
在grep命令中输入字符串参数时,最好引号或双引号括起来。
例如:grep 'a' 1.txt (区分大小写)
常用选项说明:
-v 显示不包含匹配文本的所有行(即查找相反的数据)
-n 显示匹配行及行号
-i 忽略大小写
-l 查询多文件时只输出包含匹配字符的文件名
示例:
grep -in 'h' 1.txt 2.txt 3.txt #忽略大小写,显示行号,搜索多个文件中的文本信息
grep搜索内容串可以是正则表达式。
grep常用正则表达式:
^a 行首,搜寻以a开头的行:grep -n '^a' 1.txt
ke$ 行尾,搜寻以ke结束的行:grep -n 'ke$' 1.txt
[Ss]igna[Ll] 匹配[]里中一系列字符中的一个
. (点)匹配一个非换行符的字符:匹配e和e之间有任意一个字符,
可以匹配eee,eae,eve,但是不匹配ee,eaae:grep -n 'e.e' 1.txt
拓展:grep时显示"Binary file filename matches 匹配到二进制文件"
grep如果碰到\000 NUL字符,就会认为文件是二进制文件,而 grep 匹配 默认忽略二进制数据
所以要使用grep -a属性:不忽略二进制的数据,将二进制档案视为文本文件搜寻
查找文件:find
find命令功能非常强大,通常用来在特定的目录下搜索所有
符合条件的文件,
也可以用来搜索特定用户属主的文件。
搜索位置越大,消耗系统资源越多。
在生产服务器上搜索的时候,尽量不在根目录下搜索,把搜索的范围尽量控制在最小。
会级联查找
,所以不适用于统计某一个
目录下的文件数
选项:
-name 按文件名搜索
-iname 按文件名搜索,不区分大小写
-size 按照指定大小搜索文件
-mtime 按照文件数据修改时间搜索
按照权限搜索(略)
-user 按照文件所有者查找文件
-type d 查找目录(会递归查询)
-type f 查找普通文件(会递归查询)
-type l 查找软链接文件(会递归查询)
逻辑运算符
-a and
-o or
-not not
其他选项
-exec
-ok
两者作用基本一致,区别在于:"-exec"会直接执行,"-ok"会先询问
find /var/log -mtime +10 -ok rm -rf 0\ 删除很久不用的一些文件
常用用法:
find . -name test.sh 查找当前目录下所有名为 test.sh的文件
find . -name '*.sh' 查找当前目录下所有后缀名为.sh的文件
find . -iname aa 查找当前目录下所有名为aa的文件或文件夹,不区分大小写
find . -size +28k 搜索文件大小大于28k的文件
如果不写单位,比如就写28,默认是按b(字节)查找,
但是这里的b是按照512byte查找,c才是按照字节搜索
所以 find . -size 28c 才是查找大小为28字节的文件
find . var/log -mtime +10 查找修改时间大于10天的文件
(-10代表10天内,10代表刚好前十天那一天,+10代表大于10天)
find . -user root 查找所有者为root的文件
find. -size +2k -a -type f 在当前目录下搜索大于2KB,且文件类型时普通文件的文件
find . -name cangls -o -name bols 在当前目录下搜索cangls文件,或bols的文件,两个都可以搜索到。
find . -not -name cangls 在当前目录下搜索文件名不是cangls的文件(find . ! -name cangls)
归档管理:tar(英文全拼 Tape archive)
计算机中的数据经常需要备份,tar是Unix/Linux中最常用的备份工具,
此命令可以把一系列文件归档到一个大文件中,也可以把档案文件解开以回复数据。
tar使用格式 tar[参数] 打包文件名 文件
打包
tar -cvf a.tar *.txt
tar -cvf test.tar 1.txt 2.txt 将文件1.txt和文件2.txt打包到test.tar中,
如果再执行 tar -cvf test.tar 3.txt 会覆盖掉之前的文件,
即将3.txt打包,生成test.tar文件,覆盖掉之前的 test.tar 文件
可以用cat查看其中的文件
【f必须放在最后,因为是用来指定文件名称用的,不能放在cv之前】
解包
tar -xvf a.tar -C atar #解包a.tar到指定目录atar下
(只有解包的时候可以用-C来指定解压目录,打包和压缩、解压缩没有该参数)
tar 命令很特殊,其参数前面可以使用"-",也可以不使用。
常用参数:
-c 生成档案文件,创建打包文件
-v 列出归档解档的详细过程,显示进度
-f 指定档案文件名称
-t 列出档案中包含的文件
-x 解开档案文件
【tar -tf test.tar.gz 列出档案中包含的文件】
文件压缩解压:gzip
tar与gzip命令结合使用实现文件打包、压缩。tar只负责打包文件,但不压缩,
用gzip压缩tar打包后的文件,其拓展名一般用xxxx.tar.gz
gzip使用格式如下:
gzip [选项] 被压缩文件
常用选项:
-d 解压
-r压缩所有子目录
示例:gzip -r test.tar
将打包文件 test.tar 压缩为 test.tar.gz
同理,用gzip -d test.tar.gz 会将压缩文件 解压缩为 test.tar
tar这个命令并没有压缩的功能,它只是一个打包的命令,
但是在tar命令中增加一个选项(-z)可以调用gzip实现一个压缩的功能,
实行一个先打包后压缩的过程。
压缩用法:tar -cvzf 压缩包包名 文件1 文件2 ...
-z:指定压缩包的格式为 file.tar.gz
示例:tar -cvzf test.tar.gz 1.txt 2.txt 将文件1.txt 2.txt 打包并压缩为 test.tar.gz
解压用法: tar -zxvf 压缩包包名
-z:指定压缩包格式为 file.tar.gz
tar -zxvf test.tar.gz -C aa 解压缩并解包到目录aa
解压到指定目录:-C(大写字母"C")
【f必须放在最后,因为是用来指定文件名称用的】
【tar -tf test.tar.gz 列出档案中包含的文件】
【会默认覆盖同名文件】
切换到管理员账号 su (英文全拼 switch user)
Centos下切换到root的简单命令:su [-] [用户名]
-
- 符号是可选的,表示是否在切换用户后加载环境变量,建议带上
-
参数:用户名,表示要切换的用户,用户名也可以省略,省略表示切换到root
-
切换用户后,可以通过exit命令退回上一个用户,也可以使用快捷键 Ctrl+D
-
使用普通用户,切换到其它用户需要输入密码,如切换到root用户
-
使用root用户切换到其它用户,无需密码,可以直接切换
sudo命令(英文全拼 super user do)
允许'普通用户以特权用户的权限
去执行某些特权
命令,
访问和使用本身'没有权限'文件的工具
即用户身份提权,相当于“兵符”,
可以在/etc/sudoers
中配置,开放哪些权限给普通用户
权限范围可控,还不用告知root密码,安全可控
具体操作:
visudo是一个命令,自带语法检测,类似于 vi /etc/sudoers,
但是只使用vi不会检查语法的正确性,
所以使用命令visudo来进行编辑
如果有语法错误会提示
在配置文件 /etc/sudoers 末尾添加
cc ALL=(ALL) NOPASSWD:ALL
然后保存退出,普通用户cc就可以使用sudo了,
且拥有了管理员的全部权限,且不需要再输入密码
只有root用户可以配置 /etc/sudoers文件
设置指定权限给指定用户
比如配置写:
cc ALL=(ALL) /bin/cp
表示只给cc /bin/cp 的特殊权限
cc ALL=(ALL) NOPASSWD:ALL
表示cc用户使用sudo不再需要输入密码
注意:要写到文件末尾(否则匹配不到该选项,还是会需要密码,可能是bug)
用户和用户组
Linux系统中可以:
- 配置多个用户
- 配置多个用户组
- 用户
可以加入多个用户组
中
Linux中关于权限的管控级别有2个级别,分别是:
- 针对用户的权限控制
- 针对用户组的权限控制
比如,针对某文件,可以控制用户的权限,也可以控制用户组的权限。
所以,我们需要学习在Linux中进行用户、用户组管理的基础命令,为后面学习权限控制打下基础。
用户组管理
以下命令需root用户执行
-
创建用户组
groupadd [-g] 用户组名,示例:groupadd -g 550 test,创建一个用户组,组名为test,GID为550
-
删除用户组
groupdel 用户组名
-
修改组ID
groupmod –g 551 mygroup1 更改mygroup1的组ID为551
用户管理
以下命令需root用户执行
-
创建用户
useradd [-g -d -u] 用户名
- 选项:-g指定用户的组,不指定-g,会创建同名组并自动加入,指定-g需要组已经存在;如已存在同名组,必须使用-g(比如存在一个用户组test,如果此时再创建一个用户test,则必须使用-g)
- 选项:-d指定用户HOME路径,不指定,HOME目录默认在:/home/用户名
- 选项:-u指定用户的UID以及GID,示例:useradd -u 1000 cxk,创建一个UID,GID为1000的新用户(默认GID=UID)
-
删除用户
userdel [-r] 用户名
- 选项:-r,删除用户的HOME目录,不使用-r,删除用户时,HOME目录保留
-
设置/删除用户密码
passwd [-d] 用户名
- 选项:-d,删除指定用户的密码
-
查看用户所属组
id [用户名]
- 参数:用户名,被查看的用户,如果不提供则查看自身
-
修改用户所属组
usermod [-aG -u -g] 用户组 用户名
- 选项:-aG将指定用户
加入
指定用户组,示例:usermod -aG test2 cxk(-a 添加用户到组,-G 修改用户所属的附加群组) - 选项:-u修改用户的UID,示例:usermod -u 552 cxk,将用户cxk的UID改为552
- 选项:-g修改用户所属组,示例:usermod -g lbw cxk,将用户cxk更改归属到用户组lbw中
- 选项:-d修改登录目录,示例:usermod -d /home/hnlinux root
- 选项:-aG将指定用户
-
将用户从指定用户组中移除
gpasswd -d 用户名 用户组名
也可以直接去编辑配置文件 /etc/group
getent
-
getent passwd 查看当前系统中有哪些用户
即 cat /etc/passwd 任何用户都可以查看,但只有root用户可以更改
会展示出7份信息,分别是:
用户名:密码(x):用户ID:组ID:描述信息(无用):HOME目录:执行终端(默认bash)
-
getent group 查看系统中有哪些组
即 cat /etc/group 任何用户都可以查看,但只有root用户可以更改,一般Linux系统的用户组都没有密码
包含4份信息,
组名称:组认证(显示为x):组ID:组内用户列表
-
getent gshadow 查看用户密码
即 cat /etc/gshadow 只有root用户可以查看
UID和GID号
UID: Linux系统中的每一个用户账号都有一个数字形式的身份标记,称为UID,对于系统核心来说,UID作为区分用户的基本依据,原则上每个用户的UID号应该是唯一的。root用户账号的UID号为固定值0。而程序用户账号的UID号默认在1-499之间,500-60000的UID号默认分配给普通用户账号使用。
GID: 每一个组账号也有一个数字形式的身份标记,称为GID。root组账号的GID号为固定值0,而程序组账号的GID号默认在1-499之间,普通组账号使用的UID号默认为500-60000。
普通用户、组账号使用的默认UID、GID号范围定义在配置文件“/etc/login.defs”中。
who命令
用于查看当前所有登录系统的用户信息。
-q 只显示用户的登录账号和登录用户的数量
-u 显示列标题
关机重启:reboot、shutdown
shutdown -r now #就是reboot
shutdown -h now #就是halt
shutdown -c #取消已执行的shutdown命令
shutdown -r 9:20 #指定时间重启
shutdown -h 9:20 #指定时间关机
shutdown -h 10 #10分钟后关机
shutdown -k #不执行任何关机操作,只发出警告信息给所有用户
查看命令位置:which
示例:which ls 查看命令ls的所在位置(绝对路径)其实就是在PATH中找有没有这个命令所在的目录
修改文件权限:chmod
chmod修改文件权限有两种使用格式:字母法与数字法。
字母法:chmod u/g/o/a +/-/= rwx 文件
u user表示该文件的所有者
g group表示与该文件的所有者属于同一组(group)者,即用户组
o other表示其他以外的人
a all表示这三者皆是(想同时设定以上3种权限的时候使用)
+增加权限
-撤销权限
=设定权限
r read表示可读取,对于一个目录,如果没有r权限,
那么就意味着不能通过ls查看这个目录的内容。
对于一个文件,没有r就不能cat
w write表示可写入,对于一个目录,如果没有w权限,
那么就意味着不能在目录下创建新的文件、删除、改名等。
对于一个文件,没有w就不能vi
x excute表示可执行,对于一个目录,如果没有x权限,
那么就意味着不能通过cd进入这个目录。
文件给x就代表为可执行的程序,普通的文本文件不给x权限
drwxr-xr-x d代表文件类型为directory,rwx为u的权限,r-x为g的权限,r-x为o的权限
示例:chmod o+w a1,给文件夹a1加一个其他人可写入的权限(root用户执行)
chmod o=rwx a1,给文件夹a1给定其他人所有权限
chmod o=rw a1,给文件夹a1给定其他人rw权限
数字法(主要):"rwx"这些权限也可以用数字来代替
r 读取权限,数字代号为4
w 写入权限,数字代号为2
x 执行权限,数字代号为1
- 不具任何权限,数字代号为 0
如执行:chmod u=rwx,g=rx,o=r filename
就等同于:chmod u=7,g=5,o=4 filename(但数字法不能直接这样写)
示例:chmod 751 filename:
文件所有者:读、写、执行权限
同组用户:读、执行的权限
其它用户:执行的权限
如果只写一个数字:chmod 7 filename,则默认只改o的权限
chmod 777 1.txt 2.txt 修改多个文件权限用空格隔开
示例:如果普通用户cc创建了一个文件,然后被root剥夺了写入的权限,
文件会显示为只读,但是cc和其他普通用户,可以强制写入,
强制写入并保存后,文件所属用户和用户组会改变(系统版本差异,理论上不可实现)
如果是root用户去强制修改,不会改变文件的所属用户和用户组,
但文件的修改时间会改变
注意:如果想递归所有目录加上相同权限,需要加上参数"-R"。
如:chmod 777 test/ -R 递归 test目录下所有文件
修改权限控制:chown(英文全拼 change owner)
使用chown命令,可以修改文件、文件夹的所属用户和用户组
需要root权限,只有root用户可以执行该命令
语法:chown [-R] \[用户]\[:]\[用户组] 文件或文件夹
- 选项,-R,同chmod,对文件夹内全部内容应用相同规则
- 选项,用户,修改所属用户
- 选项,用户组,修改所属用户组
- :用于分隔用户和用户组
示例:
- chown root hello.txt,将hello.txt所属用户修改为root
- chown :root hello.txt,将hello.txt所属用户组修改为root
- chown root:test hello.txt,将hello.txt所属用户改为root,用户组改为test
- chown -R root test,将文件夹test的所属用户修改为root,并对文件夹内全部内容应用相同规则
修改文件和目录的所属组
语法
chgrp [-R] 所属组 文件名/目录名
示例
chgrp root 1.txt #将文件1.txt的所属组修改为root
要被改变的群组名必须是真实存在的,否则命令无法正确执行,会提示 "invaild group name"
统计文件的字节数等:wc(英文全拼 word count)
wc命令用于统计文件字节、字符、单词与行的数量。
命令格式
wc [option] [FILE]
选项说明
-c 仅显示字节数
-m 仅显示字符数
-w 显示单词数,单词以空格分隔
-l 仅显示行数
示例
假如在/tmp/test/ 目录下,有一个1.txt,内容为Hello World
wc /tmp/test/1.txt #显示 1 2 12 1.txt,其中1是行数,2是单词数,12是字节数
wc 1.txt 2.txt 3.txt #多个文件用空格隔开
统计
查看当前目录内的文件数量(不包含子目录)
ls -l | grep '^-' | wc -l
查看当前目录内子目录的数量(不递归)
ls -l | grep '^d' | wc -l
查看当前目录内所有文件的数量,包括子目录中的文件数量(-R递归)
ls -lR | grep '^-' | wc -l
统计当前目录下,所有文件以及子目录的数量
ls | wc -w
ls | wc -l #因为系统文件排列方式默认都是一行一个,所以这种方法也可以统计
vi编辑
vi +3 1.txt 可以直接定位到文件的第3行
vi编辑时
ESC+
q 不保存退出
q! 不保存强制退出
w 保存但不退出
w! 强制保存不退出
wq 保存退出
wq!强制保存退出
esc后x删除
esc后o跳转到下一行开始编辑
:set number 显示行号
less命令用以查看文件的文本内容
Shift+G定位到文本最后一行
方向键上下控制上下翻行
B向上翻页(back)
F向下翻页(forward)
可以键入 / 要搜索的内容 回车进行字符匹配
q退出
df命令(英文全拼 disk free)和du命令(英文全称 disk usage)
df 快速获取磁盘被占用空间,剩余空间等
df -h 以人类可读的格式显示磁盘空间(否则默认显示单位是字节,不直观)
df -a 包含全部的文件系统
df -i 以inode模式来显示磁盘使用情况
du 显示磁盘空间使用情况,统计 目录或文件 所占磁盘空间大小
du -sh 显示当前目录的磁盘占用情况(h提高可读性,s代表summary,只显示总大小)
du -sh 目录名 在指定目录的情况下,会显示指定目录下的所有文件或文件夹的大小
du -h /usr/ | less 一般配合管道使用,统计/usr下个各个目录,各个文件的大小
两者不同点:
df是总体上统计,不能统计具体文件夹或文件的大小
du既可以总体上统计,又能统计具体的文件夹或文件大小,
但du统计速度慢,因为df是通过文件系统来快速获取,
而du是逐级计算相加统计,有些没权限的目录还进不去
df是粗略的快速的计算,有些已删除的文件也会被统计(没来得及完全释放),
du精确计算,只能看到当前存在没被删除的文件,它计算的大小就是
所有它可以统计的到的文件大小累加和
ps命令(英文全拼 Process Status)
显示瞬间
进程状态
选项:
-a 显示一个终端的所有进程,除会话引线外
-u 显示当前用户进程和内存使用情况
-x 显示没有控制终端的进程
-e 显示所有进程
-f 显示所有字段(UID,PPIP,C,STIME字段)
--sort 按照列名排序
ps -ef 显示所有进程信息,连同命令行
字段解释:
UID:用户ID,即进程的拥有者
PID:进程ID
PPID:父进程ID
C:进程占用的CPU百分比
STIME:进程开始启动时间
TTY:登入者的终端机位置
TIME:进程使用CPU(运算)时间
CMD:调用进程的命令
ps -aux 显示所有包含其他使用者的进程
字段解释:
USER:创建进程的用户
PID:进程ID
%CPU:进程占用CPU的百分比
%MEM:进程占用物理内存的百分比
VSZ:进程占用虚拟内存的大小(单位KB)
RSS:进程占用实际物理内存的大小(单位KB)
TTY:进程在哪个终端运行
STAT:进程状态
START:进程开始启动的时间
TIME:进程使用的CPU(运算)时间
COMMAND:调用进程的命令
ps -ef | grep java #一般与grep配合使用,查找特定进程
查看CPU/内存占用率最高的进程
先按照CPU使用率排序,再展示前10行
head -11 因为标题也算一行
+ - 调整排序,-pcpu降序 +pcpu升序
ps -aux --sort=-pcpu | head -11
同理把 -pcup 换成 -pmem,就能查看内存使用最多的10个进程
查看指定用户的进程
ps -u root -ef | less
head命令
head -c 11 1.txt 从头显示11字节的内容
head -c -2 1.txt 除了文件末尾的两个字符不显示,其余都显示
head -n 11 1.txt
从头显示11行(可以直接写成head -11)
head -n 5 1.txt 2.txt 多个文件用空格隔开(默认会显示文件名)
同时查看多个文件,不显示文件名 head -n 5 -q 1.txt 2.txt
head 1.txt 如果head后面不跟任何数字,则默认显示前 10 行内容
head -30 1.txt | tail -11
查看文件第20-30行的内容(包括20行本身,所以共11条数据)
head -30 取文本前30行内容
tail -11 取文件后11行内容
kill命令
kill -9 3268 彻底杀死进程 3268
3268为PID,可用 ps -ef | grep 筛选查看
free命令
查看内存使用情况
-b 以Byte为单位显示
-k 以KB为单位显示
-m 以MB为单位显示
-h 自动计算单位(最大保留三位数)
-s 间隔秒数 持续观察(间隔多少秒查看一次)
-t 显示总和列
free 不加参数时,默认以KB为单位显示内存大小。
free -m
查看内存使用情况,以MB为单位(一般用这个)
free -s 5 每5秒查看一次内存使用情况
free不是像top命令一样动态变化
字段说明:
-
total:系统可用内存的总大小,因为系统本身也要占一部分,所以不会是设定的20G这样
-
used:分配出去的内存,不一定是被占用了,只是被分配出去了
因为程序在磁盘中读取速度比较慢,在内存中读取会很快,
所以只要你的程序,申请了多少内存,就算程序关闭了,
只要系统内存不告急,也不会回收这个内存
-
free:空闲的内存,没人使用
-
shared:多个进程共享的内存
-
buff/cache:系统缓存大小,因为写缓存比写硬盘速度快,
所以系统专门开辟了这块空间出来,用于提高程序的访问速度,
记录程序运行的一些数据等;
这块空间不是程序需必须要用到的,可以随时还给系统。
-
available:真正还可以被使用的内存
-
Mem:物理内存空间使用情况,通常意义上的物理内存分区
-
Swap:交换分区,物理内存不够用时,临时存放数据;
当系统空间不够的时候,将会清空buff/cache,放到Swap里面来
free + buff/cache 才是系统真正剩下的可以随时使用的内存大小
available <= free + buff/cache
当Swap下的used有值的时候,说明内存不够了
程序占用内存大小恒定,不会因为这个程序新增了多少用户而改变大小
top命令
动态显示当前耗费资源最多进程信息
就像是Windows中的任务管理器
它会以列表的形式展示出系统的当前状态以及进程信息,
并且定时刷新,同时也支持一些交互性的操作
top -c 显示进程完整的路径与名称,按q退出
第一行:
top,代表当前系统时间,22:44:50
up,代表多久没有重启过该服务,xxx day,23:09
load average:1.01,0.88,0.45,代表1分钟、5分钟、15分钟的负载情况
第二行:
Task,代表有多少个进程总数
running,正在运行的进程数
sleeping,休眠状态的进程数(后台运行)
stopped,停止的进程
zombie,僵死的进程
第三行:
Cpu(s)
0.0%us 用户程序(第三方程序)的cpu占用率,
0.1%sy 系统程序的cpu占用率
96.6%id 空闲的cpu占用率
一般 us+sy 不超过70%就正常
超过70%表示很忙,容易出问题
超过90%随时可能崩溃
第四行:
内存使用情况
参数说明:
PID表示进程标示号
USER表示进程所有者的用户名
%CPU表示该进程占用的CPU使用率
%MEM表示该进程占用的物理内存和总内存的百分比
yum、apt-get、wget的区别
yum 一般CentOS是默认安装的
apt-get 是Ubuntu自带的
wget 是通用的
yum
RPM包软件管理器,用于自动化安装配置Linux软件,并可以自动解决依赖问题。
语法:yum [-y][install | remove | search] 软件名称
- 选项:-y,自动确认,无需手动确认安装或卸载过程
- install:安装
- remove:卸载
- search:搜索
yum命令需要root权限,需要联网
apt-get
Ubuntu自带的
语法:apt [-y] [install | remove | search] 软件名称
用法和yum一致,同样需要root权限
- apt install wget,安装wget
- apt remove wget,移除wget
- apt search wget,搜索wget
wget
先使用wget --version
查看是否安装,没有的话,先安装
yum update
yum install wget
wget --version
wget使用
wget命令用来从指定的URL下载文件。
wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,
如果是由于网络的原因下载失败,wget会不断的尝试,
直到整个文件下载完毕。如果是服务器打断下载过程,
它会再次联到服务器上从停止的地方继续下载。
这对从那些限定了链接时间的服务器上下载大文件非常有用
wget使用示例
-
使用wget下载redis的tar.gz文件:
wget https://download.redis.io/releases/redis-6.0.8.tar.gz
该命令会默认下载文件到当前工作目录中
在文件下载过程中,会显示进度条、文件大小、下载速度等 -
使用 -O 选项以其他名称保存下载的文件:
-
要以其他名称保存下载的文件,使用-O选项,后跟指定名称即可:
wget -O redis.tar.gz https://download.redis.io/releases/redis-6.0.8.tar.gz #将即将下载的文件 redis-6.0.8.tar.gz 重命名为 redis.tar.gz
-
指定下载目录以及重命名
wget http://www.baidu.com -O ./happy/page/index.jsp
-
-
使用 -P 选项将文件下载到指定目录
默认情况下,wget将下载的文件保存在当前工作目录中
(不加参数的命令运行时,文件将会存储到当前终端所在的路径)
使用-P选项可以将文件保存到指定目录下,
例如,下面将将文件下载到/usr/software目录下:wget -P /usr/software https://download.redis.io/releases/redis-6.0.8.tar.gz
-
限制下载速度
wget --limit-rate=1m url
-
恢复下载(断点续传 continue)
wget -c url #一般用于大文件下载,丢失链接中断的时候
如果远程服务器不支持断点续传,
wget命令将从头开始下载文件并覆盖现有文件 -
后台下载
wget -b url #一般用于大文件下载
在后台下载时,wget命令的下载状态,
也就是wget命令的标准输出将被重定向到当前目录的wget-log文件。
可以运行tail -f wget-log
查看下载状态 -
下载FTP服务器文件
要从受密码保护的FTP服务器下载文件时,您需要指定FTP用户名和密码
使用wget命令的--ftp-user和--ftp-password选项wget --ftp-user=FTP_USERNAME --ftp-password=FTP_PASSWORD ftp://ftp.example.com/filename.tar.gz
-
下载多个文件
如果要一次下载多个文件,请使用wget命令-i选项,
后跟要下载包URL的文件,在文件的每URL都需要独占一行wget -i linux-distros.txt
linux-distros.txt 内容(每个链接必须独占一个):
http://mirrors.edge.kernel.org/archlinux/iso/2018.06.01/archlinux-2018.06.01-x86_64.iso
https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-9.4.0-amd64-netinst.iso
https://download.fedoraproject.org/pub/fedora/linux/releases/28/Server/x86_64/iso/Fedora-Server-dvd-x86_64-28-1.1.iso
-
测试下载链接
wget --spider URL #链接如果正确,返回内容会有 awaiting response... 200 OK #链接如果错误,返回内容会有 awaiting response... 404 Not Found
split命令
现有一个700M的视频文件 mytest.avi,如果我们想要将其拆分,
可以使用指令
split -b 400M mytest.avi
拆分该文件,以400M为分割,该文件会被切割成2个文件
split默认会采用x字符作为文件前缀,
采用类似aa、ab、ac的字符串依次作为文件后缀,
于是就会变成xaa、xab
常用选项
-b :指定按多少字节进行拆分,也可以指定K、M、G、T等单位
-行数:指定每多少行要拆分成一个文件
比如 split -10 3.txt 就是将文本文件3.txt 按其内容每10行进行拆分
合并文件
cat xaa xab > mytest.avi
设置拆分文件的名称前缀、数字后缀
默认前缀都是x,然后以aa、ab类推这样的形式,这样名称既不达意也不美观
split -b 400M mytest.avi mytest_
#这样前缀就改为了mytest_,#就会以 mytest_aa、mytest_ab这样去显示
split -b 400M -d mytest.avi mytest_
#我们还可以加一个-d让它以数字的形式去显示,即显示为 mytest_00、mytest_01
按照行数进行拆分
split -d -10 3.txt 3_ #可以将文本文件按每10行一个拆分为 3_00、3_01、...
合并后校验
在通过网络来传输大文件,或者在设备之间复制大文件的时候,
可能会出现传输前后数据不一致的情况。
使用 split 来拆分大文件仅仅是故事的开始,
操作完毕后化零为整、完璧归赵才是完美的结局。
因此需要在合并文件后进行文件的完整性校验,
推荐使用md5sum
来计算和比对前后两个大文件的 md5 值。
md5sum mytest.avi mytest_merge.avi
对比合并后的文件的md5值,若一致,则表示合并成功,
不然就可能存在文件在传输过程中损坏的可能
linux中每个文件都会有1个md5值。
【当两个文件的md5值相同,表示这两个文件完全相同】
常用于大型文件的完整性检查
stat命令
用于显示文件的状态信息。
stat命令的输出信息比ls命令的输出信息要更详细。
stat命令可以查看的信息包括:
File:显示文件名
Size:显示文件大小
Blocks:文件使用的数据块总数
IO Block:IO块大小
regular file:文件类型(常规文件)
Device:设备编号
Inode:Inode号
Links:链接数
Access:文件的权限
Gid、Uid:文件所有权的Gid和Uid
access time:表示我们最后一次访问(仅仅是访问,没有改动)文件的时间
modify time:表示我们最后一次修改文件的时间
change time:表示我们最后一次对文件属性改变的时间,包括权限,大小,属性等等
Birth time : 文件创建时间,crtime,不过据查此属性linux已废弃,目前状态显示结果均为-
示例:stat 1.txt
参数传递:xargs
简介
因为ls
、cp
、rm
这些命令,管道不能执行,所以需要通过xargs
语法
#比如现在有一个文件a.txt,内容如下
/tmp/test/test1.txt
/tmp/test/test2.txt
/tmp/test/test3.txt
#然后在/tmp/test/目录下创建3个文件
touch test{1..3}.txt
#语法如下
cat a.txt | xargs -i cp {} /目录
#{}:前面传过来的内容
#-i:为了让大括号生效
#解释:前面传过来的东西交给大括号
参数
-i 将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替
示例
find /etc/ -name '*.conf' | ls -l #这个命令是错误的
find /etc/ -name '*.conf' | xargs ls -l #这样才是正确的
#默认命令为echo,所以还可以用做输出
#定义一个测试文件,内有多行文本数据
# cat test.txt
#a b c d e f g
#h i j k l m n
#o p q
#r s t
#u v w x y z
#多行输入单行输出
# cat test.txt | xargs
#a b c d e f g h i j k l m n o p q r s t u v w x y z
#-n 选项多行输出:
# cat test.txt | xargs -n3
#a b c
#d e f
#g h i
#j k l
#m n o
#p q r
#s t u
#v w x
#y z
#-d 选项可以自定义一个定界符:
# echo "nameXnameXnameXname" | xargs -dX
#name name name name
#结合 -n 选项使用:
# echo "nameXnameXnameXname" | xargs -dX -n2
#name name
#name name
sed命令,英文全拼(Stream Editor)
简介
一种流编辑器,利用脚本来处理文本文件,不改变文件原本的内容
,只把处理结果打印到终端展示
命令选项
-e 以选项中指定的script,即内部命令,来处理输入的文本文件
sed常用内部命令
a 在匹配后面添加
i 在匹配前面添加
d 删除
s 查找替换
示例
#现有一个文本文件1.txt,内容如下
#Hello World
#Not ok
#I'm fine
sed -e '2a drink' 1.txt #在文件1.txt第2行后增加内容drink,drink会在Not ok后面,即追加,append
sed -e '2i drink' 1.txt #在文件1.txt第2行前增加内容drink,drink会在Not ok前面,即插入,insert
sed -e '2,3d' 1.txt #将文件1.txt的2至3行内容删除
sed -e 's/Hellow/My/g' 1.txt #将文件1.txt中的Hello改为My
awk命令
简介
一个强大的文本分析工具
语法
匹配语句awk '{}'
,只能用单引号
{}里面放的是处理每一行时要执行的语句
示例
awk '{print $1}' 1.txt #打印显示文件的第一列
awk '{print $1,$2}' 1.txt #打印显示文件第一和第二列
awk '$1>2' 1.txt #过滤第一列大于2的行
awk '$2==2' 1.txt #过滤第二列等于2的行
awk 'NR==1 {print}' 1.txt #打印文本第一行(NR行号)
awk 'END {print NR}' 1.txt #打印文本文件最后一行的行号 END {这里面放的是处理完所有的行后要执行的语句}
awk '$2>18 {print $1}' 2.txt #过滤第二列大于2的行,并打印它的第一列 {这里面放的是处理完所有的行后要执行的语句}
awk 'NR==1 {print $1}' 1.txt #打印文本第一行的第一列(NR行号)
ps -ef | awk '{print $2}' #过滤只展示所有进程的第二列
ps -ef | grep rtprecv | awk '{print $2}' | xargs kill -9 #筛选进程号,并杀死它
上传下载文件:rz/sz
简介
rz/sz是Linux/Unix同Windows进行ZModem文件传输的命令行工具
需要先安装lrzsz:yum -y install lrzsz
但是只能传递小文件
,而且使用rz/sz需要连接远程服务器的客户端支持,例如XShell,
所以不要直接在Linux系统中操作这个命令,否则会无法弹出文件选择框,很鸡肋没啥用,一般都用工具如XFtp
语法
rz 执行此命令后,在弹出框中选择要上传的文件即可,默认保存到当前所在目录
sz 1.txt 发送文件到本地目录,在弹出框中选择要保存的位置即可
netstat命令
简介
用于显示各种网络相关信息
参数
-a 显示所有选项
-n 不显示别名
-p 显示程序名
-l 列出有在listen(监听)的服务
-t 仅显示tcp相关选项
-u 仅显示udp相关选项
示例
netstat -nultp #查看当前所有已经使用的端口,即被占用的
netstat -nap | grep 3306 #查看3306的相关网络信息,是否被占用
rpm 执行安装包
二进制包(Binary)以及源代码包(Source)两种。二进制包可以直接安装在计算机中,而源代码包将会由RPM自动编译、安装。源代码包经常以src.rpm作为后缀名。
-ivh:安装显示安装进度–install–verbose–hash
-Uvh:升级软件包–Update;
-qpl:列出RPM软件包内的文件信息[Query Package list];
-qpi:列出RPM软件包的描述信息[Query Package install package(s)];
-qf:查找指定文件属于哪个RPM软件包[Query File];
-Va:校验所有的RPM软件包,查找丢失的文件[View Lost];
-e:删除包
示例
rpm -ivh xxx.rpm #安装xxx.rpm包,并显示安装进度信息;
rpm -e --nodeps xxx #强制卸载xxx程序包(注意xxx不带文件后缀rpm)
rpm -qa #列出所有已安装的软件包
scp命令
简介
将本机文件复制到远程服务器上
示例
scp /tmp/test/1.txt root@192.168.68.128:/tmp/test/aa
#/tmp/test/1.txt 本地文件的绝对路径
#1.txt 要复制到服务器上的本地文件
#root 通过root 用户登录到远程服务器(也可以使用其他拥有同等权限的用户)
#192.168.68.128 远程服务器的ip地址(也可以使用域名或机器名)
#/tmp/test/aa 将本地文件复制到位于远程服务器上的路径
#注意连接后需要输入远程机器的登录密码才能传输数据
#即,将本地文件/tmp/test/1.txt,复制到远程服务器192.168.68.128中的/tmp/test/aa目录下
watch命令
简介
以周期性的方式执行给定的指令,指令输出以全屏方式显示
语法
watch [选项][参数]
选项
-n #或--interval 每2秒运行一下程序,可以用-n或-interval来指定间隔的时间。
-d #或--differences 高亮显示变化的区域,而-d=cumulative选项会把变动过的地方(不管最近的那次有没有变动)都高亮显示出来
-t #或-no-title会关闭watch命令在顶部的时间间隔,命令,当前时间的输出
示例
watch -n 1 -d netstat -ant #命令:每隔一秒高亮显示网络链接数的变化情况
watch -n 1 -d 'pstree|grep http' #每隔一秒高亮显示http链接数的变化情况。后面接的命令若带有管道符,需要加''将命令区域归整。
watch 'netstat -an | grep:21 | \ grep<模拟攻击客户机的IP>| wc -l' #实时查看模拟攻击客户机建立起来的连接数
watch -d 'ls -l|grep scf' #监测当前目录中 scf 的文件的变化
watch -n 10 'cat /proc/loadavg' #10秒一次输出系统的平均负载
watch uptime
watch -t uptime
watch -d -n 1 netstat -ntlp
watch -d 'ls -l | fgrep goface' #监测goface的文件
watch -t -differences=cumulative uptime
watch -n 60 from #监控mail
watch -n 1 "df -i;df" #监测磁盘inode和block数目变化情况
拓展
怎么固定虚拟机IP
-
vim /etc/sysconfig/network-scripts/ifcfg-ens33
-
修改 BOOTPROTO="static",ONBOOT="yes"(表示开机生效)
末尾追加IPADDR=192.168.91.128 #想要固定的ip地址,注意网段不一定是91,桥接模式看windows的,nat看虚拟机的 NETMASK=255.255.255.0 GATEWAY=192.168.91.1 #默认网关,要跟Windows或虚拟机的保持一致 DNS1=114.114.114.114
-
重新启动网络服务 service network restart
-
ping www.baidu.com #测试配置后的网卡是否可用
回收站
一般自己创建一个mytmp文件夹,然后一般不用rm
用mv,然后写个脚本定时删除mytmp中的文件
,达到回收站的目的
i节点号
ls -i 1.txt 查看文件的i节点号
find . -inum 1043285 通过i节点号查看文件的名字
之前我们说过,硬连接是非常不好识别链接,
源文件和硬链接文件只是引用计数增加了,其他信息是无法识别的。
但硬连接文件和源文件的i节点号是一样的。
所以我们可以通过i节点号来查询是否有多个文件与之对应。
Linux系统中是一个文件对应一个i节点号,
如果有多个文件对应一个i节点号,说明存在硬连接关系。
【但是我们在平时使用Linux系统的时候,还是不推荐创建文件的硬链接】
文件类型
- 普通文件(文本、电影、音乐等)
d 目录(文件夹)
l 链接文件(软链接)
注意:链接文件有硬链接和软连接,我们一般使用软连接
即可。
文件的硬链接和文件本身是一样的,内部指向同一个inode,ls -l结果的第一个符号仍为 -
d 块设备(一般指硬盘、软盘等存储设备)
c 字符设备(字符终端、串口和键盘等)
p 管道文件(管道文件主要用于进程间通信,可以使用 mkfifo 命令来创建一个管道文件)
s 套接字文件(套接字文件主要用于通信,特别是在网络上)
颜色区分:
1. 绿色文件:执行文件,可执行的程序
2. 红色文件:压缩文件或者包文件
3. 蓝色文件:目录
4. 白色文件:普通,如文本文件、配置文件、源码文件等
5. 浅蓝色文件:链接文件,主要是使用ln命令建立的文件
6. 红色闪烁:表示链接的文件有问题
7. 黄色文件:表示设备文件
8. 灰色文件:表示其他文件
正则表达式
简介
对字符串处理的方法
语法
元数据 | 意义和范例 |
---|---|
^word | 搜寻word开头的行,搜寻以#开头的行,grep -n '^#' 1.txt |
word$ | 搜寻word结尾的行,搜寻以.结尾的行,grep -n '$.' 1.txt |
. | 匹配任意一个字符,匹配e和e之间有任意一个字符,grep -n 'e.e' 1.txt |
\ | 转义字符 |
* | 前面的一个字符重复0到多次,匹配gle,gogle,gooogle等,grep -n 'go*gle' 1.txt |
[list] | 匹配一系列字符中的一个 |
[n1-n2] | 匹配一个字符范围中的一个字符 |
环境变量
简介
-
环境变量是一组信息记录,类型是KeyValue(名称=值),
用于操作系统运行的时候记录关键信息
-
通过
env
命令可以查看当前系统配置的环境变量信息 -
通过$符号,可以取出环境变量的值,
echo ${PATH}ABC
-
什么是PATH,作用是?
环境变量PATH会记录一组目录,目录之间用:隔开。
这里记录的是命令的搜索路径,当执行命令会从记录中记录的目录,
挨个搜索要执行的命令并执行。
比如当你执行cd的时候,它就会挨个去查PATH,看cd.sh在PATH中的那个目录下面,
直到找到
/usr/bin/cd
,就会执行它可以用过修改这个项目的值,加入自定义的命令搜索路径
如
export PATH=$PATH:自定义路径
-
如何修改环境变量?
-
临时生效:export 名称=值,比如
export myname=cxk
,echo $myname
但是关闭终端再打开就没了
-
永久生效
-
针对用户:~/.bashrc文件中配置
export myname=cxk
,echo $myname
但是切换用户就没了
-
针对全部用户:/etc/profile文件中配置
export myname=cxk
,echo $myname
一直存在
-
配置完成,可以通过source命令立刻生效
-
-
示例
#比如我在/tmp/test目录下,创建一个文件,内容为echo
touch hehe
#然后将其改为可执行文件,即赋权
chmod 755 hehe
#然后我去全局环境变量中配置它
vim /etc/profile
#内容追加 export PATH=$PATH:/tmp/test
#然后source /etc/profile
#然后就可以在任何位置去使用hehe命令了
for循环
语法
for 变量 in 列表;do 循环体;done
示例
[root@localhost sed_test]# for i in {2,4,6,8};do echo $i;done
2
4
6
8
[root@localhost sed_test]# for i in {1..5};do echo $i;done
1
2
3
4
5
[root@localhost sed_test]# for i in user{1,4,6};do echo $i;done
user1
user4
user6
[root@localhost sed_test]# for i in {2,4,20};do echo $(($i*3));done
6
12
60
[root@localhost sed_test]# sum=0
[root@localhost sed_test]# echo "$sum"
0
[root@localhost sed_test]# for i in {1..10};do let sum+=$i;done
[root@localhost sed_test]# echo "$sum"
55
[root@localhost test]# for i in *.txt; do echo $i; done
1.txt
2.txt
test1.txt
test2.txt
test3.txt
防火墙
- 查看防火墙服务状态:systemctl status firewalld.service
- 临时关闭防火墙:systemctl stop firewalld.service
- 启动防火墙用:start
- 重启用:restart
- 永久关闭,即自启动禁用防火墙:systemctl disable firewalld.service
- 开机自启动用 enable
在CentOS7中安装MySQL8(8的最新版)
安装
-
配置yum仓库
#更新密钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 #安装MySQL8.x版本,不固定为8.0.32,是随时更新的 yum库 rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm
-
使用yum安装MySQL
#yum安装MySQL yum -y install mysql-community-server
-
安装完成后启动MySQL并配置开机自启
systemctl start mysqld #启动 systemctl enable mysqld #开机自启
-
检查MySQL的运行状态
systemctl status mysqld
配置
主要修改root密码和允许root远程登录
-
获取MySQL的初始密码
#通过grep命令,在/var/log/mysqld.log文件中,过滤password关键字,得到初始密码 grep 'password' /var/log/mysqld.log
-
登录MySQL数据库系统,修改root密码
#执行 mysql -uroot -p #解释 #-u,登录的用户,MySQL数据库的管理员用户同Linux一样,是root #-p,表示使用密码登录 #执行完毕后输入刚刚得到的初始密码,即可进入MySQL
#注意,此处可能有巨坑! #有一些版本,在使用初始密码登录的时候,会报错 ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: NO/YSE) #如果最后的提示是NO,代表密码输入错误 #如果最后的提示是YES,则说明当前用户的密码字段或者Host字段出现问题 #则可先通过绕过密码的方式进行登录,再去修改密码 #修改一下配置文件,`vi /etc/my.cnf` #在最后添加一句`skip-grant-tables`,用来跳过密码验证,然后重启mysql服务 #再进入mysql,先修改密码为空,因为使用了`skip-grant-tables`没办法直接用alter修改密码 #注意,mysql8中,password字段和password()方法,均已被废用!! use mysql; update user set authentication_string='' where user='root'; #再把`skip-grant-tables`注释掉,重启mysql服务 #再使用alter去修改root用户密码 ALTER user 'root'@'localhost' identified with mysql_native_password by 'Qian123#'; #至此终于修改密码成功,重启mysql服务即可 #注意此处加密方式需要设置为mysql_native_password #不然默认为caching_sha2_password,这种加密方式,需要更高版本的navicat才支持
-
配置root的简单密码
#如果我们想给root设置一个简单点的密码,如123456 #则需要配置一下系统全局变量 set global validate_password.policy=LOW; #密码安全级别低 set global validate_password.length=1; #密码长度最低1位数 #然后再设置一下密码 alter user 'root'@'localhost' identified with mysql_native_password by '123456';
-
允许root远程登录,并设置远程登录密码
默认情况下,root用户是不运行远程登录的,只允许在MySQL所在的Linux服务器登录MySQL系统
因为允许root远程登录会带来安全风险
#建议直接修改root的host字段为%,即 update user set host='%' where user='root'; #如果已经创建了多个用户可以使用drop来删除 #示例:drop user root; #默认删除host为%的用户,drop user 'cxk'@'localhost' #别用delete会有残留 #后续修改密码使用如下SQL命令 alter user 'root'@'%' identified with mysql_native_password by '密码'; #授权 grant all privileges on *.* to 'root'@'%'; #刷新mysql权限 flush privileges;
-
退出MySQL控制台页面
#退出命令 exit #或者按快捷键:ctrl+d #重启mysql服务 systemctl restart mysqld
-
检查端口
#MySQL默认绑定了3306端口,可以通过端口占用检查MySQL的网络状态 netstat -anp | grep 3306
局域网连接
必须设置为桥接模式才可以
设置防火墙开放3306端口
systemctl status firewalld #查看防火墙状态
firewall-cmd --zone=public --list-ports #查看已经被防火墙开启的端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent #添加端口
systemctl restart firewalld #重启防火墙
其他
uname -m
显示机器的cpu架构
cat /proc/cpuinfo
显示CPU信息
cat /etc/redhat-release
查看centos版本
date
显示系统日期
date 050411062023.00
设置系统时间(月日时分年.秒),一般用于定时任务程序的测试
cal 2023
显示2023年的日历表
history
历史命令搜索,可以通过!命令前缀,自动执行上一次匹配前缀的命令,
比如之前如果执行了Python命令,那么只需要写!p,它就会从下往上去检索匹配历史命令,
找到并再次执行,这个只适用于短期历史
如果想要找那种比较久远的命令,就可以用:Ctrl+r
去搜索历史命令,
回车可以直接执行,键盘左右键可以得到此命令(不执行)
ctrl+a
跳到命令开头
ctrl+e
跳到命令结尾
ctrl+左右键
向左/右跳一个单词
为什么文件夹的硬链接数为2
首先硬链接不可以对文件夹创建,
但是文件夹本身,包含硬链接数,
那么问题来了,创建一个文件夹,为什么它的硬链接数为2,
然后我再在里面创建一个新的文件夹,它又为3
答:首先,它本身,为1,其次,它的目录下有一个.,代表的是./指向它自己,所以一般为2;
如果再创建一个文件夹,那么在那个新建的文件夹下,又有一个../指向它,所以就为3了
标签:知识点,文件,用户,Linux,test,txt,root,目录 From: https://www.cnblogs.com/save00-01/p/17380189.html这是由于新创建的子文件夹test可通过cd ../进入到父文件夹test中,所以硬链接数加1