硬核 Linux“ 修炼 “之路

Linux" 修炼 "之路

一、知识拓展:

1.计算机的结构

img

2、Shell是什么?

Shell 俗称壳(用来区别于核),本身不是内核一部分,只是在内核基础上编写的应用程序。它和微信、QQ应用程序没什么区别,只是它有特殊性,如果没有shell程序,就没法使用Linux系统

3、shell语言特点

SHELL语言是指UNIX操作系统的命令语言,同时又是该命令语言的解释程序的简称。
Shell本身是一个用C语言编写的程序,Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。

4.终端

终端设备,是计算机网络中处于网络最外围的设备,主要是用于用户信息的输入和处理结果的输出

物理终端:键盘、鼠标、显示器。

虚拟终端:模拟终端(图形化界面)切换到重命令行的终端ctrl+alt+f3

​ 伪终端

​ 重命令行的终端切换到模拟终端 ctrl+alt+f2

二、 命令的基本格式

2.1 命令的提示符

[root@localhost ~]#

  • []:这是提示符的分隔符号,没有特殊含义。
  • root:显示的是当前的登录用户, 目前使用的是root用户登录。
  • @:分隔符号,没有特殊含义。
  • localhost:当前系统的简写主机名(完整主机名是 localhost.localdomain)。
  • ~:代表用户当前所在的目录,此例中用户当前所在的目录是家目录。
  • #:命令提示符。超级用户是#,普通用户是$

2.2 命令的基本格式

[root@localhost ~]# 命令 [选项] [参数]

  • 选项:是用于调整命令的功能的

  • 参数:是命令的操作对象

  • 命令名称:动词,要做的某件事

  • 命令对象:一般要处理的文件、目录、用户

​ 注意: = = 严格区分大小写 = =

2.3 sudo 命令

sudo命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。

使用权限:在 /etc/sudoers 中有出现的使用者。

  • -V 显示版本编号
  • -h 会显示版本编号及指令的使用方式说明
  • -l 显示出自己(执行 sudo 的使用者)的权限
  • -v 因为 sudo 在第一次执行时或是在 N 分钟内没有执行(N 预设为五)会问密码,这个参数是重新做一次确认,如果超过 N 分钟,也会问密码
  • -k 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟)
  • -b 将要执行的指令放在背景执行
  • -p prompt 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称
  • -u username/#uid 不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 username 的身份执行指令(#uid 为该 username 的使用者号码)
  • -s 执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell
  • -H 将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录(如不加 -u 参数就是系统管理者 root )
  • command 要以系统管理者身份(或以 -u 更改为其他人)执行的指令

2.4 Linux修改root密码

如果 root 用户的密码忘了, 如何进行找回, 或者如何进行重置

第一种:
  • 首先, 启动系统, 进入开机页面, 在界面按 “e” 进如编辑界面

在这里插入图片描述

  • 进入编辑界面, 使用键盘上的上下键把光标往下移动, 找到以 “Linux 16” 开头内容所在的函数, 在行的最后输入 : init=/bin/sh

    1655402234462

  • 接着输入完成后, 直接快捷键: Ctrl + x 进入 单用户的模式

  • 接着在光标闪烁的位置中输入: mount -o remount,rw / (注意各个单词之间有空格) 完成后回车

    1655402441521

  • 在新的一行最后输入: passwd, 完成后按回车, 输入密码, 然后再次确认密码

    密码修改成功后会提示, passwd… 字样, 说明密码输入成功

    1655402605031

  • 在鼠标闪烁的位置输入 : touch / .autorelabel 注意 touch 与 / 之间有一个空格, 完成后回车

    1655406354340

  • 在光标位置输入 : exec /sbin/init 注意 exec 和 / 之间有一个空格, 完成后回车

    等待系统自动修改, 过程比较长, 请耐心等待, 完成后系统将会重启, 新的密码就生效了

    1655403341829

第二种:

1.在编辑界面按e进入编辑模式,然后再linux那一排的尾部,加rd.break,然后按下Ctrl+x;

2.然后输入语句 mount –o remount,rw /sysroot 相当于挂载文件到sysroot下
3.然后输入语句 chroot /sysroot 这里的ch是change 改变
4.然后输入语句 echo redhat | passwd –stdin root echo标准输出 建立管道到标准输入
5.然后输入语句 touch /.autorelabel 重置文件系统的上下文
6.最后两次退出 exit 退出

img

三、.xshell远 程 连 接Linux

第一步:前提(权限)

首先打开Linux服务器,打开命令终端,切换成root权限👇
注意:密码输入这里是不显示的,所以一定要输入正确

在这里插入图片描述

第二步:查看端口

查看22端口是否开启。一般都是默认开启的哈,还是看一下以防万一。如果没开22端口也是连不上的。

netstat -an  //查看端口的命令

在这里插入图片描述

第三步关防火墙

把Linux防火墙关掉。我们先看一下防火墙是不是开启状态

systemctl status firewalld.service

如果这里👇是绿色的圆点,且是绿色字体active,说明防火墙是打开的(我这里是已经关掉的)

在这里插入图片描述

关闭防火墙命令

systemctl stop firewalld.service

你以为这就可以了吗?还不行。因为每次重启的时候防火墙会自启动,所有还要关闭自启动防火墙

systemctl disable firewalld.service

OK,到这里我们准备工作就做完了。接下来我们开始连接Xshell

第四步:连接

我们在Linux输入ifconfig查看一下IP

Snipaste_2023-10-28_19-41-48

第五步:打开Xshell创建连接

这里不废话了哈,直接跟着图片步骤走


在这里插入图片描述

第六步:结束

如果你出现了👇,那么已经成功连接,你可以远程操控Linux服务器了。
在这里插入图片描述

四、根目录解释

4.1 系统启动必须:

  /boot 存放的启动Linux 时使用的内核文件,包括连接文件以及镜像文件。
  /etc  存放所有的系统需要的配置文件和子目录列表,更改目录下的文件可能会导致系统不能启动。
  /lib:存放基本代码库(比如c++库),其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
  /sys:这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息:
    针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。
    该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中

4.2 指令集合:

 /bin: 存放着最常用的程序和指令
 /sbin:只有系统管理员能使用的程序和指令。

4.3 外部文件管理:

 /dev : Device(设备)的缩写, 存放的是Linux的外部设备。注意:在Linux中访问设备和访问文件的方式是相同的。
 /media:类windows的其他设备,例如U盘、光驱等等,识别后linux会把设备放到这个目录下。
 /mnt:  临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。

4.4 临时文件:

 /run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。
    如果你的系统上有 /var/run 目录,应该让它指向 run。
 /lost+found:一般情况下为空的,系统非法关机后,这里就存放一些文件。
/tmp:这个目录是用来存放一些临时文件的。默认centos会清理10天不用的文件,
    debian系在启动时候清理/etc/default/rcS设置,
    centos6在/etc/cron.daily/tmpwatch设置,
    centos7在/usr/lib/tmpfiles.d/tmp.conf设置。

4.5 账户:

 /root: 系统管理员的用户主目录。
 /home: 用户的主目录,以用户的账号命名的。
 /usr:  用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
 /usr/bin: 系统用户使用的应用程序与指令。
 /usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。
 /usr/src: 内核源代码默认的放置目录。

4.6 运行过程中要用:

/var: 存放经常修改的数据,比如程序运行的日志文件(/var/log 目录下)。
/proc:管理内存空间!虚拟的目录,是系统内存的映射,我们可以直接访问这个目录来,获取系统信息。
    这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件来做修改。

4.7 扩展用的:

 /opt:默认是空的,我们安装额外软件可以放在这个里面。
 /srv:存放服务启动后需要提取的数据(不用服务器就是空

五、关机和重启命令

5.1 shutdown 命令

shutdown命令用来系统关机。shutdown指令可以关闭所有程序,并依用户的需要,进行重新开机或关机的动作。基本信息如下:

- 命令名称:shutdown
- 英文原意:bring the system down
- 所在路径:/sbin/shutdown
- 执行权限:超级用户
- 功能描述:关机和重启

命令格式:shutdown [选项] 时间 [警告信息]

  • 选项:
    • -c:取消将要执行的shutdown命令
    • -h:系统关机
    • -r:系统重启
  • 时间:now 立即执;hh:mm 指定确定时间点执行;+分钟数 延迟指定分钟后执行
  • 警告信息:执行指令时,同时送出警告信息给登入用户

示例:

#立即关机
[root@localhost ~]# shutdown -h now
#指定5分钟后关机,同时送出警告信息给登入用户:
[root@localhost ~]# shutdown +5 "System will shutdown after 5 minutes"

5.2 reboot 命令

reboot命令用来重新系统,命令也是安全的,而且不需要过多的选项

- 命令名称:reboot
- 英文原意:reboot
- 所在路径:/sbin/reboot
- 执行权限:超级用户
- 功能描述:重启系统

命令格式:reboot [选项]

  • 选项:
    • -d:重新开机时不把数据写入记录文件/var/tmp/wtmp。本参数具有“-n”参数效果;
    • -f:强制重新开机,不调用shutdown指令的功能;
    • -i:在重开机之前,先关闭所有网络界面;
    • -n:重开机之前不检查是否有未结束的程序;
    • -w:仅做测试,并不真正将系统重新开机,只会把重开机的数据写入/var/log目录下的wtmp记录文件。

六、目录操作命令

6.1 ls命令

ls 是最常见的目录操作命令,主要作用是显示目录下的内容

- 命令名称:ls
- 英文原意:list
- 所在路径:/bin/ls
- 执行权限:所有用户
- 功能描述:显示目录下的内容

命令格式:ls [选项] [目录名]

  • 选项
    • -a: 显示所有文件及目录(.开头的隐藏文件)
    • -A: 不列出.(当前目录)和…(父目录)
    • -d: 显示目录信息,而不是目录下的文件
    • -h: 在-l基础上去使用h 以人类可读的方式显示当前目录中文件和目录的大小。
    • -i: 显示文件的节点号
    • -l: 以长格式的形式显示文件和目录的信息(权限、所有者、大小、创建时间)ls -l =ll

示例:

[root@localhost ~]# ls -l
# 权限 引用计数 所有者 所属组 大小 文件修改时间 文件名
-rw-------. 1 root root  1446 12月 19 16:15 anaconda-ks.cfg

“-l” 选项用于显示文件的详细信息,那么“-l”选项显示的这 7 列分别是什么含义?
第一列:权限。
第二列:引用计数。文件的引用计数代表该文件的硬链接个数,而目录的引用计数代表该目录
有多少个一级子目录。
第三列:所有者,也就是这个文件属于哪个用户。默认所有者是文件的建立用户
第四列:所属组。默认所属组是文件建立用户的有效组,一般情况下就是建立用户的所在组。
第五列:大小。默认单位是字节。
第六列:文件修改时间。文件状态修改时间或文件数据修改时间都会更改这个时间,注意这个
时间不是文件的创建时间。
第七列:文件名。

6.2 cd命令

cd是切换所在目录的命令,基本信息如下:

- 命令名称:cd
- 英文原意:change directory
- 所在路径:shell内置命令
- 执行权限:所有用户
- 功能描述:切换所在目录

命令格式:cd [-L|-P] [dir]

  • 选项:
    • -L:(默认值)如果要切换到的目标目录是一个符号连接,那么切换到符号连接的目录。
    • -P: 如果要切换到的目标目录是一个符号连接,那么切换到它指向的物理位置目录。
  • 参数 :
  • 可以是绝对路径(以根目录为参照物)或相对路径(以当前目录为参照物)

简化用法
cd ~: 当前用户的加目录
cd -:上一次所在目录
cd .: 当前目录
cd ..: 上级目录

6.3 pwd命令

pwd命令是查询所在目录的命令,基本信息如下:

- 命令名称:pwd
- 英文原意:print name of current/working directory
- 所在路径:/bin/pwd
- 执行权限:所有用户
- 功能描述:查询当前所在目录

6.4 mkdir命令

- 命令名称:mkdir
- 英文原意:make directories
- 所在路径:/bin/mkdir
- 执行权限:所有用户
- 功能描述:创建空目录

命令格式: mkdir [选项] 目录名

  • 选项:
    • -p: 递归建立所需目录
    • -m 权限:建立目录的同时设置目录的权限

6.5 rmdir 命令

rmdir命令删除空目录,基本信息如下:

- 命令名称:rmdir
- 英文原意:remove empty directories
- 所在路径:/bin/rmdir
- 执行权限:所有用户
- 功能描述:删除空目录

命令格式:rmdir [选项] 目录名

  • 选项:
    • -p: 递归删除目录

rmdir命令的作用十分有限,只能删除空目录,一旦目录中有内容就会报错。所以一般不论删除的是文件还是目录,都会使用rm命令

6.6 tree命令

在Linux系统中,命令tree用于显示列出指定目录下的所有内容,包括文件、子目录及子目录中的文件和目录。

语法:

tree [选项] [目录]
参数说明:

-a 显示所有文件,包括隐藏文件

-d 只显示目录

-f 显示每个文件的绝对路径

-i 不显示树枝,常与 -f 参数配合使用

-L level 遍历目录的最大层数,level为大于0的正整数

七、文件操作命令

7.1 touch命令

touch命令创建空文件或修改文件时间,基本信息如下:

  • 命令名称:touch
  • 英文原意:change file timestamps
  • 所在路径:/bin/touch
  • 执行权限:所有用户
  • 功能描述:创建文件或改文件时间戳

命令格式:touch [选项] 文件名

  • 选项:
    • -a:或–time=atime或–time=access或–time=use 更改存取时间为当前时间(access time)
    • -m:或–time=mtime或–time=modify 更该变动时间为当前时间(modify time)
    • -t 日期时间: 使用指定的日期时间(格式:[[CC]YY]MMDDhhmm[.ss]),而非现在的时间
    • -r 参考文件或目录: 把指定文件或目录的日期时间统统设成参考文件或目录的日期时间

7.2 cat命令

查看文件内容

基本语法: cat [选项] 查看的文件

常用选项: -n 显示行号

-b 显示所有非空白行的行数

注意: cat 只能查看文件, 不能对文件进行修改的操作, 更加安全, 适合用于查看重要文件

1655555433031

为了便于浏览, 会加上管道命令, | more 意义: 将前面的结果交给下一个指令进行处理

在这里插入图片描述
在这里插入图片描述

按 Enter 浏览下一行, 按 空格 显示下一页

7.3 more 命令

命令格式:more [选项] 文件名

  • 选项:

    • -d:显示“[press space to continue,‘q’ to quit.]”和“[Press ‘h’ for instructions]”;

    • -c:不进行滚屏操作。每次刷新这个屏幕

    • -s:将多个空行压缩成一行显示

    • -u:禁止下划线

    • -数字:指定每屏显示的行数

    • +数字:从指定数字的行开始显示

      more是分屏显示文件的命令,基本信息如下:

      • 命令名称:more
      • 英文原意:file perusal filter for crt viewin
      • 所在路径:/bin/more
      • 执行权限:所有用户
      • 功能描述:分屏显示文件内容

more 指令是一个基于 VI 编辑器得文本过滤器, 它以全屏幕得方式按页显示文本内容

more 指令种内容了若干快捷键 ( 交互指令 )

7.4 less命令

less命令和more命令类似,只是more命令是分屏显示,而less是分行显示命名,less命令允许用户向前(PageUp键)或向后(PageDown键)浏览文件,基本信息如下:

  • 命令名称:less
  • 英文原意:opposite of more
  • 所在路径:/usr/bin/more
  • 执行权限:所有用户
  • 功能描述:分行显示文件内容

命令格式:less [选项] 文件名

  • -e:文件内容显示完毕后,自动退出
  • -f:强制显示文件
  • -g:不加亮显示搜索到的所有关键词,仅显示当前显示的关键字,以提高显示速度
  • -l:搜索时忽略大小写的差异
  • -N:每一行行首显示行号
  • -s:将连续多个空行压缩成一行显示
  • -S:在单行显示较长的内容,而不换行显示
  • -x数字:将TAB字符显示为指定个数的空格字符

less 指令用来分屏查看文件内容, 它的功能与 more 指令类似, 但是要比 more 更加强大

支持各种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,

而是根据显示 需要加载内容,对于显示大型文件具有较高的效率。

7.5 head命令

head用于显示文件的开头部分内容,默认情况下head指令显示文件的前10行内容

head 命令是用来显示文件开头内容的命令,基本信息如下:

  • 命令名称:head
  • 英文原意:output the first part files
  • 所在路径:/usr/bin/head
  • 执行权限:所有用户
  • 功能描述:显示文件开头的内容

命令格式:head [选项] 文件名

  • -n 行数:从文件开头开始,显示指定行数
  • -v:显示文件名

head 文件 (功能描述:查看文件头10行内容)

head -n5 文件 (功能描述:查看文件头5行内容,5可以是任意行数)

在这里插入图片描述

7.6 tail命令

tail 用于输出文件中尾部的内容,默认情况下 tail 指令显示文件的后10行内容

tail 命令是用来显示文件结尾内容的命令

  • 命令名称:tail
  • 英文原意:output the last part files
  • 所在路径:/usr/bin/tail
  • 执行权限:所有用户
  • 功能描述:显示文件结尾的内容

命令格式:tail [选项] 文件名

  • -n 行数:从文件结尾开始,显示指定行数
  • -v:显示文件名
  • -f: 监听文件新增内容

tail 文件 (功能描述:查看文件尾10行内容)

tail -n5 文件 (功能描述:查看文件尾5行内容,5可以是任意行数
在这里插入图片描述

tail -f 文件(功能描述:实时追踪该文档的所有更新)

做服务器管理, 可能要监控一个文件, 或者抓包可以通过这个方式实现

CTRL+ c 退出

在这里插入图片描述

7.8 ln 命令

ln命令用来为文件创件链接,连接类型分为硬连接和符号连接(软链接)两种,基本信息如下:

  • 命令名称:ln
  • 英文原意:make links between file
  • 所在路径:/bin/tail
  • 执行权限:所有用户
  • 功能描述:在文件之间建立链接

命令格式:ln [选项] 源文件 [目标文件]

  • 选项:
    • -s: 建立软链接文件。如果不加’-s’选项,则建立硬链接文件
    • -f: 强行删除已存在的链接文件。如果链接文件已存在,则删除目标文件后再建立链接文件
  • 源文件:指定链接的源文件。如果使用-s选项创建软链接,则“源文件”可以是文件或者目录,创建硬链接时,则“源文件”参数只能是文件。(源文件最好用绝对路径名,这样可以在任何工作目录下进行符号链接,而当源文件用相对路径时,如果当前的工作路径与要创建的符号链接文件所在路径不同,就不能进行链接)
  • 目标文件:指定源文件的目标链接文件,省略则在当前目录下新建与源文件名称相同的链接文件

硬链接和源文件实际上是同一个文件,不会创建新的文件(类似于Java中,一个对象有多个引用);而软链接会创建一个新文件来保存源文件的路径,从而间接读取或修改源文件内容

硬链接与软链接的特征

硬链接特征:

1.源文件和硬链接文件拥有相同的Indoe和Block

2.修改任意一个文件,另一个都改变

3.删除任意一个文件,另一个都能使用

4.硬链接建立或删除,原文件连接数相应加一或减一

5.硬链接不能链接目录

6.硬链接不能跨分区

7.硬链接标记不清,很难确认硬链接文件位置,不建议使用

软链接特征
1.软链接和源文件拥有不同的Inode和Block
2.两个文件修改任意一个,另一个都改变
3.删除软链接,源文件不受影响;删除源文件,软链接不能使用
4.软链接建立或删除,原文件链接数不变
5.软链接可以链接目录
6.软链接可以跨分区
7.软链接特征明显,建议使用软链接
8.软链接没有实际数据,只是保存源文件的Inode,不论源文件多大,软链接大小不变
9.软链接的权限是最大权限lrwxrwxrwx.,但是由于没有实际数据,最终访问时需要参考源文件权限

7.9 echo 命令

echo 命令是 Linux bash 和 C shell中最常用的内置命令之一,通常用于脚本语言和批处理文件,用于标准输出以及显示文本内容等。echo命令在生产环境脚本中还是使用的非常多的,很多时候都要查看脚本执行是否正常,以及脚本执行到哪里,都是通过echo命令来打印来定位 。

1,打印文本到控制台

如果我们想向控制台显示一些文本,可以通过三种方式使用echo命令。以下是三种使用方式。

[root@sharplee creatfile]# echo 乐学
[root@sharplee creatfile]# echo '乐学'
[root@sharplee creatfile]# echo "乐学"

尽管这三者都适合使用,但建议使用双引号以避免任何意外行为。

2,打印跳过最后的换行符

echo打印文本时默认打印后的文本末尾都是带有换行符的,打印完内容自动换行到下一个命令输入,那么如何不让打印内容不在最后换行呢,下面就通过echo加上选项-n来实现。

[root@sharplee creatfile]# echo -n "IT"

3,打印内容回退一个字符

使用选项-e,文本内容中加入"\b"可以使文本中含有"\b"的地方回退一个字符,接着打印文本内容。

[root@sharplee creatfile]# echo -e "大家 \b好,我 a\b是\b"

4,打印内容终止打印

echo打印文本内容时加上选项-e,接着在文本内容中要终止打印的地方加上一个"\c"即可终止打印,并且终止打印的末尾没有换行,不会打印新行。下图示例在我前面加了一个"\c",说明到我前面就终止了。

[root@sharplee creatfile]#echo -e "大家 \b好,\c我 \b是大 \b学IT"

5,打印内容中换行

使用选项-e,文本内容中加入"\n"可以使文本中含有"\n"的地方换行输出。

[root@sharplee creatfile]# echo -e "大家 \b好,\n我 a\b是\n大 \b学IT"

6,打印内容中删除之前的文本

使用选项-e,文本内容中加入"\r"可以使文本中含有"\r"的之前的地方打印被删除。

[root@sharplee creatfile]# echo -e "大家好,\r我是学IT"

7,打印内容加水平tab空格

使用选项-e,文本内容中加入"\t"可以使文本中含有"\t"的之前的地方都加上tab空格。

[root@sharplee creatfile]# echo -e "大家\t好,\t我是\t学IT"

8,打印内容加上垂直tab空格

使用选项-e,文本内容中加入"\v"可以使文本中含有"\v"的之前的地方打印加上垂直tab空格。

[root@sharplee creatfile]# echo -e "大家\v好,我是\v大学IT"

9,打印内容水平换行对齐

使用选项-e,文本内容中加入"\n\t"可以使文本中含有"\n\t"的之前的地方打印换行并且加上tab空格。

[root@sharplee creatfile]# echo -e "\n\t大家好,\n\t我是大学IT"

10,打印所有的文件或目录

使用"echo *"打印所有的文件或目录,注意打印的是当前目录下的所有文件或者目录。

[root@sharplee creatfile]# echo *

11,打印只带具体后缀的文件

使用"echo *.log"打印所有带有后缀名为log的文件,注意打印的是当前目录下的所有后缀名带有log的文件。

[root@sharplee creatfile]# echo *.log

12,打印内容中带有双引号

echo命令打印内容时,内容中带有双引号,该内容中的双引号不会被打印出来,这个时候怎么解决呢,通过加上转义符”"“来打印的时候带有双引号。

[root@sharplee creatfile]# echo "大家好,我是\"大学IT\""

14,打印内容重定向到一个文件

echo命令打印内容通过重定向符号来重定向到一个文件中。

[root@sharplee creatfile]# echo "大家好,我是\"a\"">hello.txt

15,打印内容提示报警声

使用选项-e,文本内容的末尾加上一个"\a"可以在打印这段内容的时候会有一个提示音。

[root@sharplee creatfile]# echo -e "大家好,a"

总结:echo命令主要用于打印内容到控制台,就是为了在执行脚本的时候能够更好的定位问题以及能够更好的查询操作步骤执行到哪一步,从而能够更好定位操作是否成功,这个命令是为了能够定位问题必不可少的命令。**

八、 文件和目录都能操作的命令

8.1 rm 命令

rm是最强大的删除命令,不仅可以删除文件,也可以删除目录,基本信息如下:

- 命令名称:rm
- 英文原意:remove files or directories
- 所在路径:/bin/rm
- 执行权限:所有用户
- 功能描述:删除文件或目录

命令格式:rm [选项] 文件或目录

  • 选项:
    • -f: 强制删除
    • -i: 交互删除,在删除之前会询问用户
    • -r: 递归删除,可以删除目录

8.2 cp 命令

cp命令用于复制文件或目录,基本信息入下:

- 命令名称:cp
- 英文原意:copy files and directories
- 所在路径:/bin/cp
- 执行权限:所有用户
- 功能描述:复制文件或目录

命令格式:cp [选项] 源文件 目标文件

  • 选项:
    • -d: 如果文件为软链接(对硬链接无效),则复制出的目标文件也为软链接
    • -i: 询问,如果目标文件已经存在,则会询问是否覆盖
    • -p: 复制后目标文件保留源文件的属性(包括所有者、所有组、权限和时间)
    • -r: 递归复制,用于复制目录
    • -a: 相当于-dpr选项的集合

8.3 mv 命令

mv命令用来剪贴文件或目录,基本信息如下:

- 命令名称:mv
- 英文原意:move(rename) files
- 所在路径:/bin/mv
- 执行权限:所有用户
- 功能描述:移动文件或目录

命令格式:cp [选项] 源文件 目标文件

  • 选项:
    • -f: 强制覆盖,如果目标文件已经存在,则不询问直接强制覆盖
    • -i: 交互模式,如果目标文件已经存在,则询问用户是否覆盖(默认选项)
    • -v:显示详细信息

8.4 stat命令

stat命令是查看文件详细的命令,基本信息如下:

- 命令名称:stat
- 英文原意:display file or file system status
- 所在路径:/usr/bin/stat
- 执行权限:所有用户
- 功能描述:显示文件或文件系统的详细信息

命令格式:stat [选项] 文件名

  • 选项:
    • -f:显示文件系统状态而非文件状态
    • -t:以简洁方式输出信息

九、 帮助命令

9.1 man 命令

man命令是最常见的帮助命令,也是Linux最主要的帮助命令,基本信息如下:

 命令名称:man
- 英文原意:format and display the on-line manual pages
- 所在路径:/usr/bin/chown
- 执行权限:所有用户
- 功能描述:显示连机帮助手册

命令格式:man [选项] [章节] 命令

  • 选项:
    • -f: 查看命令有哪些章节的帮助和简短描述信息,等价于whatis指令
    • -k: 查看和命令相关的所有帮助

man命令交互快捷键:

  • 上箭头:向上移动一行
  • 下箭头:向下移动一行
  • PgUP:向上翻一页
  • PgDn:向下翻一页
  • g:移动到第一页
  • G:移动到最后一页
  • q:退出
  • /字符串:从当前向下搜索字符串
  • ?字符串:从当前向上搜索字符串
  • n:当搜索字符串时,可以用n键找到下一个字符串
  • N:当搜索字符串时,使用N键反向查询字符串。也就是说,如果使用“/字符串”方式搜索,则N键表示向上搜索字符串;如果使用“?字符串”方式搜索,则N键表示向下搜索字符串

man手册章节:

  • 1: 用户在shell环境可操作的命令或执行文件
  • 2: 系统内核可调用的函数与工具等
  • 3: 一些常用的函数(function)与函数库(library),大部分为C的函数库(libc)
  • 4: 设备文件说明,通常在/dev下的文件
  • 5: 配置文件或某些文件格式
  • 6: 游戏帮助(个人版的Linux中是有游戏的)
  • 7: 惯例与协议等,如Linux文件系统,网络协议,ASCII code等说明
  • 8: 系统管理员可用的管理命令
  • 9: 跟kernel有关的文件

man手册的格式:

  • NAME: 命令名称及功能简要说明
  • SYNOPSIS:用法说明,包括可用的选项
    • []:可选内容
    • <>:必选内容
    • a|b:二选一
    • {}:分组
    • ...:同意内容可出现多次
  • DESCRIPTION:命令功能的详细说明,可能包括每一个选项的意义
  • OPTIONS:说明每一项的意义
  • EXAMPLES:使用示例

* FILES:此命令相关的配置文件
* AUTHOR:作者
* COPYRIGHT:版本信息
* REPORTTING BUGS:bug信息

  • SEE ALSO:参考其他帮助

示例:
我们输入 man ls,它会在最左上角显示“LS(1)”,在这里,“LS”表示手册名称,而“(1)”表示该手册位于第一节章,同样,我们输 man ifconfig 它会在最左上角显示“IFCONFIG(8)”。也可以这样输入命令:“man [章节号] 手册名称”。

man`是按照手册的章节号的顺序进行搜索的,比如:`man sleep` 只会显示sleep命令的手册,如果想查看库函数sleep,就要输入:`man 3 sleep

9.2 info 命令

info 命令的帮助信息是一套完整的资料,每个单独命令的man帮助信息只是这套完整资料的某一个区段(节点),基本信息如下:

- 命令名称:info
- 英文原意:info
- 所在路径:/usr/bin/info
- 执行权限:所有用户
- 功能描述:显示一套完整的帮助信息资料

命令格式:info [选项] 参数

  • 选项:
    • -d:添加包含info格式帮助文档的目录
    • -f:指定要读取的info格式的帮助文档
    • -n:指定首先访问的info帮助文件的节点
    • -o:输出被选择的节点内容到指定文件
  • 参数:指定需要获得帮助的主题,可以是指令、函数以及配置文件

info命令交互快捷键

  • 上箭头:向上移动一行
  • 下箭头:向下移动一行
  • PgUP:向上翻一页
  • PgDn:向下翻一页
  • Tab:在有“*”符号的节点间切换
  • 回车:进入有“*” 符号的子页面,查看详细帮助信息
  • u:进入上一层信息(回车是进入下一层信息)
  • q:退出info帮助信息
  • n:进入下一小节信息
  • p:进入上一下节信息
  • ?:查看帮助信息

9.3 help 命令

help 命令只能获取shell内置命令的帮助,基本信息如下:

- 命令名称:help
- 英文原意:help
- 所在路径:shell 内置命令
- 执行权限:所有用户
- 功能描述:显示shell内置命令的帮助。可以使用shell内置命令`type`来区分内置命令与外部命令,对于外部命令的帮助信息只能使用`man`或者`info`命令查看

命令格式:help [选项] 内置命令

  • 选项:
    • -d:显示内建命令的简要描述。
    • -m:按照man手册的格式输出内置命令的帮助信息。
    • -s:仅输出内建命令的命令格式。

示例:

# 以man手册的格式查看内置命令type的帮助信息
[root@localhost ~]# help -m type
NAME
    type - Display information about command type.

SYNOPSIS
    type [-afptP] name [name ...]
 (省略。。。)

# 查看ls、help命令是否是内置命令
[root@localhost ~]# type ls
ls is aliased to `ls --color=auto'
[root@localhost ~]# type help
help is a shell builtin

9.4 --help 选项

绝大多数命令都可以使用--help选项来查看帮助,者也是一种获取帮助的方法。例如 ls --help,这种方法非常简单,输出的帮助信息基本上是man命令的信息简要版。

十、时间日期指令

10.1 date

 **date**  (功能描述:显示当前时间) 

- **date + %Y**  (功能描述:显示当前年份) 

- **date + %m**  功能描述:显示当前月份) 

- **date + %d**  (功能描述:显示当前是哪一天) 

- **date "+ %Y-%m-%d %H%:%M:%S"** (功能描述:显示年月日时分秒)

1655560494291

10.2 cal

基本语法 : cal [选项]

image-20231028210308442

10.3 hwclock 命令

hwclock命令用于显示与设定硬件时钟

Linux中有硬件时钟与系统时钟等两种时钟。硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟。系统时钟则是指kernel中的时钟。当Linux启动时,系统时钟会去读取硬件时钟的设定,之后系统时钟即独立运作。所有Linux相关指令与函数都是读取系统时钟的设定。

hwclock [功能] [选项]

    hwclock --show 查看硬件时间

​    hwclock -s 将硬件时间同步到系统时间

​    hwclock -r  读取硬件时钟并打印结果

​    hwclock -w 从当前系统时间设置硬件时钟

10.4 clock 命令

10.4.1.clock命令用于调整 RTC 时间。

RTC 是电脑内建的硬件时间,执行这项指令可以显示现在时刻,调整硬件时钟的时间,将系统时间设成与硬件时钟之时间一致,或是把系统时间回存到硬件时钟。

10.4.2.clock 显示硬件时间

Linux中有硬件时钟与系统时钟等两种时钟。硬件时钟是指主机 板上的时钟设备,也就是通常可在BIOS画面设定的时钟。系统时钟则是指kernel中的时钟。当Linux启动时,系统时钟会去读取硬件时钟的设定,之后系统时钟即独立运作。所有Linux相关指令与函数都是读取系统时钟的设定。

  • --adjust  第一次使用"–set"或"–systohc"参数设置硬件时钟,会在/etc目录下产生一个名称为adjtime的文件。当再次使用这两个参数调整硬件时钟,此文件便会记录两次调整间之差异,日后执行clock指令加上"–adjust"参数时,程序会自动根 据记录文件的数值差异,计算出平均值,自动调整硬件时钟的时间。
  • --debug  详细显示指令执行过程,便于排错或了解程序执行的情形。
  • --directisa  告诉clock指令不要通过/dev/rtc设备文件,直接对硬件时钟进行存取。这个参数适用于仅有ISA总线结构的老式电脑。
  • --getepoch  把系统核心内的硬件时钟新时代数值,呈现到标准输出设备。
  • --hctosys  Hardware Clock to System Time,把系统时间设成和硬件时钟一致。由于这个动作将会造成系统全面更新文件的存取时间,所以最好在系统启动时就执行它。
  • --set--date  设置硬件时钟的日期和时间。
  • --setepoch--epoch=<年份>  设置系统核心之硬件时钟的新时代数值,年份以四位树字表示。
  • --show  读取硬件时钟的时间,并将其呈现至标准输出设备。
  • --systohc  System Time to Hardware Clock,将系统时间存回硬件时钟内。
  • --test  仅作测试,并不真的将时间写入硬件时钟或系统时间。
  • --utc  把硬件时钟上的时间时为CUT,有时也称为UTC或UCT。
  • --version  显示版本信息。

获取当前的时间

 clock //获取当前的时间

显示UTC时间

clock -utc //显示UTC时间

十一、 基本权限管理

11.1 权限介绍

使用ls命令时,长格式显示的第一列就是文件的权限,例如:

[root@localhost ~]# ls -l install.log
-rw-r--r--. 1 root root 28425 11月 30 18:50 install.log

第一列的权限位(-rw-r--r--.)如果不计最后的 “.” (这个点代表受SELinux安全上下文保护,这里暂时忽略不做介绍),则共10位,这10位权限位的含义如下图所示:

在这里插入图片描述

  • 第1位:代表文件类型。Linux不像Windows使用扩展名表示文件类型,而是使用权限位的第一位表示文件类型。虽然Linux文件的种类不像Windows中那么多,但是分类也不少,详细情况可以使用“info ls” 命令查看。这里列出一些常见的文件类型:
    • -: 普通文件
    • d: 目录文件。Linux中一切皆文件,所以目录也是文件的一种
    • l: 软链接文件
    • b: 块设备文件。这是一种特殊设备文件,存储设备都是这种文件,如分区文件/dev/sda1就是这种文件
    • c: 字符设备文件。这也是特殊设备文件,输入设备一般都是这种文件,如鼠标、键盘等
    • p: 管道符文件。这是一种非常少见的特殊设备文件。
    • s: 套接字文件。这也是一种特殊设备文件,一些服务支持socket访问就会产生这样的文件
  • 第2~4位:代表文件所有者的权限
    • r: 代表read,是读取权限
    • w: 代表write,是写权限
    • x: 代表execute,是执行权限
  • 第5~7位:代表文件所属组的权限,同样拥有“rwx”权限
  • 第8~10位:代表文件其他人的权限,同样拥有“rwx”权限

权限含义的解释:
读、写、执行权限对文件和目录的作用是不同的。

  • 权限对文件的作用
    • 读®:对文件有读权限,代表可以读取文件中的数据。如果把权限对应到命令上,那么一旦对文件有读权限,就可以对文件执行catmorelessheadtail等文件查看命令
    • 写(w):对文件有写权限,代表可以修改文件中的数据。如果把权限对应到命令上,那么一旦对文件有写权限,就可以对文件执行vimecho等修改文件数据的命令。注意:对文件有写权限,是不能删除文件本身的,只能修改文件中的数据,如果想要删除文件,则需要对文件的上级目录拥有写权限
    • 执行(x):对文件有执行权限,代表文件可以运行。在Linux中,只要文件有执行权限,这个文件就是执行文件了,只是这个文件到底能不能正确执行,不仅需要看执行权限,还要看文件的代码是不是正确的语言代码。对文件来说,执行权限是最高权限
  • 权限对目录的作用
    • 读®:对目录有读权限,代表可以查看目录下的内容,也就是可以查看目录下有哪些文件和子目录。如果包权限对应到命令上,那么一旦对目录拥有了读权限,就可以在目录下执行ls命令查看目录下的内容了
    • 写(w):对目录有写权限,代表可以修改目录下的数据,也就是可以在目录中新建、删除、复制、剪贴子文件或子目录。如果把权限对应到命令上,那么一旦对目录拥有了写权限,就可以在目录下执行touchrmcpmv等命令。对目录来说,写权限是最高权限
    • 执行(x):目录是不能运行的,那么对目录拥有执行权限,代表可以进入目录。如果把权限对应到命令上,那么一旦对目录拥有了执行权限,就可以对目录执行cd命令进入目录

11.2 chmod 命令

chmod用来修改文件的权限,基本信息如下:

  • 命令名称:chmod
  • 英文原意:change file mode bits
  • 所在路径:/bin/chmod
  • 执行权限:所有用户
  • 功能描述:修改文件的权限模式

命令格式:chmod [选项] 权限模式 文件或目录

  • 选项:
    • -R: 递归设置权限,也就是给予目录中的所有文件设定权限
    • --reference=RFILE:使用参考文件或参考目录RFILE的权限来设置目标文件或目录的权限。

chmod命令的权限模式分为符号组合八进制数组合
符号组合的格式是[ugoa][[+-=][permission]],也就是[用户身份][[赋予方式][权限]]的格式。

  • 用户身份
    • u:代表所有者(user)
    • g:代表所属组(group)
    • o:代表其他人(other)
    • a:代表全部身份(all)
  • 赋予方式
    • +:加入权限
    • -:减去权限
    • =:设置权限
  • 权限
    • r: 读取权限(read)
    • w: 写权限(write)
    • x: 执行权限(execute)

八进制数组合的格式是[0-7][0-7][0-7]三位数字组成(每一位数字都是权限之和),第一位是所有者权限,第二位是所属组权限,第三位其他人权限

  • r读取权限对应的数字是4
  • w写权限对应的数字是2
  • x执行权限对应的数字是1
  • 例如读写权限rw八进制数表示 6

示例:

# 添加组用户的写权限。
chmod g+w ./test.log 
# 删除其他用户的所有权限。  
chmod o= ./test.log 
# 使得所有用户都没有写权限。  
chmod a-w ./test.log 
# 当前用户具有所有权限,组用户有读写权限,其他用户只有读权限。  
chmod u=rwx, g=rw, o=r ./test.log (等价的八进制数表示:chmod 754 ./test.log )   
# 将目录以及目录下的文件都设置为所有用户拥有读写权限。注意,使用'-R'选项一定要保留当前用户的执行和读取权限,否则会报错!  
chmod -R a=rw ./testdir/ 
# 根据其他文件的权限设置文件权限。  
chmod --reference=./1.log ./test.log

十二、数据流和重定向

12.1 标准输入

stdin (standard input):从键盘获取的输入

代码:0

12.2 标准正确输出

stdout (standard output):命令执行后的正确信息会输出到屏幕上

代码:1

12.3 标准错误输出

stderr(standard error output):命令执行后的失败信息会输出到屏幕上

代码:2

12.4 重定向操作符

(1)输出重定向操作符

" > "输出重定向符

">>"追加重定向符

输入重定向符操作符 <

输入结束终止符 < <

> 输出重定向, 意思将指定内容输出到指定位置

比如 echo “hello” > /home/hello.txt 将 hello 输出到 home 下的 hello 文本文件中

>> 追加

  • ls -l > 文件 (功能描述:列表的内容写入文件atxt中**(覆盖写)**)

  • Is -al >> 文件 (功能描述:列表的内容追加到文件aa.txt 的末尾)

  • cat 文件1 文件2 (功能描述:将文件1的内容覆盖到文件2)

  • echo “内容” >> 文件

在这里插入图片描述

  • 将日历信息追加到文件中

    通过 cal 指令可以查看日历

在这里插入图片描述

12.5 tee命令

tee命令是Linux系统中的一个实用工具,它可以把数据的输出结果同时重定向到文件和屏幕。在日常的Linux运维工作中,tee命令是非常重要的,它可以帮助我们复制、分流输出,并且保持原始输出结果的完整性,同时还可以防止数据的重复输出。

12.5.1 tee命令的基本用法

tee命令的基本用法非常简单,语法如下:
1,tee用来显示屏幕并且保存在文件中

echo "123" | tee tee.txt 显示到屏幕并且存在文件中

2,(|)管道符用来覆盖上一文件内容

echo "789" | tee tee.txt  覆盖掉原来的

3,-a用来追加文件内容

echo "111" | tee tee.txt -a 追加

十三、Vi 和 Vim编辑器

Linux 系统会内置 Vi 文本编辑器

Vim 具有程序编辑的能力, 可以看作是 Vi 的增强版本, 可以主动的以字体颜色辨别语法的正确性, 方便程序设计.

代码补完, 编译及错误跳转等方便编程的功能特别丰富, 在研发人员中广泛使用

13.1 Vi 和 Vim 常用的三种模式

  • 正常模式

    以 Vim 打开一个档案就直接进入了 一般模式(这是默认的模式), 在这个模式中, 可以使用 [上下左右] 按键来移动光标, 你可以使用 [删除字符][删除整行] 来处理档案内容, 也可以使用 [复制, 粘贴] 来处理你的数据

  • 插入模式

    按下 i, I, o, O, a, A, r, R 等任何一个字母之后才会进入编辑模式, 一般来说按 i 即可

  • 命令行模式

    按下 esc 再输入 : 就可以进入命令行模式, 在这个模式中, 可以提供相关的指令, 完成读取, 存盘, 替换, 离开 Vim, 显示行号等动作

  • 使用 Vim 开发一个 Hello.java 程序, 保存, 步骤说明

    使用 Xshell 工具

    在这里插入图片描述
    <img src="C:\Users\mayaj\Desktop\linux.md-master\LinuxNotes-master\Linux.assets\1655197502680.png" alt="1655197502680" style="zoom:50%;"

    输入 i, 进行文本的编辑
    在这里插入图片描述

    按下 esc, 输入 :wq (写入和退出)

再次进入修改, 还是通过之前的指令

各种模式之间相互的切换

1655198242826

13.2 Vi 和 Vim 快捷键

  • 拷贝当前行 yy, 拷贝当前行向下的 5 行, 5yy, 粘贴操作 (输入 p )
  • 删除当前行 dd, 删除当前行下的 5 行 5dd
  • 在文件中查找某个单词 [命令行下 / 关键字], 回车进行 查找, 输入 n 就是查找下一个
  • 设置文件的行号, 取消文件行号 [命令行下 / :set nu 和 set nonum]
  • 快捷键文件最末行 [G], 文件首行 [gg] [一般模式下使用]
  • 撤销输入内容, 进入命令行模式, 输入 :u, 或者一般模式书 u
  • 输入 [行号 + shift + g], 快速进入键入模式并跳转到指定行号 [一般模式下使用]

在这里插入图片描述

13.3 打开关闭vim

vim 文本名 用vim编辑器进入这个文本

狂按(三下以上)esc后按:wq保存退出

狂按(三下以上)esc后按:q!不保存退出

13.4 模式划分

任何模式下狂按esc都会回到正常模式

正常模式(刚进入vim就是这个模式,最下边一行是普通文本信息)

插入模式(在正常模式按 i a o等按键可以进入,最下边显示----insert----)

可视化模式(在正常模式按v V ctrl+v可进入,最下边显示----visual xxx----)

下面按照使用频率分别介绍每个模式:

13.4.1 正常模式

这个模式用来触发一些菜单类命令,比如查找替换,保存退出等操作。

  • 显示行号:在正常模式下:set nu 显示行号

  • 保存:在正常模式下:w 保存

  • 退出:在正常模式下:q 退出, 通常与保存合用 :wq保存并退出

  • 光标纵向移动:在正常模式下 G光标移动到最后一行;gg光标移动到第一行 ; 666gg 或者 666G或者:666光标移动到666行;50%到文本的50%位置附近。

  • 光标横向移动:在正常模式下默认上下左右或者hjkl是移动光标,如果想一次移动多行,可以使用数字10j或者10↓向下移动10行;6l或者6→向右移动6个字符。0或者^数字6上边的小尖尖,移动到行首;$数字4上边的美元符号,移动到行尾。ctrl+方向 一次移动一个单词。

  • 查找/abc 向下查找abc所在位置 ,?abc向上查找abc所在位置,N找下一个,n找上一个

  • 复制粘贴5yy从光标位置开始向下复制5行,5dd从光标位置开始向下剪切5行,p把刚才复制的内容粘贴的光标之后的行,P把刚才复制的内容粘贴到光标之前的行。5x/5y从光标开始向后剪切/复制5个字符,5X从光标开始向前剪切5个字符,p把刚才复制的内容粘贴到光标所在字符后边,P把刚才复制或者剪切的内容粘贴到光标所在字符前边。

  • 撤销操作u或者:undo撤销你上一次操作,相当于word里的ctrl+z

  • 重做ctrl+r 或者:redo重做你的撤销内容。

13.4.2 插入模式–结束后按esc返回
  • i 在光标所在字符前插入

  • I 在光标所在行首插入

  • a 在光标所在字符后插入

  • A 在光标所在行尾插入

  • o 在光标所在行下边插入空行

  • O 在光标所在行上边插入空行

13.4.3 可视化模式–结束后按esc返回

v从光标开始字符勾选到光标结束机组

V光标开始行勾选到光标结束行

ctrl+v从光标处划一个方块到光标结束出,勾选住方块内所有字符

选中后可以进行I或者r等操作

十四、 搜索查找命令

14.1 whereis 命令

whereis 是搜索命令的命令,也就是说whereis不能搜索普通文件,而只能搜索系统命令,基本信息如下:

  • 命令名称:whereis
  • 英文原意:locate the binary,source,and manual page files for a command
  • 所在路径:/usr/bin/whereis
  • 执行权限:所有用户
  • 功能描述:查找二进制命令、源文件和帮助文档的路径

命令格式:whereis [选项] 参数

  • 选项:
    • -b:只查找二进制文件
    • -B 目录:只在设置的目录下查找二进制文件
    • -m:只查找说明文件
    • -M 目录:只在设置的目录下查找说明文件
    • -s:只查找原始代码文件
    • -S 目录:只在设置的目录下查找原始代码文件
    • -f:不显示文件名前的路径名称

14.2 which 命令

which 也是搜索系统命令的命令,和whereis的区别在于,whereis命令可以在查找二进制命令的同时,查找帮助文档的位置,而which命令在查找到二进制命令的同时,如果这个命令有别名,则还可以查到别名命令。基本信息如下:

  • 命令名称:which
  • 英文原意:shows the full path of (shell) commands
  • 所在路径:/usr/bin/which
  • 执行权限:所有用户
  • 功能描述:列出二进制命令路径和别名。which只会在环境变量$PATH设置的目录里查找符合条件的命令

命令格式:which [选项] 参数

14.3 find 命令

find命令用来在指定目录下查找文件,基本信息如下:

  • 命令名称:find
  • 英文原意:search for files in a directory hierarchy
  • 所在路径:/bin/find
  • 执行权限:所有用户
  • 功能描述:在指定目录中搜索文件

命令格式:find [搜索路径] [选项]

  • 搜索路径:省略则默认为当目录,相当于 “find .”
  • 选项:
    • -name 范本样式:按照文件名称搜索,支持通配符模糊查询
    • -iname 范本样式:此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别
    • -inum inode编号:查找符合指定的inode编号的文件或目录
    • -path 范本样式:查找路径包含范本样式的文件或目录
    • -regex 范本样式:正则表达式搜索
    • -iregex 范本样式:同"-regex",忽略大小写
    • -size [+|-]文件大小[cwbkMG] :查找符合指定的文件大小的文件
      • “+” 的意思是搜索比指定大小还要大的文件,“-” 的意思是搜索比指定大小还要小的文件
      • "cwbkMG"是单位,c——字节,w——字(2字节),b——块(512字节),k——千字节,M——兆字节,G——吉字节。如果不写单位默认是b
    • -atime [+|-]分钟:按照文件最后一次访问时间搜索,单位分
      • “+”、“-“的含义,例如"5"表示恰好5天前的那一天,”+5"超过5天前的时间,”-5"5天内的时间。(以下按时间搜索选项中"+“、”-"含义相同)
    • -mtime [+|-]小时数:按照文件数据最后一次修改时间搜索,单位小时
    • -ctime [+|-]分钟:按照文件元数据(如权限等)最后一次修改时间搜索,单位分钟
    • -amin [+|-]分钟数:按照文件最后一次访问时间搜索,单位每分钟
    • -mmin [+|-]分钟数:按照文件数据最后一次修改时间搜索,单位每分钟
    • -cmin [+|-]分钟数:按照文件元数据(如权限等)最后一次修改时间搜索,单位每分钟
    • -perm [+|-]权限数值:查找符合指定的权限数值的文件或目录。例如,权限数值为"766"表示权限恰好等于766,“-766"表示文件权限必须全部包含766,”+766"表示文件权限包含766任意一个权限
    • -uid 用户ID:查找所有者是指定用户ID的文件
    • -user 用户名:查找所有者是指定用户名的文件
    • -gid 组ID:查找所有组是指定组ID的文件
    • -group 组名:查找所有组是指定组名的文件
    • -nouser:查找没有所有者的文件
      • 按照所有者和所有组搜索时,"-nouser"选项比较常用,主要用于查找垃圾文件。没有所有者的文件比较少见,那就是外来文件,比如光盘和U盘的文件是由Windows复制的,在Linux中查看就是没有所有者的文件,再比如手工源码包安装的文件也可能没有所有者
    • -type 文件类型:只寻找符合指定的文件类型的文件
      • f——普通文件,l——符号连接,d——目录,c——字符设备,b——块设备,s——套接字,p——Fifo
    • -empty:查找文件大小为0的文件
    • -maxdepth 目录层级数:设置搜索的最大目录层级
    • -mindepth 目录层级:设置搜索的最小目录层级
    • -exec 执行指令:把find命令查找结果交由"-exec"调用的命令来处理
      • 格式:find [搜索路径] [选项] -exec 命令 {} \;, 其中"{}"代表find命令的查询结果
    • -ok 执行指令:此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户是否执行
    • -prune:不寻找字符串作为寻找文件或目录的范本样式
    • -a:and 逻辑与
    • -o: or 逻辑或
    • -not:not 逻辑非

示例:

#==================根据文件名或者正则表达式进行匹配=====================
#列出当前目录及子目录下所有文件和文件夹
[root@localhost ~]# find .
#在`/home`目录下查找以.txt结尾的文件名
[root@localhost ~]# find /home -name "*.txt"
#同上,但忽略大小写
[root@localhost ~]# find /home -iname "*.txt"
#当前目录及子目录下查找所有以.txt和.pdf结尾的文件
[root@localhost ~]# find . \( -name "*.txt" -o -name "*.pdf" \)
或
[root@localhost ~]# find . -name "*.txt" -o -name "*.pdf"
#查找路径包含local的文件或者目录
[root@localhost ~]# find /usr/ -path "*local*"
#基于正则表达式匹配文件路径
[root@localhost ~]# find . -regex ".*\(\.txt\|\.pdf\)$"


#=====================借助`-exec`选项与其他命令结合使用==================
#找出当前目录下所有root的文件,并把所有权更改为用户tom
[root@localhost ~]# find .-type f -user root -exec chown tom {} \;
#找出自己家目录下所有的.txt文件并删除,删除前先询问
[root@localhost ~]# find $HOME/. -name "*.txt" -ok rm {} \;
#查找当前目录下所有.txt文件并把他们拼接起来写入到all.txt文件中
[root@localhost ~]# find . -type f -name "*.txt" -exec cat {} \;> all.txt
#将30天前的.log文件移动到old目录中
[root@localhost ~]# find . -type f -mtime +30 -name "*.log" -exec cp {} old \;
#找出当前目录下所有.txt文件并以“File:文件名”的形式打印出来
[root@localhost ~]# find . -type f -name "*.txt" -exec printf "File: %s\n" {} \;

#========================逻辑运算符==========================
#查找文件大小超过2k并且是普通文件类型的文件
[root@localhost ~]# find . -size +2k -a -type f
#找出/home下不是以.txt结尾的文件
[root@localhost tmp]# find . -not -name "*.txt"
或
[root@localhost ~]# find /home ! -name "*.txt"


#======================搜索但跳出指定的目录===================
#查找当前目录或者子目录下所有.txt文件,但是跳过子目录sk
[root@localhost ~]# find . -path "./sk" -prune -o -name "*.txt"

14.4 locate 命令

locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录(find 是去硬盘找),而是搜索一个数据库/var/lib/mlocate/mlocate.db,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件,为了避免这种情况,可以在使用locate之前,先使用updatedb命令手动更新数据库。locate命令基本信息如下:

  • 命令名称:locate
  • 英文原意:find files by name
  • 所在路径:/usr/bin/locate
  • 执行权限:所有用户
  • 功能描述:按照文件名搜索文件

命令格式:locate [选项] 文件名

  • 选项:
    • -d: 指定资料库的路径。默认是/var/lib/mlocate/mlocate.db
    • -n:至多显示n个输出

数据库配置文件(/etc/updatedb.conf)内容说明:

[root@localhost ~]# cat /etc/updatedb.conf
#开启搜索限制,也就是让这个文件生效
PRUNE_BIND_MOUNTS = "yes"
#在locate执行搜索时,禁止搜索这些文件类型
PRUNEFS = "9p afs anon_inodefs auto autofs bdev binfmt_misc cgroup cifs coda configfs cpuset debugfs devpts ecryptfs exofs fuse fusectl gfs gfs2 gpfs hugetlbfs inotifyfs iso9660 jffs2 lustre mqueue ncpfs nfs nfs4 nfsd pipefs proc ramfs rootfs rpc_pipefs securityfs selinuxfs sfs sockfs sysfs tmpfs ubifs udf usbfs"
#在locate执行搜索时,禁止搜索这些扩展名的文件
PRUNENAMES = ".git .hg .svn"
##在locate执行搜索时,禁止搜索这些系统目录
PRUNEPATHS = "/afs /media /net /sfs /tmp /udev /var/cache/ccache /var/spool/cups /var/spool/squid /var/tmp"

locate优缺点:
优点:按照数据库搜索,搜索速度快,消耗资源小
缺点:只能按照文件名来搜索文件,而不能执行更复杂的搜索,比如按照权限、大小、修改时间等

14.5 grep 命令

grep命令的作用是在文件中提取和匹配符合条件的字符串行,是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。基本信息如下:

  • 命令名称:grep
  • 英文原意:global search regular expression(RE) and print out the line
  • 所在路径:/usr/bin/grep
  • 执行权限:所有用户
  • 功能描述:全面搜索正则表达式并把行打印出来

命令格式:grep [选项] 搜索内容 文件名

  • 选项:
    • -i:忽略大小写
    • -l 只打印匹配到的文件名
    • -n:输出行号
    • -v:反向查找
    • -d 动作: 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。动作包含:read、recurse、skip
    • -R-r: 此参数的效果和指定“-d recurse”参数相同,递归查找目录下的所有文件内容
    • --color=auto:搜素出的关键字用颜色高亮显示

find也是搜索命令,那么find与grep命令有什么区别呢?
find:find命令用于在系统中搜索符合条件的文件名,如果需要模糊查询,则使用通配符进行匹配,通配符是完全匹配。(find命令也可以通过"-regex"选项,把匹配规则转为正则表达式规则)
grep:grep命令用于在文件中搜索符合条件的字符串,如果需要模糊查询,则使用正则表达式进行匹配,正则表达式是包含匹配。

通配符与正则表达式的区别

  • 通配符:一般用于匹配文件名,完全匹配
    • ?:匹配一个任意字符
    • *:匹配0个或多个任意字符,也就是可以匹配任何内容
    • []:匹配中括号里任意一个字符。例如,[abc]代表一定匹配一个字符,或是a,或是b,或是c
    • [-]:匹配中括号里任意一个字符,"-"代表一个范围。例如,[a-z]代表匹配一个小写字母
    • [^]:逻辑非,表示匹配不是中括号里的一个字符。例如,[^0-9]代表匹配一个不是数字的字符
  • 正则表达式:一般用于匹配字符串
    • ?:匹配前一个字符重复0次或1次
    • *:匹配前一个字符重复0次或多次
    • []:匹配中括号里任意一个字符。例如,[abc]代表一定匹配一个字符,或是a,或是b,或是c
    • [-]:匹配中括号里任意一个字符,"-"代表一个范围。例如,[a-z]代表匹配一个小写字母
    • [^]:逻辑非,表示匹配不是中括号里的一个字符。例如,[^0-9]代表匹配一个不是数字的字符
    • ^:匹配行首
    • $:匹配行尾

示例:

#在文件中搜索一个单词,命令会返回一个包含“match_pattern”的文本行:
[root@localhost ~]# grep match_pattern file_name
或
[root@localhost ~]# grep "match_pattern" file_name
#在多个文件中查找:
[root@localhost ~]# grep "match_pattern" file_1 file_2 file_3
#标记匹配颜色 --color=auto 选项:
[root@localhost ~]# grep "match_pattern" file_name --color=auto
#在当前目录中对文本进行递归搜索
[root@localhost ~]# grep -r "match_pattern" .
#正则匹配输出以数字开头的所有行
[root@localhost ~]# grep "^[0-9].*" file_name
[root@server ~]# grep ^[^$] f1
[root@server ~]# grep -v  ^$ f1

14.6 | 管道符

命令格式:命令1 | 命令2
"|"管道符的作用是把命令1的正确输出作为命令2的操作对象

示例1
我们经常使用 “ll” 命令查看文件的长格式,不过在有些目录中文件很多,不如/etc/目录使用 “ll” 命令显示的内容就非常多,只能看到最后的内容而不能看到前面输出的内容,这时我们马上想到 “more” 命令可以分屏显示文件内容,一种笨方法是:

#用输出重定向,把"ll"命令的输出保存到/root/testfile
[root@localhost ~]# ll -a /etc/ > /root/testfile
#然后用more分屏显示
[root@localhost ~]# more /root/testfile

这样操作实在是不方便,这时可以利用管道符,命令如下:

#把"ll"命令的输出作为"more"命令的操作对象
[root@localhost ~]# ll -a /etc/ | more

示例2

#在"ll"命令输出内容中搜索yum的文件名
[root@localhost ~]# ll -a /etc/ | grep yum

示例3

#统计具体的网络连接数量("grep"命令筛选,"wc"命令统计)
[root@localhost ~]# netstat -an | grep -i "ESTABLISHED" | wc -l

14.7 alias 命令

alias命令用来设置指令的别名,我们可以使用该命令可以将一些较长的命令进行简化。

alias基本使用方法

  • 打印已经设置的命令别名
    • aliasalias -p
  • 给命令设置别名
    • 格式:alias 新的命令='实际命令'。必须使用单引号’'实际命令引起来,防止特殊字符导致错误
    • 例如:alias l='ls -lsh',现在只用输入 “l” 就可以列出目录了,相当于输入"ls -lsh";alias ser='service network restart',现在输入"ser"就可以重启网络服务了

直接在shell里设定的命令别名,在终端关闭或者系统重新启动后都会失效,如何才能永久有效呢?
使用编辑器打开~/.bashrc,在文件中加入别名设置,如:alias rm=‘rm -i’,保存后执行source /.bashrc,这样就可以永久保存命令的别名了。因为修改的是当前用户目录下的/.bashrc文件,所以这样的方式只对当前用户有用。如果要对所有用户都有效,修改/etc/bashrc文件就可以了。

十五、压缩和解压缩命令

在Linux中可以识别的常见压缩格式有十几种,比如".zip"、“.gz”、“.bz2”、“.tar”、“.tar.gz”、".tar.bz2"等。减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间

15.1 “.zip” 格式

“.zip"是Windows中最常见的压缩格式,Liunx也可以正确识别”.zip"格式,这可以方便地和Windows系统通用压缩文件。

15.1.1 zip 命令

zip命令就是".zip"格式的压缩命令,基本信息如下:

  • 命令名称:zip
  • 英文原意:package and compress(archive) files
  • 所在路径:/usr/bin/zip
  • 执行权限:所有用户
  • 功能描述:压缩文件和目录

命令格式:zip [选项] 压缩包名 源文件或目录

  • 选项:
    • -r:压缩目录递归处理,将指定目录下的所有文件和子目录一并处理
15.1.2 unzip 命令

unzip命令就是".zip"格式的解压缩命令,基本信息如下:

  • 命令名称:unzip
  • 英文原意:list, test and extract compressed files in a zip archive
  • 所在路径:/usr/bin/unzip
  • 执行权限:所有用户
  • 功能描述:列表、测试和提取压缩文件中的文件

命令格式:unzip [选项] 压缩包名

  • 选项:
    • -d:指定解压的位置

15.2 “.gz” 格式

".gz"格式是Linux中最常见的压缩格式。

15.2.1 gzip 命令

gzip命令是".gz"格式的压缩和解压缩命令,既方便又好用。gzip不仅可以用来压缩大的、较少使用的文件以节省磁盘空间,还可以和tar命令一起构成Linux操作系统中比较流行的压缩文件格式。据统计,gzip命令对文本文件有60%~70%的压缩率。注意:gzip不会打包文件,压缩的过程源文件会对应变为".gz"格式的压缩文件(源文件被删除),解压缩的过程将".gz"格式的压缩文件再恢复成对应的源文件。基本信息如下:

  • 命令名称:gzip
  • 英文原意:compress or expand files
  • 所在路径:/bin/gzip
  • 执行权限:所有用户
  • 功能描述:压缩或解压缩 “.gz” 格式的文件或目录

命令格式:gzip [选项] 源文件

  • 选项:
    • -d:执行解压缩
    • -r:递归处理,将指定目录下的所有文件及子目录一并处理
    • -c:将压缩数据输出到标准输出中,可以保留源文件
      • 使用"-c"选项,压缩数据会直接输出到屏幕上,为了不让压缩数据输出到屏幕上而是重定向到压缩文件中,并且同时保留源文件,命令可以这样写:gzip -c abc > abc.gz
    • -l:列出压缩文件的相关信息
15.2.2 gunzip 命令

gunzip命令用来解压缩 “.gz” 格式的文件(即使用 “gzip” 命令压缩的文件),作用相当于 “gzip -d 压缩文件”,因此不论是压缩或解压缩,都可通过 “gzip” 指令单独完成。基本下信息如下:

  • 命令名称:gunzip
  • 英文原意:expand files
  • 所在路径:/bin/gunzip
  • 执行权限:所有用户
  • 功能描述:解压缩".gz" 格式的文件或目录

命令格式:gunzip [选项] 压缩文件

  • 选项:
    • -r:递归处理,将指定目录下的所有文件及子目录一并处理
    • -c:把解压后的文件数据输出到标准输出中,可以保留压缩文件
    • -l:列出压缩文件的相关信息

15.3 “.bz2” 格式

“.bz2” 格式是Linux的另一种压缩格式,从理论上来讲,“.bz2” 格式的算法更新进、压缩比更好;而 “.gz” 格式相对来讲压缩的时间更快

15.3.1 bzip2 命令

bzip2 命令是 “.bz2” 格式文件的压缩和解压缩命令。注意:"bzip2"不能用来压缩目录。基本信息如下:

  • 命令名称:bzip2
  • 英文原意:a block-sorting file compressor
  • 所在路径:/usr/bin/bzip2
  • 执行权限:所有用户
  • 功能描述:压缩或解压缩 “.bz2” 格式的文件

命令格式:bzip2 [选项] 源文件

  • 选项:
    • -d:执行解压缩
    • -k:压缩或解压缩后,会删除原始文件,若要保留原始文件,请使用此参数
    • -f:在压缩或解压缩时,若输出文件与现有文件同名,强制覆盖现有文件
    • -c:将压缩与解压缩的数据输出到标准输出中
15.3.2 bunzip2 命令

bunzip2命令用来解压缩 “.bz2” 格式的文件(即使用 “bzip2” 命令压缩的文件),作用相当于 “bzip2 -d 压缩文件”,因此不论是压缩或解压缩,都可通过 “bzip2” 指令单独完成。基本信息如下:

  • 命令名称:bunzip2
  • 英文原意:a block-sorting file compressor
  • 所在路径:/usr/bin/bunzip2
  • 执行权限:所有用户
  • 功能描述:解压缩 “.bz2” 格式的文件

命令格式:bunzip2 [选项] 压缩文件

  • 选项:
    • -k:bzip2在解压缩后,会删除原始压缩文件,若要保留原始压缩文件,请使用此参数
    • -f:解压缩时,若输出的文件与现有文件同名时,强制覆盖现有的文件
    • -c:将解压缩的数据输出到标准输出中

15.4 “.tar”、“.tar.gz”、“.tar.bz2” 格式

tar命令可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。注意:打包和压缩是两个不同的概念,打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。为什么要区分这两个概念呢?这源于Linux中很多压缩程序(gzip、bzip2)只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar),然后再用压缩程序进行压缩。tar命令基本信息如下:

  • 命令名称:tar
  • 英文原意:tar
  • 所在路径:/usr/bin/tar
  • 执行权限:所有用户
  • 功能描述:打包与解打包文件

命令格式:
打包tar -c [选项] [-f 包文件名] 源文件或目录
解打包tar -x [选项] -f 包文件名

  • 选项:
    • -c:执行打包
    • -x:执行解打包
    • -z:支持压缩和解压缩 “.tar.gz” 格式文件
    • -j:支持压缩和解压缩 “.tar.bz2” 格式文件
    • -C 目录路径:指定解打包位置
    • -f 包文件名: 指定打包文件名(.tar)或压缩包文件名(.tar.gz、.tar.bz2)。(执行打包时不写此选项,会默认把打包数据输出到屏幕)
    • -v: 显示打包或解打包过程
    • -t:测试,就是不解打包,只是查看包中有哪些文件

示例:

#=======================".tar"格式=========================
#打包不会压缩
[root@localhost ~]# tar -cvf anaconda-ks.cfg.tar anaconda-ks.cfg
#解打包到当前目录
[root@localhost ~]# tar -xvf anaconda-ks.cfg.tar
#解打包到指定目录
[root@localhost ~]# tar -xvf anaconda-ks.cfg.tar -C /testdir/

#=====================".tar.gz"格式=====================
#把/tmp/目录直接打包并压缩为".tar.gz"格式
[root@localhost ~]# tar -zcvf tmp.tar.gz /tmp/
#解压缩并解打包".tar.gz"格式文件
[root@localhost ~]# tar -zxvf tmp.tar.gz

#=====================".tar.bz2"格式=====================
#把/tmp/目录直接打包并压缩为".tar.bz2"格式
[root@localhost ~]# tar -jcvf tmp.tar.gz /tmp/
#解压缩并解打包".tar.bz2"格式文件
[root@localhost ~]# tar -jxvf tmp.tar.gz

十六、命令 补充

16.1 排序——sort命令

语法

sort [选项] [文件]

常用参数

常用选项(所有排序为升序,使用降序可加入-r)

-f 忽略大小写
-b 忽略第一列前缩进与空格
-n 依照数值的大小排序
-r反向排序
-u 去除重复行
-t 指定间隔符
-k设置字段范围
-V排序优先级为数字(数字 > 字母 > 特殊字符)
-i只考虑可打印字符
-R随机排序(可用于生成随机数)
-h按文件大小升序

常见用法

按数值排序

按第一个数字的值进行排序
sort

按正常数字大小升序
sort -n

按正常数字大小降序
sort -n -r

img

按文件大小排序

按文件大小升序
sort -h
按文件大小降序
sort -h -r

img

指定某一列排序

指定第10列升序
sort -k 10 -n

指定第10列降序
sort -k 10 -r -n

指定第10列降序,且指定分隔符
sort -k 10 -r -n -t ','

img

去重后排序

sort -u

img

生成随机数

生成0-9随机6位数
seq 0 9 |sort -R |head -6 |xargs |tr -d ' '

生成0-9随机7位数
seq 0 9 |sort -R |head -7 |xargs |tr -d ' '

生成1-9随机8位数
seq 1 9 |sort -R |head -8 |xargs |tr -d ' '

img

16.2 转换或删除文件中的字符 ——tr 命令

tr 命令用于转换或删除文件中的字符。tr 指令从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备。

语法 tr [options] set1 set2

** 参数说明:**

  • -d, --delete:删除指令字符
  • -s, --squeeze-repeats:缩减连续重复的字符成指定的单个字符
  • –help:显示程序用法信息
  • –version:显示程序本身的版本信息
字符串含义
a-z或[:lower:]匹配所有小写字母
A-Z或[:upper:]匹配所有大写字母
0-9或[:digit:]匹配所有的数字
[:alnum:]匹配所有字母和数字
[:alpha:]匹配所有字母
[:blank:]匹配所有水平空白
[:punct:]匹配所有标点符号
[:space:]匹配所有水平或垂直的空格
[:cntrl:]匹配所有控制字符

tr命令常用实例

(1) 如何查看文本中的控制字符
比如这里准备一个文件,demo1.conf,内容如下

name
domain
ip
area
user
password
role
1
2
3
4
5
6
7

vi demo1.conf 编辑文件,然后执行如下命令即可查看文件中的控制字符了

:set list

如下图所示,可以看到每行最后都有一个$符号,这就是回车符

img

(2) 将所有小写字母转换为大写字母
首相这准备一个test.txt文件

cat /etc/passwd > test.txt

内容如下:

[root@jiayi-centos-01 opt]# cat test.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
isrc-admin:x:1000:1000:isrc-admin:/home/isrc-admin:/bin/bash
unbound:x:998:996:Unbound DNS resolver:/etc/unbound:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
gluster:x:997:995:GlusterFS daemons:/run/gluster:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
honghua:x:1001:1001::/home/honghua:/bin/bash
[root@jiayi-centos-01 opt]#

执行下面命令即可将test.txt中小写替换为答谢,并写入demo.txt

[root@jiayi-centos-01 opt]# tr 'a-z' 'A-Z'<test.txt > demo.txt
[root@jiayi-centos-01 opt]# cat demo.txt
ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN
DAEMON:X:2:2:DAEMON:/SBIN:/SBIN/NOLOGIN
ADM:X:3:4:ADM:/VAR/ADM:/SBIN/NOLOGIN
LP:X:4:7:LP:/VAR/SPOOL/LPD:/SBIN/NOLOGIN
SYNC:X:5:0:SYNC:/SBIN:/BIN/SYNC
SHUTDOWN:X:6:0:SHUTDOWN:/SBIN:/SBIN/SHUTDOWN
HALT:X:7:0:HALT:/SBIN:/SBIN/HALT
MAIL:X:8:12:MAIL:/VAR/SPOOL/MAIL:/SBIN/NOLOGIN
OPERATOR:X:11:0:OPERATOR:/ROOT:/SBIN/NOLOGIN
GAMES:X:12:100:GAMES:/USR/GAMES:/SBIN/NOLOGIN
FTP:X:14:50:FTP USER:/VAR/FTP:/SBIN/NOLOGIN
NOBODY:X:99:99:NOBODY:/:/SBIN/NOLOGIN
SYSTEMD-NETWORK:X:192:192:SYSTEMD NETWORK MANAGEMENT:/:/SBIN/NOLOGIN
DBUS:X:81:81:SYSTEM MESSAGE BUS:/:/SBIN/NOLOGIN
POLKITD:X:999:998:USER FOR POLKITD:/:/SBIN/NOLOGIN
SSHD:X:74:74:PRIVILEGE-SEPARATED SSH:/VAR/EMPTY/SSHD:/SBIN/NOLOGIN
POSTFIX:X:89:89::/VAR/SPOOL/POSTFIX:/SBIN/NOLOGIN
ISRC-ADMIN:X:1000:1000:ISRC-ADMIN:/HOME/ISRC-ADMIN:/BIN/BASH
UNBOUND:X:998:996:UNBOUND DNS RESOLVER:/ETC/UNBOUND:/SBIN/NOLOGIN
RPC:X:32:32:RPCBIND DAEMON:/VAR/LIB/RPCBIND:/SBIN/NOLOGIN
QEMU:X:107:107:QEMU USER:/:/SBIN/NOLOGIN
GLUSTER:X:997:995:GLUSTERFS DAEMONS:/RUN/GLUSTER:/SBIN/NOLOGIN
RADVD:X:75:75:RADVD USER:/:/SBIN/NOLOGIN
SASLAUTH:X:996:76:SASLAUTHD USER:/RUN/SASLAUTHD:/SBIN/NOLOGIN
TSS:X:59:59:ACCOUNT USED BY THE TROUSERS PACKAGE TO SANDBOX THE TCSD DAEMON:/DEV/NULL:/SBIN/NOLOGIN
RPCUSER:X:29:29:RPC SERVICE USER:/VAR/LIB/NFS:/SBIN/NOLOGIN
NFSNOBODY:X:65534:65534:ANONYMOUS NFS USER:/VAR/LIB/NFS:/SBIN/NOLOGIN
HONGHUA:X:1001:1001::/HOME/HONGHUA:/BIN/BASH
[root@jiayi-centos-01 opt]#

(3 ) 将文件中的数字替换为&符号
执行如下命令即可将test.txt中的所有数字转换为&符号并写入demo.txt

[root@jiayi-centos-01 opt]# tr '0-9' '&'<test.txt > demo.txt
[root@jiayi-centos-01 opt]# cat demo.txt
root:x:&:&:root:/root:/bin/bash
bin:x:&:&:bin:/bin:/sbin/nologin
daemon:x:&:&:daemon:/sbin:/sbin/nologin
adm:x:&:&:adm:/var/adm:/sbin/nologin
lp:x:&:&:lp:/var/spool/lpd:/sbin/nologin
sync:x:&:&:sync:/sbin:/bin/sync
shutdown:x:&:&:shutdown:/sbin:/sbin/shutdown
halt:x:&:&:halt:/sbin:/sbin/halt
mail:x:&:&&:mail:/var/spool/mail:/sbin/nologin
operator:x:&&:&:operator:/root:/sbin/nologin
games:x:&&:&&&:games:/usr/games:/sbin/nologin
ftp:x:&&:&&:FTP User:/var/ftp:/sbin/nologin
nobody:x:&&:&&:Nobody:/:/sbin/nologin
systemd-network:x:&&&:&&&:systemd Network Management:/:/sbin/nologin
dbus:x:&&:&&:System message bus:/:/sbin/nologin
polkitd:x:&&&:&&&:User for polkitd:/:/sbin/nologin
sshd:x:&&:&&:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:&&:&&::/var/spool/postfix:/sbin/nologin
isrc-admin:x:&&&&:&&&&:isrc-admin:/home/isrc-admin:/bin/bash
unbound:x:&&&:&&&:Unbound DNS resolver:/etc/unbound:/sbin/nologin
rpc:x:&&:&&:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
qemu:x:&&&:&&&:qemu user:/:/sbin/nologin
gluster:x:&&&:&&&:GlusterFS daemons:/run/gluster:/sbin/nologin
radvd:x:&&:&&:radvd user:/:/sbin/nologin
saslauth:x:&&&:&&:Saslauthd user:/run/saslauthd:/sbin/nologin
tss:x:&&:&&:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
rpcuser:x:&&:&&:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:&&&&&:&&&&&:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
honghua:x:&&&&:&&&&::/home/honghua:/bin/bash
[root@jiayi-centos-01 opt]#

(4 )删除文件中的所有小写字母
如下所示,删除小写字母后,每一行还是每一行,只是将小写字母全部删除

[root@jiayi-centos-01 opt]# tr -d 'a-z'<test.txt
::0:0::/://
::1:1::/://
::2:2::/://
::3:4:://://
::4:7::///://
::5:0::/://
::6:0::/://
::7:0::/://
::8:12::///://
::11:0::/://
::12:100:://://
::14:50:FTP U://://
::99:99:N:/://
-::192:192: N M:/://
::81:81:S  :/://
::999:998:U  :/://
::74:74:P- SSH:///://
::89:89::///://
-::1000:1000:-://-://
::998:996:U DNS ://://
::32:32:R D:///://
::107:107: :/://
::997:995:GFS ://://
::75:75: :/://
::996:76:S ://://
::59:59:A          ://://
::29:29:RPC S U:///://
::65534:65534:A NFS U:///://
::1001:1001:://://
[[root@jiayi-centos-01 opt]# tr -d 'a-z'<test.txt
::0:0::/://
::1:1::/://
::2:2::/://
::3:4:://://
::4:7::///://
::5:0::/://
::6:0::/://
::7:0::/://
::8:12::///://
::11:0::/://
::12:100:://://
::14:50:FTP U://://
::99:99:N:/://
-::192:192: N M:/://
::81:81:S  :/://
::999:998:U  :/://
::74:74:P- SSH:///://
::89:89::///://
-::1000:1000:-://-://
::998:996:U DNS ://://
::32:32:R D:///://
::107:107: :/://
::997:995:GFS ://://
::75:75: :/://
::996:76:S ://://
::59:59:A          ://://
::29:29:RPC S U:///://
::65534:65534:A NFS U:///://
::1001:1001:://://
[root@jiayi-centos-01 opt]#

(6) 删除文件中的数字冒号和斜线和逗号
如果对应多种匹配可以直接叠加即可

[root@jiayi-centos-01 opt]# tr -d ':/0-9,'<test.txt
rootxrootrootbinbash
binxbinbinsbinnologin
daemonxdaemonsbinsbinnologin
admxadmvaradmsbinnologin
lpxlpvarspoollpdsbinnologin
syncxsyncsbinbinsync
shutdownxshutdownsbinsbinshutdown
haltxhaltsbinsbinhalt
mailxmailvarspoolmailsbinnologin
operatorxoperatorrootsbinnologin
gamesxgamesusrgamessbinnologin
ftpxFTP Uservarftpsbinnologin
nobodyxNobodysbinnologin
systemd-networkxsystemd Network Managementsbinnologin
dbusxSystem message bussbinnologin
polkitdxUser for polkitdsbinnologin
sshdxPrivilege-separated SSHvaremptysshdsbinnologin
postfixxvarspoolpostfixsbinnologin
isrc-adminxisrc-adminhomeisrc-adminbinbash
unboundxUnbound DNS resolveretcunboundsbinnologin
rpcxRpcbind Daemonvarlibrpcbindsbinnologin
qemuxqemu usersbinnologin
glusterxGlusterFS daemonsrunglustersbinnologin
radvdxradvd usersbinnologin
saslauthxSaslauthd userrunsaslauthdsbinnologin
tssxAccount used by the trousers package to sandbox the tcsd daemondevnullsbinnologin
rpcuserxRPC Service Uservarlibnfssbinnologin
nfsnobodyxAnonymous NFS Uservarlibnfssbinnologin
honghuaxhomehonghuabinbash
[root@jiayi-centos-01 opt]#

16.3 文件词数统计—— wc命令

Linux中的wc命令是"word count"(词数统计)的缩写,用于统计文件中的行数、字数和字节数。它是一个简单而实用的命令行工具。

在这里插入图片描述

它对于快速查看文本文件的行数、字数和字节数非常有用,特别是在处理大量数据时。

基本用法:

wc filename

这将输出filename文件的行数、字数和字节数。

显示行数、字数和字节数:

wc filename

输出格式:行数 字数 字节数 文件名

只显示行数:

wc -l filename

这将只输出filename文件的行数。

只显示字数:

wc -w filename

这将只输出filename文件的字数。

只显示字节数:

wc -c filename

这将只输出filename文件的字节数。

只输出总计(行数、字数、字节数):

wc -lwc filename

这将只输出filename文件的行数、字数和字节数的总计。

同时处理多个文件:

wc file1 file2

这将同时输出file1和file2文件的行数、字数和字节数。

递归统计目录下的文件:

wc -lwc directory/*

这将递归统计目录下所有文件的行数、字数和字节数,并在最后给出总计。

从标准输入读取内容:

command | wc

这将允许你通过管道将某个命令的输出传递给wc命令,然后统计输出内容的行数、字数和字节数。

不统计行数:

echo "Hello, world!" | wc -l

如果你只想统计字数或字节数而不关心行数,可以使用echo命令将文本输出,然后通过管道将其传递给wc命令。

不输出文件名:

wc -l < filename

这将只输出filename文件的行数,而不包含文件名。

统计多行文本中的行数:

echo -e "Line 1\nLine 2\nLine 3" | wc -l

这将统计多行文本中的行数。使用echo命令生成文本并通过管道传递给wc命令。

16.4 选取命令——cut

cut是一个选取命令,就是将一段数据经过分析,取出我们想要的。一般来说,选取信息通常是针对“行”来进行分析的,并不是整篇信息分析的。

cut命令格式

cut [选项] 文件名

cut命令常用的选项

  • -c: 以字符为单位进行分割,截取
  • -d: 自定义分隔符,默认为制表符\t
  • -f: 与-d一起使用,指定截取哪个区域

(1)通过指定字符分隔,然后取某一列

比如 /etc/passwd 文件内容格式如下

[root@jiayi-centos-01 opt]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
isrc-admin:x:1000:1000:isrc-admin:/home/isrc-admin:/bin/bash
unbound:x:998:996:Unbound DNS resolver:/etc/unbound:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
gluster:x:997:995:GlusterFS daemons:/run/gluster:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
honghua:x:1001:1001::/home/honghua:/bin/bash
[root@jiayi-centos-01 opt]#

比如想获取第一列即获取所有进程的用户名,则可以通过如下命令,-d指定冒号分隔,-f1指定取第一列

cut -d ':' -f1 /etc/passwd
# 或
cut -d “:” -f1 /etc/passwd
# 或
cut -d: -f1 /etc/passwd

比如:

[root@jiayi-centos-01 opt]# cut -d: -f1 /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
systemd-network
dbus
polkitd
sshd
postfix
isrc-admin
unbound
rpc
qemu
gluster
radvd
saslauth
tss
rpcuser
nfsnobody
honghua
[root@jiayi-centos-01 opt]#

(2 )通过指定字符分隔,然后取其中几列

比如取/etc/passwd 中第一列和第7列,即用户名和对应的应用程序

[root@jiayi-centos-01 opt]# cut -d: -f1,7 /etc/passwd
root:/bin/bash
bin:/sbin/nologin
daemon:/sbin/nologin
adm:/sbin/nologin
lp:/sbin/nologin
sync:/bin/sync
shutdown:/sbin/shutdown
halt:/sbin/halt
mail:/sbin/nologin
operator:/sbin/nologin
games:/sbin/nologin
ftp:/sbin/nologin
nobody:/sbin/nologin
systemd-network:/sbin/nologin
dbus:/sbin/nologin
polkitd:/sbin/nologin
sshd:/sbin/nologin
postfix:/sbin/nologin
isrc-admin:/bin/bash
unbound:/sbin/nologin
rpc:/sbin/nologin
qemu:/sbin/nologin
gluster:/sbin/nologin
radvd:/sbin/nologin
saslauth:/sbin/nologin
tss:/sbin/nologin
rpcuser:/sbin/nologin
nfsnobody:/sbin/nologin
honghua:/bin/bash
[root@jiayi-centos-01 opt]#

(3)按照字符从每行截取一段

比如每一行截取第1到第5共5个字符

[root@jiayi-centos-01 opt]# cut -c1-5 /etc/passwd
root:
bin:x
daemo
adm:x
lp:x:
sync:
shutd
halt:
mail:
opera
games
ftp:x
nobod
syste
dbus:
polki
sshd:
postf
isrc-
unbou
rpc:x
qemu:
glust
radvd
sasla
tss:x
rpcus
nfsno
hongh
[root@jiayi-centos-01 opt]#

**(4)**如下,则为取第1个和第5个字符

[root@jiayi-centos-01 opt]# cut -c1,5 /etc/passwd
r:
bx
do
ax
l:
s:
sd
h:
m:
oa
gs
fx
nd
se
d:
pi
s:
pf
i-
uu
rx
q:
gt
rd
sa
tx
rs
no
hh
[root@jiayi-centos-01 opt]#

16.5 查看历史命令 ——history

history的英文单词来源于它自己,主要功能是用于显示与管理历史记录。linux系统默认会记录用户所执行过的所有命令,可以使用history命令查阅它们,也可以对其命令进行修改和删除操作。

语法:history [参数] / history [参数] 文件

命令的常用参数:

  • -a 写入命令记录
  • -c 清空命令记录
  • -d 删除指定序号的命令记录
  • -n 读取命令记录
  • -r 读取命令记录到缓冲区
  • -s 将指定的命令添加到缓冲区
  • -w 将缓冲区信息写入到历史文件

设置history的格式


#export HISTTIMEFORMAT='%F%T'
#history
109  2018-09-2610:41:13docker ps -a
110  2018-09-2610:41:13docker logs 5070b321f093
111  2018-09-2610:41:13curl localhost:306
112  2018-09-2610:41:13curl localhost:3306
113  2018-09-2610:41:13curl localhost:3306/?token=5eac513d45dd0ff35b3060f30db430774afa636af51aba98
114  2018-09-2610:41:13wget localhost:3306/?token=5eac513d45dd0ff35b3060f30db430774afa636af51aba98
115  2018-09-2610:41:13ll
116  2018-09-2610:41:13rm -rf index.html\?t
#控制历史命令的总个数
export HISTORY-SIZE=1000
#设置内存中的个数
export HISTORY-FILESIZE=1000
#修改历史记录的位置(默认的位置再 ~/.bash_history)
export HIST-FILE=~/history.log
#清除整个命令历史中的重复记录
export HIST-CONTROL = erasedups
#忽略命令历史中连续重复的命令
export HIST-CONTROL = ignoredups
#忽略记录空格开始命令
export HIST-CONTROL=ignorespace

使用上一命令

  • 使用向上方向键,并回车执行
  • 输入!!并回车执行
  • 输入!-1并回车
  • 输入Ctrl+P组合键并执行回车执行

执行指定历史命令

#查出指定的命令行
$history 
$!<--num-->

搜索曾经使用过的命令

Crtl +R 搜索曾经的命令

(reverse-i-search)`': 

清除历史命令(内存)

[root@iZxbf053ow6pyhZ ~]# history -c
[root@iZxbf053ow6pyhZ ~]# history 
    1  2018-09-2610:54:11history 

彻底删除历史命令

[root@iZxbf053ow6pyhZ ~]# history -c
[root@iZxbf053ow6pyhZ ~]# history -w

history -w 的作用就是用内存中的历史命令覆盖.bash_history文件的内容,这样即使Shell重新加载也加载不到任何命令了

十七、Linux系统中文件传输的方式

linux中文件传输的方式有ftp,scp,rsync,rz,sz等,但各个工具的功能又有所区别;

  • FTP : FTP是文件服务器,可实现文件的上传下载,存储等功能,但本文不打算介绍ftp的使用。
  • scp: scp能够将不同主机的文件进行相互传输,使用简单方便。
  • rz : 用于linux与windows之间的文件上传
  • sz : 用于linux与windows之间的文件下载
  • rsync : rsync是文件同步工具,结合inotify可以实现文件的同步,备份功能。

17.1 scp命令

介绍

scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读 read only system时,用scp可以帮你把文件移出来。另外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。虽然 rsync比scp会快一点,但当小文件众多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。scp在夸机器复制的时候为了提高数据的安全性,使用了ssh连接和加密方式,如果机器之间配置了ssh免密码登录,那在使用scp的时候密码都不用输入。

scp的安装:

文件传输的两端机器都需要安装

[root@yufu ~]# yum install openssh-clients -y

命令格式scp [参数] [本地主机文件路径] [ 远程主机路径]

参数选项

  • -B 使用批处理模式(传输过程中不询问传输口令或短语)

  • -C 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)

  • -p 保留原文件的修改时间,访问时间和访问权限。 (建议使用,传输时保留属性时间信息,否则会导致时间发生改变无法进行增量传输)

  • -r 递归复制整个目录。

  • -v 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。

  • -l limit 限定用户所能使用的带宽,以Kbit/s为单位。

  • -P port 注意是大写的P, port是指定数据传输用到的端口号

    scp的使用:将本地A主机文件复制到B主机: A:192.168.214.190 B:192.168.214.187

    [root@localhost tmp]#scp -p ./files/yum.log 192.168.214.187:/tmp/demo/
    The authenticity of host '192.168.214.187 (192.168.214.187)' can't be established.
    RSA key fingerprint is SHA256:BwJdXsDA6F5976fKx1cSxkGJ9/uYYI4zVJ2rd+/Cvj0.
    RSA key fingerprint is MD5:85:87:8b:17:d2:79:c7:91:11:46:78:b3:4d:9d:dd:5a.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '192.168.214.187' (RSA) to the list of known hosts.
    root@192.168.214.187's password: 
    yum.log                                                    100%    0     0.0KB/s   00:00
    

    检查B主机文件:

    [root@yufu demo]# ls
    f3.log  yum.log
    [root@yufu demo]# ll
    总用量 0
    -rw-r--r--. 1 root root 0 3月  31 22:38 f3.log
    -rw-------. 1 root root 0 3月  31 22:36 yum.log
    
    

将远程主机复制到本地

[root@localhost files]#scp -p 192.168.214.187:/tmp/demo/f3.log /tmp/files/
root@192.168.214.187's password: 
f3.log                                                     100%    0     0.0KB/s   00:00    
[root@localhost files]#ls
f3.log  ff.txt  yum.log

复制目录

[root@localhost tmp]#scp -rp ./files/ 192.168.214.187:/tmp/demo
root@192.168.214.187's password: 
f3.log                                                     100%    0     0.0KB/s   00:00    
yum.log                                                    100%    0     0.0KB/s   00:00    
ff.txt                                                     100%    5     7.3KB/s   00:00    
[root@localhost tmp]#


检查远程主机目录

[root@yufu demo]# tree 
.
└── files
    ├── app
    ├── f3.log
    ├── ff.txt
    └── yum.log

2 directories, 3 files


17.2 rz sz (lrzsz)

​ rz sz指令可以实现linux和windows之间的文件传输,但要求在windows客户端要安装Xshell或SecureCRT远程连接工具。

​ rz指令和sz指令是一对上传与下载的指令。它们的软件包名为lrzsz。

rz sz指令使用很简单,执行rz 指令,远程连接工具会弹出windows文件选择窗口,只要选择要上传的文件即可

工具的安装:

  $ yum install lrzsz -y

​ 文件上传

img

img

文件下载:

img

十八、Linux中的特殊符号

特殊符号功能说明
;可使用分号分隔多条命令在一行上输入和执行多条较短的命令,可使用分号来分隔命令
*匹配任意零个或者多个字符不能用于创建文件
?匹配任意单个字符不能用于创建文件
[]匹配方括号中的任意一个字符,表示范围可以用 “-不能用于创建文件
[^]或者[!]匹配方括号中的任意一个字符或数字后进行取反用于查找和删除文件,不用于创建文件
{string,string}匹配括号中的任意一个字符串,表示一个范围时,字符串之间"…"可用于创建、查看、删除文件
\使\后面的特殊字符失效例如: 可以在命令行后面加一个,再按回车键时并不表示执行该命令,而是表示换行,通过此方式将一个较长的命令分成多行表达,增强命令的可读性。换行后系统自动显示提示符>
`反引号,一般用于引用命令,执行的时候反引号里面的命令会被执行,与 $()作用相同
''单引号,将单引号内的所有内容都原样输出所有特殊字符在单引号里面都会失去特殊含义
""双引号,除了几个特殊字符外,将双引号内的几乎所有内容都原样输 出”$“和“ \“以及” `“在双引号里面仍然保留自己的特殊含义

单引号为强引用: 内容原样输出

双引号为弱引用: 调用内容

image-20231104150052481

十九、用户管理

19.1Linux用户类型

Linux用户被分为三种类型:管理员用户 系统用户 普通用户

(1) 管理员用户

权限最大,限制最小

(2)系统用户

默认情况下不能登录服务器,只能去调用某个服务程序

系统用户可以避免两个问题

黑客破解系统用户密码后,不能够登录服务器

当黑客入侵了网站服务之后,由于系统用户的权限特别小,黑客造成的范围也会降低很多

(3)普通用户

用来日常完成工作的用户(普通用户下不能够新建普通用户)

(4) 系统用户和普通用户的区别

系统用户和普通用户登录终端不同

普通用户的登录终端是 /bin/bash,能够正常使用这个账户登录服务器

系统用户的登录终端是/sbin/nologin,不能够正常登录登录到服务器(只能管理某些服务)

19.2 UID

UID 用户的身份证号码(uid user identification),具有唯一性

不同用户的UID范围

(1)管理员用户

UID 为0 (唯一的,不可更改的,UID为0就代表是管理员用户)

(2)系统用户

UID在RHEL5、6系统下为 1-499;在RHEL7-9系统下为1-999

(3)普通用户

UID 在RHEL5、6为500-65535;在RHEL7-9系统下为从1000开始,没有上限

(4)注意事项

UID=0一定代表的是管理员用户,其余的UID不能确定

即除了管理员用户的UID外,其余用户的UID都可以手工指定(所以无法只通过UID来判断其是系统用户还是普通用户)

系统用户和普通用户是通过功能和作用来区分的,不是通过UID来区别(即UID只是做个参考)

19.3 用户组ID

用户组只有一个组ID,就是用户组ID,其基本组ID和扩展组ID是对于用户来说的

可以将不同的用户加入到用户组,使得不同的用户都拥有这个用户组所有的权限

不用过多的去区分基本组和扩展组,要想用户获得某个用户组的权限,直接将这个用户加入到这个用户组就可以了

(1)基本组ID(gid)

当创建用户时会自动生成一个组,组名和用户名一致,这个组对于用户自己来说就是基本组

(2)扩展组ID

当用户加入到其它用户的基本组时,其它用户的其本组对于自己来说就是扩展组

一个用户的扩展组可以有多个(最多31个扩展组)

扩展组组要用于权限管理

(3)注意事项(groups)

一个用户只可以有一个基本组,一个用户可以加入到多个扩展组

文件属性的所属组就是用户组,只要是这个用户组的用户,就可以享用此用户组对这个文件的权限,不区分此用户组对用户来说是基本组还是扩展组

ls -l 可以查看

文件属性 文件所有者 文件所属组

此时文件所属组并不区分基本组和扩展组,只要文件有所属组就可以

19.4 通过文件的方法新建、编辑用户

(1) /etc/passwd

vim /etc/passwd 此文件时用来存储用户信息的(不包括密码)

在这里插入图片描述
在这里插入图片描述

img

字段1:root——用户名称

字段2:x————密码占位符(有为x,真正的密码存放在shadow中

字段3:1————UID

字段4:1————初始用户组ID(只包含基本组;扩展组的信息在/etc/group文件中可以查询到)

字段5:root———用户的描述信息

字段6:/root———用户的家目录

字段7:/bin/bash—解释器终端(用户登录shell;为/bin/bash表示可以登录系统,为/sbin/noligin表示不被授权登录系统-也就是系统用户)

(2) /etc/group

vim /etc/group 此文件报文的是用户组信息(包含基本组和扩展组的信息)

在这里插入图片描述

字段1:linux2——用户组名(此组为与该组名称相同的用户的基本组)

字段2:X————密码占位符(是否有密码)

字段3:1002———用户组ID

字段4:admin1——组内其它用户列表(对于该列表内的用户来说,此组就是自己的扩展组)

(3) /etc/shadow

vim /etc/shadow 文件保存的是用户的密码信息

在这里插入图片描述

在这里插入图片描述

img
在这里插入图片描述

字段1:admin1——用户名

字段2:!! ————加密密码(!!表示不设置密码)

“口令”字段存放的是加密后的用户口令字,如果为空,则对应用户没有口令,登录时不需要口令;

星号代表帐号被锁定,将无法登录;双叹号表示这个密码已经过期了, 如果是$x$xxxxxxxx$的形式,则代表密码正常。

$6$开头的,表明是用SHA-512加密的,密文长度86,示例中‘5NAhdLZN’为salt值,是一个随机字符串,供加密使用
 $1$ 表明是用MD5加密的,密文长度22个字符
 $2$ 是用Blowfish加密的,
 $5$ 是用 SHA-256加密的,密文长度4

字段3:19401 ——最后一次修改日期距离1970年1月1日的天数

字段4:0 ————最小时间间隔(修改密码最小间隔天数)

字段5:99999——最大时间间隔(密码保存的最大有效天数)

字段6:7————警告时间(密码过期前进行警告)

字段7: ————不活动时间(密码失效后账号能够保持有效的最大天数)

字段8:: ————失效时间(密码无效时间,记录的是账号失效时间距离1970年1月1日的天数–使用这个字段需要给出账号的生存日期,期满后此账号无法登录)

字段9:: 标志———未分配的功能

注意事项

密码是通过SHA-512加密出来的(该加密为二次加密,在经过第一此加密之后,第二次加入随机数再此加密;因此相同的密码每次加密的结果都不一样)

如果要输入密码,可以通过机密软件将密码加密,然后复制进来

/etc/skel
/etc/skel 用于存放shell的环境变量,当使用命令创建新用户的时候,这个目录下的所有文件会自动复制到新用户的家目录下

当我们使用文件建立用户,我们需要手动将此文件复制到用户的加目录下

(4) cp -r /etc/skel 用户家目录

/etc/skel 用于存放shell的环境变量,当使用命令创建新用户的时候,这个目录下的所有文件会自动复制到新用户的家目录下

当我们使用文件建立用户,我们需要手动将此文件复制到用户的加目录下

cp -r /etc/skel 用户家目录

19.5通过文件创建用户实例

vim /etc/group 创建用户组名为linuxjp,组ID为521

 linuxjp:x:521

在这里插入图片描述

vim /etc/passwd 创建用户名为linuxj,uid为520,用户组id为521,家目录为/home/linuxj,终端解释器为/bin/bash

vim /etc/shadow 为linuxj编写密码,此处表示暂时不写密码

linuxj:!!::::::

img

此时登录用户发现虽然也可登录进去,但是用户没有家目录

img

cp -r /etc/skel /home/linuxj 为linuxj创建家目录

img

id linuxj查看用户信息

img

19.6 Linux 用户相关命令

(1) id 查看用户信息

d [用户名]——查看用户的信息(UID、基本组ID、扩展组ID)

id 查看当前用户的信息

id 用户名 查看指定用户的信息

img

gid 基本组ID(用户组)、groups 扩展组ID(用户组)

(2) who 查看系统中当前用户的信息

img

字段含义

第一列:登录的登录名

第二列:用户连接的方式(tty2指的是直接连接方式,pts 指的是远程连接方式)

第三、四列: 登陆到系统的时间

第五列:也就是括号内的字段,显示用户登录所使用的ip地址;tty表示本地直连

19.7 useradd 创建新的用户账户

useradd 【参数】 【用户】 ——创建用户

  • useradd -u 1000 用户 创建uid为1000的用户

  • -u 指定该用户的用户ID

  • -c 为用户加上备注(备注文字会保存在passwd的备注栏位中)

  • -d 指定用户的家用户(默认为/home/username)

  • -e 指定账户的到期时间(格式为YYYY-MM-DD)

  • -g 指定一个用户组(包括基本组和扩展组)

  • -G 指定一个或多个用户的扩展组

  • -N 不创建于用户同名的基本用户组(默认us创建)

  • -s 指定该用户默认的shell解释器(即指定该用户是否能够登录终端)

  • -m 自动建立用户的登录目录

  • -M 不自动建立用户的登录目录

  • -n 取消建立以用户名的名称为名字的群组

img

19.8 usermod 修改用户的属性

usermod 【参数】 【用户名】 // 修改用户的属性

-u 修改用户的UID

-s 修改用户登录终端,将用户的登录终端修改为/sbin/nologin,此用户就无法登录服务器了

-d 修改用户登录时的家用户(当-d 和 -m 一起使用时,可以 将旧的数据移动到新的家目录中)

-c 填写账户的备注信息

-e 修改账户的到期时间,格式为(YYYY-MM-DD)

-g 变更用户组(包括基本组和扩展组)

-G 变更扩展组

-l 新用户名

-L 锁定用户,禁止其登录系统(可以通过passwd -S 用户名 查看该用户的状态)

-U 解锁用户,允许其登陆系统

19.9 userdel 删除用户

userdel 【参数】 【用户 】 删除用户名称

userdel -r用户删除用户的同时并删除用户的家目录

userdel -f用户】 强制删除用户

注意事项

当删除用户后,只是删除了用户名称(只删除passwd、shadow、group文件中的用户信息),用户的家目录/home信息没有删除,用户的邮件/var/spool/mail没有删除

关于此用户的重要数据还存放在/home文件下,当再次创建此用户后会自动关联家目录等信息

19.10 passwd 修改用户的密码、过期时间等

passwd 【参数】 用户 修改用户的密码、过期时间等

  • passwd 修改当前用户的密码

  • passed 用户名 修改此用户的密码

  • passed -e 用户名 强制用户在下一次登录时修改密码

  • –stdin 允许用户通过标准输入修改用户密码

  • -S 显示用户的密码是否被锁定,以及密码所采用的加密算法名称

  • -l 锁定用户,禁止其登录

  • -u 解锁锁定,允许用户登录

img

img

二十、用户组管理

20.1 用户组的基础概念

用户组:具有相同特性用户的逻辑集合,通过组的形式使得具有相同特性的多个用户能够拥有相同的权限,便于管理;

每一个用户都拥有自己的私有组;
同一组内的所有用户可以共享该组下的文件;
每一个用户组都会被分配一个特有的id号-gid。

(1)etc/group

/etc/group:组信息文件。在这个文件中,保存着用户组的所有信息,每一行记录代表一个用户组;将用户分组是对用户进行管理及控制访问权限的一种手段,每个用户都属于一个用户组;一个组中可以有多个用户,一个用户也可以属于不同的组。
/etc/group文件每一行由四个字段的数据组成,且字段之间用“:”隔开。这里我们以root用户为例,根据root用户的文件记录来了解/etc/group文件用户组记录中相关字段的意义:

在这里插入图片描述

在这里插入图片描述

  • 组名,也就是是用户组的名称,有字母或数字构成。同 /etc/passwd 中的用户名一样,组名也不能重复。
  • 组密码和 /etc/passwd 文件一样,这里的 “x” 仅仅是密码标识,真正加密后的组密码默认保存在 /etc/gshadow 文件中。用户组密码主要是用来指定组管理员的,由于系统中的账号可能会非常多,root 用户可能没有时间进行用户的组调整,这时可以给用户组指定组管理员,如果有用户需要加入或退出某用户组,可以由该组的组管理员替代 root 进行管理。但是这项功能目前很少使用,我们也很少设置组密码。如果需要赋予某用户调整某个用户组的权限,则可以使用 sudo 命令代替。
  • 组ID (GID)就是群组的 ID 号,Linux 系统就是通过 GID 来区分用户组的,同用户名一样,组名也只是为了便于管理员记忆。这里的组 GID 与 /etc/passwd 文件中第 4 个字段的 GID 相对应,实际上,/etc/passwd 文件中使用 GID 对应的群组名,就是通过此文件对应得到的。
  • 组中的用户列表,此字段列出每个群组包含的所有用户。需要注意的是,如果该用户组是这个用户的初始组,则该用户不会写入这个字段,可以这么理解,该字段显示的用户都是这个用户组的附加用户。
(2)/etc/gshadow

在这里插入图片描述

在这里插入图片描述

/etc/gshadow:组信息加密文件。在这个文件中,会保存用户组加密信息,比如说用户组管理密码就保存在此(与/etc/shadow文件相似);与/etc/group文件互补,对于大型服务器来说,拥有很多用户和组,此时会针对这些用户和组来生成一些复杂的权限模型,此时设置并管理密码就显得尤为重要。

/etc/gshadow文件每一行由四个字段的数据组成,且字段之间用“:”隔开。这里我们以root用户为例,根据root用户的文件记录来了解/etc/group文件中相关字段的意义:

  • 组名,同 /etc/group 文件中的组名相对应。
  • 组密码,对于大多数用户来说,通常不设置组密码,因此该字段常为空,但有时为 “!”,指的是该群组没有组密码,也不设有群组管理员。
  • 组管理员,从系统管理员的角度来说,该文件最大的功能就是创建群组管理员。考虑到 Linux 系统中账号太多,而超级管理员 root 可能比较忙碌,因此当有用户想要加入某群组时,root 或许不能及时作出回应。这种情况下,如果有群组管理员,那么他就能将用户加入自己管理的群组中,也就免去麻烦 root 了。由于目前有 sudo 之类的工具,因此群组管理员的这个功能已经很少使用了。
  • 组中的附加用户,该字段显示这个用户组中有哪些附加用户,和 /etc/group 文件中附加组显示内容相同。

20.2用户组GID

用户组ID(Group ID,简称为GID)和用户UID类似,作为唯一标识符来标示系统中的一个用户组:

在添加账户时,默认情况下会同时建立一个与用户同名且UID和GID相同的组;
GID与UID都会将0赋予给超级用户或者具有超级用户的用户组(也就是root用户组);
系统会预留一些较前的GID给虚拟用户(也称为系统用户)。
可以通过输入命令行id [option] [user_name],查看用户组gid以及每个用户组下拥有的用户数量。每个系统预留的GID都有所不同,比如Fedora 预留了500个;在创建目录和文件时,会使用默认的用户组。

UID 用户的身份证号码(uid user identification),具有唯一性

不同用户的UID范围

(1)管理员用户

UID 为0 (唯一的,不可更改的,UID为0就代表是管理员用户)

(2)系统用户

UID在RHEL5、6系统下为 1-499;在RHEL7-9系统下为1-999

(3)普通用户

UID 在RHEL5、6为500-65535;在RHEL7-9系统下为从1000开始,没有上限

(4)注意事项

UID=0一定代表的是管理员用户,其余的UID不能确定

即除了管理员用户的UID外,其余用户的UID都可以手工指定(所以无法只通过UID来判断其是系统用户还是普通用户)

系统用户和普通用户是通过功能和作用来区分的,不是通过UID来区别(即UID只是做个参考)

用户组分类:

  • 普通用户组:可以加入多个用户
  • 系统组:一般加入一些系统用户
  • 私有组(也称基本组):当创建用户时,如果没有为其指明所属组,则就为其定义一个私有的用户组,起名称与用户名同名.注:私有组可以变成普通用户组,当把其他用户加入到该组中,则其就变成了普通组

将用户分组是 Linux 系统中对用户进行管理及控制访问权限的一种手段,通过定义用户组,很多程序上简化了对用户的管理工作。

用户和用户组的关系:

  • 一对一:一个用户可以存在一个用户组中,作为组中的唯一成员;

  • 一对多:一个用户可以存在多个用户组中,该用户具有多个组的共同权限;

  • 多对一:多个用户可以存在一个用户组中,这些用户具有和组相同的权限;

  • 多对多:多个用户可以存在多个用户组中,其实就是以上三种关系的扩展。

20.4 用户组的相关管理命令

(1)创建组-groupadd

groupadd可用来创建一个新的用户组,并将新用户组信息添加到系统文件中。

语法: groupadd [参数] 组名
其中的命令选项说明如下:

  • ​ -f 如果组已存在,则成功退出
  • ​ -g 为新用户组所使用的GID
  • ​ -h 显示此帮助信息并退出
  • ​ -o 允许创建有重复 GID 的组
  • ​ -p 为新用户组使用此加密过的密码
  • ​ -r 创建一个系统账户

其它选项:

  • ​ -R, --root CHROOT_DIR chroot 到的目录
  • ​ -P, --prefix PREFIX_DIR directory prefix
  • ​ -K, --key KEY=VALUE 不使用 /etc/login.defs 中的默认值
(2)修改组-groupmod

groupmod可用来更改群组识别码或者名称。

语法:groupmod [options] group_name

其中的命令选项说明如下:

  • ​ -g 修改为要使用的GID
  • ​ -h 显示此帮助信息并退出
  • ​ -n 修改为要使用的组名称
  • ​ -o 允许使用重复的 GID
  • ​ -p 更改密码(加密过的)
(3)删除组-groupdel

groupdel命令用于从系统中删除组,需要注意的是,若是在组中仍然包括某些用户,此时需要先删除这些用户后,才能删除组。
功能说明:用于删除指定的用户组,此命令不能删除用户归属的主用户组。

语法:groupdel [options] group_name
其中的命令选项说明如下:

  • ​ -f 即便是用户的主组也继续删除
  • ​ -h 显示此帮助信息并退出
(4)关联用户和组-gpasswd

gpasswd可以用来添加或删除用户到组中。

语法:gpasswd [option] group_name。
其中的命令选项说明如下:

  • ​ -a 向组 GROUP 中添加用户 USER
  • ​ -d 从组 GROUP 中添加或删除用户
  • ​ -M 设置组 GROUP 的成员列表
  • ​ -A 设置组的管理员列表
  • ​ -r 移除组 GROUP 的密码
  • ​ -R 向其成员限制访问组 GROUP
  • ​ -Q 要 chroot 进的目录

添加用户到某一个组 可以使用 usermod -G group_name user_name 这个命令可以添加一个用户到指定的组,但是以前添加的组就会清空掉。所以想要添加一个用户到一个组,同时保留以前添加的组时,请使用 gpasswd 这个命令来添加操作用户

(5)chroot

chroot,即 change root directory (更改 root 目录)。在 linux 系统中,系统默认的目录结构都是以 /,即是以根 (root) 开始的。而在使用 chroot 之后,系统的目录结构将以指定的位置作为 / 位置。

Chroot的好处:
  增加了系统的安全性,限制了用户的权力;
  建立一个与原系统隔离的系统目录结构,方便用户的开发;
  切换系统的根目录位置,引导 Linux 系统启动以及急救系统等。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值