一、文件和目录
文件
文件的类型
- 普通文件,包括纯文本文件、二进制文件、各种压缩文件等。
d 目录,类似 Windows 系统中的文件夹。
b 块设备文件,就是保存大块数据的设备,比如最常见的硬盘。
c 字符设备文件,例如键盘、鼠标等。
s 套接字文件,通常用在网络数据连接,可以启动一个程序开监听用户的要求,用户可以通过套接字进行数据通信。
p 管道文件,其主要作用是解决多个程序同时存取一个文件所造成的错误。
l 链接文件,类似 Windows 系统中的快捷方式。
查看文件类型file命令
1.直接使用file命令查看文件类型
root@667d5e45f6a4:/home/MyFiles# file MyFiles.zip
MyFiles.zip: Zip archive data, at least v2.0 to extract
2.使用file -b 命令,不显示文件名
root@667d5e45f6a4:/home/MyFiles# file -b MyFiles.zip
Zip archive data, at least v2.0 to extract
3.使用-i选项来查看poetry文件,输出MIME类型字符串
root@667d5e45f6a4:/home/MyFiles# file -i MyFiles.zip
MyFiles.zip: application/zip; charset=binary
4.设置输出分隔符(和1 对比)
root@667d5e45f6a4:/home/MyFiles# file -F "=>" MyFiles.zip
MyFiles.zip=> Zip archive data, at least v2.0 to extract
** 一些自动化文件分析的脚本,避免分隔符和普通字符造成误解析,会手动调整间隔符
5.查看软连接文件
#新建软连接文件
ln -s file_s.txt file_s_rl.txt
root@667d5e45f6a4:/home/MyFiles# file file_s_rl.txt
file_s_rl.txt: symbolic link to file_s.txt
使用 -L 查看软链文件
root@667d5e45f6a4:/home/MyFiles# file -L file_s_rl.txt
file_s_rl.txt: ASCII text
** file 命令直接查看的软链文件,查看的是软链文件
file -L 命令则直接查看的是软链指向的目标文件信息
查看目录下文件
1. ls [参数] [文件]
参数说明:
-a 显示全部的文件,包括隐藏文件(开头为 . 的文件)也一起罗列出来,这是最常用的选项之一。
-A 显示全部的文件,连同隐藏文件,但不包括 . 与 .. 这两个目录。
-d 仅列出目录本身,而不是列出目录内的文件数据。
-f ls 默认会以文件名排序,使用-f选项会直接列出结果,而不进行排序。
-F 在文件或目录名后加上文件类型的指示符号,例如,*代表可运行文件,/ 代表目录,= 代表 socket 文件,| 代表FIFO 文件。
-h 以人们易读的方式显示文件或目录大小,如1KB、234MB、2GB 等。
-i 显示 inode 节点信息。
-l 使用长格式列出文件和目录信息。
-n 以 UID 和 GID 分别代替文件用户名和群组名显示出来。
-r 将排序结果反向输出,比如,若原本文件名由小到大,反向则为由大到小。
-R 连同子目录内容一起列出来,等於将该目录下的所有文件都显示出来。
-S 以文件容量大小排序,而不是以文件名排序。
-t 以时间排序,而不是以文件名排序。
--color=never never 表示不依据文件特性给予颜色显示。
--color=always always 表示显示颜色,ls默认采用这种方式。
--color=auto auto 表示让系统自行依据配置来判断是否给予颜色。
--full-time 以完整时间模式 (包含年、月、日、时、分)输出
--time={atime,ctime} 输出 access 时间或改变权限属性时间(ctime),而不是内容变更时间。
** 以上参数可组合进行 eg : ls -al 文件名 .
使用touch 创建文件修改文件时间戳
touch [选项] [文件]
-a:只修改文件的访问时间;
-c:仅修改文件的时间参数(3 个时间参数都改变),如果文件不存在,则不建立新文件。
-d:后面可以跟欲修订的日期,而不用当前的日期,即把文件的 atime 和 mtime 时间改为指定的时间。
-m:只修改文件的数据修改时间。
-t:命令后面可以跟欲修订的时间,而不用目前的时间,时间书写格式为 YYMMDDhhmm。
1.创建文件
touch file.txt
** 如果文件存在 touch 文件名 ,则修改文件的时间戳
2. -d 修改文件指定时间
touch -d "2020-01-01 15:55" file.txt
3.修改 bols 文件的 atime 和 mtime。
[root@localhost ~]# touch -d "2017-05-04 15:44" bols
[root@localhost ~]# ll bols; ll --time=atime bols; ll --time=ctime bols
-rw-r--r-- 1 root root 0 May 4 2017 bols
-rw-r--r-- 1 root root 0 May 4 2017 bols
-rw-r--r-- 1 root root 0 Sep 25 21:40 bols
**ctime不会变为设定时间,但更新为当前服务器的时间
## ctime :文件属性(文件权限,组等)发生改变的时间,
atime :文件的数据被访问时间
mtime :文件内容最后被修改时间
建立软/硬链接文件(ln)
1.建立软连接
ln -s 文件名(源文件名必须是全路径) 软连接文件名
## 软连接说明:
相当于一个文件创建了快捷方式,该文件指向了一个文件(它会新建一个inode指向这个文件),删除源文件,软链接会找不到文件,他只是将inode指向源文件的inode,存储的不是实际数据
2.建立硬链接
ln 文件名 硬连接文件名
## 硬链接说明:
相当于给文件的inode 创建了多个文件名,通过哪一个文件名都可以找到这个文件(这个硬链接的inode会和源文件的inode相同),硬链接不能跨文件系统(分区) 建立,不同的文件系统中inode不同 ,不能指向目录,因为每一个目录下的inode 号是需要从新计算的。目录是需要从新建立,目录下的所有子文件也要和源文件的子文件建立硬链接,所以比较复杂。
** 最终找到的都是这个文件,修改之后文件按内容都已改变
文件复制 (cp)
cp [选项] 源文件 目标文件
选项说明:
-a:相当于 -d、-p、-r 选项的集合,这几个选项我们一一介绍;
-d:如果源文件为软链接(对硬链接无效),则复制出的目标文件也为软链接;
-i:询问,如果目标文件已经存在,则会询问是否覆盖;
-l:把目标文件建立为源文件的硬链接文件,而不是复制源文件;
-s:把目标文件建立为源文件的软链接文件,而不是复制源文件;
-p:复制后目标文件保留源文件的属性(包括所有者、所属组、权限和时间);
-r:递归复制,用于复制目录;
-u:若目标文件比源文件有差异,则使用该选项可以更新目标文件,此选项可用于对文件的升级和备用。
如果多个源文件,则目标文件为目录(文件夹)
文件删除
rm [选项] 文件
选项说明:
-f : 强制删除,不提示信息
-i : 提示信息,和-f 相反
-r : 递归删除
移动、重命名文件
mv [选项] 源文件 目标文件
选项说明 :
-f :如果目标文件夹文件已存在,强制覆盖,不提示
-i : 如果目标文件已存在,提示是否覆盖 (默认选项)
-n : 如果目标文件夹已存在,则不移动,也不提示
-v :显示文件的移动过程
-u :目标文件已存在,但是两者相比,源文件更新,则对目标文件进行升级更新
##移动之后源文件夹的文件会被删除,类似于windows 的剪切
** 如果是相同文件夹下,mv test.txt abc.txt test.txt文件则会更名为abc
#### 在docker ubuntu环境下mv 修改file.txt文件名为test 之后 修改test的内容,查看软链 则是文件未改名之前的内容,直接查看文件内容则是已经修改过了
** 注意查看文件是否有的软链
文件夹
1.创建一级文件夹
mkdir test
2. 创建多级
mkdir -p test/adult
3. 使用 -m 自定义文件夹的权限
mkdir -m 711 acces
在列出文件是可以使用通配符
说明:
ls *a : 列出当前文件夹下所有的a结尾的文件及文件夹
ls *a* : 列出当前文件夹下所有带a的文件及文件夹
通配符:
? : 占位符
*a : 以a结尾的
[a-g]* : 开头从a-g的
*[a-g] : 结尾从a-g的
[a-g]* [ne] : 开头a-g 结尾带 n e 的
查找文件的时候通用
Linux的执行过程
Linux的执行分为4个步骤:
1.判断路径
判断用户是否以绝对路径或相对路径的方式输入命令(如 /bin/ls),如果是的话直接执行。
2.检查别名
root@667d5e45f6a4:/home/test# alias mv
alias mv='mv -i'
** 可以使用 unalias 命令把 别名给删掉
3.判断是内部命令还是外部命令
root@667d5e45f6a4:/home/test# type pwd
pwd is a shell builtin //内部
root@667d5e45f6a4:/home/test# type top
top is /usr/bin/top //外部
4.查找外部命令对应的可执行文件
which pwd
二、打包归档和压缩
打包归档
tar [选项] 文件名.tar 文件名
选项说明:
-c 将多个文件或目录进行打包。
-A 追加 tar 文件到归档文件。
-f 包名 指定包的文件名。包的扩展名是用来给管理员识别格式的,所以一定要正确指定扩展名;
-v 显示打包文件过程;
解包
tar [选项] 文件名.tar
选项说明:
-c 将多个文件或目录进行解包。
-A 追加 tar 文件到归档文件。
-C 目录 指定解包到那个目录下
-f 包名 指定包的文件名。包的扩展名是用来给管理员识别格式的,所以一定要正确指定扩展名;
-v 显示打包文件过程;
打包压缩/解打包压缩分为tar.gz 和 tar.bz2
1.gz文件的压缩、解压缩
tar -zcvf filename.tar.gz filename
tar -zxvf filename.tar.gz
2.bz2文件的压缩、解压缩
tar -jcvf filename.tar.bz2 filename
tar -jxvf filename.tar.bz2
压缩文件和目录
zip格式压缩
zip [选项] 文件.zip 文件或者文件列表、目录
选项说明:
-r :递归压缩目录
-v :显示详细压缩过程
-q :在压缩的过程中不显示执行命令过程
-m : 压缩之后,删除源文件
-压缩级别:1-9,1-最快,9压缩效果最好
-u :更新压缩文件,即往压缩文件中添加新文件。
1.压缩多文件
zip file.zip a.txt b.txt
2.压缩文件夹
zip -r file.zip file/
unzip解压缩
unzip [选项] 文件名.zip
选项说明:
-d 目录名 将压缩文件解压到指定目录下。
-n 解压时并不覆盖已经存在的文件。
-o 解压时覆盖已经存在的文件,并且无需用户确认。
-v 查看压缩文件的详细信息,包括压缩文件中包含的文件大小、文件名以及压缩比等,但并不做解压操作。
-t 测试压缩文件有无损坏,但并不解压。
-x 文件列表 解压文件,但不包含文件列表中指定的文件。
指定解压缩位置
unzip -d /tmp/ ana.zip
gzip压缩文件
gzip [选项] 源文件
选项说明:
-c 将压缩数据输出到标准输出中,并保留源文件。
-d 对压缩文件进行解压缩。
-r 递归压缩指定目录下以及子目录下的所有文件。
-v 对于每个压缩和解压缩的文件,显示相应的文件名和压缩比。
-l 对每一个压缩文件,显示以下字段:
压缩文件的大小;
未压缩文件的大小;
压缩比;
未压缩文件的名称。
-数字 用于指定压缩等级,-1 压缩等级最低,压缩比最差;-9 压缩比最高。默认压缩比是 -6。
1.压缩文件
gzip filename
** 这个压缩完成之后,源文件没有了。
2.保留源文件
gzip -c filename > filename.gz
3.压缩文件夹
gzip -r test/
** 加上递归压缩文件也是不会将文件进行压缩,会将每一个文件夹下的每一个文件压缩为一个文件,不支持多级,软链压缩不了
gunzip 解压缩
gunzip [选项] 文件
选项说明:
-r 递归处理,解压缩指定目录下以及子目录下的所有文件。
-c 把解压缩后的文件输出到标准输出设备。
-f 强制解压缩文件,不理会文件是否已存在等情况。
-l 列出压缩文件内容。
-v 显示命令执行过程。
-t 测试压缩文件是否正常,但不对其做解压缩操作。
1.解压文件夹下的所有文件
gunzip -r test/
## 如果压缩文件是一个纯文本文件可以直接查看内容
zcat 文件名
bzip2压缩
bzip2 [选项] 文件
选项说明:
-d 执行解压缩,此时该选项后的源文件应为标记有 .bz2 后缀的压缩包文件。
-k bzip2 在压缩或解压缩任务完成后,会删除原始文件,若要保留原始文件,可使用此选项。
-f bzip2 在压缩或解压缩时,若输出文件与现有文件同名,默认不会覆盖现有文件,若使用此选项,则会强制覆盖现有文件。
-t 测试压缩包文件的完整性。
-v 压缩或解压缩文件时,显示详细信息。
-数字 这个参数和 gzip 命令的作用一样,用于指定压缩等级,-1 压缩等级最低,压缩比最差;-9 压缩比最高
1.保留源文件
bzip2 -k 文件名
bunzip2解压缩
bzip2 [选项] 文件
选项说明:
-k bzip2 在压缩或解压缩任务完成后,会删除原始文件,若要保留原始文件,可使用此选项。
-f bzip2 在压缩或解压缩时,若输出文件与现有文件同名,默认不会覆盖现有文件,若使用此选项,则会强制覆盖现有文件。
-L 列出文件内容
-v 显示执行命令的过程
1.保留源文件
bzip2 -k 文件名
三、用户和和用户组
UID和GID
UID是用户的唯一标识,
UID :0-499 是系统保留
每一个用户都会有且只有一个初始组,和用户名相同,将用户加入的组成为附加组,可以有多个
所有用户的信息都在/etc/passwd,包括用户属于哪一个组 文件中,都可以对这个文件读操作
用户的密码放在了/etc/shadow中只有root可以访问
不设置密码的用户是无法登录的
GID是组的唯一标识,
同理组也一样
组也有/etc/group 这个文件保存所有组的信息
/etc/gshadow 保存所有组的密码(现在组密码一般没人用)
创建用户 useradd
1.添加新用户的命令
useradd [选项] 用户名
选项说明 :
http://c.biancheng.net/view/844.html
** 一般默认即可
1.添加lamp 用户
useradd lamp
修改密码 passwd
passwd [选项] 用户名
选项说明 :
-S:查询用户密码的状态,也就是 /etc/shadow 文件中此用户密码的内容。仅 root 用户可用;
-l:暂时锁定用户,该选项会在 /etc/shadow 文件中指定用户的加密密码串前添加 "!",使密码失效。仅 root 用户可用;
-u:解锁用户,和 -l 选项相对应,也是只能 root 用户使用;
--stdin:可以将通过管道符输出的数据作为用户的密码。主要在批量添加用户时使用;
-n 天数:设置该用户修改密码后,多长时间不能再次修改密码,也就是修改 /etc/shadow 文件中各行密码的第 4 个字段;
-x 天数:设置该用户的密码有效期,对应 /etc/shadow 文件中各行密码的第 5 个字段;
-w 天数:设置用户密码过期前的警告天数,对于 /etc/shadow 文件中各行密码的第 6 个字段;
-i 日期:设置用户密码失效日期,对应 /etc/shadow 文件中各行密码的第 7 个字段。
修改用户命令 usermod
usermod [选项] 用户名
选项说明:
-c 用户说明:修改用户的说明信息,即修改 /etc/passwd 文件目标用户信息的第 5 个字段;
-d 主目录:修改用户的主目录,即修改 /etc/passwd 文件中目标用户信息的第 6 个字段,需要注意的是,主目录必须写绝对路径;
-e 日期:修改用户的失效曰期,格式为 "YYYY-MM-DD",即修改 /etc/shadow 文件目标用户密码信息的第 8 个字段;
-g 组名:修改用户的初始组,即修改 /etc/passwd 文件目标用户信息的第 4 个字段(GID);
-u UID:修改用户的UID,即修改 /etc/passwd 文件目标用户信息的第 3 个字段(UID);
-G 组名:修改用户的附加组,其实就是把用户加入其他用户组,即修改 /etc/group 文件;
-l 用户名:修改用户名称;
-L:临时锁定用户(Lock);
-U:解锁用户(Unlock),和 -L 对应;
-s shell:修改用户的登录 Shell,默认是 /bin/bash。
1.修改用户的说明信息
usermod -c "docker 用户" docker
2.修改用户的附加组,即 把这一个用户添加到组中
usermod -G root docker
3.锁定、解锁用户
usermod -L docker
usermod -U docker
修改用户密码状态 chage
chage [选项] 用户名
选项说明:
-l:列出用户的详细密码状态;
-d 日期:修改 /etc/shadow 文件中指定用户密码信息的第 3 个字段,也就是最后一次修改密码的日期,格式为 YYYY-MM-DD;
-m 天数:修改密码最短保留的天数,也就是 /etc/shadow 文件中的第 4 个字段;
-M 天数:修改密码的有效期,也就是 /etc/shadow 文件中的第 5 个字段;
-W 天数:修改密码到期前的警告天数,也就是 /etc/shadow 文件中的第 6 个字段;
-i 天数:修改密码过期后的宽限天数,也就是 /etc/shadow 文件中的第 7 个字段;
-E 日期:修改账号失效日期,格式为 YYYY-MM-DD,也就是 /etc/shadow 文件中的第 8 个字段。
1.查看用户的密码状态
chage -l docker
2.设置用户首次登录必须改密
## 设置的初始密码
echo "docker" | psswd --stdin docker
chage -d 0 docker
删除用户 userdel
通过前面的学习我们知道,用户的相关数据包含如下几项:
用户基本信息:存储在 /etc/passwd 文件中;
用户密码信息:存储在 /etc/shadow 文件中;
用户群组基本信息:存储在 /etc/group 文件中;
用户群组信息信息:存储在 /etc/gshadow 文件中;
用户个人文件:主目录默认位于 /home/用户名,邮箱位于 /var/spool/mail/用户名。
1.删除用户,并且删除home下的家目录
userdel -r docker
** 我们在删除用户时,其实删除的是用户相关文件中的用户配置信息,然后删除用户的家目录
我们手动删除文件中相关用户的信息,和删除文件的命令相同
查看用户的UID和GID
id 用户名
1.查看用户的id
[root@localhost ~]# id lamp
uid=501(lamp) gid=501(lamp) groups=501(lamp)
su 命令切换用户
su [选项] 用户名
选项说明 :
-:当前用户不仅切换为指定用户的身份,同时所用的工作环境也切换为此用户的环境(包括 PATH 变量、MAIL 变量等),使用 - 选项可省略用户名,默认会切换为 root 用户。
-l:同 - 的使用类似,也就是在切换用户身份的同时,完整切换工作环境,但后面需要添加欲切换的使用者账号。
-p:表示切换为指定用户的身份,但不改变当前的工作环境(不使用切换用户的配置文件)。
-m:和 -p 一样;
-c 命令:仅切换用户执行一次命令,执行后自动切换回来,该选项后通常会带有要执行的命令。
** su 和 su - 的区别:
带 - 的切换是连工作环境一起切换,否则有些命令执行不了
不带 - 则只是切换的用户角色
who am i 和 whoami 的差别
whoami 指的是用户所处的linux系统当前的用户
who am i 指的当前系统的登录用户是哪一个
创建用户组
groupadd [选项] 用户名
选项说明:
- g GID : 指定组id
-r : 创建系统群组
1.创建名为groupadd1的用户组
groupadd groupadd1
修改用户名 groupmod
groupmod [选项] 组名
选项说明:
-g GID :修改组ID
-n 新组名: 修改组名
1.修改新组名
groupmod -n newgroup groupadd1
删除用户组 groupdel
1. 删除用户组
groupdel 用户组
** groupdel 不能删除已有用户的初始用户组
把用户添加进组或从组中删除 gpasswd
gpasswd [选项] 用户组
选项说明:
: 选项为空时,表示给群组设置密码,仅 root 用户可用。
-A user1,... 将群组的控制权交给 user1,... 等用户管理,也就是说,设置 user1,... 等用户为群组的管理员,仅 root 用户可用。
-M user1,... 将 user1,... 加入到此群组中,仅 root 用户可用。
-r 移除群组的密码,仅 root 用户可用。
-R 让群组的密码失效,仅 root 用户可用。
-a user 将 user 用户加入到群组中。
-d user 将 user 用户从群组中移除。
1.将用户 添加到用户组
gpasswd -a user 用户组名
2.将用户从组中删除
gpasswd -d user 用户组名
** usermod -G 组名 用户名 将用户添加到一个组中
用这个命令的话 用户会从本来所属的所有其他组中移除,
###所以在操作用户添加到组时,用这个gpasswd
切换用户的有效组 newgrp
1.切换用户的所属的有效用户组
newgrp groupname
** 切换用户组之后所创建的文件都属于这个用户组
[lamp@vbrug-01 ~]$ mkdir lamp1 // lamp1初始用户组设置的为group1
drwxr-xr-x 2 lamp group1 6 Sep 17 09:29 lamp1
[lamp@vbrug-01 ~]$ newgrp group2
[lamp@vbrug-01 ~]$ mkdir lamp2
[lamp@vbrug-01 ~]$ newgrp group3
[lamp@vbrug-01 ~]$ mkdir lamp3
[lamp@vbrug-01 ~]$ ll
drwxr-xr-x 2 lamp group1 6 Sep 17 09:29 lamp1
drwxr-xr-x 2 lamp group2 6 Sep 17 09:29 lamp2
drwxr-xr-x 2 lamp group3 6 Sep 17 09:30 lamp3
[lamp@vbrug-01 ~]$
四、Linux 文本处理
cat命令:连接文件并打印输出到标准输出设备
cat [选项] 文件名
或者
cat 文件名1 文件名2 > 文件名3
选项说明:
-A : 相当于 -vET 选项的整合,用于列出所有隐藏的符号
-E :列出每行所有结尾的回车符 $ ;
-n : 对所有的输出行进行编号
-b : 只对非空行进行编号
-T :把Tab键 ^| 显示出来
-V :列出特殊字符
-s :有连续2行以上的空白行时,合并成一行的空白
1.将两个文件合并输出到另一个文件中
cat file1.txt file2.txt > file3.txt
more 命令 : 分屏显示内容
more [选项] 文件名
选项说明:
-n :一次显示的行数
+n :从第几行开始显示内容
-u : 不显示下引号(根据环境变量TERM指定的终端有所不同)
-s : 连续两行以上的空白时,就替换为一行的空白
-c : 先显示内容在清除屏幕
-p : 不以卷动的方式显示每一页,清除屏幕显示内容
-f :计算行数时,以实际的行数,而不是自动换行过后的行数
## 打开交互页面后的 交互指令
交互指令说明 :
h 或 ? : 显示more 命令交互指令的帮助
q 或 Q : 退出more
v : 在当前启动一个编辑器
:f : 显示当前文件的文件名和行号
!命令或 :!命令:在子shell中执行命令
回车 :显示下一行
空格 :显示下一页
Ctrl+l :刷新屏幕
= : 显示当前行的行号
' :转到上一次搜索的地方
Ctrl+f : 向下滚动下一页
. : 重复上一次输入的命令
/字符串:搜索指定字符串
b : 向上移动一页
d : 向下移动半页
head命令:显示文件开头的内容
head [选项] 文件名
选项说明:
-n K : 这里K表示行数,是显示文件前K行的内容;如果使用“ -K ”作为参数,表示除了文件最后K行以外,显示剩余的全部内容。
-c K : K 表示字节数,显示文件前K个字节的内容,如果使用“ -K ”作为参数,表示除了文件最后K字节的内容,显示剩余的全部内容。
-v : 显示文件名;
less命令:查看文件内容
less [选项] 文件名
选项说明:
-N : 显示每行行号
-S :将超过行长的部分舍弃
-e :当文件显示结束后,自动离开
-g :只标志最后搜索到的关键词
-Q :不使用警告音
-i :忽略搜索时的大小写
-m :显示类似more命令的百分比
-f :强迫打开特殊文件,比如外围设备代号 目录、二进制
-s :显示连续空行为一行
-b<缓冲区大小> :设置缓冲区的大小
-o <文件名> :将less 输出的内容保存到指定文件中 //试了不管用
-x<数字> :将tab 键显示为规定的数字空格
## 打开交互页面后的 交互指令
指令说明:
/字符串 向下搜索“字符串”的功能。
?字符串 向上搜索“字符串”的功能。
n 重复*前一个搜索(与 / 成 ? 有关)。
N 反向重复前一个搜索(与 / 或 ? 有关)。
b 向上移动一页。
d 向下移动半页。
h 或 H 显示帮助界面。
q 或 Q 退出 less 命令。
y 向上移动一行。
空格键 向下移动一页。
回车键 向下移动一行。
【PgDn】键 向下移动一页。
【PgUp】键 向上移动一页。
Ctrl+f 向下移动一页。
Ctrl+b 向上移动一页。
Ctrl+d 向下移动一页。
Ctrl+u 向上移动半页。
j 向下移动一行。
k 向上移动一行。
G 移动至最后一行。
g 移动到第一行。
ZZ 退出 less 命令。
v 使用配置的编辑器编辑当前文件。
[ 移动到本文档的上一个节点。
] 移动到本文档的下一个节点。
p 移动到同级的上一个节点。
u 向上移动半页。
tail命令:显示文件结尾的内容
tail [选项] 文件名
选项说明 :
-n K:这里的 K 指的是行数,该选项表示输出最后 K 行,在此基础上,如果使用 -n +K,则表示从文件的第 K 行开始输出。
-c K:这里的 K 指的是字节数,该选项表示输出文件最后 K 个字节的内容,在此基础上,使用 -c +K 则表示从文件第 K 个字节开始输出。
-f:输出文件变化后新增加的数据。
1.监控新写入文件的内容 ,新往文件输出的内容会一直更新
tail -f file3.txt
Linux输入输出重定向
1.输入重定向
命令符号格式说明:
命令 < 文件 :将指定文件作为命令的输入设备
命令 << 分界符 : 表示从标准输入设备(键盘)中读入,直到遇到分界符才停止.
命令 < 文件1 > 文件2 :将文件1 作为命令的输入设备,该命令的执行结果输入到文件2中
eg :
1.将0作为分界符
[root@vbrug-01 lamp]# cat << 0
> bbb
> bbbb
> bbb
> bbb
> 0
bbb
bbbb
bbb
bbb
2.将文件1作为输入设备,并重定向到文件2
cat < /etc/passwd/ > a.txt
2.输入重定向
> :这个是清除文件内容后写入输出内容
>> : 在文件按原本的内容上追加输出内容
命令符号格式说明:
命令 > 文件: 将执行的标准输出结果重定向到指定文件中
命令 2> 文件:将执行的错误输出结果重定向输出到指定文件中
命令 >> 文件: 将命令执行的标准输出结果重定向输出到指定的文件中,如果该文件已包含数据,新数据将写入到原有内容的后面。
命令 2>> 文件:将命令执行的错误输出结果重定向到指定的文件中,如果该文件中已包含数据,新数据将写入到原有内容的后面。
命令 >> 文件 2>&1 或者 命令 &>> 文件:将标准输出或者错误输出写入到指定文件,如果该文件中已包含数据,新数据将写入到原有内容的后面。注意,第一种格式中,最后的 2>&1 是一体的,可以认为是固定写法
grep命令 查找文件内容
grep [OPTIONS] PATTERN [FILE ...]
grep [OPTIONS] [-e PATTERN] ... [-f FILE] ... [FILE ...]
OPTIONS:
^8 :开头是8行
8$ :结尾是8
通配符:支持
-e : 使用正则搜索
-i :不区分大小写
-v :查找不包含指定内容的行
-w :按单词搜索
-c :统计到匹配到的次数
-n :显示行号
-r :逐层遍历目录查找
-A :显示匹配行后面多少行
-B :显示匹配行及前面多少行
-C :显示匹配行及前后多少行 -C3:则表示匹配的前后3行
--color :匹配到的内容高亮显示
--include :指定匹配的文件类型
--exclude :过滤不需要匹配的文件另类型
1.使用正则表达式
grep -e '[a-z]\{5\}' a.txt
2.使用通配符进行搜索
grep a* a.txt
3.查找以leo开头的行
grep ^leo logs.log
4.查找以leo结尾的行
grep leo$ logs.log
5.查找空行
grep ^$ logs.log
6.将搜索结果输出到文件中
grep 基金 lamp.txt > result.log
7.在当前目录及所有子目录查找所有java文件中查找leo
grep -r 基金 . --include "*.txt"
awk 命令详解
未完待续
sed 命令详解
替换脚本命令
替换test为test1 在文本中第二个位置出现的地方
sed 's/test/test1/2'
替换文本中所有的test为test1
sed 's/test/test1/g'
五、权限管理
六、其他常用操作命令
scp :用于Linux之间复制文件和目录
语法:
scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
[-l limit] [-o ssh_option] [-P port] [-S program]
[[user@]host1:]file1 [...] [[user@]host2:]file2
简易写法:
scp [选项] file_source file_target
选项说明:
-1: 强制scp命令使用协议ssh1
-2: 强制scp命令使用协议ssh2
-4: 强制scp命令只使用IPv4寻址
-6: 强制scp命令只使用IPv6寻址
-B: 使用批处理模式(传输过程中不询问传输口令或短语)
-C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
-p:保留原文件的修改时间,访问时间和访问权限。
-q: 不显示传输进度条。
-r: 递归复制整个目录。
-v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。
这些信息用于调试连接,验证和配置问题。
-c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
-F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。
-i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
-l limit: 限定用户所能使用的带宽,以Kbit/s为单位。
-o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式,
-P port:注意是大写的P, port是指定数据传输用到的端口号
-S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项
1.从本地复制文件到远程
scp /home/lamp/file.txt root@39.106.55.243:/home/lamp
** 将文件复制到远程系统的lamp文件夹下
2.从本地复制文件到远程并且重命名
scp /home/lamp/file.txt root@39.106.55.243:/home/lamp/test.txt
** 将文件复制到远程系统的lamp文件夹下,并将文件重命名为test.txt
3.从本地复制目录到目标系统的文件夹
scp -r /home/lamp/adult root@39.106.55.243:/home/lamp/test
4.将文件从远程复制到本地
scp root@39.106.55.243:/home/lamp/test.txt /home/lamp/adult.txt
scp -r root@39.106.55.243:/home/lamp/test /home/lamp/adult
curl
curl [选项] url
选项说明:
-A/--user-agent <string> 设置用户代理发送给服务器
-b/--cookie <name=string/file> cookie字符串或文件读取位置
-c/--cookie-jar <file> 操作结束后把cookie写入到这个文件中
-C/--continue-at <offset> 断点续转
-D/--dump-header <file> 把header信息写入到该文件中
-e/--referer 来源网址
-f/--fail 连接失败时不显示http错误
-o/--output 把输出写到该文件中
-O/--remote-name 把输出写到该文件中,保留远程文件的文件名
-r/--range <range> 检索来自HTTP/1.1或FTP服务器字节范围
-s/--silent 静音模式。不输出任何东西
-T/--upload-file <file> 上传文件
-u/--user <user[:password]> 设置服务器的用户和密码
-w/--write-out [format] 什么输出完成后
-x/--proxy <host[:port]> 在给定的端口上使用HTTP代理
-#/--progress-bar 进度条显示当前的传送状态
lsof命令:列出进程调用或打开的文件信息
lsof [选项]
lsof [-?abhKlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-E] [+|-e s] [+|-f[gG]]
[-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]] [-p s]
[+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]
选项说明:
filename:显示打开指定文件的所有进程
-c String:显示COMMAND列中包含指定字符的进程
-u username:显示所属user进程打开的文件
-g gid:显示归属gid的进程情况
+d /DIR/:显示目录下被进程打开的文件
+D /DIR/ :同上,会递归搜索目录下的所有目录,时间比较长
-p PID:显示pid这个进程打开的所有文件
-U:获取Unix套接口地址
-i <条件> :列出符合条件的进程(4、6、协议、:端口、@ip)
-a :列出打开文件存在的进程
-n<目录>:列出使用NFS的文件
-d xx: 显示使用fd为xx的进程
。。。。 //还有很多,暂时列出这些
1. lsof abc.txt 显示开启文件abc.txt的进程
2. lsof -c abc 显示出以字母 abc 开头进程现在打开的文件
3. lsof -p 1234 列出进程号为1234的进程所打开的文件
4. lsof -g gname/gid 显示归属gname或gid的进程情况
5. lsof -u uname/uid 显示归属uname或uid的进程情况
6. lsof +d /usr/local/ 显示目录下被进程开启的文件
7. lsof +D /usr/local/ 同上,但是会搜索目录下的目录,时间较长
8. lsof -d 4 显示使用fd为4的进程
9.lsof -i 用以显示符合条件的进程情况
10. lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
46 --> IPv4 or IPv6
protocol --> TCP or UDP
hostname --> Internet host name
hostaddr --> IPv4地址
service --> /etc/service中的 service name (可以不止一个)
port --> 端口号 (可以不止一个)
## https://www.cnblogs.com/muchengnanfeng/p/9554993.html
ip 显示或设置网络设备
ip [options] OBJECT { COMMAND |help }
OBJECT的值可以是以下几种
{ link | addr | addrlabel | route | rule | neigh | ntable | tunnel | maddr | mroute | mrule | monitor | xfrm | token }
代表的含义:
link:网络设备
address:设备上的协议(IP或IPv6)地址
addrlabel:协议地址选择的标签配置
route:路由表条目
rule:路由策略数据库中的规则
OPTIONS:
{ -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] | -h[uman-readable] | -iec | -f[amily] { inet | inet6 | ipx | dnet | link } | -o[neline] | -t[imestamp] | -b[atch] [filename] | -rc[vbuf] [size] }
代表的含义:
-V:显示命令的版本信息
-s:输出更详细的信息
-f: 强制使用指定的协议族
-4:指定使用的网络层协议是IPv4
-6:指定使用的网络层协议是IPv6
-0:输出信息每条记录输出一行,即使内容较多也不换行显示;
-r:显示主机时,不使用IP地址,而使用主机的域名。
实例:
ip link show # 显示网络接口信息
ip link set eth0 up # 开启网卡
ip link set eth0 down # 关闭网卡
ip link set eth0 promisc on # 开启网卡的混合模式
ip link set eth0 promisc offi # 关闭网卡的混个模式
ip link set eth0 txqueuelen 1200 # 设置网卡队列长度
ip link set eth0 mtu 1400 # 设置网卡最大传输单元
ip addr show # 显示网卡IP信息
ip addr add 192.168.0.1/24 dev eth0 # 设置eth0网卡IP地址192.168.0.1
ip addr del 192.168.0.1/24 dev eth0 # 删除eth0网卡IP地址
ip route show # 显示系统路由
ip route add default via 192.168.1.254 # 设置系统默认路由
ip route list # 查看路由信息
ip route add 192.168.4.0/24 via 192.168.0.254 dev eth0 # 设置192.168.4.0网段的网关为192.168.0.254,数据走eth0接口
ip route add default via 192.168.0.254 dev eth0 # 设置默认网关为192.168.0.254
ip route del 192.168.4.0/24 # 删除192.168.4.0网段的网关
ip route del default # 删除默认路由
ip route delete 192.168.1.0/24 dev eth0 # 删除路由
ip link # 显示网络设备的运行状态
ip -s link #显示更加详细的设备信息
ip neigh list # 显示邻居表
ip link | grep -E '^[0-9]' | awk -F: '{print $2}' 获取主机所有网络接口
ps 查看正在运行的进程
ps [参数]
参数说明:
a:显示所有程序
-a:显示同一终端下的所有程序
-A:显示所有进程
c:显示进程的真实名称
-N:反向选择
-e:等于“-A”
e: 显示环境变量
f:显示程序间的关系
-H:显示树状结构
r:显示当前终端的进程
T:显示当前终端的所有程序
-au:显示较详细的资讯
-aux:显示所有包含其他使用者的行程
-C<命令>:列出指定命令的状况
-u:显示指定用户的信息
1.显示所有进程信息,连同命令行
ps -ef
2.ps 与grep 常用组合,查找特定的进程
ps -ef | grep tomcat
3.将目前属于自己这次登录的PID与相关信息列出来
ps -l
4.列出所有目前正在内存当中的程序
ps aux
5.列出类似于程序树的程序显示
ps -axjf
6.找出与 cron 与 syslog 这两个服务有关的 PID 号码
ps aux | egrep '(cron|syslog)'
7.指定输出的字段
ps -o pid,ppid,pgrp,session,tpgid,comm
top
top [选项]
选项说明:
-d: 指定top命令每个几秒更新,默认为3秒
-b:使用批处理模式,一般和-n 选项使用,用于把top命令重定向到文件中
-p 进程PID:仅查看指定的PID
-s : top 命令在安全模式中运行,避免交互模式中出现错误
-u :只监听某个用户的进程
-S:以累积模式显示程序信息
top交互窗口:
?或h:显示交互模式的帮助
P:安装CPU的使用率排序,默认选项
M:安装内存的使用率排序
N:按照PID排序
T:按照CPU的累积运算时间排序,也就是TIME+项排序
k:按照PID给予某个进程一个信号,一般用于中止与某个进程信号9是强制中止
r:按照PID给某个进程重设优先级
q: 退出top命令
1.top 命令10秒更新一次,默认3秒
top -n 10
2.top 命令执行3次,并把3次执行结果重定向文件
top -b -n 3 >> ab.txt
3.查看指定PID
top -p 1123
4.top 无交互模式
top -s
find 指定目录下查找文件
find path -option [ -print ] [ -exec -ok command ] {} \;
-mount,-xdev:只检查和指定目录在同一个文件系统下的文件。避免列出其他文件系统中的文件
-amin n:在过去n分钟内读取文件
-anewer file:比文件file更晚读取过的文件
-atime n:在过去n天内被读取过的文件
-cmin n:在过去n分钟内被修改过
-cnewer file:比文件更新文件
-ctime n:在过去n天内被修改过的文件
-empty :空的文件-gid n or -group name : gid 是n 或是group 名称是name
-ipath p,-path p : 路径名称符合p的文件,ipath会忽略大小写
-name name ,-iname name:文件名称符合name的文件。iname会忽略大小写
-size n:文件大小是n单位,b代表512位元组的区块,c表示字元数,k表示kilo bytes ,w是二个为元组
-type c:文件类型是c的文件
type说明:
d: 目录
c: 字型装置文件
b: 区块装置文件
p: 具名贮列
f: 一般文件
l: 符号连结
s: socket
-pid n : process id 是 n 的文件
你可以使用 ( ) 将运算式分隔,并使用下列运算。
exp1 -and exp2
! expr
-not expr
exp1 -or exp2
exp1, exp2
1.将目前目录及其子目录下所有延伸档名是c的文件列出来
find . -name "*.c"
2.将目前目录下及其子目录所有一般文件列出
find .-type f
3.将目前及其子目录下所有最近20天内更新过的文件列出
find .-ctime -20
4.查找/var/log 目录中更改时间在7日以前的普通文件,并在删除之前询问他们
find /var/log -type f -mtime +7 -ok rm {} \;
5.查找目录中文件具有读写权限,并且文件所属组的用户和其他用户具有读权限的文件
find . -type f -perm 644 -exec ls -l {} \;
6.为了查找系统中所有文件长度为0的普通文件,并列出他们的完整路径
## https://www.runoob.com/linux/linux-comm-find.html
七、权限管理
chmod
1.-rwxrwxrwx 表示文件权限为 777 r-4 w-2 x-1
chmod +777 file.txt
chmod =711 file.txt
chmod -111 file.txt
## 文件夹 -R 即是文件夹下所有的子文件都添加这个操作权限
chmod -R +777 /dev
2.用字母表示修改文件的权限
u 表示 用户 g 表示所属组 o 表示其他组 a 表示所有
chmod u=rwx,g=rw,o=x file1.txt
chmod ugo=rw file1.txt
chmod a=rw file1.txt
chown 修改文件的所属组和用户
1.更改文件的用户所有者
chown lamp file.txt
2.修改文件的所属组
chown :group file.txt
3.同时修改文件的所属用户和组
chown lamp:group file.txt
八、Vim
替换当前字符
:%s/\(.\{-},\)/{"name":"\0","type":"string"},/g
打开防火墙端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
未完待续