more分屏显示文件内容:
基本语法:
# more 文件名称
特别注意:more命令在加载文件时并不是一点一点进行加载,而是打开文件时就已经把文件的全部内容加载到内存中了。如果打开文件较大,则可能会出现卡顿情况。
more命令拥有一些交互功能,可以通过快捷键进行操作这个more的阅读器。
less分屏显示文件内容(重点):
基本语法:
# less 文件名称
特别注意:less命令不是加载整个文件到内存,而是一点一点进行加载,相对而言,读取大文件时,效率比较高。
另外:less可以通过上下方向键显示上下内容,退出时不会在Shell中留下刚显示的内容
less 命令的执行也会打开一个交互界面,下面是一些常用交互命令(和more类似)
cat,more,less三者的对比:
文件统计命令:
wc命令:
基本语法:
# wc [选项] 文件名称
选项说明:
-l:表示lines,行数(以回车/换行符为标准)
-w:表示words,单词数 依照空格来判断单词数量
-c:表示bytes,字节数(空格,回车,换行)
#案例:统计linux.txt文件的总行数
# wc -l linux.txt
#案例:统计linux.txt文件中的单词数
# wc -w linux.txt
#案例:统计文件的字节数(数字、字母一般1个字符=1个字节,中文和编码格式有关,如utf-8编码格式,1个汉字占用3个字节)
# wc -c linux.txt
案例:统计一个文件的总行数、总单词数以及总字节数
# wc -wlc linux.txt
或
# wc -lwc linux.txt
或
# wc -clw linux.txt
扩展:wc [选项] 文件的名称可以统计一个文件的信息,实际情况下,我们选项还可以一起使用
du命令:
基本语法:
# du [选项] 统计的文件或文件夹
选项说明:
-s :summaries,只显示汇总的大小,统计文件夹的大小
-h :以较高的可读性显示文件或文件夹的大小,(KB/MB/GB/TB)
主要功能:查看文件或目录(会递归显示子目录)占用磁盘空间大小
案例:显示readme.txt文件的大小(占用磁盘空间,不显示文件大小的单位)
# du readme.txt
案例:显示readme.txt文件的大小(占用磁盘空间,显示文件大小的单位)
# du -h readme.txt
案例:统计wechat文件夹的大小
# du -sh wechat
案例:统计/etc目录的大小
# du -sh /etc
文件处理命令:
find命令:
基本语法:
# find 搜索路径 [选项]
选项说明:
-name:指定要搜索文件的名称,支持*星号通配符(Shift + 8)
-type:代表搜索的文件类型,f代表普通文件,d代表文件夹=>加快检索速度
主要功能:当我们查找一个文件时,必须使用的一个命令。
案例:搜索/var目录中boot.log文件(普通文件)
# find /var -name "boot.log" -type f
案例:全盘搜索ssh目录
# find / -name "ssh" -type d
特别注意:实际工作时,尽量减少全盘检索,比较消耗资源
扩展功能:find实现模糊查询(必须结合通配符)
案例:搜索/var/log目录下的所有的以".log"结尾的文件信息
# find /var/log -name "*.log" -type f
- :通配符,代表任意个任意字符。如*.log代表以.log结尾的文件,apache*代表搜索以apache开头的文件信息
grep命令:
基本语法:
# grep [选项] 要搜索的关键词 搜索的文件名称
选项说明:
-n :代表显示包含关键词的行号信息
单位:行,一行一行向下搜索
主要功能:在文件中直接找到包含指定关键词的那些行,并把这些信息高亮显示出来
案例:在initial-setup-ks.cfg文件中搜索包含关键词"network"的行
# grep network initial-setup-ks.cfg
案例:在initial-setup-ks.cfg文件中搜索包含关键词"network"的行,然后显示行号信息
# grep -n network initial-setup-ks.cfg
扩展语法:
# grep 要搜索的关键词 多个文件的名称
主要功能:在多个文件中查找包含指定关键词的那些行,并高亮显示出来
案例:搜索/var/log目录下所有文件,找到包含关键词"network"的所有行信息
# grep network /var/log/*
echo命令:
基本语法:
# echo "文本内容"
主要功能:在终端中输入指定的文本内容
案例:在终端中,输出hello world字符串
# echo "hello world"
输出重定向:
场景:一般命令的输出都会显示在终端中,有些时候需要将一些命令的执行结果想要保存到文件中进行后续的分析/统计,则这时候需要使用到的输出重定向技术。
> :标准输出重定向 : 覆盖输出,会覆盖掉原先的文件内容
>>:追加重定向 : 追加输出,不会覆盖原始文件内容,会在原始内容末尾继续添加
案例:把echo输出的"hello world"写入到readme.txt文件中
# echo "hello world" > readme.txt
以上程序的主要功能代表把echo命令的执行结果,输出写入到readme.txt文件中,如果readme.txt文件中存在内容,则首先清空,然后在写入hello world
案例:把echo输出的"hello linux"写入到readme.txt,要求不能覆盖原来的内容
# echo "hello linux" >> readme.txt
Linux操作系统用户和组的概念
为什么需要了解用户和组:
服务器要添加多账户的作用
针对不同用户分配不同的权限,不同权限可以限制用户可以访问到的系统资源
提高系统的安全性
帮助系统管理员对使用系统的用户进行跟踪
用户和组的关系:
理论上Linux系统中的每个用户在创建时都应该有一个对应的用户组,这个组就称之为用户的主组。同时,有些情况下,某个用户需要临时使用某个组的权限,那这个组就称之为这个用户的附属组或附加组。
主组只能拥有一个,但是附属组或附加组可以同时拥有多个 => 亲爹,干爹(多个)
用户组操作:
用户组的操作无疑三件事:用户组的添加、用户组的修改以及用户组的删除操作
组:group
添加:add
修改:mod
删除:del
用户组的添加:
基本语法:
# groupadd [选项] 用户组的组名称
选项说明:
-g :代表用户组的组ID编号,自定义组必须从1000开始,不能重复
案例:在系统中添加一个hr的用户组
# groupadd hr
案例:在系统中添加一个test的用户组并指定定编号1100
# groupadd -g 1100 test
问题:我们刚才创建的hr以及test用户组到底添加到哪里了?
答:默认情况下,我们添加的用户组都会放在一个系统文件中,文件位置=>/etc/group
# tail -3 /etc/group
root:x:0:
hr:1000:
/etc/group文件解析:
由以上命令的执行结果可知,在/etc/group文件中,其一共拥有三个冒号,共四列。每列含义:
第一列:用户组的组名称
第二列:用户组的组密码,使用一个x占位符
第三列:用户组的组ID编号,1-999代表系统用户组的组编号,1000以后的代表自定义组的组编号
CentOS6 => 1-499,500…
CentOS7 => 1-999,1000…
第四列:用户组内的用户信息(如果一个用户的附属组或附加组为这个组名,则显示在此位置)
用户组的修改:
基本语法:
# groupmod [选项 选项的值] 原来组的组名称
选项说明:
-g :gid缩写,设置一个自定义的用户组ID数字,1000以后
-n :name缩写,设置新的用户组的名称
案例:把hr用户组更名为szhr
# groupmod -n szhr hr
案例:把test用户组的组编号由1100更改为1003
# groupmod -g 1003 test
案例:把hr组的组名称更改为admin且用户组的组编号更改为1004
# groupmod -g 1004 -n admin hr
用户组的删除:
基本语法:
# groupdel 用户组名称
案例:使用groupdel删除test用户组
# groupdel test
用户操作:
用户:user
添加:add
修改:mod
删除:del
用户的添加:
基本语法:
# useradd [选项 选项的值] 用户名称
选项说明:
-g :代表添加用户时指定用户所属组的主组,唯一的组信息(重要)
-s :代表指定用户可以使用的Shell类型,默认为/bin/bash(拥有大部分权限)还可以是/sbin/nologin,代表账号创建成功,但是不能用于登录操作系统。
/bin/bash => 给人使用的(运维工程师)
/sbin/nologin => 给软件使用的
-G :代表添加用户时指定用户所属组的附属组或附加组,可以指定多个,用逗号隔开即可(了解)
-u :代表添加用户时指定的用户ID编号,CentOS6从500开始,CentOS7中从1000开始(了解)
-c :代表用户的备注信息,cqw:123456:(陈权伟的账号)
-d :代表用户的家目录,默认为/home/用户名称。可以使用-d进行更改
-n :取消建立以用户名称为名的群组(了解)
案例:在系统中创建一个linuxuser账号
# useradd linuxuser
问题:我们并没有为linuxuser账号指定所属的主组,可以成功创建账号么?
答:可以,因为在创建账号时,如果没有明确指定用户所属的主组,默认情况下,系统会自动在用户组中创建一个与用户linuxuser同名的用户组,这个组就是这个用户的主组。
问题:刚才创建的linuxuser账号能不能用于登录操作系统
答:不行,因为Linux的登录账号必须要求有密码,如果一个账号没有密码是无法登录操作系统的。
案例:在系统中创建一个账号zhangsan,指定用户所属的主组为hr
第一步:查询一下hr的组ID编号
# tail -5 /etc/group
hr:1000:
第二步:根据组的编号添加用户
# useradd -g 1000 zhangsan
案例:在系统中创建一个账号lisi,指定主组为centos,centos的编号为1000,此用户只能被软件所使用,不能用于登录操作系统
# useradd -g 1000 -s /sbin/nologin lisi
案例:在系统中创建一个wangwu,指定主组为wangwu,附属组为itheima
# useradd -G 1000 wangwu
用户信息查询:
基本语法:
# id 用户名称
主要功能:查询某个指定的用户信息
案例:查询linuxuser用户的信息
# id linuxuser
uid=1002(linuxuser) gid=1005(linuxuser) groups=1005(linuxuser)
uid:用户编号
gid:用户所属的主组的编号
groups:用户的主组以及附属组信息,第一个是主组,后面的都是附属组或附加组信息
与用户相关的用户文件:
组:/etc/group文件
用户:/etc/passwd文件,每创建一个用户,其就会在此文件中追加一行
# vim /etc/passwd
root:x:0:0:root:/root:/bin/bash
由上图可知,一共拥有7列
第1列:用户名称
第2列:用户的密码,使用一个x占位符,真实密码存储在/etc/shadow(1-用户名,2-加密密码)
第3列:数字,用户的ID编号
第4列:数字,用户的主组ID编号
第5列:代表注释信息,useradd -c "备注信息" 用户名称
第6列:用户的家目录,默认在/home/用户名称
第7列:用户可以使用的Shell类型,useradd -s /bin/bash或/sbin/nologin 用户名称
用户修改操作:
用户:user,添加:add,修改:mod,删除:del
基本语法:
# usermod [选项 选项的值] 用户名称
选项说明:
-g :修改用户所属的主组的编号
-l :login name修改用户的名称
-s :修改用户可以使用的Shell类型,如/bin/bash => /sbin/nologin
扩展:
-L:锁定用户,锁定后用户无法登陆系统lock
-U:解锁用户unlock
了解:
-G :修改用户附属组的编号信息
-d :修改用户的家目录
-c :修改用户的备注信息
案例:修改zhangsan账号信息,更名为zs
# usermod -l zs zhangsan
案例:修改wangwu账号信息,把用户的主组的编号更新为1000(hr)
# usermod -g 1000 wangwu
案例:禁止linuxuser账号登录Linux操作系统
# usermod -s /sbin/nologin linuxuser
案例:禁止linux用户登录操作(Ctrl + Alt + F2 ~ F6)
Linux系统除了默认的图形化界面,其实还有5个隐藏的字符界面,按Ctrl + Alt + F1~F6
有些电脑开启Fn功能键,所以如果Ctrl + Alt + F1~F6不生效,则可以按Ctrl + Alt + Fn + F1~F6
# usermod -L linux
案例:解锁linux用户
# usermod -U linux
问题:账号已经解锁,但是无法登录
① 当前账号没有设置密码,因为Linux操作系统不允许没有密码的操作进行登录
② 当前用户的Shell类型为/sbin/nologin,所以其无法登录
passwd命令:
基本语法:
# passwd 用户名称
主要功能:为某个用户设置密码(添加或修改),可以给自己也可以给别人设置
案例:修改自己的密码
[root@yunwei ~]# passwd
案例:为linux账号添加一个密码,密码:123456
[root@yunwei ~]# passwd linux
特别注意:在Linux操作系统中,如果一个账号没有密码,则无法登录操作系统。
su命令:
基本语法:
# su [-] root
选项:
- :横杠(减号),代表切换用户的同时,切换目录到用户的家
主要功能:切换用户的账号
从超级管理员切换到普通用户,root => hruser,不需要输入hruser的密码
从普通账号切换到超级管理员,hruser => root,需要输入root的密码
从普通账号切换到普通账号,hruser => linuxuser,也需要输入linuxuser密码
wheel组(了解):
Linux系统中,理论上只有在wheel组中的普通用户,才可以通过su命令切换到root账户,默认所有普通用户都能切换到root,只要知道root密码,换句话说,默认此配置不生效
用户删除操作:
基本语法:
# userdel [选项] 用户名称
选项说明:
-r :删除用户的同时,删除用户的家(默认不删除)
删除账号流程:① 删除账号 ② 确认是否删除用户家 ③ 删除用户主组(没有其他用户)
扩展:当我们想要删除某个账号时,系统提示当前账号正在被某个进程所使用
解决方案:
第一种方案:找到登录的这个用户,然后将其直接注销
第二种方案:
# kill [-9] 进程的ID编号
选项说明:-9代表强制结束某个进程
主要功能:用于结束某个进程的继续运行
案例:结束11565进程
# kill 11565
简单粗暴,kill 对应用户的全部进程(尽量斩草除根,结束父进程)
# ps -ef |grep linux
ps命令:查看进程
-ef :查看系统的所有进程
|:管道命令
grep linux:搜索包含了linux关键词的所有进程
结束完成后,再次使用userdel删除即可
管道(重点)
管道符:
“|”,竖线
作用:管道是一种通信机制,通常用于进程间的通信。它表现出来的形式将前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)。
0 : 标准输入,程序或命令需要外部的某些程序传递相应的参数,才能正常运行
1 :标准输出,程序或命令正确的执行结果,我们就称之为标准输出
2 :标准错误,程序或命令错误的执行结果,我们就称之为标准错误
过滤(筛选)功能:
基本语法:
# 前一个命令 | 后一个命令
案例:获取/根目录下包含关键字"y"的文件信息
# ls / | grep y
解析:
| :管道符号,作用=>把ls /的正确的执行结果作为参数传递给grep命令
ls / :管道左边的命令
grep y :管道右边的命令
grep命令的基本语法 => grep 关键字 文件名称
案例:检索系统中的已安装文件,只筛选mariadb软件信息
# rpm -qa | grep mariadb
-q :query,查询
-a :all,所有
案例:在系统的进程中进行查找,查找与hruser相关的进程信息
# ps -ef | grep itheima
ps -ef :查询系统中所有正在运行的进程
特殊功能:
通过管道的操作方法来实现less 的等价效果(了解)
例如:源指令是"less xxx.txt",使用管道的话则可以写成:cat xxx.txt | less
# less initial-setup-ks.cfg
更改为管道命令
# cat initial-setup-ks.cfg | less
统计功能(重点):
回顾:wc命令,word count,文件统计功能
# wc [选项] 文件名称
选项说明:
-l : 统计总行数
-w : word,总单词数
-c : 统计总字节数
案例:统计/根目录下一共有多少个文件
# ls / | wc -l
案例:用户在计算机中有一个配置文件(/etc/passwd),一般情况下,一个用户会占用一行配置,请你使用现学的管道统计当前计算机中一共有多少个用户个信息(一个用户一行)
# cat /etc/passwd | wc -l
xargs命令扩展:
问题:为什么需要xargs命令?
答:之所以能用到这个命令,关键是由于很多命令不支持 | 管道来传递参数,而日常工作中又有这个必要,所以就有了 xargs 命令。
简单来说,xargs命令就相当于对管道命令进行了一个扩展,让所有命令都支持管道
案例:搜索/etc目录下的所有".conf"结尾的文件信息,然后以详细列表形式显示
# find /etc -name "*.conf" | ls -l
解决方案,在ls命令之前添加一个xargs命令,这样ls命令就支持管道了,可以用于接收前一个命令的执行结果
# find /etc -name "*.conf" | xargs ls -l
网络管理:
获取计算机的网络信息:
基本语法:
# ifconfig
Windows => ipconfig Linux => ifconfig
# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.1.1.16 netmask 255.255.255.0 broadcast 10.1.1.255
inet6 fe80::e472:7b78:c871:8e12 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:48:bf:f9 txqueuelen 1000 (Ethernet)
RX packets 254 bytes 54837 (53.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 287 bytes 42006 (41.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
解析:inet 10.1.1.16 netmask 255.255.255.0 broadcast 10.1.1.255
inet 10.1.1.16 :代表ens33网卡的IP地址,将来远程连接就是用这个IP
netmask :子网掩码,一般为255.255.255.0
broadcast :广播地址,10.1.1.255
ens33 :是默认的网卡,我们获取的IP也要从这个网卡中获取
lo(loop,循环):表示回环网卡,只有一个固定的IP地址,127.0.0.1代表本机
virbr0:虚拟网络接口,因为咱们使用vmware虚拟机安装Centos,所以其会产生virbr0虚拟网络接口
与网卡相关的配置文件:
Linux系统中,一切皆文件。所以保存网络信息的也是通过一个文件来完成的。
# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
BOOTPROTO="dhcp"
NAME="ens33"
UUID="6c809893-d12c-46af-9987-4c05b2773c91"
DEVICE="ens33"
ONBOOT="yes"
参数解析:
TYPE :网络类型,Ethernet以太网
BOOTPROTO:IP的获取方式,dhcp代表自动获取,static/none代表手工设置
NAME :网卡的名称(名字),ens33
UUID :代表网卡的UUID编号(必须是唯一的)
DEVICE :设备名称
ONBOOT :代表网卡是否随计算机开启启动,yes随计算机开机启动,no代表不启动
查询计算机的网络状态:
基本语法:
# systemctl status network
systemctl = system + control = 系统控制
主要功能:查询计算机网络的状态,网络是否正常连接。
Active : active(正常)或 inactive(dead,网络状态不正常没有连接)
systemctl启动/重启/停止网络:
# systemctl start network
# systemctl stop network
# systemctl restart network
选项解析:
start :启动
stop :停止
restart :重启
Linux远程连接与文件传输:
SSH协议:
简单说,SSH是一种网络协议,用于计算机之间的加密登录。
sshd服务:
当我们在计算机中安装了sshd软件,启动后,就会在进程中产生一个sshd进程,其遵循计算机的SSH协议。默认情况下,sshd服务随系统自动安装的。
# systemctl status sshd
sshd服务的端口号
SSH协议,其规则了远程连接与传输的端口号,所以sshd服务启动后,就会占用计算机的22号端口。
端口号能解决什么问题?答:能让我们的计算机区分出不同的服务