admin管理员组文章数量:1026989
VMware
1.安装VMware
- 1.下载安装包
- 2.按步骤安装
2.创建新的虚拟机
3.启动CentOS 7
- 1.配置语言
- 2.配置安装位置
- 3.配置网络
- 4.编辑虚拟网络编辑器的
VMnet8-NAT
设置
- 说明
- 1.
桥接模式
:虚拟机直接连接路由器,相当于把虚拟机变成一台完全独立的计算机,会占用局域网本网段的一个IP
地址,并且可以和网段内其他终端进行通信,相互访问- 2.
NAT模式
:NAT
模式与外界通话需要经过物理机(NAT
)转换,不会多占一个局域网IP
,默认情况下外部终端也无法直接访问虚拟机- 3.
仅主机模式(Host Only)
:仅主机模式不能上网,互联网局域网都不行,只能与物理机对话
4.网络配置
1.window下网络配置
- 1.自动获取
ip
地址
- 1.指所在的网络中有一台或多台
DHCP
服务器,DHCP
服务器负责给上网的机器分配ip地址- 2.
DHCP
服务器是自动为计算机分配IP地址和子网掩码的服务器- 3.
DHCP
(Dynamic Host Configure Protocol
,动态主机配置协议)- 2.手动配置
ip
地址
- 1.需要配置
ip
地址,子网掩码,默认网关- 2.子网掩码是用来识别该台机器的
- 3.默认网关指该电脑需要上网需要的第一个结构,一般指路由器
- 3.
DNS
服务器
- 1.
www.baidu
是域名,ip
才是唯一标识相应机器的地址,要访问某一个机器,需要ip
地址- 2.域名到
ip
的映射需要DNS
服务器
2.Linux下网络配置
1.网络配置文件
2.网卡配置文件
- 1.保存网卡的设备名,
IP
地址,子网掩码,默认网关等配置信息- 2.一块网卡对应一个配置文件
- 3.网卡配置文件在
CentOS7
中位于/etc/sysconfig/network-scripts
目录中ifcfg-网卡类型以及网卡的序号 例:ifcfg-ens33 , ifcfg-eno16777736
3.网卡配置解析
- 1.
vim
编辑网卡的配置vim /etc/sysconfig/network-scripts/ifcfg-eno16777736 vim /etc/sysconfig/network-scripts/ifcfg-lo vim /etc/sysconfig/network-scripts/ifcfg-ens33 [root@bogon network-scripts]# cat ifcfg-ens33 TYPE="Ethernet" #网卡类型(通常是Ethemet以太网) PROXY_METHOD="none" #代理方式:为关闭状态 BROWSER_ONLY="no" #只是浏览器:否 BOOTPROTO="dhcp" #网卡的引导协议【static:静态IP dhcp:动态IP none:不指定,不指定容易出现各种各样的网络受限】 DEFROUTE="yes" #默认路由 IPV4_FAILURE_FATAL="no" #是否开启IPV4致命错误检测 IPV6INIT="yes" #IPV6是否自动初始化:是(现在还未用到IPV6,不会有任何影响) IPV6_AUTOCONF="yes" #IPV6是否自动配置:是(现在还未用到IPV6,不会有任何影响) IPV6_DEFROUTE="yes" #IPV6是否自动配置:是(现在还未用到IPV6,不会有任何影响) IPV6_FAILURE_FATAL="no" #是否开启IPV6致命错误检测 IPV6_ADDR_GEN_MODE="stable-privacy" #IPV6地址生成模型 NAME="ens33" #网卡物理设备名称 UUID="a6167286-12aa-4419-91d8-a757aac6ccee" #通用唯一识别码,每一个网卡都会有,不能重复,否则两台linux机器只有一台可上网 DEVICE="ens33" #网卡设备名称,必须和‘NAME’值一样 ONBOOT="yes" #是否开机启动,要想网卡开机就启动或通过 `systemctl restart network`控制网卡,必须设置为 `yes` IPADDR=169.254.73.100 # 本机IP PREFIX=24 #子网掩码 GATEWAY=169.254.73.2 #默认网关 DNS="8.8.8.8" #DNS服务器 IPV6_PRIVACY="no"
- 2.注意:如果采用
dhcp
动态ip
策略,路由器会自动分配一个ip
(可能会改变),不需要手动配置ip
由虚拟机自动自配,只有设置为static
静态模式才需要手动配置虚拟机ip
4.网卡绑定多个IP地址
1.每个绑定的
IP
地址需要一个虚拟网卡,手动配置IP
地址需要设置static
静态策略才会生效IPADDR1=x.x.x.128 IP地址 PREFIX1=24 子网掩码 IPADDR2=x.x.x.154 IP地址 PREFIX2=24 子网掩码 # 注意: # 1.DNS服务器有两个通用的8.8.8.8和114.114.114.114
5.无法连接外网修复
方式一
[root@localhost ~]# ping www.baidu ping: www.baidu: Name or service not known # 1.静态配置的ip只有一个,而且属性为IPADDR # 2.与PREFIX的属性无关 # 3.GATEWAY属性需要网络设置的网关IP一致 # 4.DNS服务器可以配置为8.8.8.8或114.114.114.114且需要配置/etc/resolv.conf文件 # 注意上述参数都不需要带双引号
方式二
# 1.VMware Workstation中点开编辑,找到虚拟网络编辑器 # 2.点击还原默认设置(耐心等待它卸载完又自动安装) # 3.cmd中通过ipconfig查看VMnet8的ipv4前三位和虚拟机中ip前三位一致
6.手动设置修改生效
- 设置生效的方式有三种
# 方法1:(针对NetworkManager服务) ifdown 网卡接口设备名 #禁用网卡 (ifdown不能在远程连接的情况下执行,ifdown禁用网卡后,远程客户端就连接不到本台机器) ifup 网卡接口设备 #启用网卡 # 方法2:(nmcli网络管理工具) nmcli connection reload #重新装载 nmcli device disconnect 网卡接口设置名 #断开连接 nmcli con up ifname 网卡接口设备 # 建立连接 # 方法3:(针对network服务,推荐) systemctl restart network.service #重启网卡 或 service network restart
7.修改主机名
- 1.网络中主机名具有唯一性
- 2.查看主机名:
cat /etc/hostname
- 3.临时设置/更改主机名:
hostname 新主机名
- 4.永久性修改主机名:
Hostnamectl set-hostname 新主机名
8.使用ip命令配置网络
- 1.使用
ip
命令查看
- 1.
1:
代表第一块网卡,网卡设备名是lo
,第一块设备是一个回送设备(loopback
),自己访问自己,自己给自己发送数据的一个设备,inet
后面跟的是ip
地址,ip
地址是127.0.0.1
- 2.
2:
代表第二块网卡,网卡设备名是ens33
,第二块设置是一个广播设备(broadcast),ip
地址是192.168.216.131
,link/ether
跟的是它的MAC
地址- 2.使用
ip
命令更改IP
网络地址
- 1.
ip
命令配置的网络是临时生效,如果重启网卡或重启连接或重启机器就会无效ip addr [add|del] <CIDR形式的IP地址> dev <网络接口>
- 2.修改网络接口的
IP
ip addr del 192.168.140.3/24 dev 网卡设备名 #删除网卡设备,临时并且即时生效 ip addr add 192.168.1.3/24 dev 网卡设备名 # 添加网卡设备,临时并且即时生效
- 3.使用
ip
命令设置静态路由ip route [add|del] default | <主机地址> | <网络地址> via <网关地址> [dev <流出设备接口>]
ip route add 192.0.2.1 via 10.0.0.1 dev ens33 #添加静态路由 ip route del 192.0.2.1 via 10.0.0.1 dev ens33 #删除静态路由 ip route add default via 10.0.0.1 dev ens33 #添加默认静态路由 ip route del default via 10.0.0.1 dev ens33 #删除默认静态路由
9.测试本机和目标主机连通性ping
ping [参数] 主机名或IP地址 # c count:共发出count次信息,不加此项,则发无限次信息,按Ctrl+C停止 # -s 字节数:指定发送的报文的大小,以字节B为单位,预设值是56B,加上8字节的ICMP头,共是64B # -W timeout:等待接收回应报文的时间间隔,以秒为单位
ping -c 4 192.168.0.1 ping -c 10 -s 2048 192.168.0.1
10.跟踪显示从当前主机到指定主机所经过路径traceroute
traceroute [主机名称或IP地址]
traceroute www.sina
5.Linux快照
- 快照:相当于
windows
系统中的备份
6.Linux克隆
- 1.克隆:根据现有机器复制出一台和原机器配置及状态一致的机器
- 2.注意: 必须是关机或者关机的快照才可以克隆
1.克隆向导
2.修改克隆机IP
- 1.编辑网络配置
vi /etc/sysconfig/network-scripts/ifcfg-ens33
- 2.修改IP地址
IPADDR="192.168.73.101"
- 重启网络服务
systemctl restart network
3.正确的网络配置
- 如果虚拟机无法连接网络,可以根据以下步骤修改
7.远程连接工具MobaXterm
- 下载第一个免安装版,然后通过
ssh session
输入虚拟机ip
即可连接
8.Linux目录结构
1.目录结构图
2.目录说明
/ 根目录 bin 存放用户二进制文件,Binaries (二进制) boot 存放内核引导配置文件 dev 存放设备文件,Devices (设备) etc 存放系统配置文件,Etcetera (等等) home 普通用户主目录 lib 动态共享库,Library(库) lost+found 文件系统恢复时的恢复文件 media 可卸载存储介质挂载点 mnt 文件系统临时挂载点 opt 附加的应用程序包 proc 系统内存的映射目录,提供内核与进程信息,Processes(进程) root root超级用户主目录 sbin 存放系统二进制文件,Superuser Binaries (超级用户的二进制文件) srv 存放服务相关数据 sys sys 虚拟文件系统挂载点 tmp 存放临时文件,Temporary (临时) usr 存放用户应用程序 ,Unix Shared Resources(Unix共享资源) var 存放邮件、系统日志等变化文件,Variable (变量) ~ 表示当前登录用户的用户目录(root账户为/root目录,普通用户为/home/账户名)
3.目录路径
- 绝对路径
- 从根目录开头的路径
/
表示根目录- 相对路径
- 从当前目录开始定位
.
表示当前目录(修饰文件或目录表示隐藏文件),./
表示在当前目录下..
表示当前目录的上一目录,../
表示在上一级目录下~
表示当前登录用户的用户目录
9.Linux启动流程
1.内核的引导
- 1.计算机打开电源后,首先是
BIOS(基本输入/输出系统)
开机自检,按照BIOS
中的设置l来启动设备(通常是硬盘)- 2.操作系统接管硬件以后,首先读入
/boot
目录下的内核文件
2.运行 init
- 1.
init
进程是系统所有进程的起点,没有这个进程,系统中任何进程都不会启动- 2.
init
程序首先是需要读取配置文件 /etc/inittab
3.系统初始化
4.建立终端
5.虚拟控制台
- 1.启动Linux系统后,系统提供了多个(默认为6个)虚拟控制台
- 2.每个控制台独立使用互不影响,使用快捷键
<Alt+F1>~<Alt+F6>
切换
5.用户登录系统
1.账号切换
- 1.
Linux
系统中有两类用户:普通用户和超级用户(root
)- 2.超级用户(
root
)的提示符是#
;普通用户的提示符是$
- 3.使用
su -
命令(-表示同时切换用户工作环境)切换为超级用户身份,当执行系统管理类命令时再使用exit
命令退回普通用户身份
2.注销登录
- 1.在当前的登录终端输入
logout
命令或使用<Ctrl+D>
快捷键- 2.Linux系统严格区分大小写
10.Linux环境变量
- 登入系统时候获得一个
shell
进程时,其读取环境变量顺序如下
- 说明:
- 1.首先读取全局环境变量文件
/etc/profile
- 2.然后根据其内容读取额外的配置文档
/etc/profile.d
或/etc/inputrc
- 3.根据不同帐号,读取
~/.bash_profile
- 4.读取失败则会读取
~/.bash_login
- 5.再次失败则读取
~/.profile
- 6.最后根据用户帐号读取
~/.bashrc
- 注意:
- 1.
~/.profile
和~/.bashrc
区别是~/.profile
只能登入的时候执行一次;~/.bashrc
每次 shell script 的时候都会执行一次- 2.
export
命令显示当前系统定义的所有环境变量(其中PATH
变量定义了运行命令的查找路径,以:
分割不同的路径)- 3.
echo $PATH
命令输出当前的PATH
环境变量的值
1.系统变量
/etc
目录下的bashrc
、profile
、environment
配置文件
- 1.
profile
文件用于设置系统级的环境变量和启动程序
- 1.该文件下的配置会对所有用户生效(不建议在
/etc/profile
文件中添加环境变量)- 2.当用户登录(
login
)时,文件会被执行,并从/etc/profile.d
目录的配置文件中查找shell
设置- 3.添加方式:
export JAVA_HOME=/usr/java/default
;其中;
可用可不用,一个变量名可对应多个变量值,多个变量值之间需要用:
分隔- 4.添加环境变量后,需要重新登录才能生效,也可以使用
source
命令强制立即生效source /etc/profile
- 5.查看是否生效:
echo $变量名
- 2.
bashrc
文件用于配置函数或别名
- 1.该文件对所有用户生效
- 2.该文件只会对指定的
shell
类型起作用,且只会被bash shell
调用- 3.
environment
文件为空
2.用户变量
用户目录(
root
/普通用户/~)下的.bashrc
、.bash_profile
配置文件,注意该文件是隐藏文件
- 1.
.bashrc
用于配置函数或别名
- 1.该文件仅对当前用户生效
- 2.该文件只会对指定的
shell
类型起作用,且只会被bash shell
调用- 2.
.bash_profile
用于配置环境变量和启动程序
- 1.该文件仅对当前用户生效
3.设置环境变量
- 1.执行
shell
脚本时,有时需要加上./
才可以正确的运行这个脚本(./hello.sh
),中间不能有空格- 2.终端是在当前目录,且当前目录中有要执行的文件,但终端无法找到,需要手动指定文件的相对或绝对路径
- 3.
Linux
中,.
表示当前工作目录,/
是 Linux 中的路径分隔符- 4.因为工作目录不包含在环境变量
$PATH
中,所以需要通过./
指定当前工作目录- 5.命令
echo $PATH
可以查看当前的环境变量- 6.
Linux
看命令具体的位置,可以使用which
命令- 7.自定义命令如果不想添加路径,可以把该命令所在路径添加进环境变量
1.临时生效
- 终端中输入:
export PATH=$PATH:/具体路径
- 生效时间:立即生效
- 生效期限:当前终端有效,窗口关闭后无效
- 生效范围:仅对当前用户有效
- 配置的环境变量中需要加上原来的配置,即
$PATH
部分,避免覆盖原来配置2.用户变量
- 1.修改配置文件
.bashrc
vim ~/.bashrc # 在最后一行加上 export PATH=$PATH:/具体路径
- 生效时间:使用相同的用户打开新的终端时生效,或者手动
source ~/.bashrc
生效- 生效期限:永久有效
- 生效范围:仅对当前用户有效
- 如果有后续的环境变量加载文件覆盖了
PATH
定义,则可能不生效- 2.修改配置文件.bash_profile
vim ~/.bash_profile # 在最后一行加上 export PATH=$PATH:/具体路径
- 生效时间:使用相同的用户打开新的终端时生效,或者手动
source ~/.bash_profile
生效- 生效期限:永久有效
- 生效范围:仅对当前用户有效
3.系统变量
- 1.修改配置文件
/etc/bashrc
# 如果/etc/bashrc文件不可编辑,需要修改为可编辑 chmod -v u+w /etc/bashrc vim /etc/bashrc # 在最后一行加上 export PATH=$PATH:/具体路径
- 生效时间:新开终端生效,或者手动
source /etc/bashrc
生效- 生效期限:永久有效
- 生效范围:对所有用户有效
- 2.修改配置文件
/etc/profile
# 如果/etc/profile文件不可编辑,需要修改为可编辑 chmod -v u+w /etc/profile vim /etc/profile # 在最后一行加上 export PATH=$PATH:/具体路径
- 生效时间:新开终端生效,或者手动
source /etc/profile
生效- 生效期限:永久有效
- 生效范围:对所有用户有效
- 3.修改配置文件
/etc/environment
# 如果/etc/bashrc文件不可编辑,需要修改为可编辑 chmod -v u+w /etc/environment vim /etc/profile # 在最后一行加上 export PATH=$PATH:/home/uusama/mysql/bin
- 生效时间:新开终端生效,或者手动
source /etc/environment
生效- 生效期限:永久有效
- 生效范围:对所有用户有效
Linux命令
1.帮助命令
1.help
[root@localhost /]# cp --help
- 1.查看命令的信息和参数
- 2.只能显示
shell
内部的命令信息- 3.
help
命令第一部分是概述,第二部分是参数详解,第三部分是说明和注意
# 使用语法 Usage: cp [OPTION]... [-T] SOURCE DEST or: cp [OPTION]... SOURCE... DIRECTORY or: cp [OPTION]... -t DIRECTORY SOURCE... # 实现功能 Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY. # 长参和短参是一样的效果 Mandatory arguments to long options are mandatory for short options too.
2.man
[root@localhost /]# man help
- 1.查看命令的信息和参数
- 2.
man
是在程序安装时安装的帮助文档- 3.程序的man帮助文档可能存在多个
# man文档的序号 CP(1) User Commands CP(1) # 名称和内容 NAME cp - copy files and directories # 概要 SYNOPSIS cp [OPTION]... [-T] SOURCE DEST cp [OPTION]... SOURCE... DIRECTORY cp [OPTION]... -t DIRECTORY SOURCE... # 描述 DESCRIPTION Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY. Mandatory arguments to long options are mandatory for short options > too.
3.info
[root@localhost /]# info help
info
指令是man
指令的详细内容
2.开关机命令
1.halt
# 关机,实际上是调用shutdown -H命令 [root@localhost /]# halt
2.reboot
# 重启,实际上是调用shutdown -r命令 [root@localhost /]# reboot
3.shutdown
# 用于安全关闭Linux系统 [root@localhost /]# shutdown now
4.poweroff
# 关闭计算器并切断电源,实际上是调用shutdown -P命令 [root@localhost /]# shutdown now
4.init
- 1.
init
是所有进程的祖先,其进程号始终为1- 2.
init
用于切换系统的运行级别,切换是立即完成的- 3.
init 0
命令用于立即将系统运行级别切换为0,即关机- 4.
init 6
命令用于将系统运行级别切换为6,即重新启动。
3.输出命令
1.echo
1.显示普通字符串
echo "It is a test" 双引号可省略 echo It is a test
2.显示转义字符
echo "\"It is a test\"" 双引号可省略 echo \"It is a test\"
3.显示变量
#!/bin/sh # read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量name read name echo "$name It is a test"
[root@www ~]# sh test.sh OK #标准输入 OK It is a test #输出
4.显示换行
echo -e "OK! \n" # -e 开启转义,echo默认换行 echo "It is a test"
OK! It is a test
5.显示不换行
#!/bin/sh echo -e "OK! \c" # -e 开启转义 \c 不换行 echo "It is a test"
OK! It is a test
6.显示结果定向至文件
echo "It is a test" > myfile
7.原样输出字符串,不进行转义或取变量(用单引号)
echo '$name\"'
$name\"
8.显示命令执行结果
echo `date` 注意: 这里使用的是反引号 `, 而不是单引号 '
Thu Jul 24 10:08:46 CST 2014
2.printf
转义字符 说明 \a 警告字符,通常为ASCII的BEL字符 \b 后退 \c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略 \f 换页(formfeed) \n 换行 \r 回车(Carriage return) \t 水平制表符 \v 垂直制表符 \ 一个字面上的反斜杠字符 \ddd 表示1到3位数八进制值的字符。仅在格式字符串中有效 \0ddd 表示1到3位的八进制值字符 printf format-string [arguments...]
format-string
: 为格式控制字符串arguments
: 为参数列表
1.格式化输出
#!/bin/bash printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543 printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876
姓名 性别 体重kg 郭靖 男 66.12 杨过 男 48.65 郭芙 女 47.99
#!/bin/bash # author:菜鸟教程 # url:www.runoob # format-string为双引号 printf "%d %s\n" 1 "abc" # 单引号与双引号效果一样 printf '%d %s\n' 1 "abc" # 没有引号也可以输出 printf %s abcdef # 格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用 printf %s abc def printf "%s\n" abc def printf "%s %s %s\n" a b c d e f g h i j # 如果没有 arguments,那么 %s 用空字符串代替,%d 用 0 代替 printf "%s and %d \n"
1 abc 1 abc abcdefabcdefabc def a b c d e f g h i j and 0
$ printf "a string, no processing:<%s>\n" "A\nB" a string, no processing:<A\nB> $ printf "a string, no processing:<%b>\n" "A\nB" a string, no processing:<A B> $ printf "www.runoob \a" www.runoob $ #不换行
- 1.
%s %c %d %f
都是格式替代符- 2.
%s
输出一个字符串- 3.
%d
整型输出- 4.
%c
输出一个字符- 5.
%f
输出实数,以小数形式输出- 6.
%-10s
指一个宽度为 10 个字符(- 表示左对齐,没有则表示右对齐),任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来- 7.
%-4.2f
指格式化为小数,其中 .2 指保留2位小数
4.网络命令
1.ping
# 检测出网络连通情况 [root@localhost /]# ping 172.20.10.2 C:\Users\32929>ping 192.168.73.100
2.dhclient
# 动态分配一个ip,临时生效 [root@localhost /]# dhclient
3.ip
# 显示ip信息,其中address可以任意简写 例:a,ad,add,addr,addre,addres [root@localhost /]# ip address
4.ifconfig
# centos 7之前版本查看ip的命令,已经遗弃 [root@localhost /]# ifconfig -bash: ifconfig: 未找到命令
5stat
netstat [选项] 选项: -a或–all :显示所有连线中的Socket -A<网络类型>或–<网络类型> :列出该网络类型连线中的相关地址 -c或–continuous :持续列出网络状态 -C或–cache :显示路由器配置的快取信息 -e或–extend :显示网络其他相关信息 -F或–fib :显示FIB -g或–groups :显示多重广播功能群组组员名单 -h或–help :在线帮助 -i或–interfaces :显示网络界面信息表单 -l或–listening :显示监控中的服务器的Socket -M或–masquerade :显示伪装的网络连线 -n或–numeric :直接使用ip地址,而不通过域名服务器 -N或–netlink或–symbolic :显示网络硬件外围设备的符号连接名称 -o或–timers :显示计时器 -p或–programs :显示正在使用Socket的程序识别码和程序名称 -r或–route :显示Routing Table -s或–statistice :显示网络工作信息统计表 -t或–tcp :显示TCP传输协议的连线状况 -u或–udp :显示UDP传输协议的连线状况 -v或–verbose :显示指令执行过程 -V或–version :显示版本信息 -w或–raw :显示RAW传输协议的连线状况 -x或–unix :此参数的效果和指定"-A unix"参数相同 –ip或–inet :此参数的效果和指定"-A inet"参数相同 # 列出所有端口 netstat -a # 列出所有TCP端口 netstat -at # 列出所有UDP端口 netstat -au # 列出所有处于监听状态的 Sockets netstat -l # 列出所有监听tcp端口 netstat -lt # 列出所有监听udp端口 netstat -lu # 列出所有监听UNIX端口 netstat -lx # 输出中显示 PID 和进程名称 netstat -pt # 直接显示ip地址和端口号 netstat -an # 持续输出netstat信息,每隔一秒输出网络信息 netstat -c # 显示核心路由信息 netstat -r # 找出程序运行的端口 netstat -tunlp | grep ssh # 找出运行在指定端口的进程 netstat -an | grep ":80" 或 netstat -tunlp | grep ":3306" # 通过端口找进程ID netstat -tunlp | grep 3306 | awk '{print $7}' | cut -d/ -f1 # 显示网络接口列表 netstat -i # 统计TCP各种状态列 netstat -n | awk '/^tcp/{++S[$NF]}END{for(i in S) print i,S[i]}'
- 1.显示正在侦听的所有
TCP
或UDP
端口,包括使用端口和套接字状态的服务,一般用于检验本机各端口的网络连接情况- 2.
TCP
连接状态详解
- 1.
LISTEN
: 侦听来自远方的TCP端口的连接请求- 2.
SYN-SENT
: 再发送连接请求后等待匹配的连接请求- 3.
SYN-RECEIVED
:再收到和发送一个连接请求后等待对方对连接请求的确认- 4.
ESTABLISHED
: 代表一个打开的连接- 5.
FIN-WAIT-1
: 等待远程TCP连接中断请求,或先前的连接中断请求的确认- 6.
FIN-WAIT-2
: 从远程TCP等待连接中断请求- 7.
CLOSE-WAIT
: 等待从本地用户发来的连接中断请求- 8.
CLOSING
: 等待远程TCP对连接中断的确认- 9.
LAST-ACK
: 等待原来的发向远程TCP的连接中断请求的确认- 10.
TIME-WAIT
: 等待足够的时间以确保远程TCP接收到连接中断请求的确认- 11.
CLOSED
: 没有任何连接状态
6.nc
nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>][-s<来源位址>][-v...][-w<超时秒数>][主机名称][通信端口...] -g<网关> 设置路由器跃程通信网关,最多可设置8个 -G<指向器数目> 设置来源路由指向器,其数值为4的倍数 -h 在线帮助 -i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口 -l 使用监听模式,管控传入的资料 -n 直接使用IP地址,而不通过域名服务器 -o<输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存 -p<通信端口> 设置本地主机使用的通信端口 -r 乱数指定本地与远端主机的通信端口 -s<来源位址> 设置本地主机送出数据包的IP地址 -u 使用UDP传输协议 -v 显示指令执行过程 -w<超时秒数> 设置等待连线的时间 -z 使用0输入/输出模式,只在扫描通信端口时使用
监听端口号并向指定端口发送字符串消息数据 # 下载netcat,用于监听端口 yum install nc # 下载net-tools,用于查看端口号使用情况 yum install -y net-tools # 下载telnet,用于向端口号发送消息 yum install -y telnet # 监听端口 nc -lk 9999 # 使用netstat -anpt 查看监听状态 netstat -anpt | grep 9999 # 发送数据 telnet ip 9999 # 右边nc自动接收
- 用于设置路由器,监听端口
7.ss
ss [选项] 选项: -a, --all 列出所有的socket -h, --help 帮助信息 -V, --version 展示版本信息 -n, --numeric 不解析服务名称 -r, --resolve 解析主机名 -l, --listening 显示监听的socket,列出所有打开的网络连接端口 -o, --options 显示定时器信息 -e, --extended 显示socket的详细信息 -m, --memory 显示socket内存使用情况 -p, --processes 显示使用socket的进程 -i, --info 显示内部TCP信息 -s, --summary 显示socket使用情况摘要 -4, --ipv4 只显示IP版本4的socket -6, --ipv6 只显示IP版本6的socket -0, --packet 显示包socket -t, --tcp 只显示TCP类型的socket -u, --udp 只显示UDP类型的socket -d, --dccp 只显示DCCP类型的socket -w, --raw 只显示RAW类型的socket -x, --unix 只显示Unix域socket -f, --family=FAMILY 显示FAMILY类型的socket -A, --query=QUERY, --socket=QUERY QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY] -D, --diag=FILE 将TCP套接字的原始信息转储到FILE -F, --filter=FILE 从文件中读取过滤器信息 FILTER := [ state TCP-STATE ] [ EXPRESSION ] 例: ss -nlt
- 1.
ss(socket statistics)
:获取socket
统计信息,内容类似netstat
,但更详细更快
8.curl
5.日期命令
1.date
# 显示当前系统时间 [root@localhost ~]# date 2022年 10月 21日 星期五 19:27:26 CST # 显示年月日时分秒 [root@localhost ~]# date '+%F %T' 2022-10-21 19:29:43
6.清屏命令
1.clear
# 本质上只是让终端显示页向后翻了一页,向上滚动屏幕还可以看到之前的操作信息 [root@localhost /]# clear # 快捷操作 ctrl+l
2.reset
# 完全刷新终端屏幕,之前的终端输入操作信息将都会被清空 [root@localhost /]# clear
7.终止命令
- 1.
Ctrl+c
和Ctrl+z
都是中断命令- 2.
ctrl+c
是强制中断程序的执行(终止)- 3.
ctrl+z
是将任务中止(暂停),- 4.可以使用
fg/bg
操作继续前台或后台的任务- 5.
fg
命令重新启动前台被中断的任务- 6.
bg
命令把被中断的任务放在后台执行- 7.
ctrl+d
不是发送信号,而是表示一个特殊的二进制值,表示EOF
- 8.
shell
中,ctrl+d
表示退出当前shell.
8.查看历史命令
1.上下箭头
- 通过上下箭头即可查看历史命令
2.history
- 1.查看历史命令
- 2.历史命令一般存放在
~/.bash_history
中- 3.只有当正常登陆退出之后系统才会将缓存中的命令写入文件
- 4.历史命令最多可以保存1000条,可以在
/etc/profile
中进行修改,修改后执行source /etc/profile
使环境变量生效- 5.使用“!n”重复执行第
n
条历史命令- 6.使用“!!”重复执行上一条命令
- 7.使用“!字串”重复执行最后一条以该字串开头的命令
9.自动补全命令
- 通过
Tab
键可以自动补全已存在内容
10.目录命令
1.pwd(print work directory)
# 查看当前目录 [root@localhost home]# pwd /home # -P :显示出确实的路径,而非使用链接 (link) 路径 # 加上 -P 的选项后,会不显示链接,而显示正确的完整路径
2.cd(change directory)
# 切换目录 [root@localhost home]# cd /opt
3.ls(list files)
# 显示当前目录下的组成 [root@localhost home]# ls test2.txt test.txt # 显示目录本身(.表示当前目录) [root@localhost ~]# ls -d . # 显示以**开头的所有文件(.表示隐藏文件) [root@localhost ~]# ls -d .* . .bash_history .bash_profile .cshrc .oracle_jre_usage .tcshrc .. .bash_logout .bashrc .mysql_history .rediscli_history .viminfo # 显示隐藏文件 [root@localhost home]# ls -a . .. test2.txt test.txt # 显示文件的详细信息 [root@localhost home]# ls -l 总用量 8 -rw-r--r--. 1 root root 15 10月 22 12:35 test2.txt -rw-r--r--. 1 root root 836 10月 22 12:59 test.txt # 组合使用 [root@localhost home]# ls -al 总用量 8 drwxr-xr-x. 2 root root 39 10月 22 12:59 . dr-xr-xr-x. 17 root root 224 10月 21 18:13 .. -rw-r--r--. 1 root root 15 10月 22 12:35 test2.txt -rw-r--r--. 1 root root 836 10月 22 12:59 test.txt # 显示指定目录中的文件 [root@localhost home]# ls /home test2.txt test.txt
4.mkdir(make directory)
- 创建目录
[root@localhost home]# mkdir test [root@localhost home]# ls test test2.txt test.txt # 级联创建目录 [root@localhost home]# mkdir -p test/spring/springboot # 创建目录并设置权限 [root@localhost home]mkdir -m 711 test2
5.rmdir(remove directory)
- 1.删除一个空的目录(
-p
:从该目录起,一次删除多级空目录)- 2.
rmdir
仅能删除空的目录,你可以使用rm
命令来删除非空目录
6.tree
tree [-aACdDfFgilnNpqstux][-I <范本样式>][-P <范本样式>][目录...] -a 显示所有文件和目录。 -A 使用ASNI绘图字符显示树状图而非以ASCII字符组合。 -C 在文件和目录清单加上色彩,便于区分各种类型。 -d 显示目录名称而非内容。 -D 列出文件或目录的更改时间。 -f 在每个文件或目录之前,显示完整的相对路径名称。 -F 在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","=","@","|"号。 -g 列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码。 -i 不以阶梯状列出文件或目录名称。 -L level 限制目录显示层级。 -l 如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录。 -n 不在文件和目录清单加上色彩。 -N 直接列出文件和目录名称,包括控制字符。 -p 列出权限标示。 -P<范本样式> 只显示符合范本样式的文件或目录名称。 -q 用"?"号取代控制字符,列出文件和目录名称。 -s 列出文件或目录大小。 -t 用文件和目录的更改时间排序。 -u 列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码。 -x 将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外
- 以树状图列出目录的内容
11.文件命令
1.touch
# 创建一个空文件 [root@localhost home]# touch frist.txt [root@localhost home]# ls frist.txt test test2.txt test.txt
2.rm
# 1.删除文件 [root@localhost home]# rm frist.txt rm:是否删除普通空文件 "frist.txt"?y [root@localhost home]# ls test test2.txt test.txt # 2.删除目录,递归删除 [root@localhost home]# rm -r test rm:是否进入目录"test"? y rm:是否进入目录"test/spring"? y rm:是否删除目录 "test/spring/springboot"?y rm:是否删除目录 "test/spring"?y rm:是否删除目录 "test"?y # 3.强制删除文件 [root@localhost home]# rm -f test.txt [root@localhost home]# ls test2.txt # 4.强制递归删除目录 [root@localhost home]# rm -rf test # -i 互动模式,删除前会询问使用者
3.cp
# 1.复制文件 [root@localhost home]# cp test2.txt test1.txt [root@localhost home]# ls test1.txt test2.txt [root@localhost home]# cat test1.txt test springmvc # 2.复制到指定目录下 [root@localhost home]# mkdir test [root@localhost home]# ls test test1.txt test2.txt [root@localhost home]# cp test1.txt test [root@localhost home]# ls test test1.txt test2.txt [root@localhost home]# cd test [root@localhost test]# ls test1.txt # 3.添加-r参数复制文件夹-,递归复制目录 [root@localhost home]# cp -r a b // a,b是目录,a中的所有内容(包含a)复制到b中 [root@localhost home]# cp -r a/* b // a中的所有内容(不包含a)复制到b中 # 4.-i:若目标(destination)已经存在时,覆盖时会先询问 # 5.-p:连同文件的属性一起复制过去,而非使用默认属性(备份常用)
4.mv
[root@localhost home]# mv test2.txt test2 [root@localhost home]# ls test test1.txt test2 [root@localhost home]# cd test2 [root@localhost test2]# ls test test2.txt mv a/abc.txt b # b是目录,则将a中的abc.txt移动到b目录中 mv a/abc.txt b/bcd.txt # 将a中的abc.txt移动到b中并改名为bcd.txt(可重命名) mv a b # a,b是目录,将a的所有内容(包括a)移动到b目录中 mv a/* b # 将a中所有内容(不包括a)移动到b目录中 # -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖 # -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖(默认)
5.find
# 查找文件 # find 起始路径 -name 文件名 [root@localhost home]# find / -name test2.txt /home/test2/test2.txt
6.scp
# 1.linux机器间进行文件的远程复制 # 2.scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令 # 3.scp 是加密的,rcp 是不加密的,scp 是 rcp 的加强版 # 1.语法 scp [可选参数] file_source file_target # 2.参数 -r: 递归复制整个目录 -v: 详细方式显示输出 -P port: 注意是大写的P, port是指定数据传输用到的端口号 # 1.复制文件 scp local_file remote_username@remote_ip:remote_folder # 或者 scp local_file remote_username@remote_ip:remote_file # 或者 scp local_file remote_ip:remote_folder # 或者 scp local_file remote_ip:remote_file 例: [root@localhost home]# scp test1.txt root@192.168.73.100:/home The authenticity of host '192.168.73.100 (192.168.73.100)' can't be established. ECDSA key fingerprint is > SHA256:feZSpWqNvo1WZWc8kTmO6vJ95xUTZw++EjUnFUEOiII. ECDSA key fingerprint is MD5:29:83:54:61:f7:79:81:8f:d3:c3:22:74:4b:6c:e6:78. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.73.100' (ECDSA) to the list of known hosts. root@192.168.73.100's password: test1.txt 100% 15 12.7KB/s 00:00 # 2.复制目录 加上-r参数 [root@localhost home]# scp -r test root@192.168.73.100:/home 或 scp -r test 92.168.73.100:/home root@192.168.73.100's password: test1.txt 100% 15 4.6KB/s 00:00 [root@localhost home]# # 3.注意:有时加上root@会报无法创建文件错误,可直接使用远程ip:目录
12.文本命令
1.cat
# 1.将文件全部内容打印到屏幕上(适用于内容较少的) [root@localhost home]# cat test1.txt test springmvc # 2.显示文件全部内容,非空的行输出行号,空行会输出,但不标记行号 [root@localhost home]# cat -b test1.txt # 3.显示文件全部内容,所有行都输出行号 [root@localhost home]# cat -n test1.txt 1 test springmvc
2.tac
从最后一行开始,倒序输出文件的内容 [root@localhost home]# tac test1.txt
3.nl
# 显示文件内容,输出行号,默认情况下空行不记录行号 [root@localhost home]# nl test1.txt # 空行也输出行号 [root@localhost home]#nl -b a test1.txt # 默认设置 [root@localhost home]# nl -b t test1.txt # 设置行号字段占用的位数 [root@localhost home]# nl -w 100 test1.txt
4.more
# 可以实时显示阅读百分比(less不支持) # 按空格往下翻一页(适用于内容较多的) # 按Enter往下翻一行(不能往上一行一行的翻回去) # 按B键往上翻一页 # :f 可以显示文件名和现在的行数 # q 退出more # /字串 代表在这个显示的内容当中,向下搜寻『字串』这个关键字 [root@localhost home]# more test1.txt
5.less
# more命令的所有按键less都支持 # ↑↓箭头可以实现一行一行的上下翻 # PageDown/PageUp可以实现一页一页的上下翻 # more会将查看过的内容打印在屏幕上,而less不会 # /字串 向下搜寻『字串』的功能; # ?字串 向上搜寻『字串』的功能 [root@localhost home]# less test1.txt
6.head
# 默认只显示文件的前10行文本内容 [root@localhost home]# head test1.txt # head -n 行数 行数指定显示文件的前n行 [root@localhost home]# head -n 5 test1.txt # 负数表示除去文件结尾的n行,其他的从头开始的所有行都显示出来 [root@localhost home]# head -n -5 test1.txt
7.tail
# 1.默认只显示从文件最后一行开始的10行文本内容(正序) [root@localhost home]# tail test1.txt # 2.tail -n 行数 行数指定显示文件的最后几行 [root@localhost home]# tail -n 5 test1.txt # 3.tail命令不支持负数,-n -5 执行结果同 -n 5 # 4.tail -c n 文件名表示输出文件最后n 个字节的内容 [root@localhost home]# tail -c 5 test1.txt fsd3 # 5.tail -f 文件名 默认显示文件的最后 10 行内容,而且光标不会退出命令,每隔一秒会检查一下文件是否增加新的内容,如果增加就追加到原来的输出结果后面并显示(新终端中通过echo命令向文件中追加数据) # 6.Ctrl+c 中断 tail 命令 [root@localhost home]# tail -f test1.txt # tail -f 与 tail -F 与 tailf的区别 # 1.tail -f 根据文件描述符进行追踪,当文件改名或被删除,追踪停止 # 2.tail -F根据文件名进行追踪,并保持重试,即该文件被删除或改名后,如果再次创建相同的文件名,会继续追踪。 # 3.tailf 等同于tail -f -n 10(tail -f或-F默认也是打印最后10行),与tail -f不同的是,如果文件不增长,它不会去访问磁盘文件,所以tailf特别适合那些便携机上跟踪日志文件,因为它减少了磁盘访问
8.wc
wc [-clw][--help][--version][文件...] -c或--bytes或--chars :只显示Bytes数 -l或--lines :显示行数 -w或--words :只显示字数 --help :在线帮助 --version :显示版本信息 # 对文件内容进行统计 # wc -l 文件 统计行数 [root@localhost home]# wc -l test1.txt 5 test1.txt # wc -w 文件 统计单词 [root@localhost home]# wc -w test1.txt 10 test1.txt # wc -c 文件 统计字符数 [root@localhost home]# wc -c test1.txt 61 test1.txt [root@localhost home]# wc testfile # testfile文件的统计信息 3 92 598 testfile # testfile文件的行数为3、单词数92、字节数598
- 计算文件的
Byte
数、字数、或是列数,若不指定文件名称或是所给予的文件名为"-",则wc
指令会从标准输入设备读取数据
13.筛选命令
1.管道
# 管道是一种通信机制,通常用于进程的通信。它的表现是可以组合多个命令,将前一个命令的输出作为下一个命令的输入 # 在屏幕上直接显示所有信息 [root@localhost home]# ls -al # ls -al 的输出,将作为 less 的输入 [root@localhost home]# ls -al | less # 在 ls -al 的输出中查找test [root@localhost home]# ls -al | grep test # 在进程中查找指定进程 [root@localhost home]# ps -ef | grep test
2.grep
# 1.grep命令能够在一个或多个文件中,搜索某一特定的字符模式(也就是正则表达式),此模式可以是单一的字符、字符串、单词或句子 # 2.如果是搜索多个文件,grep 命令的搜索结果只显示文件中发现匹配模式的文件名;而如果搜索单个文件,grep 命令的结果将显示每一个包含匹配模式的行。 # 3.正则表达式是描述一组字符串的一个模式,正则表达式的构成模仿了数学表达式,通过使用操作符将较小的表达式组合成一个新的表达式 # 4.正则表达式的通配符 # 1.c* 将匹配 0 个(即空白)或多个字符 c(c 为任一字符) [root@localhost home]# grep -n boot* test1.txt 2:spring boot # 2. . 将匹配任何一个字符,且只能是一个字符 [root@localhost home]# grep -n . test1.txt 1:test # 3.[xyz] 匹配方括号中的任意一个字符 [root@localhost home]# grep -n [boot] test1.txt 1:test 2:spring boot 3:spring boot2 4:spring boot3 5:boot spring boot3 # 4.[^xyz] 匹配除方括号中字符外的所有字符 [root@localhost home]# grep -n [^boot] test1.txt 1:test 2:spring boot 3:spring boot2 4:spring boot3 5:boot spring boot3 # 5.^ 锁定行的开头 [root@localhost home]# grep -n ^boot test1.txt 5:boot spring boot3 # 6.$ 锁定行的结尾 [root@localhost home]# grep -n boot$ test1.txt 2:spring boot # grep [选项] 模式 文件名 # 选项: # -c 仅列出文件中包含模式的行数 # -i 忽略模式中的字母大小写 # -l 列出带有匹配行的文件名 # -n 在每一行的最前面列出行号 # -v 列出没有匹配模式的行 # -w 把表达式当做一个完整的单字符来搜寻,忽略那些部分匹配的行 # 1.文件中搜索关键字,显示包含关键字的行 [root@localhost home]# grep boot test1.txt spring boot # 2.grep -n 关键字 文件 显示包含关键字的行以及行号 [root@localhost home]# grep -n boot test1.txt 2:spring boot
14.编辑文件命令
1.命令行模式
- 1.该模式是进入
vi
编辑器后的默认模式- 2.任何模式下,通过
ESC
都可以进入命令行模式- 3.该模式下输入
vi
命令,输入的任何字符都被当作编辑命令来解释- 4.若输入的字符是合法的
vi
命令,则完成相应的动作(所输入的命令并不回显在屏幕上)- 5.若输入的字符不是合法的
vi
命令,vi
会响铃报警- 6.合法的
vi
命令
- 1.【行数】
yy
从当前行向下复制指定行数- 2.【行数】
dd
从当前行向下删除指定行数- 3.
p
配合yy将复制的内容粘贴到指定位置
2.文本输入模式
- 1.该模式只能从命令行模式进入
- 2.该模式进入方式有多种方式,进入成功后底部会显示
INSERT
- 1.附加命令:
a
从当前光标的后一位开始输入- 2.修改命令:
cc
删除当前行并从行首开始输入- 3.输入命令:
i
从当前光标的前一位开始输入- 4.取代命令:
r+取代字符
将当前光标字符用取代字符取代- 5.替换命令:
s
将当前光标字符删除然后从删除位开始输入- 6.换行命令:
o
将光标移动到当前行的下一行开始输入
3.末行模式
- 该模式只能从命令行模式进入
- 命令行模式下,通过
:
进入末行模式,此时vi
会在显示窗口的最后一行- 末行模式命令
- 1.
:q
:退出不保存- 2.
:q!
:强制退出不保存- 3.
:wq
:退出并保存- 4.
:w [文件名]
:写入指定文件,若未指定文件则写入当前文件,即vi
启动时打开的文档- 5.
:e!
:放弃修改,编辑区恢复为文件原样- 6.
:e 文件名
:打开指定的文件,调入编辑区- 7.
:r 文件名
:读入指定的文件,将文件内容插入到光标位置- 8.
:f
: 在屏幕末行显示文件相关信息
4.vi命令
1.编辑文件命令
# 1.打开(若已存在)或新建文件,并将光标置于第一行首 [root@localhost home]# vi test.txt # 2.打开文件,并将光标置于第 n 行首 [root@localhost home]# vi +4 test.txt # 3.打开文件,并将光标置于最后一行首 [root@localhost home]# vi + test.txt # 4.打开文件,并将光标置于第一个与 redis 匹配的行的行首 [root@localhost home]# vi +/redis test.txt # 5.恢复上次 vi 编辑时发生系统崩溃 [root@localhost home]# vi -r test.txt # 6.打开多个文件,依次进行编辑 [root@localhost home]# vi test.txt test2.txt # 7.使用vim,首先需要安装vim [root@192 jdk1.8.0_141]# yum -y install vim*
2.屏幕翻滚命令
Ctrl+u
:向上翻半屏Ctrl+d
:向下翻半屏Ctrl+f
:向下翻一屏。同pageDown键Ctrl+b
:向上翻一屏,同pageUp键
3.光标定位命令
0
:光标移至行首,同home键^
:光标移至行首第一个非空格字符$
:光标移至行尾,同end键[n]G
:光标移到第n行,未指定n时移到末行H、M、L
:光标移到屏幕首、中、尾行行首
4.光标移动命令
h、j、k、l
:光标左、下、上、右移一个字符,同箭头键b、w
:光标移到上一个词,下一个词首e
:光标移到词尾- 注意
- 以上光标移动命令前带数字
n
时,表示重复移动n
次(例:2h
:左移2格;3e
:移到后面第三个词词尾)
5.删除命令
x、X
:删除光标处、光标前的字符dd
:删除光标所在的行D
:删除光标右边的文本J
:删除当前行尾的换行符,使当前行与下一行合并为一行d+定位符
:删除从光标位置到指定位置范围内的字符
d0、d^
:删除光标左面的文本,0或^代表行首d$
:删除光标右面的文本。$代表行尾dG
:删除光标所在行之后的所有行,G代表最后一行db
:删除光标处前的字符直到词首,b代表词首de
:删除光标处的字符直到词尾,e代表词尾dw
:删除光标处的字符直到下一个词的词首,w代表下一次词尾- 注意
- 以上命令带数字
n
时,表示删除的范围扩大n
倍(例:4dd
:删除4行;3de
:删除从光标开始的三个词)
6.文本修改与替换
1.修改:本质先删除指定范围内的文本,然后插入新文本
cc
:修改光标所在的行C
:修改光标处到行尾的文本c+定位符
:修改光标到指定范围内的文本,常用的有:
c0、c^
:修改光标左边的文本c$
:修改光标右面的文本cG
:修改光标所在行之后的所有行cb
:修改光标处前的字符直到词首cw
:修改光标处的字符直到词尾cl
:修改光标处的字符- 注意
- 以上命令前带数字
n
时,表示修改的范围扩大n
倍(例:5cc
:修改从光标所在处开始的5行;3cw
:修改从光标开始的3个词)2.替换(
replace
):用一个字符替换另一个字符,这是覆盖操作,替换后文本的长度保持不变
r
:用输入的字符替换光标处的字符R
:用输入的文本逐个替换从光标处开始的各个字符,直到按下Esc
键3.替代(
substitute
):用多个字符取代一个字符或一行,这是先删除后插入操作,替代后的文本的长度一般会发生变化
s
:用输入的文本替代光标处的字符,用Esc
键结束输入,等同于cl
S
:用输入的文本带带光标处所在的行,用Esc
键结束输入,等同于cc
- 注意
- 以上命令前带数字
n
时,表示替换或替代的范围扩大n
倍(例:5r
:用输入的字符替换从光标处开始的5个字符)
7.文本拷贝与粘贴
1.拷贝(
copy
):将光标处的文本复制到一个缓冲区中
yy
:拷贝光标所在的行至缓冲区y+定位符
:拷贝光标到指定范围内的文本,常用的有:
y0、y^
: 拷贝光标左面的文本y$
:拷贝光标右面的文本yG
:拷贝光标所在行之后的所有行yb
:拷贝光标处的字符直到词首yw
: 拷贝光标处的字符直到词尾2.粘贴(
paste
):将缓冲区中的内容插入到光标处
p
:若缓冲区中的内容是完整的行,则将这些行插入到光标所在行之后;若不是完整的行,则将这些文本插入到光标处之后P
:若缓冲区中的内容是完整的行,则将这些行插入到光标所在行之前;若不是完整的行,则将这些文本插入到光标处之前- 注意
- 以上命令前带数字n时,表示拷贝的范围扩大
n
倍(例:5yy
:拷贝光标所在的行及下列共5行至缓冲区)
8.撤销与重做
1.撤销(
undo
):消除上一个命令所做的修改,恢复到命令执行前的样子
u
:撤销上一个命令所做的修改U
:撤销最近针对这一行所做的全部修改,在对一行连续做了多处修改后,用此命令可以一次恢复全行
2.重做(redo
):重复执行上一个命令.
:重复前一个命令
9.搜索与替换
- 命令行模式下,输入
:
、/
或?
字符都将进入末行模式,随后的输入被解释为行命令1.字符串搜索:执行搜索命令后,光标将停留在第一个匹配字符的首字符处,按
n
或N
则移到下一个匹配字符串之首,如果不存在匹配的字符串,则会在末行显示“找不到该字符串”
/ 字符串
:从光标处向后搜索与指定模式匹配的字符串,按n
向后查找?字符串
:从光标处向前搜索与指定模式匹配的字符串,按N
向前查找2.字符串替:换用s命令,格式:
:[n1,n2]s/p1/p2/[g][c]
n1,n2
表示目标行的行号范围,可以用%
代表所有行;未指定范围时,目标行就是光标所在行的当前行p1
是用作搜索的字符串p2
是用作替代的字符串- 字符串中可以用
^
代表行首,$
代表行尾s
命令可以带g
和c
选项,g
表示替代目标行中所有匹配的字符串,没有g
的话则只替换目标行中第一个匹配的字符串,选项c
表示替换前要求用户确认。
10.全局命令
1.全局搜索:全文中搜索含有与指定字符串相匹配的字符串的行,对匹配的行作标记
:g/p1
:搜索所有包含p1
字符串的行:g!/p1
:搜索所有不包含p1
字符串的行2.全局替换:
s
命令是面向行的字符串替换命令,s
命令经常与g
命令联合使用
g命令/s命令
:先用g
命令在文件中搜索含有某个字符串的行,并做标记,然后用s
命令对所有有标记的行执行搜索和替换
11.行编辑命令
- 用于对指定的行进行编辑,在指定行范围时,可以用
.
代表当前行,用$
代表最后一行,用%
代表所有行
:n
:跳至第n行:n1,n2con3
:将第n1
至n2
行之间的内容拷贝到第n3
行下(例:3,7co$
:将第3到7行的文字复制到文件末尾处):n1,n2mn3
: 将第n1
至n2
行之间的内容移到第n3
行下(例:m10
:将当前行移动到第10行下):n1,n2d
: 将第n1
至n2
行之间的内容删除(例:3,7d
:删除第3到7行):p
:显示当前行的内容:nu
:显示当前行的行号和内容
12.设定vi选项
vi
是一个高度可定制的编辑器,可以通过设置vi
的选项来设定vi的一些外观和行为特性
:set all
:显示所有选项:set ai
、:set noai
:设定、取消自动缩进:set nu
、:set nonu
:设定、取消行号显示:set hlsearch
、:set nohlsearch
:设定、取消高亮显示搜索到的字符串:set ic
、:set noic
:设定、取消搜索命令中忽略大小写
15.输出重定向
ls -al //在屏幕上输出 ls -al > 文件 //将结果输出到文件中(覆盖写) ls -al >> 文件 //将结果输出到文件中(追加写) [root@localhost home]# ls -al 总用量 4 drwxr-xr-x. 4 root root 48 10月 23 13:14 . dr-xr-xr-x. 17 root root 224 10月 21 18:13 .. drwxr-xr-x. 2 root root 23 10月 22 14:17 test -rw-r--r--. 1 root root 61 10月 23 13:37 test1.txt drwxr-xr-x. 3 root root 35 10月 22 14:24 test2 [root@localhost home]# ls -al > test1.txt [root@localhost home]# cat test1.txt 总用量 0 drwxr-xr-x. 4 root root 48 10月 23 13:14 . dr-xr-xr-x. 17 root root 224 10月 21 18:13 .. drwxr-xr-x. 2 root root 23 10月 22 14:17 test -rw-r--r--. 1 root root 0 10月 23 13:55 test1.txt drwxr-xr-x. 3 root root 35 10月 22 14:24 test2 [root@localhost home]# echo hello > test1.txt [root@localhost home]# cat test1.txt hello [root@localhost home]# ls -al >> test1.txt [root@localhost home]# cat test1.txt hello 总用量 4 drwxr-xr-x. 4 root root 48 10月 23 13:14 . dr-xr-xr-x. 17 root root 224 10月 21 18:13 .. drwxr-xr-x. 2 root root 23 10月 22 14:17 test -rw-r--r--. 1 root root 6 10月 23 13:55 test1.txt drwxr-xr-x. 3 root root 35 10月 22 14:24 test2
- 具体参考
Shell
编程中的shell
输入/输出重定向
16.链接
Linux
中的链接类似于Windows
中快捷方式,可以为文件添加一个链接,方便用户在不同的位置快速访问原文件
1.硬链接
# 硬链接(hard link) # 硬链接相当于创建了原文件的一个副本(拷贝),但不会占用额外的空间 # 语法:ln 原文件 链接文件 # 删除原文件不会影响硬链接 # 不能对目录创建硬链接 [root@localhost home]# ls test test1.txt test2 [root@localhost home]# ln test1.txt test1_link.txt [root@localhost home]# ls test test1_link.txt test1.txt test2
2.软链接
# 软链接(symbolic link) # 软连接也称符号链接,保存的是原文件的路径 # 语法:ln -s 原文件 链接文件 # 创建符号链接时,源文件的路径尽量使用绝对路径 # 删除原文件,符号链接将无法使用 # 可以对目录创建符号链接 [root@localhost home]# ln -s test1.txt test1_soft_link.txt [root@localhost home]# ls test test1_link.txt test1_soft_link.txt test1.txt test2
17.进程命令
1.top
# top命令用来监控linux的系统状况,是常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况 [root@localhost home]# top # top -p 进程id 只显示特定进程的信息 [root@localhost home]# top -p 1 # top命令显示结果后,再按M 结果按内存使用率降序排列 # top命令显示结果后,再按P 结果按CPU使用率降序排列
2.ps
# 1.a:显示一个终端的所有进程,除会话引线外 [root@localhost home]# ps a PID TTY STAT TIME COMMAND 1271 tty1 Ss+ 0:00 -bash 1303 pts/0 Ss 0:00 -bash 8522 pts/0 R+ 0:00 ps a # 2.u:显示进程的归属用户及内存的使用情况 [root@localhost home]# ps -u USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1271 0.0 0.2 115432 2028 tty1 Ss+ 11:59 0:00 -bash root 1303 0.0 0.2 115436 2036 pts/0 Ss 12:00 0:00 -bash root 8523 0.0 0.1 155324 1860 pts/0 R+ 15:07 0:00 ps -u # 3.x:显示没有控制终端的进程 [root@localhost home]# ps -x # 4.-l:查看当前shell产生的进程的详细信息 [root@localhost home]# ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 1303 1290 0 80 0 - 28859 do_wai pts/0 00:00:00 bash 0 R 0 8525 1303 0 80 0 - 38300 - pts/0 00:00:00 ps # 5.-e:显示所有进程 [root@localhost home]# ps -e # 6.-f:显示进程全部信息 [root@localhost logs]# ps -f
# ps aux 查看系统中所有的进程,使用 BS 操作系统格式 [root@localhost home]# ps aux(ps -ef更常用) USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.6 127956 6480 ? Ss 11:59 0:01 /usr/lib/systemd/systemd -->switched-root --system --deserialize 22 root 2 0.0 0.0 0 0 ? S 11:59 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 11:59 0:00 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S< 11:59 0:00 [kworker/0:0H] root 7 0.0 0.0 0 0 ? S 11:59 0:00 [migration/0] root 8 0.0 0.0 0 0 ? S 11:59 0:00 [rcu_bh] root 9 0.0 0.0 0 0 ? R 11:59 0:00 [rcu_sched]
# 查看系统中所有的进程,使用 Linux 标准命令格式 [root@localhost home]# ps -le F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 1 0 0 80 0 - 31989 ep_pol ? 00:00:01 systemd 1 S 0 2 0 0 80 0 - 0 kthrea ? 00:00:00 kthreadd 1 S 0 3 2 0 80 0 - 0 smpboo ? 00:00:00 ksoftirqd/0 1 S 0 5 2 0 60 -20 - 0 worker ? 00:00:00 kworker/0:0H
# ps通常配合管道以及grep命令进行筛选 [root@localhost home]# ps aux | grep user root 8776 0.0 0.0 112720 980 pts/0 R+ 15:46 0:00 grep --color=auto user
3.kill
# kill -l 显示所有的指令(其中SIG可以省略,用后面的代替,也可以使用序号代替。例:kill -9 进程号 等同于 kill -KILL 进程号) # 1.kill 进程号 杀死进程 [root@localhost home]# kill 993 # 2.kill -KILL/9 进程号 强制杀死进程 [root@localhost home]# kill -KILL 993 [root@localhost home]# kill -9 993 # 3.kill -HUP/1 进程号 重新加载进程 [root@localhost home]# kill -HUP 993 [root@localhost home]# kill 1 993 # 4.kill TERM/15 进程号 正常停止一个进程 [root@localhost home]# kill -TERM 993 [root@localhost home]# kill 15 993
18.解压缩命令
1.压缩文件
1.zip
# 将test1.txt文件压缩成test.zip文件 [root@localhost home]# zip test1.zip test1.txt adding: test1.txt (stored 0%) [root@localhost home]# ls test1.txt test1.zip # 将test1.txt文件压缩成test.zip文件,并且添加一行注释 [root@localhost home]# zip -c test1.zip test1.txt adding: test1.txt (stored 0%) Enter comment for test1.txt: zip file : test1.zip # 在这里添加注释信息 # 压缩文件中删除指定文件 [root@localhost home]# zip test3.zip -d test1.txt deleting: test1.txt # 将test1.txt文件压缩成test.zip文件,并指定加密密码 [root@localhost home]# zip -e test1.zip test1.txt Enter password: # 在这里输入压缩加密密码 Verify password: # 再一次输入压缩加密密码 adding: test1.txt (stored 0%) # 将test目录(包含目录中的文件)压缩成test3.zip文件 [root@localhost home]# zip -r test3.zip test adding: test/ (stored 0%) adding: test/test3.txt (stored 0%) # 将test目录(包含目录中的文件)压缩成test3.zip文件,但排除test/test3.txt文件 [root@localhost home]# zip -r test3.zip test -x test/test3.txt adding: test/ (stored 0%) # 测试压缩文件test1zip的完整性 [root@localhost home]# zip -T test1.zip [test1.zip] test1.txt password: # 输入压缩加密密码 test of test1.zip OK # 更新test1.zip压缩文件,添加test2.txt文件 [root@localhost home]# zip -u test1.zip test2.txt adding: test2.txt (stored 0%) # 压缩test2.txt文件并将生成的压缩文件test2.zip的时间与其一致 [root@localhost home]# zip -o test2.zip test2.txt adding: test2.txt (stored 0%)
# 如果出现下列异常,则需要下载zip 和 unzip [root@localhost home]# zip test1.zip test1.txt -bash: zip: 未找到命令 [root@localhost home]# yum install zip 已加载插件:fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.tuna.tsinghua.edu * extras: mirrors.tuna.tsinghua.edu * updates: mirrors.tuna.tsinghua.edu 正在解决依赖关系 --> 正在检查事务 ---> 软件包 zip.x86_64.0.3.0-11.el7 将被 安装 --> 解决依赖关系完成 依赖关系解决 ================================================================================ Package 架构 版本 源 大小 ================================================================================ 正在安装: zip x86_64 3.0-11.el7 base 260 k 事务概要 ================================================================================ 安装 1 软件包 总下载量:260 k 安装大小:796 k Is this ok [y/d/N]: y Downloading packages: zip-3.0-11.el7.x86_64.rpm | 260 kB 00:03 Running transaction check Running transaction test Transaction test succeeded Running transaction 正在安装 : zip-3.0-11.el7.x86_64 1/1 验证中 : zip-3.0-11.el7.x86_64 1/1 已安装: zip.x86_64 0:3.0-11.el7 完毕! [root@localhost home]# yum install unzip 已加载插件:fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.tuna.tsinghua.edu * extras: mirrors.tuna.tsinghua.edu * updates: mirrors.tuna.tsinghua.edu 正在解决依赖关系 --> 正在检查事务 ---> 软件包 unzip.x86_64.0.6.0-24.el7_9 将被 安装 --> 解决依赖关系完成 依赖关系解决 ================================================================================ Package 架构 版本 源 大小 ================================================================================ 正在安装: unzip x86_64 6.0-24.el7_9 updates 172 k 事务概要 ================================================================================ 安装 1 软件包 总下载量:172 k 安装大小:369 k Is this ok [y/d/N]: y Downloading packages: unzip-6.0-24.el7_9.x86_64.rpm | 172 kB 00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction 正在安装 : unzip-6.0-24.el7_9.x86_64 1/1 验证中 : unzip-6.0-24.el7_9.x86_64 1/1 已安装: unzip.x86_64 0:6.0-24.el7_9 完毕!
2.tar
# tar命令可以将许多文件一起保存进行归档(打包)和压缩,并能从归档和压缩中单独还原所需文件 # tar 默认只是归档不压缩,参数-z归档后进行gzip压缩,参数-j归档后进行bzip2压缩 # 下列参数一般组合使用 -A:追加tar中的文件到归档文件中 [root@localhost home]# tar -Avf test1.tar test2.tar -c:创建新的归档(打包)文件 [root@localhost home]# tar -cvf boot.tar test1.txt test1.txt -C 目的目录:切换到指定的目录 # 从test3.tar中将test2.txt文件还原到/home/test下 [root@localhost home]# tar -xvf test3.tar -C /home/test test2.txt -f 归档文件:指定归档文件 [root@localhost home]# tar -tf test2.tar.gz test2.txt -r 归档文件:追加文件本身到归档文件末尾 [root@localhost home]# tar -rvf test1.tar test2.tar test2.tar -t 归档文件:列出归档文件的内容 -tvf [root@localhost home]# tar -tf test2.tar.gz test2.txt -u 归档文件:追加文件本身 [root@localhost home]# tar -uvf test1.tar test2.tar test2.tar -v 归档文件:详细地列出处理的文件 # 从test3.tar中将test2.txt文件还原到/home/test下 [root@localhost home]# tar -xvf test3.tar -C /home/test test2.txt -x 备份文件:从备份文件中还原文件 # 从test3.tar中将test2.txt文件还原到/home/test下 [root@localhost home]# tar -xvf test3.tar -C /home/test test2.txt -z 归档文件:通过gzip指定处理归档文件 # 将test1.txt和test2.txt文件通过gzip的方式先通过tar方式打包再压缩成test3.tar.gz文件 [root@localhost home]# tar -zcvf test3.tar.gz test1.txt test2.txt test1.txt test2.txt -j 归档文件:通过bzip2指定处理归档文件 [root@localhost home]# tar -cjvf test3.tar.bz2 test3.txt test3.txt # tar: 不能指定超过一个"-Acdtrux"选项(即这几个选项同一个命令只能存在一个) -A,r,u:追加 -c:创建 -t:展示 -x:还原 # A,r,u只能追加归档文件(-cvf),不能追加压缩归档文件(-czvf) # [root@localhost home]# tar -Avf test1.tar.gz test2.tar.gz tar: 无法更新压缩归档文件 tar: Error is not recoverable: exiting now [root@localhost home]# tar -rvf test1.tar.gz test2.tar.gz tar: 无法更新压缩归档文件 tar: Error is not recoverable: exiting now [root@localhost home]# tar -uvf test1.tar.gz test2.tar.gz tar: 无法更新压缩归档文件 tar: Error is not recoverable: exiting now
# 如果出现下列异常,则需要下载bzip2 [root@localhost home]# tar -cjvf test3.tar.bz2 test3.txt test3.txt tar (child): bzip2:无法 exec: 没有那个文件或目录 tar (child): Error is not recoverable: exiting now tar: Child returned status 2 tar: Error is not recoverable: exiting now [root@localhost home]# ^C [root@localhost home]# yum -y install bzip2 已加载插件:fastestmirror Determining fastest mirrors * base: mirrors.tuna.tsinghua.edu * extras: mirrors.tuna.tsinghua.edu * updates: mirrors.tuna.tsinghua.edu base | 3.6 kB 00:00 extras | 2.9 kB 00:00 updates | 2.9 kB 00:00 (1/4): base/7/x86_64/group_gz | 153 kB 00:01 (2/4): extras/7/x86_64/primary_db >| 249 kB 00:00:11 (3/4): base/7/x86_64/primary_db >| 6.1 MB 00:00:18 (4/4): updates/7/x86_64/primary_db >| 17 MB 00:00:38 正在解决依赖关系 --> 正在检查事务 ---> 软件包 bzip2.x86_64.0.1.0.6-13.el7 将被 安装 --> 解决依赖关系完成 依赖关系解决 ==================================================================================================================================================================== Package 架构 版本 源 大小 ==================================================================================================================================================================== 正在安装: bzip2 x86_64 1.0.6-13.el7 base 52 k 事务概要 ==================================================================================================================================================================== 安装 1 软件包 总下载量:52 k 安装大小:82 k Downloading packages: 警告:/var/cache/yum/x86_64/7/base/packages/bzip2-1.0.6-13.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY==- ] 0.0 B/s | 50 kB --:--:-- ETA bzip2-1.0.6-13.el7.x86_64.rpm 的公钥尚未安装 bzip2-1.0.6-13.el7.x86_64.rpm | 52 kB 00:00:04 从 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 检索密钥 导入 GPG key 0xF4A80EB5: 用户ID : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos>" 指纹 : 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5 软件包 : centos-release-7-5.1804.el7.centos.x86_64 (@anaconda) 来自 : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 Running transaction check Running transaction test Transaction test succeeded Running transaction 正在安装 : bzip2-1.0.6-13.el7.x86_64 1/1 验证中 : bzip2-1.0.6-13.el7.x86_64 1/1 已安装: bzip2.x86_64 0:1.0.6-13.el7 完毕!
2.解压文件
1.unzip
# 解压指定文件 [root@localhost home]# unzip test2.zip Archive: test2.zip extracting: test2.txt # 查看压缩包但不解压 [root@localhost home]# unzip -v test3.zip Archive: test3.zip Length Method Size Cmpr Date Time CRC-32 Name -------- ------ ------- ---- ---------- ----- -------- ---- 0 Stored 0 0% 10-24-2022 00:48 00000000 test/ -------- ------- --- ------- 0 0 0% 1 file # 测试压缩包内的文件是否正常 [root@localhost home]# unzip -t test3.zip Archive: test3.zip testing: test/ OK No errors detected in compressed data of test3.zip. # 指定解压路经 [root@localhost home]# unzip -d test/ test2.zip Archive: test2.zip extracting: test/test2.txt
2.tar
# 解压gzip格式归档文件 [root@localhost home]# rm -rf test1.txt [root@localhost home]# ls test1.tar test1.tar.gz test2.tar test2.tar.gz test2.txt test3.tar.bz2 test3.txt [root@localhost home]# tar -xzvf test1.tar.gz test1.txt [root@localhost home]# ls test1.tar test1.tar.gz test1.txt test2.tar test2.tar.gz test2.txt test3.tar.bz2 test3.txt # 解压bzip2格式归档文件 [root@localhost home]# ls test1.tar test1.tar.gz test1.txt test2.tar test2.tar.gz test2.txt test3.tar.bz2 test3.txt [root@localhost home]# rm test3.txt rm:是否删除普通文件 "test3.txt"?y [root@localhost home]# tar -xjvf test3.tar.bz2 test3.txt [root@localhost home]# ls test1.tar test1.tar.gz test1.txt test2.tar test2.tar.gz test2.txt test3.tar.bz2 test3.txt
19.用户,组及权限管理命令
- 1.
Linux
系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限- 2.
Linux
系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定
1.useradd
useradd 选项 用户名 选项: -c comment 指定一段注释性描述 -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建>主目录 -g 用户组 指定用户所属的用户组 -G 用户组,用户组 指定用户所属的附加组 -s Shell文件 指定用户的登录Shell -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号 例: useradd –d /home/wd -m wd # 创建一个用户wd,-d和-m用来为登录名wd产生一个主目录 /home/wd(/home为默认的用户主目录所在的父目录,可不指定-d,-m,默认自动创建用户目录) useradd -s /bin/sh -g group –G admin,root wd # 创建一个用户wd,该用户的登录Shell是 /bin/sh,它属于group用户组,同时又属于admin和root用户组,其中group用户组是其主组。 # 可能新建组:groupadd group及groupadd admin
- 1.增加用户账号就是在
/etc/passwd
文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow
,/etc/group
等
1.批量添加用户(存在问题)
- 1.编辑一个文本用户文件
- 每一行按照
/etc/passwd
密码文件的格式书写,注意每个用户的用户名、UID
、宿主目录都不可以相同,密码栏可留做空白或输入x
号
- 2.以
root
身份执行命令/usr/sbin/newusers
,从刚创建的用户文件user.txt
中导入数据,创建用户
- 执行命令
vipw
或vi /etc/passwd
检查/etc/passwd
文件是否已经出现这些用户的数据,并且用户的主目录是否已经创建
- 3.执行命令
/usr/sbin/pwunconv
- 将
/etc/shadow
产生的shadow
密码解码,然后回写到/etc/passwd
中,并将/etc/shadow
的shadow
密码栏删掉;方便下一步的密码转换,即先取消shadow password
功能(此时不存在/etc/shadow文件)
- 4.编辑每个用户的密码对照文件
passwd.txt
- 格式为:
用户名:密码
- 5.以
root
身份执行命令/usr/sbin/chpasswd
- 创建用户密码,
chpasswd
会将经过/usr/bin/passwd
命令编码过的密码写入/etc/passwd
的密码栏
- 6.确定密码经编码写入
/etc/passwd
的密码栏后
- 执行命令
/usr/sbin/pwconv
将密码编码为shadow password
,并将结果写入/etc/shadow
- 可以到
/home
下检查这些用户主目录的权限是否正确,并登录验证用户密码是否正确
2.userdel
userdel 选项 用户名 选项: -r 把用户的主目录一起删除 例: userdel -r wd # 删除用户wd在系统文件中(主要是/etc/passwd, /etc/shadow, /etc/group等)的记录,同时删除用户的主目录
- 1.删除用户账号就是要将
/etc/passwd
等系统文件中的该用户记录删除,必要时还删除用户的主目录
3.usermod
usermod 选项 用户名 usermod -s /bin/bash -d /home/z–g developer wd # 将用户wd的登录Shell修改为bash,主目录改为/home/z,用户组改为developer # 常用的选项包括-c, -d, -m, -g, -G, -s, -u以及-o等,这些选项的与useradd命令中的选项一样,可以为用户指定新的资源值
4.passwd
passwd 选项 用户名 选项: -l 锁定密码,即禁用账号 -u 密码解锁 -d 使账号无密码 -f 强迫用户下次登录时修改密码
- 1.用户账号刚创建时没有密码,被系统锁定,无法使用,必须为其指定密码后才可以登陆使用
- 2.指定和修改用户密码的命令是
passwd
,超级用户可以为自己和其他用户指定密码,普通用户只能用它修改自己的密码- 3.如果默认用户名,则修改当前用户的密码;如果是超级用户,可以用
passwd 用户名
指定任何用户的密码
5.groupadd
groupadd 选项 用户组 选择: -g GID 指定新用户组的组标识号(GID) -o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同 groupadd group1 # 向系统中增加了一个新组group1,新组的组标识号是在当前已有的最大组标识号的基础上加1 groupadd -g 101 group2 # 向系统中增加了一个新组group2,同时指定新组的组标识号是101
6.groupdel
groupdel 用户组 # 删除一个已有的用户组 groupdel group1
7.groupmod
groupmod 选项 用户组 选项: -g GID 为用户组指定新的组标识号 -o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同 -n 新用户组 将用户组的名字改为新名字 groupmod -g 102 group2 # 将组group2的组标识号修改为102 groupmod –g 10000 -n group3 group2 # 将组group2的标识号改为10000,组名修改为group3
8.newgrp
newgrp 目的用户组 # 用户登录后,可使用newgrp切换到其他用户组 newgrp root # 当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组
9.chattr
chattr [-RV][-v<版本编号>][+/-/=<属性>][文件或目录...] -R : 递归处理,将指定目录下的所有文件及子目录一并处理 -v<版本编号> : 设置文件或目录版本 -V : 显示指令执行过程 +<属性> : 开启文件或目录的该项属性 -<属性> : 关闭文件或目录的该项属性 =<属性> : 指定文件或目录的该项属性 # 用chattr命令防止系统中某个关键文件被修改(只读文件) [root@localhost home]# chattr +i text.txt [root@localhost home]# lsattr text.txt ----i-------- text.txt # 让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件 [root@localhost home]# chattr +a /var/log/messages
- 改变文件属性
10.chgrp (change group)
chgrp [-R] 属组名 文件名 # 更改文件属组 -R:递归更改文件属组,在更改某个目录文件的属组时,如果加上-R的参>数,该目录下的所有文件的属组都会更改 [root@localhost ~]# chgrp wd hello.sh
- 1.修改文件和目录的所属组
11.chown (change owner)
chown [–R] 属主名 文件名 chown [-R] 属主名:属组名 文件名 [root@localhost ~]# chown wd:root hello.sh
- 1.修改文件和目录的所属用户和所属组
12.chmod (change mode)
数字类型改变文件权限 chmod [-R] xyz 文件或目录 # xyz 数字类型的权限属性,为 rwx 属性数值的相加 # -R 进行递归(recursive)的持续变更,以及连同次目录下的所有文件都会变更 例:将权限变成 -rwxr-xr-- ,那么权限的数值就成为 [4+2+1][4+0+1]>[4+0+0]=754 [root@www ~]# chmod 754 text.txt
符号类型改变文件权限 chmod 权限设置 文件名 例:将文件权限设置为 -rwxr-xr-- [root@www ~]# chmod u=rwx,g=rx,o=r text.txt # 拿掉全部人的可执行权限 [root@www ~]# chmod a-x text.txt
- 1.修改文件或目录的权限
- 2.权限有两种设置方法:一种是数字,一种是符号
- 3.使用数字来代表各个权限,各权限的数字对照:
r:4
,w:2
,x:1
- 4.使用符号来代表各个权限,各权限的符号对照:
用户:u
,组:g
,其他:o
,全部:a
,+:加入
,-:除去
,=:设定
,r:读
,w:写
,x:执行
13.umask
umask [-S][权限掩码] -S 以文字的方式来表示权限掩码
- 1.指定在建立文件或目录时预设的权限掩码
20.用户及组的系统文件
- 完成用户管理有许多种方法,但是每一种方法实际上都是对有关的系统文件进行修改
1./etc/passwd
用户名:密码:用户标识号:组标识号:注释性描述:主目录:登录Shell # 用户名 代表用户账号的字符串,由大小写字母或数字组成,登录名中不能有冒号:,因为冒号:在这里是分隔符,为了兼容起见,登录名中最好不要包含点字符.,并且不使用连字符-和加号+打头 # 密码 代表加密后的用户密码,虽然这个字段存放的只是用户口令的加密串,不是明文,但是由于/etc/passwd文件对所有用户都可读,所以这仍是一个安全隐患;因此现在许多Linux 系统都使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个特殊的字符x或者* # 用户标识号 代表标识用户标识,一般它与用户名是一一对应的,如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的密码、不同的主目录以及不同的登录Shell等;通常用户标识号的取值范围是0~65 535;0是超级用户root的标识号,1~99由系统保留,作为管理账号,普通用户的标识号从100开始;在Linux系统中,这个界限是500 # 组标识号 代表用户所属的用户组,它对应着/etc/group文件中的一条记录 # 注释性描述 记录着用户的一些个人情况 # 主目录 代表用户的起始工作目录,它是用户登录系统之后所处的目录;各用户的主目录都被组织在同一个特定的目录下/home,而用户主目录的名称就是该用户的登录名;各用户对自己的主目录有读、写、执行(搜索)权限 # 登录Shell 用户登录后要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell
- 1.
/etc/passwd
中一行记录对应着一个用户,每行记录又被冒号:
分隔为7个字段- 2.伪用户(
pseudo users
):这些用户在/etc/passwd
文件中也占有一条记录,但是不能登录,因为它们的登录Shell为空;主要是方便系统管理,满足相应的系统进程对文件属主的要求伪 用 户 含 义 bin 拥有可执行的用户命令文件 sys 拥有系统文件 adm 拥有帐户文件 uucp UUCP使用 lp lp或lpd子系统使用 nobody NFS使用
2./etc/shadow
登录名:加密密码:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志 # 登录名 是与/etc/passwd文件中的用户名一致的用户账号 # 加密密码 是加密后的用户密码 # 最后一次修改时间 表示从某个时刻起,到用户最后一次修改密码时的天数;时间起点对不同的系统可能不一样,SCO Linux 中,这个时间起点是1970年1月1日 # 最小时间间隔 表示两次修改密码之间所需的最小天数 # 最大时间间隔 表示密码保持有效的最大天数 # 警告时间 表示的是从系统开始警告用户到用户密码正式失效之间的天数 # 不活动时间 表示用户没有登录活动但账号仍能保持有效的最大天数 # 失效时间 表示一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期;期满后就不再是一个合法的账号,不能再用来登录
- 1.由于
/etc/passwd
文件是所有用户都可读的,存在安全问题,因此Linux系统都把加密后的密码分离出来,单独存放在一个文件中,这个文件是/etc/shadow
,超级用户才拥有该文件读权限,保证了用户密码的安全性- 2.
/etc/shadow
中的记录行与/etc/passwd
中的一一对应,它由pwconv
命令根据/etc/passwd
中的数据自动产生
3./etc/group
组名:密码:组标识号:组内用户列表 # 组名 是用户组的名称,由字母或数字构成;与/etc/passwd中的登录名一样,组名不应重复 # 密码 用户组加密后的密码,一般Linux 系统的用户组都没有密码,即这个字段一般为空,或者是*/x # 组标识号 与用户标识号类似,也是一个整数,被系统内部用来标识组 # 组内用户列表 属于这个组的所有用户的列表,不同用户之间用逗号,分隔;这个用户组可能是用户的主组,也可能是附加组
- 1.将用户分组是
Linux
系统中对用户进行管理及控制访问权限的一种手段- 2.每个用户都属于某个用户组;一个组中可以有多个用户,一个用户也可以属于不同的组。
- 3.当一个用户同时是多个组中的成员时,在
/etc/passwd
文件中记录的是用户所属的主组,也就是登录时所属的默认组,而其他组称为附加组- 4.用户要访问属于附加组的文件时,必须首先使用
newgrp
命令使自己成为所要访问的组中的成员- 5.用户组的所有信息都存放在
/etc/group
文件中
21.下载安装命令
- 1.
Linux
下的软件包可以细分成两种:源码包
和二进制包
- 2.
源码包
:指源代码程序,需要编译成二进制包才能被计算机识别并使用- 3.
二进制包
:指源码包经过成功编译之后产生的包,是Linux
下默认的软件安装包(例:xxx.rpm
)
RPM
二进制包的命名需遵守统一的命名规则,通过名称可以直接获取这类包的版本、适用平台等信息包名-版本号-发布次数-发行商-Linux平台-适合的硬件平台-包扩展名 例:httpd-2.2.15-15.el6.centos.1.i686.rpm httped:包名 httpd-2.2.15-15.el6.centos.1.i686.rpm: 包全名 2.2.15:包的版本号,版本号的格式通常为(主版本号.次版本号.修正号) 15:二进制包发布的次数 el*:软件发行商,el6 表示此包是由 Red Hat 公司发布,适合在 RHEL 6.x (Red Hat Enterprise Unux) 和 CentOS 6.x 上使用 centos:表示此包适用于 CentOS 系统 i686:表示此包使用的硬件平台 rpm:RPM 包的扩展名,表明这是编译好的二进制包,可以使用 rpm 命令直接安装(如果以 src.rpm 作为扩展名的 RPM 包,表明是源代码包,需要安装生成源码,然后对其编译并生成 rpm 格式的包,最后才能使用 rpm 命令进行安装)
- 4.通常
RPM
包采用系统默认的安装路径
1.rpm
- 1.
rpm
是Red Hat Linux
发行版专门用来管理Linux
各项套件(文件后缀为:.rpm
)的程序- 2.
rpm
类似于Android
中的.apk
文件,需要使用rpm
命令进行安装- 3.
rpm
软件包的安装和卸载都需要考虑包之间的依赖性,需要注意先后关系rpm [-acdhilqRsv][-b<完成阶段><套间档>+][-e<套件挡>][-f<文件>+][-i<套件档>][-p<套件档>+][-U<套件档>][-vv][--addsign<套件档>+][--allfiles][--allmatches][--badreloc][--buildroot<根目录>][--changelog][--checksig<套件档>+][--clean][--dbpath<数据库目录>][--dump][--excludedocs][--excludepath<排除目录>][--force][--ftpproxy<主机名称或IP地址>][--ftpport<通信端口>][--help][--httpproxy<主机名称或IP地址>][--httpport<通信端口>][--ignorearch][--ignoreos][--ignoresize][--includedocs][--initdb][justdb][--nobulid][--nodeps][--nofiles][--nogpg][--nomd5][--nopgp][--noorder][--noscripts][--notriggers][--oldpackage][--percent][--pipe<执行指令>][--prefix<目的目录>][--provides][--queryformat<档头格式>][--querytags][--rcfile<配置档>][--rebulid<套件档>][--rebuliddb][--recompile<套件档>][--relocate<原目录>=<新目录>][--replacefiles][--replacepkgs][--requires][--resign<套件档>+][--rmsource][--rmsource<文件>][--root<根目录>][--scripts][--setperms][--setugids][--short-circuit][--sign][--target=<安装平台>+][--test][--timecheck<检查秒数>][--triggeredby<套件档>][--triggers][--verify][--version][--whatprovides<功能特性>][--whatrequires<功能特性>] -a:查询所有套件 -c:只列出组态配置文件 -d:只列出文本文件 -h:显示安装进度 -i:显示套件的相关信息 -l:显示套件的文件列表及安装目录 -q:使用查询模式 -R:显示套件的关联性信息 -s:显示文件状态 -v:显示更详细的信息(执行过程) [-e <套件>]:卸载指定的套件 [-f <文件>]:查询拥有指定文件的套件 [-i <套件>]:安装指定的套件(install) [-p <套件>]:查询指定的RPM套件档 [-U <套件>]:如果该套件没安装过则直接安装;若安装则升级至最新版本 # rpm -q 包名 查询软件包是否安装 # 注意使用包名,不是包全名。因为已安装的软件包只需给出包名,系统就可以成功识别(使用包全名反而无法识别) [root@localhost home]# rpm -q yum yum-3.4.3-158.el7.centos.noarch # rpm -qa:查询系统中所有安装的软件包 # 可使用管道符查找出需要的内容 [root@localhost home]# rpm -qa | grep yum yum-plugin-fastestmirror-1.1.31-45.el7.noarch yum-metadata-parser-1.1.4-10.el7.x86_64 yum-3.4.3-158.el7.centos.noarch # 只列出组态配置文件 [root@localhost home]# rpm -qc yum /etc/logrotate.d/yum /etc/yum.conf /etc/yum/version-groups.conf # 只列出文本文件 [root@localhost home]# rpm -qd yum /usr/share/doc/yum-3.4.3/AUTHORS /usr/share/doc/yum-3.4.3/COPYING /usr/share/doc/yum-3.4.3/ChangeLog ... # 显示套件的关联性信息 [root@localhost home]# rpm -qR yum /usr/bin/python config(yum) = 3.4.3-158.el7.centos cpio ... # 显示文件状态 [root@localhost home]# rpm -qs yum 正常/etc/logrotate.d/yum 正常/etc/yum 正常/etc/yum.conf # 显示更详细的信息(执行过程) [root@localhost home]# rpm -qvs yum 正常-rw-r--r-- 1 root root 100 4月 13 2018 /etc/logr otate.d/yum 正常drwxr-xr-x 2 root root 0 4月 13 2018 /etc/yum 正常-rw-r--r-- 1 root root 970 4月 13 2018 /etc/yum. # 显示套件的文件列表及安装目录 [root@localhost home]# rpm -ql yum /etc/logrotate.d/yum /etc/yum /etc/yum.conf ... # rpm -qi 包名:查询软件包的详细信息 # 此时的-i 选项表示查询软件信息,是 information 的首字母 [root@localhost home]# rpm -qi yum Name : yum Version : 3.4.3 Release : 158.el7.centos Architecture: noarch Install Date: 2022年10月21日 星期五 18时09分32秒 Group : System Environment/Base Size : 5814102 License : GPLv2+ Signature : RSA/SHA256, 2018年04月25日 星期三 19时52分48秒, Key ID 24c6a8a7f4a80eb5 Source RPM : yum-3.4.3-158.el7.centos.src.rpm Build Date : 2018年04月13日 星期五 20时58分52秒 Build Host : x86-01.bsys.centos Relocations : (not relocatable) Packager : CentOS BuildSystem <http://bugs.centos> Vendor : CentOS URL : http://yum.baseurl/ Summary : RPM package installer/updater/manager Description : Yum is a utility that can check for and automatically download and install updated RPM packages. Dependencies are obtained and downloaded automatically, prompting the user for permission as necessary. # -p 表示查询未安装的软件包,是package 的首字母 # 注意:使用包全名,因为未安装的软件包需使用 绝对路径+包全名 的方式才能确定包 [root@localhost ~]# rpm -qip 包全名 # rpm -qf:命令查询系统文件属于哪个RPM包, file 的首字母 [root@localhost home]# rpm -qf /bin/ls coreutils-8.22-21.el7.x86_64 # 查找未安装软件包的依赖性 # 绝对路径+包全名 [root@localhost ~]# rpm -qRp /mnt/cdrom/Packages/bind-9.8.2-0.10.rc1.el6.i686.rpm
2.yum
# 基本语法 yum [options] [command] [package ...] options:可选,选项包括-h(帮助),-y(当安装过程提示选择全部为 "yes"),-q(不显示安装的过程)等等 command:要进行的操作 package:安装的包名 # yum常用命令 # 更新 1.列出所有可更新的软件清单命令:yum check-update 2.更新所有软件命令:yum update 3.仅更新指定的软件命令:yum update <package_name> # 安装 1.安装所有可安装软件:yum install 2.仅安装指定的软件命令:yum install <package_name> 3.重新安装软件包 yum reinstall <package_name> # 显示列表 1.列出所有可安裝的软件清单命令:yum list 2.查询执行软件包的安装情况:yum list <package_name> [root@localhost opt]# yum list jdk1.8 已加载插件:fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.tuna.tsinghua.edu * extras: mirrors.tuna.tsinghua.edu * updates: mirrors.tuna.tsinghua.edu 已安装的软件包 jdk1.8.x86_64 2000:1.8.0_171-fcs installed 3.列出所有可安装的软件包:yum list updates 4.列出所有已安装的软件包:yum list installed 5.列出所有已安装但不在 Yum Repository 內的软件包:yum list extras # 依赖情况 1.查看程序<package_name> 依赖情况:yum deplist <package_name> # 仓库 1.列出所有仓库:yum repolist all # 详细信息 1.查询执行软件包的详细信息:yum info <package_name> [root@localhost opt]# yum info jdk1.8 已加载插件:fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.tuna.tsinghua.edu * extras: mirrors.tuna.tsinghua.edu * updates: mirrors.tuna.tsinghua.edu 已安装的软件包 名称 :jdk1.8 架构 :x86_64 时期 :2000 版本 :1.8.0_171 发布 :fcs 大小 :279 M 源 :installed 简介 : Java Platform Standard Edition Development Kit 网址 :http://www.oracle/technetwork/java/javase/overview/index.html 协议 : http://java/license 描述 : The Java Platform Standard Edition Development Kit (JDK) includes both : the runtime environment (Java virtual machine, the Java platform classes : and supporting files) and development tools (compilers, debuggers, : tool libraries and other tools). : : The JDK is a development environment for building applications, applets : and components that can be deployed with the Java Platform Standard : Edition Runtime Environment. 2.列出所有需要更新的软件包信息:yum info updates 3.列出所有已安裝的软件包信息:yum info installed 4.列出所有已安裝但不在 Yum Repository 內的软件包信息:yum info extras 5.列出软件包提供哪些文件:yum provides <package_name> # 删除 1.删除软件包命令:yum remove <package_name> # 查询 1.查找软件包命令:yum search <keyword> [root@localhost opt]# yum search jdk1.8 已加载插件:fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.tuna.tsinghua.edu * extras: mirrors.tuna.tsinghua.edu * updates: mirrors.tuna.tsinghua.edu ================================== N/S matched: jdk1.8 ================================== jdk1.8.x86_64 : Java Platform Standard Edition Development Kit # 清除缓存命令: yum clean packages: 清除缓存目录下的软件包 yum clean headers: 清除缓存目录下的 headers yum clean oldheaders: 清除缓存目录下旧的 headers yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的 headers
- 1.
yum
(Yellow dog Updater, Modified
):专门为解决包的依赖关系的软件包管理器,类似腾讯电脑管家的软件一键安装,更新和卸载- 2.
yum
在服务器端存有所有的RPM
包,并将各个包之间的依赖关系记录在文件中- 3.当使用
yum
安装RPM
包时,yum
会先从服务器端下载包的依赖性文件,通过分析此文件从服务器端一次性下载所有相关的RPM
包并进行安装,从而解决RPM
依赖性问题- 4.使用
yum
安装软件包之前,需指定好yum
下载RPM
包的位置,此位置称为yum 源
(yum 源
指的就是软件安装包的来源)- 5.使用
yum
安装软件时至少需要一个yum 源
,yum 源
既可以使用网络yum 源
,也可以将本地光盘作为yum 源
- 网络
yum源
- 1.一般主机网络正常,可以直接使用网络
yum 源
,不需要对配置文件做任何修改- 2.网络
yum 源
配置文件位于/etc/yum.repos.d/
目录下,文件扩展名为*.repo
(只要扩展名为*.repo
"的文件都是 yum 源的配置文件)- 3.通常情况下
CentOS-Base.repo
文件生效- 4.如果修改网络
yum源
后需要执行:yum clean all
;yum makecache
vim /etc/yum.repos.d/CentOS-Base.repo [base]:容器名称,一定要放在[]中。 name:容器说明,可以随便写。 mirrorlist:镜像站点 baseurl: yum 源服务器的地址。默认是 CentOS 官方的 yum 源服务器 enabled:此容器是否生效,如果不写或写成 enabled 则表示此容器生效,写成enable=0 则表示此容器不生效。 gpgcheck:如果为 1 则表示 RPM 的数字证书生效;如果为 0 则表示 RPM 的数字证书不生效。 gpgkey:数字证书的公钥文件保存位置
3.wget
- 1.
wget
是一个从网络上自动下载文件的自由工具,支持通过HTTP
,HTTPS
,FTP
三个最常见的TCP/IP
协议下载(类似于Windows
下的迅雷)- 2.
wget
命令用来从指定的URL
下载文件# 安装wget yum install wget wget(选项)(参数) # wget URL:从指定地址下载文件 [root@localhost opt]#wget https://www.keaidian/uploads/allimg/190424/24110307_8.jpg # [root@localhost opt]# wget -a download.log https://www.keaidian/uploads/allimg/190424/24110307_8.jpg # 将下载信息存入日志文件 [root@localhost opt]# wget -a download.log https://www.keaidian/uploads/allimg/190424/24110307_8.jpg # wget -b url:后台下载 [root@localhost opt]# wget -b https://www.keaidian/uploads/allimg/190424/24110307_8.jpg 继续在后台运行,pid 为 61922。 将把输出写入至 “wget-log”。 # wget -c url:继续执行上次终端的任务 [root@localhost opt]# wget -c https://www.keaidian/uploads/allimg/190424/24110307_8.jpg # wget -d url:调试模式运行指令 [root@localhost opt]# wget -d https://www.keaidian/uploads/allimg/190424/24110307_8.jpg # wget -h url:显示指令帮助信息 [root@localhost opt]# wget -h https://www.keaidian/uploads/allimg/190424/24110307_8.jpg # wget -i url:从指定文件批量获取要下载的URL地址 [root@localhost opt]# cat > filelist.txt https://www.keaidian/uploads/allimg/190424/24110307_4.jpg https://www.keaidian/uploads/allimg/190424/24110307_8.jpg [root@localhost opt]# wget -i filelist.txt # wget -q url:不显示指令执行过程 [root@localhost opt]# wget -q https://www.keaidian/uploads/allimg/190424/24110307_8.jpg #wget -o download.log URL:把下载信息存入日志文件 [root@localhost opt]# wget -o test1.log https://www.keaidian/uploads/allimg/190424/24110307_8.jpg [root@localhost opt]# ls 24110307_8.jpg jdk-8u171-linux-x64.rpm test1.log [root@localhost opt]# cat test1.log --2022-10-25 05:28:41-- https://www.keaidian/uploads/allimg/190424/24110307_8.jpg 正在解析主机 www.keaidian (www.keaidian)... 101.26.37.47, 61.179.224.47, 106.74.11.126, ... 正在连接 www.keaidian (www.keaidian)|101.26.37.47|:443... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:318641 (311K) [image/jpeg] 正在保存至: “24110307_8.jpg” 0K .......... .......... .......... .......... .......... 16% 2.59M 0s 50K .......... .......... .......... .......... .......... 32% 775K 0s 100K .......... .......... .......... .......... .......... 48% 851K 0s 150K .......... .......... .......... .......... .......... 64% 1.03M 0s 200K .......... .......... .......... .......... .......... 80% 2.68M 0s 250K .......... .......... .......... .......... .......... 96% 927K 0s 300K .......... . 100% 15.6M=0.3s 2022-10-25 05:28:42 (1.16 MB/s) - 已保存 “24110307_8.jpg” [318641/318641]) # wget -O 别名 URL:从指定地址下载文件并起别名 [root@localhost opt]# wget -O test.jpg https://www.keaidian/uploads/allimg/190424/24110307_8.jpg --2022-10-25 05:22:31-- https://www.keaidian/uploads/allimg/190424/24110307_8.jpg 正在解析主机 www.keaidian (www.keaidian)... 101.26.37.47, 61.179.224.47, 106.74.11.126, ... 正在连接 www.keaidian (www.keaidian)|101.26.37.47|:443... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:318641 (311K) [image/jpeg] 正在保存至: “test.jpg” 100%[=============================================================================================================================================>] 318,641 1.12MB/s 用时 0.3s 2022-10-25 05:22:31 (1.12 MB/s) - 已保存 “test.jpg” [318641/318641]) [root@localhost opt]# ls jdk-8u171-linux-x64.rpm test.jpg # wget -P 目录 URL:从指定地址下载文件并保存在指定目录下 [root@localhost tmp]# wget -P /tmp/nginx_yum_source/ http://nginx/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm # get reject=xxx(文件格式) url:过滤指定格式下载 [root@localhost opt]# wget reject=gif https://wwwblogs/lukelook/p/11201098.html # wget --spider URL:测试下载连接是否可行 [root@localhost opt]# wget --spider https://www.keaidian/uploads/allimg/190424/24110 307_8.jpg 开启 Spider 模式。检查是否存在远程文件。 --2022-10-25 05:34:10-- https://www.keaidian/uploads/allimg/190424/24110307_8.jpg 正在解析主机 www.keaidian (www.keaidian)... 125.44.96.40, 101.26.37.47, 61.179.22 4.47, ... 正在连接 www.keaidian (www.keaidian)|125.44.96.40|:443... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:318641 (311K) [image/jpeg] 存在远程文件。 # FTP下载 [root@localhost opt]# wget ftp https://wwwblogs/lukelook/p/11201098.html
4.绿色软件安装
- 1.绿色软件:不需要安装,下载可以直接使用(或者解压缩可以直接使用)的软件
- 2.例:
Linux
安装Tomcat
22.磁盘管理命令
Linux
磁盘管理常用三个命令为df
、du
和fdisk
1.df(disk free)
df [-ahikHTm] [目录或文件名] 选项: -a :列出所有的文件系统,包括系统特有的 /proc 等文件系统 -k :以 KBytes 的容量显示各文件系统 -m :以 MBytes 的容量显示各文件系统 -h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示 -H :以 M=1000K 取代 M=1024K 的进位方式 -T :显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出 -i :不用硬盘容量,而以 inode 的数量来显示
- 1.检查文件系统的磁盘空间占用情况
- 2.默认显示系统内所有的 (不含特殊内存内的文件系统与
swap
) 的容量
2.du(disk used)
du [-ahskm] 文件或目录名称 选项: -a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已 -h :以人们较易读的容量格式 (G/M) 显示 -s :列出总量而已,而不列出每个各别的目录占用容量 -S :不包括子目录下的总计,与 -s 有点差别 -k :以 KBytes 列出容量显示 -m :以 MBytes 列出容量显示 # 检查根目录底下每个目录所占用的容量 [root@localhost ~]# du -sm /*
- 1.检查文件和目录的磁盘使用量
- 2.默认会分析当前所在目录里的子目录所占用的硬盘空间
3.fdisk
fdisk [-l] 装置名称 选项: -l :输出后面接的装置所有的分区内容。若仅有 fdisk -l 时, 则系统将会把整个系统内能够搜寻到的装置的分区均列出来
# 第一步 [root@localhost /]# df / <==注意:找出磁盘文件名,即/dev/mapper/centos-root 文件系统 1K-块 已用 可用 已用% 挂载点 /dev/mapper/centos-root 17811456 3229160 14582296 19% / # 第二步 [root@localhost /]# fdisk /dev/mapper/centos-root <==不要加上数字 欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 Device does not contain a recognized partition table 使用磁盘标识符 0xd7827351 创建新的 DOS 磁盘标签。 命令(输入 m 获取帮助): <==等待你的输入! # 第三步 命令(输入 m 获取帮助):m 命令操作 a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition <==删除一个partition g create a new empty GPT partition table G create an IRIX (SGI) partition table l list known partition types m print this menu n add a new partition <==新增一个partition o create a new empty DOS partition table p print the partition table <==在屏幕上显示分割表 q quit without saving changes <==不储存离开fdisk程序 s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit <==将刚刚的动作写入分割表 x extra functionality (experts only) 命令(输入 m 获取帮助):p 磁盘 /dev/mapper/centos-root:18.2 GB, 18249416704 字节,35643392 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0xd7827351 设备 Boot Start End Blocks Id System 命令(输入 m 获取帮助):q
4.mkfs(make filesystem)
mkfs [-t 文件系统格式] 装置文件名 -t :可以接文件系统格式,例:ext3, ext2, vfat 等(系统有支持才会生效) # 查看 mkfs 支持的文件格式 [root@localhost /]# mkfs + 2次Tab键 mkfs mkfs.cramfs mkfs.ext3 mkfs.minix mkfs.btrfs mkfs.ext2 mkfs.ext4 mkfs.xfs # 将分区 /dev/hdc6(可指定分区) 格式化为 ext3 文件系统 [root@localhost /]# mkfs -t ext3 /dev/hdc6 mke2fs 1.39 (29-May-2006) Filesystem label= <==这里指的是分割槽的名称(label) OS type: Linux Block size=4096 (log=2) <==block 的大小配置为 4K Fragment size=4096 (log=2) 251392 inodes, 502023 blocks <==由此配置决定的inode/block数量 25101 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=515899392 16 block groups 32768 blocks per group, 32768 fragments per group 15712 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 Writing inode tables: done Creating journal (8192 blocks): done <==有日志记录 Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 34 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. # 这样就创建了所需要的 Ext3 文件系统
- 磁盘分割完毕后进行文件系统的格式化
5.fsck(file system check)
fsck [-t 文件系统] [-ACay] 装置名称 选项: -t : 给定档案系统的型式,若在 /etc/fstab 中已有定义或 kernel 本身已支援的则不需加上此参数 -s : 依序一个一个地执行 fsck 的指令来检查 -A : 对/etc/fstab 中所有列出来的 分区(partition)做检查 -C : 显示完整的检查进度 -d : 打印出 e2fsck 的 debug 结果 -p : 同时有 -A 条件时,同时有多个 fsck 的检查一起执行 -R : 同时有 -A 条件时,省略 / 不检查 -V : 详细显示模式 -a : 如果检查有错则自动修复 -r : 如果检查有错则由使用者回答是否修复 -y : 选项指定检测每个文件是自动输入yes,在不确定那些是不正常的时候,可以执行 # fsck -y 全部检查修复 # 查看系统有多少文件系统支持的 fsck 命令 [root@localhost /]# fsck + 2次Tab键 fsck fsck.cramfs fsck.ext3 fsck.minix fsck.btrfs fsck.ext2 fsck.ext4 fsck.xfs # 强制检测 /dev/hdc6 分区 # 如果没有加上 -f 的选项,则由于这个文件系统不曾出现问题,检查的经过非常快速,若加上 -f 强制检查,才会一项一项的显示过程 [root@localhost /]# fsck -C -f -t ext3 /dev/hdc6 fsck 1.39 (29-May-2006) e2fsck 1.39 (29-May-2006) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information vbird_logical: 11/251968 files (9.1% non-contiguous), 36926/1004046 blocks
- 1.检查和维护不一致的文件系统
- 2.若系统掉电或磁盘发生问题,可利用
fsck
命令对文件系统进行检查
23.挂载及卸载
- 1.
Linux中
的根目录以外的文件要想被访问,需要将其关联到根目录下的某个目录来实现,这种关联操作就是挂载,这个目录就是挂载点,解除关联关系的过程称之为卸载- 2.挂载点的目录需要以下几个要求
- 1.目录事先存在,可以用mkdir命令新建目录
- 2.挂载点目录不可被其他进程使用到
- 3.挂载点下原有文件将被隐藏
6.mount
mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n] 装置文件名 挂载点 # 用默认的方式,将刚刚创建的 /dev/hdc6 挂载到 /mnt/hdc6 上面 [root@localhost /]# mkdir /mnt/hdc6 [root@localhost /]# mount /dev/hdc6 /mnt/hdc6 [root@localhost /]# df Filesystem 1K-blocks Used Available Use% Mounted on .....中间省略..... /dev/hdc6 1976312 42072 1833836 3% /mnt/hdc6
- 磁盘挂载
7.umount
umount [-fn] 装置文件名或挂载点 选项: -f :强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情况下 -n :不升级 /etc/mtab 情况下卸除 # 卸载/dev/hdc6 [root@localhost /]# umount /dev/hdc6
- 磁盘卸载
24.系统命令
1.systemctl
- 1.
systemctl
是一个systemd
工具,主要负责控制systemd
系统和服务管理器- 2.
systemd
是一个系统管理守护进程、工具和库的集合,用于取代System V
初始进程1.检查你的系统中是否安装有
systemd
并确定当前安装的版本[root@localhost /]# systemctl --version systemd 219 +PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT >+UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN # 安装了219版本的systemd
2.检查
systemd
和systemctl
的二进制文件和库文件的安装位置[root@localhost /]# whereis systemd systemd: /usr/lib/systemd /etc/systemd /usr/share/systemd >/usr/share/man/man1/systemd.1.gz [root@localhost /]# whereis systemctl systemctl: /usr/bin/systemctl /usr/share/man/man1/systemctl.1.gz
3.检查
systemd
是否运行[root@localhost /]# ps -ef | grep systemd root 1 0 0 2月05 ? 00:01:21 /usr/lib/systemd/systemd -->switched-root --system --deserialize 22 root 462 1 0 2月05 ? 00:00:15 /usr/lib/systemd/systemd-journald root 490 1 0 2月05 ? 00:00:00 /usr/lib/systemd/systemd-udevd root 626 1 0 2月05 ? 00:00:03 /usr/lib/systemd/systemd-logind dbus 634 1 0 2月05 ? 00:00:01 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation root 40156 22152 0 02:12 pts/0 00:00:00 grep --color=auto systemd # systemd是作为父进程(PID=1)运行的
4.分析
systemd
启动进程[root@localhost /]# systemd-analyze Startup finished in 930ms (kernel) + 5.071s (initrd) + 19.845s (userspace) = >25.847s
5.分析启动时各个进程花费的时间
6.分析启动时的关键链
7.列出所有可用单元(Systemctl接受服务(.service),挂载点(.mount),套接口(.socket)和设备(.device)作为单元)
8.列出所有运行中单元
8.列出所有失败单元
9.检查某个单元是否启用
10.列出所有服务(包括启用的和禁用的)
11.启动、重启、停止、重载服务以及检查服务状态# systemctl start httpd.service # systemctl restart httpd.service # systemctl stop httpd.service # systemctl reload httpd.service # systemctl status httpd.service # systemctl的start,restart,stop和reload不会从终端获取到任何输出内容,只有status命令可以打印输出
12.激活服务并在启动时启用或禁用服务(即系统启动时自动启动服务)
# systemctl is-active httpd.service # systemctl enable httpd.service # systemctl disable httpd.service
13.屏蔽(让它不能启动)或显示服务
# systemctl mask httpd.service # systemctl unmask httpd.service
14.使用
systemctl
命令杀死服务# systemctl kill httpd # systemctl status httpd
15.列出所有系统挂载点
16.挂载、卸载、重新挂载、重载系统挂载点并检查系统中挂载点状态# systemctl start tmp.mount # systemctl stop tmp.mount # systemctl restart tmp.mount # systemctl reload tmp.mount # systemctl status tmp.mount
17.启动时激活、启用或禁用挂载点(系统启动时自动挂载)
# systemctl is-active tmp.mount # systemctl enable tmp.mount # systemctl disable tmp.mount
18.屏蔽(让它不能启用)或可见挂载点
# systemctl mask tmp.mount # systemctl unmask tmp.mount
其余可参考:
https://linux/article-5926-1.html
或https://wwwblogs/aaronLinux/p/6861425.htm
l
2.service
- 1.服务(
service
) 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求(mysqld
,sshd
、防火墙等),因此又称为守护进程- 2.centOS7.0 后很多服务不再使用
service
,而是systemctl
- 3.
service
指令管理的服务在/etc/init.d
查看[root@localhost ~]# service 服务名 start|stop|restart|status start:启动服务; stop:停止服务; restart:重启服务; status: 查看服务状态;
3.source
source filename 或 . filename
- 1.使当前
shell
读入路径为filepath
的shell
文件并依次执行文件中的所有语句- 2.通常用于重新执行刚修改的初始化文件,使之立即生效
- 3.该命令可以用命令
.
来替代(相同含义)- 4.
source filename
与sh filename
及./filename
执行脚本的区别
- 1.当shell脚本具有可执行权限时,用
sh filename
与./filename
执行脚本没有区别;./filename
是因为当前目录没有在环境变量的PATH
中,所有.
是用来表示当前目录的- 2.
sh filename
重新建立一个子shell
,在子shell
中执行脚本里面的语句,该子shell
继承父shell
的环境变量,但子shell
新建的、改变的变量不会被带回父shell- 3.
source filename
其实只是读取脚本里面的语句依次在当前shell
执行,没有建立新的子shell
;脚本里面所有新建、改变变量的语句都会保存在当前shell
4.make
make [选项] make all:编译程序、库、文档等(等同于make) make install:安装已经编译好的程序,复制文件树中到文件到指定的位置 make unistall:卸载已经安装的程序 make clean:删除由make命令产生的文件 make distclean:删除由./configure产生的文件 make check:测试刚刚编译的软件(某些程序可能不支持) make installcheck:检查安装的库和程序(某些程序可能不支持) make dist:重新打包成packname-version.tar.gz # 一般操作流程: 1、解压缩 tar zxf xxxx.tgz 2、配置 cd xxxx ./configure 3、编译 make 4、安装 make install 5、卸载 make uninstall
- 1.
make
是用来编译的
5.nohup (no hang up)
nohup Command [ Arg … ] [ & ] Command:要执行的命令 Arg:一些参数,可以指定输出文件 &:让命令在后台执行,终端退出后命令仍旧执行 # 后台执行 root 目录下的 runoob.sh 脚本 [root@localhost ~]# nohup /root/runoob.sh & # 后台执行 root 目录下的 text.jar,并重定向输入到 text.log 文件 nohup java -jar /root/text.jar > text.log 2>&1 &
- 1.用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行
- 2.默认情况下(非重定向时),会输出一个名叫
nohup.out
的文件到当前目录下,如果当前目录的nohup.out
文件不可写,输出重定向到$HOME/nohup.out
文件中- 3.终端如果看到以下输出说明运行成功:
appending output to nohup.out
- 4.如果要停止运行,需要使用以下命令查找到
nohup
运行脚本的PID
,然后使用kill
命令来删除ps -aux | grep "runoob.sh"
或ps -ef | grep "runoob.sh"
- 5.
2>&1
:>&
是合并的意思,将标准错误 2 重定向到标准输出 1 ,标准输出 1 再被重定向输入到text.log
文件中
- 0 –
stdin (standard input,标准输入)
- 1 –
stdout (standard output,标准输出)
- 2 –
stderr (standard error,标准错误输出)
6.uname(unix name)
uname [-amnrsv][--help][--version] -a或--all 显示全部的信息。 -m或--machine 显示电脑类型。 -n或--nodename 显示在网络上的主机名称。 -r或--release 显示操作系统的发行编号。 -s或--sysname 显示操作系统名称。 -v 显示操作系统的版本。 --help 显示帮助。 --version 显示版本信息。 # 查看linux系统版本 uname -a Linux localhost.localdomain 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux # 显示计算机类型 uname -m
7. su(switch user)
su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]] -m -p 或 --preserve-environment :执行 su 时不改变环境变数 -c command 或 --command=command :变更为帐号为 USER 的使用者并执行指令(command)后再变回原来使用者 -s shell 或 --shell=shell :指定要执行的 shell (bash csh tcsh 等),预设值为 /etc/passwd 内的该使用者(USER) shell --help :显示说明文件 --version :显示版本资讯 - -l 或 --login :重新 login 为该使用者,大部份环境变数(HOME SHELL USER等等)都以该使用者(USER)为主,并且工作目录改变,如果没有指定 USER ,内定是 root USER :欲变更的使用者帐号 ARG :传入新的 shell 参数 # 变更帐号为 root 并在执行 ls 指令后退出变回原使用者 su -c ls root # 变更帐号为 root 并传入 -f 参数给新执行的 shell su root -f # 变更帐号为 wd 并改变工作目录至 wd 的家目录(home dir) su - wd
- 变更为其他使用者的身份
8.sudo(super user do)
-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 ) # 以root权限执行上一条命令 sudo !! # 以特定用户身份进行编辑文本 sudo -u wd vi index.html
- 以系统管理者的身份执行指令
8. exit
- 1.退出目前的
shell
- 2.执行
exit
可使shell
以指定的状态值退出- 3.若不设置状态值参数,则
shell
以预设值退出;状态值0
代表执行成功,其他值代表执行失败
9. which
which [文件...] -n<文件名长度> 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名 -p<文件名长度> 与-n参数相同,但此处的<文件名长度>包括了文件的路径 -w 指定输出时栏位的宽度 -V 显示版本信息 # 查看指令nginx的绝对路径 [root@localhost home]# which nginx /usr/sbin/nginx
- 1.用于查找指令
- 2.
which
指令会在环境变量$PATH
设置的目录里查找符合条件的指令
10.whereis
whereis [-bfmsu][-B <目录>...][-M <目录>...][-S <目录>...][文件...] -b :只查找二进制文件 -B<目录> :只在设置的目录下查找二进制文件 -f :不显示文件名前的路径名称 -m :只查找说明文件 -M<目录> :只在设置的目录下查找说明文件 -s :只查找原始代码文件 -S<目录> :只在设置的目录下查找原始代码文件 -u :查找不包含指定类型的文件 [root@localhost home]# whereis nginx nginx: /usr/sbin/nginx /usr/lib64/nginx /etc/nginx /usr/share/nginx /usr/share/man/man8/nginx.8.gz # 以上输出信息从左至右分别为查询的程序名、bash路径、bash的man 手册页路径 # 查询二进制文件 [root@localhost home]# whereis -b nginx nginx: /usr/sbin/nginx /usr/lib64/nginx /etc/nginx /usr/share/nginx
11.whatis
whatis 命令/系统调用/库函数/特殊文件名 [root@localhost /]# whatis ls ls (1) - list directory contents
- 用于查询一个命令执行什么功能,并将查询结果打印到终端上,相当于
man -f
12. bash
bash
是linux
下默认的shell
13. sh
sh
是unix
下默认的shell
14.alias
alias[别名]=[指令名称] [root@localhost /]# alias lx=ls [root@localhost /]# lx bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
- 1.用于设置指令的别名,若不加任何参数,则列出目前所有的别名设置
- 2.
alias
的仅用于该次登入的操作,若要每次登入自动设好别名,可在.profile
或.cshrc
中设定指令的别名
15.fg
- 重新启动前台被中断的任务
16.bg
- 把被中断的任务放在后台执行
Linux快捷键
- 1.直接点击两下
Tab
键:查看所有的命令- 2.
vi/vim
+目录+点击两下Tab
键:查看当前文件夹下的内容- 3.
cd
+-
:返回前一个目录
VMware
1.安装VMware
- 1.下载安装包
- 2.按步骤安装
2.创建新的虚拟机
3.启动CentOS 7
- 1.配置语言
- 2.配置安装位置
- 3.配置网络
- 4.编辑虚拟网络编辑器的
VMnet8-NAT
设置
- 说明
- 1.
桥接模式
:虚拟机直接连接路由器,相当于把虚拟机变成一台完全独立的计算机,会占用局域网本网段的一个IP
地址,并且可以和网段内其他终端进行通信,相互访问- 2.
NAT模式
:NAT
模式与外界通话需要经过物理机(NAT
)转换,不会多占一个局域网IP
,默认情况下外部终端也无法直接访问虚拟机- 3.
仅主机模式(Host Only)
:仅主机模式不能上网,互联网局域网都不行,只能与物理机对话
4.网络配置
1.window下网络配置
- 1.自动获取
ip
地址
- 1.指所在的网络中有一台或多台
DHCP
服务器,DHCP
服务器负责给上网的机器分配ip地址- 2.
DHCP
服务器是自动为计算机分配IP地址和子网掩码的服务器- 3.
DHCP
(Dynamic Host Configure Protocol
,动态主机配置协议)- 2.手动配置
ip
地址
- 1.需要配置
ip
地址,子网掩码,默认网关- 2.子网掩码是用来识别该台机器的
- 3.默认网关指该电脑需要上网需要的第一个结构,一般指路由器
- 3.
DNS
服务器
- 1.
www.baidu
是域名,ip
才是唯一标识相应机器的地址,要访问某一个机器,需要ip
地址- 2.域名到
ip
的映射需要DNS
服务器
2.Linux下网络配置
1.网络配置文件
2.网卡配置文件
- 1.保存网卡的设备名,
IP
地址,子网掩码,默认网关等配置信息- 2.一块网卡对应一个配置文件
- 3.网卡配置文件在
CentOS7
中位于/etc/sysconfig/network-scripts
目录中ifcfg-网卡类型以及网卡的序号 例:ifcfg-ens33 , ifcfg-eno16777736
3.网卡配置解析
- 1.
vim
编辑网卡的配置vim /etc/sysconfig/network-scripts/ifcfg-eno16777736 vim /etc/sysconfig/network-scripts/ifcfg-lo vim /etc/sysconfig/network-scripts/ifcfg-ens33 [root@bogon network-scripts]# cat ifcfg-ens33 TYPE="Ethernet" #网卡类型(通常是Ethemet以太网) PROXY_METHOD="none" #代理方式:为关闭状态 BROWSER_ONLY="no" #只是浏览器:否 BOOTPROTO="dhcp" #网卡的引导协议【static:静态IP dhcp:动态IP none:不指定,不指定容易出现各种各样的网络受限】 DEFROUTE="yes" #默认路由 IPV4_FAILURE_FATAL="no" #是否开启IPV4致命错误检测 IPV6INIT="yes" #IPV6是否自动初始化:是(现在还未用到IPV6,不会有任何影响) IPV6_AUTOCONF="yes" #IPV6是否自动配置:是(现在还未用到IPV6,不会有任何影响) IPV6_DEFROUTE="yes" #IPV6是否自动配置:是(现在还未用到IPV6,不会有任何影响) IPV6_FAILURE_FATAL="no" #是否开启IPV6致命错误检测 IPV6_ADDR_GEN_MODE="stable-privacy" #IPV6地址生成模型 NAME="ens33" #网卡物理设备名称 UUID="a6167286-12aa-4419-91d8-a757aac6ccee" #通用唯一识别码,每一个网卡都会有,不能重复,否则两台linux机器只有一台可上网 DEVICE="ens33" #网卡设备名称,必须和‘NAME’值一样 ONBOOT="yes" #是否开机启动,要想网卡开机就启动或通过 `systemctl restart network`控制网卡,必须设置为 `yes` IPADDR=169.254.73.100 # 本机IP PREFIX=24 #子网掩码 GATEWAY=169.254.73.2 #默认网关 DNS="8.8.8.8" #DNS服务器 IPV6_PRIVACY="no"
- 2.注意:如果采用
dhcp
动态ip
策略,路由器会自动分配一个ip
(可能会改变),不需要手动配置ip
由虚拟机自动自配,只有设置为static
静态模式才需要手动配置虚拟机ip
4.网卡绑定多个IP地址
1.每个绑定的
IP
地址需要一个虚拟网卡,手动配置IP
地址需要设置static
静态策略才会生效IPADDR1=x.x.x.128 IP地址 PREFIX1=24 子网掩码 IPADDR2=x.x.x.154 IP地址 PREFIX2=24 子网掩码 # 注意: # 1.DNS服务器有两个通用的8.8.8.8和114.114.114.114
5.无法连接外网修复
方式一
[root@localhost ~]# ping www.baidu ping: www.baidu: Name or service not known # 1.静态配置的ip只有一个,而且属性为IPADDR # 2.与PREFIX的属性无关 # 3.GATEWAY属性需要网络设置的网关IP一致 # 4.DNS服务器可以配置为8.8.8.8或114.114.114.114且需要配置/etc/resolv.conf文件 # 注意上述参数都不需要带双引号
方式二
# 1.VMware Workstation中点开编辑,找到虚拟网络编辑器 # 2.点击还原默认设置(耐心等待它卸载完又自动安装) # 3.cmd中通过ipconfig查看VMnet8的ipv4前三位和虚拟机中ip前三位一致
6.手动设置修改生效
- 设置生效的方式有三种
# 方法1:(针对NetworkManager服务) ifdown 网卡接口设备名 #禁用网卡 (ifdown不能在远程连接的情况下执行,ifdown禁用网卡后,远程客户端就连接不到本台机器) ifup 网卡接口设备 #启用网卡 # 方法2:(nmcli网络管理工具) nmcli connection reload #重新装载 nmcli device disconnect 网卡接口设置名 #断开连接 nmcli con up ifname 网卡接口设备 # 建立连接 # 方法3:(针对network服务,推荐) systemctl restart network.service #重启网卡 或 service network restart
7.修改主机名
- 1.网络中主机名具有唯一性
- 2.查看主机名:
cat /etc/hostname
- 3.临时设置/更改主机名:
hostname 新主机名
- 4.永久性修改主机名:
Hostnamectl set-hostname 新主机名
8.使用ip命令配置网络
- 1.使用
ip
命令查看
- 1.
1:
代表第一块网卡,网卡设备名是lo
,第一块设备是一个回送设备(loopback
),自己访问自己,自己给自己发送数据的一个设备,inet
后面跟的是ip
地址,ip
地址是127.0.0.1
- 2.
2:
代表第二块网卡,网卡设备名是ens33
,第二块设置是一个广播设备(broadcast),ip
地址是192.168.216.131
,link/ether
跟的是它的MAC
地址- 2.使用
ip
命令更改IP
网络地址
- 1.
ip
命令配置的网络是临时生效,如果重启网卡或重启连接或重启机器就会无效ip addr [add|del] <CIDR形式的IP地址> dev <网络接口>
- 2.修改网络接口的
IP
ip addr del 192.168.140.3/24 dev 网卡设备名 #删除网卡设备,临时并且即时生效 ip addr add 192.168.1.3/24 dev 网卡设备名 # 添加网卡设备,临时并且即时生效
- 3.使用
ip
命令设置静态路由ip route [add|del] default | <主机地址> | <网络地址> via <网关地址> [dev <流出设备接口>]
ip route add 192.0.2.1 via 10.0.0.1 dev ens33 #添加静态路由 ip route del 192.0.2.1 via 10.0.0.1 dev ens33 #删除静态路由 ip route add default via 10.0.0.1 dev ens33 #添加默认静态路由 ip route del default via 10.0.0.1 dev ens33 #删除默认静态路由
9.测试本机和目标主机连通性ping
ping [参数] 主机名或IP地址 # c count:共发出count次信息,不加此项,则发无限次信息,按Ctrl+C停止 # -s 字节数:指定发送的报文的大小,以字节B为单位,预设值是56B,加上8字节的ICMP头,共是64B # -W timeout:等待接收回应报文的时间间隔,以秒为单位
ping -c 4 192.168.0.1 ping -c 10 -s 2048 192.168.0.1
10.跟踪显示从当前主机到指定主机所经过路径traceroute
traceroute [主机名称或IP地址]
traceroute www.sina
5.Linux快照
- 快照:相当于
windows
系统中的备份
6.Linux克隆
- 1.克隆:根据现有机器复制出一台和原机器配置及状态一致的机器
- 2.注意: 必须是关机或者关机的快照才可以克隆
1.克隆向导
2.修改克隆机IP
- 1.编辑网络配置
vi /etc/sysconfig/network-scripts/ifcfg-ens33
- 2.修改IP地址
IPADDR="192.168.73.101"
- 重启网络服务
systemctl restart network
3.正确的网络配置
- 如果虚拟机无法连接网络,可以根据以下步骤修改
7.远程连接工具MobaXterm
- 下载第一个免安装版,然后通过
ssh session
输入虚拟机ip
即可连接
8.Linux目录结构
1.目录结构图
2.目录说明
/ 根目录 bin 存放用户二进制文件,Binaries (二进制) boot 存放内核引导配置文件 dev 存放设备文件,Devices (设备) etc 存放系统配置文件,Etcetera (等等) home 普通用户主目录 lib 动态共享库,Library(库) lost+found 文件系统恢复时的恢复文件 media 可卸载存储介质挂载点 mnt 文件系统临时挂载点 opt 附加的应用程序包 proc 系统内存的映射目录,提供内核与进程信息,Processes(进程) root root超级用户主目录 sbin 存放系统二进制文件,Superuser Binaries (超级用户的二进制文件) srv 存放服务相关数据 sys sys 虚拟文件系统挂载点 tmp 存放临时文件,Temporary (临时) usr 存放用户应用程序 ,Unix Shared Resources(Unix共享资源) var 存放邮件、系统日志等变化文件,Variable (变量) ~ 表示当前登录用户的用户目录(root账户为/root目录,普通用户为/home/账户名)
3.目录路径
- 绝对路径
- 从根目录开头的路径
/
表示根目录- 相对路径
- 从当前目录开始定位
.
表示当前目录(修饰文件或目录表示隐藏文件),./
表示在当前目录下..
表示当前目录的上一目录,../
表示在上一级目录下~
表示当前登录用户的用户目录
9.Linux启动流程
1.内核的引导
- 1.计算机打开电源后,首先是
BIOS(基本输入/输出系统)
开机自检,按照BIOS
中的设置l来启动设备(通常是硬盘)- 2.操作系统接管硬件以后,首先读入
/boot
目录下的内核文件
2.运行 init
- 1.
init
进程是系统所有进程的起点,没有这个进程,系统中任何进程都不会启动- 2.
init
程序首先是需要读取配置文件 /etc/inittab
3.系统初始化
4.建立终端
5.虚拟控制台
- 1.启动Linux系统后,系统提供了多个(默认为6个)虚拟控制台
- 2.每个控制台独立使用互不影响,使用快捷键
<Alt+F1>~<Alt+F6>
切换
5.用户登录系统
1.账号切换
- 1.
Linux
系统中有两类用户:普通用户和超级用户(root
)- 2.超级用户(
root
)的提示符是#
;普通用户的提示符是$
- 3.使用
su -
命令(-表示同时切换用户工作环境)切换为超级用户身份,当执行系统管理类命令时再使用exit
命令退回普通用户身份
2.注销登录
- 1.在当前的登录终端输入
logout
命令或使用<Ctrl+D>
快捷键- 2.Linux系统严格区分大小写
10.Linux环境变量
- 登入系统时候获得一个
shell
进程时,其读取环境变量顺序如下
- 说明:
- 1.首先读取全局环境变量文件
/etc/profile
- 2.然后根据其内容读取额外的配置文档
/etc/profile.d
或/etc/inputrc
- 3.根据不同帐号,读取
~/.bash_profile
- 4.读取失败则会读取
~/.bash_login
- 5.再次失败则读取
~/.profile
- 6.最后根据用户帐号读取
~/.bashrc
- 注意:
- 1.
~/.profile
和~/.bashrc
区别是~/.profile
只能登入的时候执行一次;~/.bashrc
每次 shell script 的时候都会执行一次- 2.
export
命令显示当前系统定义的所有环境变量(其中PATH
变量定义了运行命令的查找路径,以:
分割不同的路径)- 3.
echo $PATH
命令输出当前的PATH
环境变量的值
1.系统变量
/etc
目录下的bashrc
、profile
、environment
配置文件
- 1.
profile
文件用于设置系统级的环境变量和启动程序
- 1.该文件下的配置会对所有用户生效(不建议在
/etc/profile
文件中添加环境变量)- 2.当用户登录(
login
)时,文件会被执行,并从/etc/profile.d
目录的配置文件中查找shell
设置- 3.添加方式:
export JAVA_HOME=/usr/java/default
;其中;
可用可不用,一个变量名可对应多个变量值,多个变量值之间需要用:
分隔- 4.添加环境变量后,需要重新登录才能生效,也可以使用
source
命令强制立即生效source /etc/profile
- 5.查看是否生效:
echo $变量名
- 2.
bashrc
文件用于配置函数或别名
- 1.该文件对所有用户生效
- 2.该文件只会对指定的
shell
类型起作用,且只会被bash shell
调用- 3.
environment
文件为空
2.用户变量
用户目录(
root
/普通用户/~)下的.bashrc
、.bash_profile
配置文件,注意该文件是隐藏文件
- 1.
.bashrc
用于配置函数或别名
- 1.该文件仅对当前用户生效
- 2.该文件只会对指定的
shell
类型起作用,且只会被bash shell
调用- 2.
.bash_profile
用于配置环境变量和启动程序
- 1.该文件仅对当前用户生效
3.设置环境变量
- 1.执行
shell
脚本时,有时需要加上./
才可以正确的运行这个脚本(./hello.sh
),中间不能有空格- 2.终端是在当前目录,且当前目录中有要执行的文件,但终端无法找到,需要手动指定文件的相对或绝对路径
- 3.
Linux
中,.
表示当前工作目录,/
是 Linux 中的路径分隔符- 4.因为工作目录不包含在环境变量
$PATH
中,所以需要通过./
指定当前工作目录- 5.命令
echo $PATH
可以查看当前的环境变量- 6.
Linux
看命令具体的位置,可以使用which
命令- 7.自定义命令如果不想添加路径,可以把该命令所在路径添加进环境变量
1.临时生效
- 终端中输入:
export PATH=$PATH:/具体路径
- 生效时间:立即生效
- 生效期限:当前终端有效,窗口关闭后无效
- 生效范围:仅对当前用户有效
- 配置的环境变量中需要加上原来的配置,即
$PATH
部分,避免覆盖原来配置2.用户变量
- 1.修改配置文件
.bashrc
vim ~/.bashrc # 在最后一行加上 export PATH=$PATH:/具体路径
- 生效时间:使用相同的用户打开新的终端时生效,或者手动
source ~/.bashrc
生效- 生效期限:永久有效
- 生效范围:仅对当前用户有效
- 如果有后续的环境变量加载文件覆盖了
PATH
定义,则可能不生效- 2.修改配置文件.bash_profile
vim ~/.bash_profile # 在最后一行加上 export PATH=$PATH:/具体路径
- 生效时间:使用相同的用户打开新的终端时生效,或者手动
source ~/.bash_profile
生效- 生效期限:永久有效
- 生效范围:仅对当前用户有效
3.系统变量
- 1.修改配置文件
/etc/bashrc
# 如果/etc/bashrc文件不可编辑,需要修改为可编辑 chmod -v u+w /etc/bashrc vim /etc/bashrc # 在最后一行加上 export PATH=$PATH:/具体路径
- 生效时间:新开终端生效,或者手动
source /etc/bashrc
生效- 生效期限:永久有效
- 生效范围:对所有用户有效
- 2.修改配置文件
/etc/profile
# 如果/etc/profile文件不可编辑,需要修改为可编辑 chmod -v u+w /etc/profile vim /etc/profile # 在最后一行加上 export PATH=$PATH:/具体路径
- 生效时间:新开终端生效,或者手动
source /etc/profile
生效- 生效期限:永久有效
- 生效范围:对所有用户有效
- 3.修改配置文件
/etc/environment
# 如果/etc/bashrc文件不可编辑,需要修改为可编辑 chmod -v u+w /etc/environment vim /etc/profile # 在最后一行加上 export PATH=$PATH:/home/uusama/mysql/bin
- 生效时间:新开终端生效,或者手动
source /etc/environment
生效- 生效期限:永久有效
- 生效范围:对所有用户有效
Linux命令
1.帮助命令
1.help
[root@localhost /]# cp --help
- 1.查看命令的信息和参数
- 2.只能显示
shell
内部的命令信息- 3.
help
命令第一部分是概述,第二部分是参数详解,第三部分是说明和注意
# 使用语法 Usage: cp [OPTION]... [-T] SOURCE DEST or: cp [OPTION]... SOURCE... DIRECTORY or: cp [OPTION]... -t DIRECTORY SOURCE... # 实现功能 Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY. # 长参和短参是一样的效果 Mandatory arguments to long options are mandatory for short options too.
2.man
[root@localhost /]# man help
- 1.查看命令的信息和参数
- 2.
man
是在程序安装时安装的帮助文档- 3.程序的man帮助文档可能存在多个
# man文档的序号 CP(1) User Commands CP(1) # 名称和内容 NAME cp - copy files and directories # 概要 SYNOPSIS cp [OPTION]... [-T] SOURCE DEST cp [OPTION]... SOURCE... DIRECTORY cp [OPTION]... -t DIRECTORY SOURCE... # 描述 DESCRIPTION Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY. Mandatory arguments to long options are mandatory for short options > too.
3.info
[root@localhost /]# info help
info
指令是man
指令的详细内容
2.开关机命令
1.halt
# 关机,实际上是调用shutdown -H命令 [root@localhost /]# halt
2.reboot
# 重启,实际上是调用shutdown -r命令 [root@localhost /]# reboot
3.shutdown
# 用于安全关闭Linux系统 [root@localhost /]# shutdown now
4.poweroff
# 关闭计算器并切断电源,实际上是调用shutdown -P命令 [root@localhost /]# shutdown now
4.init
- 1.
init
是所有进程的祖先,其进程号始终为1- 2.
init
用于切换系统的运行级别,切换是立即完成的- 3.
init 0
命令用于立即将系统运行级别切换为0,即关机- 4.
init 6
命令用于将系统运行级别切换为6,即重新启动。
3.输出命令
1.echo
1.显示普通字符串
echo "It is a test" 双引号可省略 echo It is a test
2.显示转义字符
echo "\"It is a test\"" 双引号可省略 echo \"It is a test\"
3.显示变量
#!/bin/sh # read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量name read name echo "$name It is a test"
[root@www ~]# sh test.sh OK #标准输入 OK It is a test #输出
4.显示换行
echo -e "OK! \n" # -e 开启转义,echo默认换行 echo "It is a test"
OK! It is a test
5.显示不换行
#!/bin/sh echo -e "OK! \c" # -e 开启转义 \c 不换行 echo "It is a test"
OK! It is a test
6.显示结果定向至文件
echo "It is a test" > myfile
7.原样输出字符串,不进行转义或取变量(用单引号)
echo '$name\"'
$name\"
8.显示命令执行结果
echo `date` 注意: 这里使用的是反引号 `, 而不是单引号 '
Thu Jul 24 10:08:46 CST 2014
2.printf
转义字符 说明 \a 警告字符,通常为ASCII的BEL字符 \b 后退 \c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略 \f 换页(formfeed) \n 换行 \r 回车(Carriage return) \t 水平制表符 \v 垂直制表符 \ 一个字面上的反斜杠字符 \ddd 表示1到3位数八进制值的字符。仅在格式字符串中有效 \0ddd 表示1到3位的八进制值字符 printf format-string [arguments...]
format-string
: 为格式控制字符串arguments
: 为参数列表
1.格式化输出
#!/bin/bash printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543 printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876
姓名 性别 体重kg 郭靖 男 66.12 杨过 男 48.65 郭芙 女 47.99
#!/bin/bash # author:菜鸟教程 # url:www.runoob # format-string为双引号 printf "%d %s\n" 1 "abc" # 单引号与双引号效果一样 printf '%d %s\n' 1 "abc" # 没有引号也可以输出 printf %s abcdef # 格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用 printf %s abc def printf "%s\n" abc def printf "%s %s %s\n" a b c d e f g h i j # 如果没有 arguments,那么 %s 用空字符串代替,%d 用 0 代替 printf "%s and %d \n"
1 abc 1 abc abcdefabcdefabc def a b c d e f g h i j and 0
$ printf "a string, no processing:<%s>\n" "A\nB" a string, no processing:<A\nB> $ printf "a string, no processing:<%b>\n" "A\nB" a string, no processing:<A B> $ printf "www.runoob \a" www.runoob $ #不换行
- 1.
%s %c %d %f
都是格式替代符- 2.
%s
输出一个字符串- 3.
%d
整型输出- 4.
%c
输出一个字符- 5.
%f
输出实数,以小数形式输出- 6.
%-10s
指一个宽度为 10 个字符(- 表示左对齐,没有则表示右对齐),任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来- 7.
%-4.2f
指格式化为小数,其中 .2 指保留2位小数
4.网络命令
1.ping
# 检测出网络连通情况 [root@localhost /]# ping 172.20.10.2 C:\Users\32929>ping 192.168.73.100
2.dhclient
# 动态分配一个ip,临时生效 [root@localhost /]# dhclient
3.ip
# 显示ip信息,其中address可以任意简写 例:a,ad,add,addr,addre,addres [root@localhost /]# ip address
4.ifconfig
# centos 7之前版本查看ip的命令,已经遗弃 [root@localhost /]# ifconfig -bash: ifconfig: 未找到命令
5stat
netstat [选项] 选项: -a或–all :显示所有连线中的Socket -A<网络类型>或–<网络类型> :列出该网络类型连线中的相关地址 -c或–continuous :持续列出网络状态 -C或–cache :显示路由器配置的快取信息 -e或–extend :显示网络其他相关信息 -F或–fib :显示FIB -g或–groups :显示多重广播功能群组组员名单 -h或–help :在线帮助 -i或–interfaces :显示网络界面信息表单 -l或–listening :显示监控中的服务器的Socket -M或–masquerade :显示伪装的网络连线 -n或–numeric :直接使用ip地址,而不通过域名服务器 -N或–netlink或–symbolic :显示网络硬件外围设备的符号连接名称 -o或–timers :显示计时器 -p或–programs :显示正在使用Socket的程序识别码和程序名称 -r或–route :显示Routing Table -s或–statistice :显示网络工作信息统计表 -t或–tcp :显示TCP传输协议的连线状况 -u或–udp :显示UDP传输协议的连线状况 -v或–verbose :显示指令执行过程 -V或–version :显示版本信息 -w或–raw :显示RAW传输协议的连线状况 -x或–unix :此参数的效果和指定"-A unix"参数相同 –ip或–inet :此参数的效果和指定"-A inet"参数相同 # 列出所有端口 netstat -a # 列出所有TCP端口 netstat -at # 列出所有UDP端口 netstat -au # 列出所有处于监听状态的 Sockets netstat -l # 列出所有监听tcp端口 netstat -lt # 列出所有监听udp端口 netstat -lu # 列出所有监听UNIX端口 netstat -lx # 输出中显示 PID 和进程名称 netstat -pt # 直接显示ip地址和端口号 netstat -an # 持续输出netstat信息,每隔一秒输出网络信息 netstat -c # 显示核心路由信息 netstat -r # 找出程序运行的端口 netstat -tunlp | grep ssh # 找出运行在指定端口的进程 netstat -an | grep ":80" 或 netstat -tunlp | grep ":3306" # 通过端口找进程ID netstat -tunlp | grep 3306 | awk '{print $7}' | cut -d/ -f1 # 显示网络接口列表 netstat -i # 统计TCP各种状态列 netstat -n | awk '/^tcp/{++S[$NF]}END{for(i in S) print i,S[i]}'
- 1.显示正在侦听的所有
TCP
或UDP
端口,包括使用端口和套接字状态的服务,一般用于检验本机各端口的网络连接情况- 2.
TCP
连接状态详解
- 1.
LISTEN
: 侦听来自远方的TCP端口的连接请求- 2.
SYN-SENT
: 再发送连接请求后等待匹配的连接请求- 3.
SYN-RECEIVED
:再收到和发送一个连接请求后等待对方对连接请求的确认- 4.
ESTABLISHED
: 代表一个打开的连接- 5.
FIN-WAIT-1
: 等待远程TCP连接中断请求,或先前的连接中断请求的确认- 6.
FIN-WAIT-2
: 从远程TCP等待连接中断请求- 7.
CLOSE-WAIT
: 等待从本地用户发来的连接中断请求- 8.
CLOSING
: 等待远程TCP对连接中断的确认- 9.
LAST-ACK
: 等待原来的发向远程TCP的连接中断请求的确认- 10.
TIME-WAIT
: 等待足够的时间以确保远程TCP接收到连接中断请求的确认- 11.
CLOSED
: 没有任何连接状态
6.nc
nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>][-s<来源位址>][-v...][-w<超时秒数>][主机名称][通信端口...] -g<网关> 设置路由器跃程通信网关,最多可设置8个 -G<指向器数目> 设置来源路由指向器,其数值为4的倍数 -h 在线帮助 -i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口 -l 使用监听模式,管控传入的资料 -n 直接使用IP地址,而不通过域名服务器 -o<输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存 -p<通信端口> 设置本地主机使用的通信端口 -r 乱数指定本地与远端主机的通信端口 -s<来源位址> 设置本地主机送出数据包的IP地址 -u 使用UDP传输协议 -v 显示指令执行过程 -w<超时秒数> 设置等待连线的时间 -z 使用0输入/输出模式,只在扫描通信端口时使用
监听端口号并向指定端口发送字符串消息数据 # 下载netcat,用于监听端口 yum install nc # 下载net-tools,用于查看端口号使用情况 yum install -y net-tools # 下载telnet,用于向端口号发送消息 yum install -y telnet # 监听端口 nc -lk 9999 # 使用netstat -anpt 查看监听状态 netstat -anpt | grep 9999 # 发送数据 telnet ip 9999 # 右边nc自动接收
- 用于设置路由器,监听端口
7.ss
ss [选项] 选项: -a, --all 列出所有的socket -h, --help 帮助信息 -V, --version 展示版本信息 -n, --numeric 不解析服务名称 -r, --resolve 解析主机名 -l, --listening 显示监听的socket,列出所有打开的网络连接端口 -o, --options 显示定时器信息 -e, --extended 显示socket的详细信息 -m, --memory 显示socket内存使用情况 -p, --processes 显示使用socket的进程 -i, --info 显示内部TCP信息 -s, --summary 显示socket使用情况摘要 -4, --ipv4 只显示IP版本4的socket -6, --ipv6 只显示IP版本6的socket -0, --packet 显示包socket -t, --tcp 只显示TCP类型的socket -u, --udp 只显示UDP类型的socket -d, --dccp 只显示DCCP类型的socket -w, --raw 只显示RAW类型的socket -x, --unix 只显示Unix域socket -f, --family=FAMILY 显示FAMILY类型的socket -A, --query=QUERY, --socket=QUERY QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY] -D, --diag=FILE 将TCP套接字的原始信息转储到FILE -F, --filter=FILE 从文件中读取过滤器信息 FILTER := [ state TCP-STATE ] [ EXPRESSION ] 例: ss -nlt
- 1.
ss(socket statistics)
:获取socket
统计信息,内容类似netstat
,但更详细更快
8.curl
5.日期命令
1.date
# 显示当前系统时间 [root@localhost ~]# date 2022年 10月 21日 星期五 19:27:26 CST # 显示年月日时分秒 [root@localhost ~]# date '+%F %T' 2022-10-21 19:29:43
6.清屏命令
1.clear
# 本质上只是让终端显示页向后翻了一页,向上滚动屏幕还可以看到之前的操作信息 [root@localhost /]# clear # 快捷操作 ctrl+l
2.reset
# 完全刷新终端屏幕,之前的终端输入操作信息将都会被清空 [root@localhost /]# clear
7.终止命令
- 1.
Ctrl+c
和Ctrl+z
都是中断命令- 2.
ctrl+c
是强制中断程序的执行(终止)- 3.
ctrl+z
是将任务中止(暂停),- 4.可以使用
fg/bg
操作继续前台或后台的任务- 5.
fg
命令重新启动前台被中断的任务- 6.
bg
命令把被中断的任务放在后台执行- 7.
ctrl+d
不是发送信号,而是表示一个特殊的二进制值,表示EOF
- 8.
shell
中,ctrl+d
表示退出当前shell.
8.查看历史命令
1.上下箭头
- 通过上下箭头即可查看历史命令
2.history
- 1.查看历史命令
- 2.历史命令一般存放在
~/.bash_history
中- 3.只有当正常登陆退出之后系统才会将缓存中的命令写入文件
- 4.历史命令最多可以保存1000条,可以在
/etc/profile
中进行修改,修改后执行source /etc/profile
使环境变量生效- 5.使用“!n”重复执行第
n
条历史命令- 6.使用“!!”重复执行上一条命令
- 7.使用“!字串”重复执行最后一条以该字串开头的命令
9.自动补全命令
- 通过
Tab
键可以自动补全已存在内容
10.目录命令
1.pwd(print work directory)
# 查看当前目录 [root@localhost home]# pwd /home # -P :显示出确实的路径,而非使用链接 (link) 路径 # 加上 -P 的选项后,会不显示链接,而显示正确的完整路径
2.cd(change directory)
# 切换目录 [root@localhost home]# cd /opt
3.ls(list files)
# 显示当前目录下的组成 [root@localhost home]# ls test2.txt test.txt # 显示目录本身(.表示当前目录) [root@localhost ~]# ls -d . # 显示以**开头的所有文件(.表示隐藏文件) [root@localhost ~]# ls -d .* . .bash_history .bash_profile .cshrc .oracle_jre_usage .tcshrc .. .bash_logout .bashrc .mysql_history .rediscli_history .viminfo # 显示隐藏文件 [root@localhost home]# ls -a . .. test2.txt test.txt # 显示文件的详细信息 [root@localhost home]# ls -l 总用量 8 -rw-r--r--. 1 root root 15 10月 22 12:35 test2.txt -rw-r--r--. 1 root root 836 10月 22 12:59 test.txt # 组合使用 [root@localhost home]# ls -al 总用量 8 drwxr-xr-x. 2 root root 39 10月 22 12:59 . dr-xr-xr-x. 17 root root 224 10月 21 18:13 .. -rw-r--r--. 1 root root 15 10月 22 12:35 test2.txt -rw-r--r--. 1 root root 836 10月 22 12:59 test.txt # 显示指定目录中的文件 [root@localhost home]# ls /home test2.txt test.txt
4.mkdir(make directory)
- 创建目录
[root@localhost home]# mkdir test [root@localhost home]# ls test test2.txt test.txt # 级联创建目录 [root@localhost home]# mkdir -p test/spring/springboot # 创建目录并设置权限 [root@localhost home]mkdir -m 711 test2
5.rmdir(remove directory)
- 1.删除一个空的目录(
-p
:从该目录起,一次删除多级空目录)- 2.
rmdir
仅能删除空的目录,你可以使用rm
命令来删除非空目录
6.tree
tree [-aACdDfFgilnNpqstux][-I <范本样式>][-P <范本样式>][目录...] -a 显示所有文件和目录。 -A 使用ASNI绘图字符显示树状图而非以ASCII字符组合。 -C 在文件和目录清单加上色彩,便于区分各种类型。 -d 显示目录名称而非内容。 -D 列出文件或目录的更改时间。 -f 在每个文件或目录之前,显示完整的相对路径名称。 -F 在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","=","@","|"号。 -g 列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码。 -i 不以阶梯状列出文件或目录名称。 -L level 限制目录显示层级。 -l 如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录。 -n 不在文件和目录清单加上色彩。 -N 直接列出文件和目录名称,包括控制字符。 -p 列出权限标示。 -P<范本样式> 只显示符合范本样式的文件或目录名称。 -q 用"?"号取代控制字符,列出文件和目录名称。 -s 列出文件或目录大小。 -t 用文件和目录的更改时间排序。 -u 列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码。 -x 将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外
- 以树状图列出目录的内容
11.文件命令
1.touch
# 创建一个空文件 [root@localhost home]# touch frist.txt [root@localhost home]# ls frist.txt test test2.txt test.txt
2.rm
# 1.删除文件 [root@localhost home]# rm frist.txt rm:是否删除普通空文件 "frist.txt"?y [root@localhost home]# ls test test2.txt test.txt # 2.删除目录,递归删除 [root@localhost home]# rm -r test rm:是否进入目录"test"? y rm:是否进入目录"test/spring"? y rm:是否删除目录 "test/spring/springboot"?y rm:是否删除目录 "test/spring"?y rm:是否删除目录 "test"?y # 3.强制删除文件 [root@localhost home]# rm -f test.txt [root@localhost home]# ls test2.txt # 4.强制递归删除目录 [root@localhost home]# rm -rf test # -i 互动模式,删除前会询问使用者
3.cp
# 1.复制文件 [root@localhost home]# cp test2.txt test1.txt [root@localhost home]# ls test1.txt test2.txt [root@localhost home]# cat test1.txt test springmvc # 2.复制到指定目录下 [root@localhost home]# mkdir test [root@localhost home]# ls test test1.txt test2.txt [root@localhost home]# cp test1.txt test [root@localhost home]# ls test test1.txt test2.txt [root@localhost home]# cd test [root@localhost test]# ls test1.txt # 3.添加-r参数复制文件夹-,递归复制目录 [root@localhost home]# cp -r a b // a,b是目录,a中的所有内容(包含a)复制到b中 [root@localhost home]# cp -r a/* b // a中的所有内容(不包含a)复制到b中 # 4.-i:若目标(destination)已经存在时,覆盖时会先询问 # 5.-p:连同文件的属性一起复制过去,而非使用默认属性(备份常用)
4.mv
[root@localhost home]# mv test2.txt test2 [root@localhost home]# ls test test1.txt test2 [root@localhost home]# cd test2 [root@localhost test2]# ls test test2.txt mv a/abc.txt b # b是目录,则将a中的abc.txt移动到b目录中 mv a/abc.txt b/bcd.txt # 将a中的abc.txt移动到b中并改名为bcd.txt(可重命名) mv a b # a,b是目录,将a的所有内容(包括a)移动到b目录中 mv a/* b # 将a中所有内容(不包括a)移动到b目录中 # -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖 # -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖(默认)
5.find
# 查找文件 # find 起始路径 -name 文件名 [root@localhost home]# find / -name test2.txt /home/test2/test2.txt
6.scp
# 1.linux机器间进行文件的远程复制 # 2.scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令 # 3.scp 是加密的,rcp 是不加密的,scp 是 rcp 的加强版 # 1.语法 scp [可选参数] file_source file_target # 2.参数 -r: 递归复制整个目录 -v: 详细方式显示输出 -P port: 注意是大写的P, port是指定数据传输用到的端口号 # 1.复制文件 scp local_file remote_username@remote_ip:remote_folder # 或者 scp local_file remote_username@remote_ip:remote_file # 或者 scp local_file remote_ip:remote_folder # 或者 scp local_file remote_ip:remote_file 例: [root@localhost home]# scp test1.txt root@192.168.73.100:/home The authenticity of host '192.168.73.100 (192.168.73.100)' can't be established. ECDSA key fingerprint is > SHA256:feZSpWqNvo1WZWc8kTmO6vJ95xUTZw++EjUnFUEOiII. ECDSA key fingerprint is MD5:29:83:54:61:f7:79:81:8f:d3:c3:22:74:4b:6c:e6:78. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.73.100' (ECDSA) to the list of known hosts. root@192.168.73.100's password: test1.txt 100% 15 12.7KB/s 00:00 # 2.复制目录 加上-r参数 [root@localhost home]# scp -r test root@192.168.73.100:/home 或 scp -r test 92.168.73.100:/home root@192.168.73.100's password: test1.txt 100% 15 4.6KB/s 00:00 [root@localhost home]# # 3.注意:有时加上root@会报无法创建文件错误,可直接使用远程ip:目录
12.文本命令
1.cat
# 1.将文件全部内容打印到屏幕上(适用于内容较少的) [root@localhost home]# cat test1.txt test springmvc # 2.显示文件全部内容,非空的行输出行号,空行会输出,但不标记行号 [root@localhost home]# cat -b test1.txt # 3.显示文件全部内容,所有行都输出行号 [root@localhost home]# cat -n test1.txt 1 test springmvc
2.tac
从最后一行开始,倒序输出文件的内容 [root@localhost home]# tac test1.txt
3.nl
# 显示文件内容,输出行号,默认情况下空行不记录行号 [root@localhost home]# nl test1.txt # 空行也输出行号 [root@localhost home]#nl -b a test1.txt # 默认设置 [root@localhost home]# nl -b t test1.txt # 设置行号字段占用的位数 [root@localhost home]# nl -w 100 test1.txt
4.more
# 可以实时显示阅读百分比(less不支持) # 按空格往下翻一页(适用于内容较多的) # 按Enter往下翻一行(不能往上一行一行的翻回去) # 按B键往上翻一页 # :f 可以显示文件名和现在的行数 # q 退出more # /字串 代表在这个显示的内容当中,向下搜寻『字串』这个关键字 [root@localhost home]# more test1.txt
5.less
# more命令的所有按键less都支持 # ↑↓箭头可以实现一行一行的上下翻 # PageDown/PageUp可以实现一页一页的上下翻 # more会将查看过的内容打印在屏幕上,而less不会 # /字串 向下搜寻『字串』的功能; # ?字串 向上搜寻『字串』的功能 [root@localhost home]# less test1.txt
6.head
# 默认只显示文件的前10行文本内容 [root@localhost home]# head test1.txt # head -n 行数 行数指定显示文件的前n行 [root@localhost home]# head -n 5 test1.txt # 负数表示除去文件结尾的n行,其他的从头开始的所有行都显示出来 [root@localhost home]# head -n -5 test1.txt
7.tail
# 1.默认只显示从文件最后一行开始的10行文本内容(正序) [root@localhost home]# tail test1.txt # 2.tail -n 行数 行数指定显示文件的最后几行 [root@localhost home]# tail -n 5 test1.txt # 3.tail命令不支持负数,-n -5 执行结果同 -n 5 # 4.tail -c n 文件名表示输出文件最后n 个字节的内容 [root@localhost home]# tail -c 5 test1.txt fsd3 # 5.tail -f 文件名 默认显示文件的最后 10 行内容,而且光标不会退出命令,每隔一秒会检查一下文件是否增加新的内容,如果增加就追加到原来的输出结果后面并显示(新终端中通过echo命令向文件中追加数据) # 6.Ctrl+c 中断 tail 命令 [root@localhost home]# tail -f test1.txt # tail -f 与 tail -F 与 tailf的区别 # 1.tail -f 根据文件描述符进行追踪,当文件改名或被删除,追踪停止 # 2.tail -F根据文件名进行追踪,并保持重试,即该文件被删除或改名后,如果再次创建相同的文件名,会继续追踪。 # 3.tailf 等同于tail -f -n 10(tail -f或-F默认也是打印最后10行),与tail -f不同的是,如果文件不增长,它不会去访问磁盘文件,所以tailf特别适合那些便携机上跟踪日志文件,因为它减少了磁盘访问
8.wc
wc [-clw][--help][--version][文件...] -c或--bytes或--chars :只显示Bytes数 -l或--lines :显示行数 -w或--words :只显示字数 --help :在线帮助 --version :显示版本信息 # 对文件内容进行统计 # wc -l 文件 统计行数 [root@localhost home]# wc -l test1.txt 5 test1.txt # wc -w 文件 统计单词 [root@localhost home]# wc -w test1.txt 10 test1.txt # wc -c 文件 统计字符数 [root@localhost home]# wc -c test1.txt 61 test1.txt [root@localhost home]# wc testfile # testfile文件的统计信息 3 92 598 testfile # testfile文件的行数为3、单词数92、字节数598
- 计算文件的
Byte
数、字数、或是列数,若不指定文件名称或是所给予的文件名为"-",则wc
指令会从标准输入设备读取数据
13.筛选命令
1.管道
# 管道是一种通信机制,通常用于进程的通信。它的表现是可以组合多个命令,将前一个命令的输出作为下一个命令的输入 # 在屏幕上直接显示所有信息 [root@localhost home]# ls -al # ls -al 的输出,将作为 less 的输入 [root@localhost home]# ls -al | less # 在 ls -al 的输出中查找test [root@localhost home]# ls -al | grep test # 在进程中查找指定进程 [root@localhost home]# ps -ef | grep test
2.grep
# 1.grep命令能够在一个或多个文件中,搜索某一特定的字符模式(也就是正则表达式),此模式可以是单一的字符、字符串、单词或句子 # 2.如果是搜索多个文件,grep 命令的搜索结果只显示文件中发现匹配模式的文件名;而如果搜索单个文件,grep 命令的结果将显示每一个包含匹配模式的行。 # 3.正则表达式是描述一组字符串的一个模式,正则表达式的构成模仿了数学表达式,通过使用操作符将较小的表达式组合成一个新的表达式 # 4.正则表达式的通配符 # 1.c* 将匹配 0 个(即空白)或多个字符 c(c 为任一字符) [root@localhost home]# grep -n boot* test1.txt 2:spring boot # 2. . 将匹配任何一个字符,且只能是一个字符 [root@localhost home]# grep -n . test1.txt 1:test # 3.[xyz] 匹配方括号中的任意一个字符 [root@localhost home]# grep -n [boot] test1.txt 1:test 2:spring boot 3:spring boot2 4:spring boot3 5:boot spring boot3 # 4.[^xyz] 匹配除方括号中字符外的所有字符 [root@localhost home]# grep -n [^boot] test1.txt 1:test 2:spring boot 3:spring boot2 4:spring boot3 5:boot spring boot3 # 5.^ 锁定行的开头 [root@localhost home]# grep -n ^boot test1.txt 5:boot spring boot3 # 6.$ 锁定行的结尾 [root@localhost home]# grep -n boot$ test1.txt 2:spring boot # grep [选项] 模式 文件名 # 选项: # -c 仅列出文件中包含模式的行数 # -i 忽略模式中的字母大小写 # -l 列出带有匹配行的文件名 # -n 在每一行的最前面列出行号 # -v 列出没有匹配模式的行 # -w 把表达式当做一个完整的单字符来搜寻,忽略那些部分匹配的行 # 1.文件中搜索关键字,显示包含关键字的行 [root@localhost home]# grep boot test1.txt spring boot # 2.grep -n 关键字 文件 显示包含关键字的行以及行号 [root@localhost home]# grep -n boot test1.txt 2:spring boot
14.编辑文件命令
1.命令行模式
- 1.该模式是进入
vi
编辑器后的默认模式- 2.任何模式下,通过
ESC
都可以进入命令行模式- 3.该模式下输入
vi
命令,输入的任何字符都被当作编辑命令来解释- 4.若输入的字符是合法的
vi
命令,则完成相应的动作(所输入的命令并不回显在屏幕上)- 5.若输入的字符不是合法的
vi
命令,vi
会响铃报警- 6.合法的
vi
命令
- 1.【行数】
yy
从当前行向下复制指定行数- 2.【行数】
dd
从当前行向下删除指定行数- 3.
p
配合yy将复制的内容粘贴到指定位置
2.文本输入模式
- 1.该模式只能从命令行模式进入
- 2.该模式进入方式有多种方式,进入成功后底部会显示
INSERT
- 1.附加命令:
a
从当前光标的后一位开始输入- 2.修改命令:
cc
删除当前行并从行首开始输入- 3.输入命令:
i
从当前光标的前一位开始输入- 4.取代命令:
r+取代字符
将当前光标字符用取代字符取代- 5.替换命令:
s
将当前光标字符删除然后从删除位开始输入- 6.换行命令:
o
将光标移动到当前行的下一行开始输入
3.末行模式
- 该模式只能从命令行模式进入
- 命令行模式下,通过
:
进入末行模式,此时vi
会在显示窗口的最后一行- 末行模式命令
- 1.
:q
:退出不保存- 2.
:q!
:强制退出不保存- 3.
:wq
:退出并保存- 4.
:w [文件名]
:写入指定文件,若未指定文件则写入当前文件,即vi
启动时打开的文档- 5.
:e!
:放弃修改,编辑区恢复为文件原样- 6.
:e 文件名
:打开指定的文件,调入编辑区- 7.
:r 文件名
:读入指定的文件,将文件内容插入到光标位置- 8.
:f
: 在屏幕末行显示文件相关信息
4.vi命令
1.编辑文件命令
# 1.打开(若已存在)或新建文件,并将光标置于第一行首 [root@localhost home]# vi test.txt # 2.打开文件,并将光标置于第 n 行首 [root@localhost home]# vi +4 test.txt # 3.打开文件,并将光标置于最后一行首 [root@localhost home]# vi + test.txt # 4.打开文件,并将光标置于第一个与 redis 匹配的行的行首 [root@localhost home]# vi +/redis test.txt # 5.恢复上次 vi 编辑时发生系统崩溃 [root@localhost home]# vi -r test.txt # 6.打开多个文件,依次进行编辑 [root@localhost home]# vi test.txt test2.txt # 7.使用vim,首先需要安装vim [root@192 jdk1.8.0_141]# yum -y install vim*
2.屏幕翻滚命令
Ctrl+u
:向上翻半屏Ctrl+d
:向下翻半屏Ctrl+f
:向下翻一屏。同pageDown键Ctrl+b
:向上翻一屏,同pageUp键
3.光标定位命令
0
:光标移至行首,同home键^
:光标移至行首第一个非空格字符$
:光标移至行尾,同end键[n]G
:光标移到第n行,未指定n时移到末行H、M、L
:光标移到屏幕首、中、尾行行首
4.光标移动命令
h、j、k、l
:光标左、下、上、右移一个字符,同箭头键b、w
:光标移到上一个词,下一个词首e
:光标移到词尾- 注意
- 以上光标移动命令前带数字
n
时,表示重复移动n
次(例:2h
:左移2格;3e
:移到后面第三个词词尾)
5.删除命令
x、X
:删除光标处、光标前的字符dd
:删除光标所在的行D
:删除光标右边的文本J
:删除当前行尾的换行符,使当前行与下一行合并为一行d+定位符
:删除从光标位置到指定位置范围内的字符
d0、d^
:删除光标左面的文本,0或^代表行首d$
:删除光标右面的文本。$代表行尾dG
:删除光标所在行之后的所有行,G代表最后一行db
:删除光标处前的字符直到词首,b代表词首de
:删除光标处的字符直到词尾,e代表词尾dw
:删除光标处的字符直到下一个词的词首,w代表下一次词尾- 注意
- 以上命令带数字
n
时,表示删除的范围扩大n
倍(例:4dd
:删除4行;3de
:删除从光标开始的三个词)
6.文本修改与替换
1.修改:本质先删除指定范围内的文本,然后插入新文本
cc
:修改光标所在的行C
:修改光标处到行尾的文本c+定位符
:修改光标到指定范围内的文本,常用的有:
c0、c^
:修改光标左边的文本c$
:修改光标右面的文本cG
:修改光标所在行之后的所有行cb
:修改光标处前的字符直到词首cw
:修改光标处的字符直到词尾cl
:修改光标处的字符- 注意
- 以上命令前带数字
n
时,表示修改的范围扩大n
倍(例:5cc
:修改从光标所在处开始的5行;3cw
:修改从光标开始的3个词)2.替换(
replace
):用一个字符替换另一个字符,这是覆盖操作,替换后文本的长度保持不变
r
:用输入的字符替换光标处的字符R
:用输入的文本逐个替换从光标处开始的各个字符,直到按下Esc
键3.替代(
substitute
):用多个字符取代一个字符或一行,这是先删除后插入操作,替代后的文本的长度一般会发生变化
s
:用输入的文本替代光标处的字符,用Esc
键结束输入,等同于cl
S
:用输入的文本带带光标处所在的行,用Esc
键结束输入,等同于cc
- 注意
- 以上命令前带数字
n
时,表示替换或替代的范围扩大n
倍(例:5r
:用输入的字符替换从光标处开始的5个字符)
7.文本拷贝与粘贴
1.拷贝(
copy
):将光标处的文本复制到一个缓冲区中
yy
:拷贝光标所在的行至缓冲区y+定位符
:拷贝光标到指定范围内的文本,常用的有:
y0、y^
: 拷贝光标左面的文本y$
:拷贝光标右面的文本yG
:拷贝光标所在行之后的所有行yb
:拷贝光标处的字符直到词首yw
: 拷贝光标处的字符直到词尾2.粘贴(
paste
):将缓冲区中的内容插入到光标处
p
:若缓冲区中的内容是完整的行,则将这些行插入到光标所在行之后;若不是完整的行,则将这些文本插入到光标处之后P
:若缓冲区中的内容是完整的行,则将这些行插入到光标所在行之前;若不是完整的行,则将这些文本插入到光标处之前- 注意
- 以上命令前带数字n时,表示拷贝的范围扩大
n
倍(例:5yy
:拷贝光标所在的行及下列共5行至缓冲区)
8.撤销与重做
1.撤销(
undo
):消除上一个命令所做的修改,恢复到命令执行前的样子
u
:撤销上一个命令所做的修改U
:撤销最近针对这一行所做的全部修改,在对一行连续做了多处修改后,用此命令可以一次恢复全行
2.重做(redo
):重复执行上一个命令.
:重复前一个命令
9.搜索与替换
- 命令行模式下,输入
:
、/
或?
字符都将进入末行模式,随后的输入被解释为行命令1.字符串搜索:执行搜索命令后,光标将停留在第一个匹配字符的首字符处,按
n
或N
则移到下一个匹配字符串之首,如果不存在匹配的字符串,则会在末行显示“找不到该字符串”
/ 字符串
:从光标处向后搜索与指定模式匹配的字符串,按n
向后查找?字符串
:从光标处向前搜索与指定模式匹配的字符串,按N
向前查找2.字符串替:换用s命令,格式:
:[n1,n2]s/p1/p2/[g][c]
n1,n2
表示目标行的行号范围,可以用%
代表所有行;未指定范围时,目标行就是光标所在行的当前行p1
是用作搜索的字符串p2
是用作替代的字符串- 字符串中可以用
^
代表行首,$
代表行尾s
命令可以带g
和c
选项,g
表示替代目标行中所有匹配的字符串,没有g
的话则只替换目标行中第一个匹配的字符串,选项c
表示替换前要求用户确认。
10.全局命令
1.全局搜索:全文中搜索含有与指定字符串相匹配的字符串的行,对匹配的行作标记
:g/p1
:搜索所有包含p1
字符串的行:g!/p1
:搜索所有不包含p1
字符串的行2.全局替换:
s
命令是面向行的字符串替换命令,s
命令经常与g
命令联合使用
g命令/s命令
:先用g
命令在文件中搜索含有某个字符串的行,并做标记,然后用s
命令对所有有标记的行执行搜索和替换
11.行编辑命令
- 用于对指定的行进行编辑,在指定行范围时,可以用
.
代表当前行,用$
代表最后一行,用%
代表所有行
:n
:跳至第n行:n1,n2con3
:将第n1
至n2
行之间的内容拷贝到第n3
行下(例:3,7co$
:将第3到7行的文字复制到文件末尾处):n1,n2mn3
: 将第n1
至n2
行之间的内容移到第n3
行下(例:m10
:将当前行移动到第10行下):n1,n2d
: 将第n1
至n2
行之间的内容删除(例:3,7d
:删除第3到7行):p
:显示当前行的内容:nu
:显示当前行的行号和内容
12.设定vi选项
vi
是一个高度可定制的编辑器,可以通过设置vi
的选项来设定vi的一些外观和行为特性
:set all
:显示所有选项:set ai
、:set noai
:设定、取消自动缩进:set nu
、:set nonu
:设定、取消行号显示:set hlsearch
、:set nohlsearch
:设定、取消高亮显示搜索到的字符串:set ic
、:set noic
:设定、取消搜索命令中忽略大小写
15.输出重定向
ls -al //在屏幕上输出 ls -al > 文件 //将结果输出到文件中(覆盖写) ls -al >> 文件 //将结果输出到文件中(追加写) [root@localhost home]# ls -al 总用量 4 drwxr-xr-x. 4 root root 48 10月 23 13:14 . dr-xr-xr-x. 17 root root 224 10月 21 18:13 .. drwxr-xr-x. 2 root root 23 10月 22 14:17 test -rw-r--r--. 1 root root 61 10月 23 13:37 test1.txt drwxr-xr-x. 3 root root 35 10月 22 14:24 test2 [root@localhost home]# ls -al > test1.txt [root@localhost home]# cat test1.txt 总用量 0 drwxr-xr-x. 4 root root 48 10月 23 13:14 . dr-xr-xr-x. 17 root root 224 10月 21 18:13 .. drwxr-xr-x. 2 root root 23 10月 22 14:17 test -rw-r--r--. 1 root root 0 10月 23 13:55 test1.txt drwxr-xr-x. 3 root root 35 10月 22 14:24 test2 [root@localhost home]# echo hello > test1.txt [root@localhost home]# cat test1.txt hello [root@localhost home]# ls -al >> test1.txt [root@localhost home]# cat test1.txt hello 总用量 4 drwxr-xr-x. 4 root root 48 10月 23 13:14 . dr-xr-xr-x. 17 root root 224 10月 21 18:13 .. drwxr-xr-x. 2 root root 23 10月 22 14:17 test -rw-r--r--. 1 root root 6 10月 23 13:55 test1.txt drwxr-xr-x. 3 root root 35 10月 22 14:24 test2
- 具体参考
Shell
编程中的shell
输入/输出重定向
16.链接
Linux
中的链接类似于Windows
中快捷方式,可以为文件添加一个链接,方便用户在不同的位置快速访问原文件
1.硬链接
# 硬链接(hard link) # 硬链接相当于创建了原文件的一个副本(拷贝),但不会占用额外的空间 # 语法:ln 原文件 链接文件 # 删除原文件不会影响硬链接 # 不能对目录创建硬链接 [root@localhost home]# ls test test1.txt test2 [root@localhost home]# ln test1.txt test1_link.txt [root@localhost home]# ls test test1_link.txt test1.txt test2
2.软链接
# 软链接(symbolic link) # 软连接也称符号链接,保存的是原文件的路径 # 语法:ln -s 原文件 链接文件 # 创建符号链接时,源文件的路径尽量使用绝对路径 # 删除原文件,符号链接将无法使用 # 可以对目录创建符号链接 [root@localhost home]# ln -s test1.txt test1_soft_link.txt [root@localhost home]# ls test test1_link.txt test1_soft_link.txt test1.txt test2
17.进程命令
1.top
# top命令用来监控linux的系统状况,是常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况 [root@localhost home]# top # top -p 进程id 只显示特定进程的信息 [root@localhost home]# top -p 1 # top命令显示结果后,再按M 结果按内存使用率降序排列 # top命令显示结果后,再按P 结果按CPU使用率降序排列
2.ps
# 1.a:显示一个终端的所有进程,除会话引线外 [root@localhost home]# ps a PID TTY STAT TIME COMMAND 1271 tty1 Ss+ 0:00 -bash 1303 pts/0 Ss 0:00 -bash 8522 pts/0 R+ 0:00 ps a # 2.u:显示进程的归属用户及内存的使用情况 [root@localhost home]# ps -u USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1271 0.0 0.2 115432 2028 tty1 Ss+ 11:59 0:00 -bash root 1303 0.0 0.2 115436 2036 pts/0 Ss 12:00 0:00 -bash root 8523 0.0 0.1 155324 1860 pts/0 R+ 15:07 0:00 ps -u # 3.x:显示没有控制终端的进程 [root@localhost home]# ps -x # 4.-l:查看当前shell产生的进程的详细信息 [root@localhost home]# ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 1303 1290 0 80 0 - 28859 do_wai pts/0 00:00:00 bash 0 R 0 8525 1303 0 80 0 - 38300 - pts/0 00:00:00 ps # 5.-e:显示所有进程 [root@localhost home]# ps -e # 6.-f:显示进程全部信息 [root@localhost logs]# ps -f
# ps aux 查看系统中所有的进程,使用 BS 操作系统格式 [root@localhost home]# ps aux(ps -ef更常用) USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.6 127956 6480 ? Ss 11:59 0:01 /usr/lib/systemd/systemd -->switched-root --system --deserialize 22 root 2 0.0 0.0 0 0 ? S 11:59 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 11:59 0:00 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S< 11:59 0:00 [kworker/0:0H] root 7 0.0 0.0 0 0 ? S 11:59 0:00 [migration/0] root 8 0.0 0.0 0 0 ? S 11:59 0:00 [rcu_bh] root 9 0.0 0.0 0 0 ? R 11:59 0:00 [rcu_sched]
# 查看系统中所有的进程,使用 Linux 标准命令格式 [root@localhost home]# ps -le F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 1 0 0 80 0 - 31989 ep_pol ? 00:00:01 systemd 1 S 0 2 0 0 80 0 - 0 kthrea ? 00:00:00 kthreadd 1 S 0 3 2 0 80 0 - 0 smpboo ? 00:00:00 ksoftirqd/0 1 S 0 5 2 0 60 -20 - 0 worker ? 00:00:00 kworker/0:0H
# ps通常配合管道以及grep命令进行筛选 [root@localhost home]# ps aux | grep user root 8776 0.0 0.0 112720 980 pts/0 R+ 15:46 0:00 grep --color=auto user
3.kill
# kill -l 显示所有的指令(其中SIG可以省略,用后面的代替,也可以使用序号代替。例:kill -9 进程号 等同于 kill -KILL 进程号) # 1.kill 进程号 杀死进程 [root@localhost home]# kill 993 # 2.kill -KILL/9 进程号 强制杀死进程 [root@localhost home]# kill -KILL 993 [root@localhost home]# kill -9 993 # 3.kill -HUP/1 进程号 重新加载进程 [root@localhost home]# kill -HUP 993 [root@localhost home]# kill 1 993 # 4.kill TERM/15 进程号 正常停止一个进程 [root@localhost home]# kill -TERM 993 [root@localhost home]# kill 15 993
18.解压缩命令
1.压缩文件
1.zip
# 将test1.txt文件压缩成test.zip文件 [root@localhost home]# zip test1.zip test1.txt adding: test1.txt (stored 0%) [root@localhost home]# ls test1.txt test1.zip # 将test1.txt文件压缩成test.zip文件,并且添加一行注释 [root@localhost home]# zip -c test1.zip test1.txt adding: test1.txt (stored 0%) Enter comment for test1.txt: zip file : test1.zip # 在这里添加注释信息 # 压缩文件中删除指定文件 [root@localhost home]# zip test3.zip -d test1.txt deleting: test1.txt # 将test1.txt文件压缩成test.zip文件,并指定加密密码 [root@localhost home]# zip -e test1.zip test1.txt Enter password: # 在这里输入压缩加密密码 Verify password: # 再一次输入压缩加密密码 adding: test1.txt (stored 0%) # 将test目录(包含目录中的文件)压缩成test3.zip文件 [root@localhost home]# zip -r test3.zip test adding: test/ (stored 0%) adding: test/test3.txt (stored 0%) # 将test目录(包含目录中的文件)压缩成test3.zip文件,但排除test/test3.txt文件 [root@localhost home]# zip -r test3.zip test -x test/test3.txt adding: test/ (stored 0%) # 测试压缩文件test1zip的完整性 [root@localhost home]# zip -T test1.zip [test1.zip] test1.txt password: # 输入压缩加密密码 test of test1.zip OK # 更新test1.zip压缩文件,添加test2.txt文件 [root@localhost home]# zip -u test1.zip test2.txt adding: test2.txt (stored 0%) # 压缩test2.txt文件并将生成的压缩文件test2.zip的时间与其一致 [root@localhost home]# zip -o test2.zip test2.txt adding: test2.txt (stored 0%)
# 如果出现下列异常,则需要下载zip 和 unzip [root@localhost home]# zip test1.zip test1.txt -bash: zip: 未找到命令 [root@localhost home]# yum install zip 已加载插件:fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.tuna.tsinghua.edu * extras: mirrors.tuna.tsinghua.edu * updates: mirrors.tuna.tsinghua.edu 正在解决依赖关系 --> 正在检查事务 ---> 软件包 zip.x86_64.0.3.0-11.el7 将被 安装 --> 解决依赖关系完成 依赖关系解决 ================================================================================ Package 架构 版本 源 大小 ================================================================================ 正在安装: zip x86_64 3.0-11.el7 base 260 k 事务概要 ================================================================================ 安装 1 软件包 总下载量:260 k 安装大小:796 k Is this ok [y/d/N]: y Downloading packages: zip-3.0-11.el7.x86_64.rpm | 260 kB 00:03 Running transaction check Running transaction test Transaction test succeeded Running transaction 正在安装 : zip-3.0-11.el7.x86_64 1/1 验证中 : zip-3.0-11.el7.x86_64 1/1 已安装: zip.x86_64 0:3.0-11.el7 完毕! [root@localhost home]# yum install unzip 已加载插件:fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.tuna.tsinghua.edu * extras: mirrors.tuna.tsinghua.edu * updates: mirrors.tuna.tsinghua.edu 正在解决依赖关系 --> 正在检查事务 ---> 软件包 unzip.x86_64.0.6.0-24.el7_9 将被 安装 --> 解决依赖关系完成 依赖关系解决 ================================================================================ Package 架构 版本 源 大小 ================================================================================ 正在安装: unzip x86_64 6.0-24.el7_9 updates 172 k 事务概要 ================================================================================ 安装 1 软件包 总下载量:172 k 安装大小:369 k Is this ok [y/d/N]: y Downloading packages: unzip-6.0-24.el7_9.x86_64.rpm | 172 kB 00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction 正在安装 : unzip-6.0-24.el7_9.x86_64 1/1 验证中 : unzip-6.0-24.el7_9.x86_64 1/1 已安装: unzip.x86_64 0:6.0-24.el7_9 完毕!
2.tar
# tar命令可以将许多文件一起保存进行归档(打包)和压缩,并能从归档和压缩中单独还原所需文件 # tar 默认只是归档不压缩,参数-z归档后进行gzip压缩,参数-j归档后进行bzip2压缩 # 下列参数一般组合使用 -A:追加tar中的文件到归档文件中 [root@localhost home]# tar -Avf test1.tar test2.tar -c:创建新的归档(打包)文件 [root@localhost home]# tar -cvf boot.tar test1.txt test1.txt -C 目的目录:切换到指定的目录 # 从test3.tar中将test2.txt文件还原到/home/test下 [root@localhost home]# tar -xvf test3.tar -C /home/test test2.txt -f 归档文件:指定归档文件 [root@localhost home]# tar -tf test2.tar.gz test2.txt -r 归档文件:追加文件本身到归档文件末尾 [root@localhost home]# tar -rvf test1.tar test2.tar test2.tar -t 归档文件:列出归档文件的内容 -tvf [root@localhost home]# tar -tf test2.tar.gz test2.txt -u 归档文件:追加文件本身 [root@localhost home]# tar -uvf test1.tar test2.tar test2.tar -v 归档文件:详细地列出处理的文件 # 从test3.tar中将test2.txt文件还原到/home/test下 [root@localhost home]# tar -xvf test3.tar -C /home/test test2.txt -x 备份文件:从备份文件中还原文件 # 从test3.tar中将test2.txt文件还原到/home/test下 [root@localhost home]# tar -xvf test3.tar -C /home/test test2.txt -z 归档文件:通过gzip指定处理归档文件 # 将test1.txt和test2.txt文件通过gzip的方式先通过tar方式打包再压缩成test3.tar.gz文件 [root@localhost home]# tar -zcvf test3.tar.gz test1.txt test2.txt test1.txt test2.txt -j 归档文件:通过bzip2指定处理归档文件 [root@localhost home]# tar -cjvf test3.tar.bz2 test3.txt test3.txt # tar: 不能指定超过一个"-Acdtrux"选项(即这几个选项同一个命令只能存在一个) -A,r,u:追加 -c:创建 -t:展示 -x:还原 # A,r,u只能追加归档文件(-cvf),不能追加压缩归档文件(-czvf) # [root@localhost home]# tar -Avf test1.tar.gz test2.tar.gz tar: 无法更新压缩归档文件 tar: Error is not recoverable: exiting now [root@localhost home]# tar -rvf test1.tar.gz test2.tar.gz tar: 无法更新压缩归档文件 tar: Error is not recoverable: exiting now [root@localhost home]# tar -uvf test1.tar.gz test2.tar.gz tar: 无法更新压缩归档文件 tar: Error is not recoverable: exiting now
# 如果出现下列异常,则需要下载bzip2 [root@localhost home]# tar -cjvf test3.tar.bz2 test3.txt test3.txt tar (child): bzip2:无法 exec: 没有那个文件或目录 tar (child): Error is not recoverable: exiting now tar: Child returned status 2 tar: Error is not recoverable: exiting now [root@localhost home]# ^C [root@localhost home]# yum -y install bzip2 已加载插件:fastestmirror Determining fastest mirrors * base: mirrors.tuna.tsinghua.edu * extras: mirrors.tuna.tsinghua.edu * updates: mirrors.tuna.tsinghua.edu base | 3.6 kB 00:00 extras | 2.9 kB 00:00 updates | 2.9 kB 00:00 (1/4): base/7/x86_64/group_gz | 153 kB 00:01 (2/4): extras/7/x86_64/primary_db >| 249 kB 00:00:11 (3/4): base/7/x86_64/primary_db >| 6.1 MB 00:00:18 (4/4): updates/7/x86_64/primary_db >| 17 MB 00:00:38 正在解决依赖关系 --> 正在检查事务 ---> 软件包 bzip2.x86_64.0.1.0.6-13.el7 将被 安装 --> 解决依赖关系完成 依赖关系解决 ==================================================================================================================================================================== Package 架构 版本 源 大小 ==================================================================================================================================================================== 正在安装: bzip2 x86_64 1.0.6-13.el7 base 52 k 事务概要 ==================================================================================================================================================================== 安装 1 软件包 总下载量:52 k 安装大小:82 k Downloading packages: 警告:/var/cache/yum/x86_64/7/base/packages/bzip2-1.0.6-13.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY==- ] 0.0 B/s | 50 kB --:--:-- ETA bzip2-1.0.6-13.el7.x86_64.rpm 的公钥尚未安装 bzip2-1.0.6-13.el7.x86_64.rpm | 52 kB 00:00:04 从 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 检索密钥 导入 GPG key 0xF4A80EB5: 用户ID : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos>" 指纹 : 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5 软件包 : centos-release-7-5.1804.el7.centos.x86_64 (@anaconda) 来自 : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 Running transaction check Running transaction test Transaction test succeeded Running transaction 正在安装 : bzip2-1.0.6-13.el7.x86_64 1/1 验证中 : bzip2-1.0.6-13.el7.x86_64 1/1 已安装: bzip2.x86_64 0:1.0.6-13.el7 完毕!
2.解压文件
1.unzip
# 解压指定文件 [root@localhost home]# unzip test2.zip Archive: test2.zip extracting: test2.txt # 查看压缩包但不解压 [root@localhost home]# unzip -v test3.zip Archive: test3.zip Length Method Size Cmpr Date Time CRC-32 Name -------- ------ ------- ---- ---------- ----- -------- ---- 0 Stored 0 0% 10-24-2022 00:48 00000000 test/ -------- ------- --- ------- 0 0 0% 1 file # 测试压缩包内的文件是否正常 [root@localhost home]# unzip -t test3.zip Archive: test3.zip testing: test/ OK No errors detected in compressed data of test3.zip. # 指定解压路经 [root@localhost home]# unzip -d test/ test2.zip Archive: test2.zip extracting: test/test2.txt
2.tar
# 解压gzip格式归档文件 [root@localhost home]# rm -rf test1.txt [root@localhost home]# ls test1.tar test1.tar.gz test2.tar test2.tar.gz test2.txt test3.tar.bz2 test3.txt [root@localhost home]# tar -xzvf test1.tar.gz test1.txt [root@localhost home]# ls test1.tar test1.tar.gz test1.txt test2.tar test2.tar.gz test2.txt test3.tar.bz2 test3.txt # 解压bzip2格式归档文件 [root@localhost home]# ls test1.tar test1.tar.gz test1.txt test2.tar test2.tar.gz test2.txt test3.tar.bz2 test3.txt [root@localhost home]# rm test3.txt rm:是否删除普通文件 "test3.txt"?y [root@localhost home]# tar -xjvf test3.tar.bz2 test3.txt [root@localhost home]# ls test1.tar test1.tar.gz test1.txt test2.tar test2.tar.gz test2.txt test3.tar.bz2 test3.txt
19.用户,组及权限管理命令
- 1.
Linux
系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限- 2.
Linux
系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定
1.useradd
useradd 选项 用户名 选项: -c comment 指定一段注释性描述 -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建>主目录 -g 用户组 指定用户所属的用户组 -G 用户组,用户组 指定用户所属的附加组 -s Shell文件 指定用户的登录Shell -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号 例: useradd –d /home/wd -m wd # 创建一个用户wd,-d和-m用来为登录名wd产生一个主目录 /home/wd(/home为默认的用户主目录所在的父目录,可不指定-d,-m,默认自动创建用户目录) useradd -s /bin/sh -g group –G admin,root wd # 创建一个用户wd,该用户的登录Shell是 /bin/sh,它属于group用户组,同时又属于admin和root用户组,其中group用户组是其主组。 # 可能新建组:groupadd group及groupadd admin
- 1.增加用户账号就是在
/etc/passwd
文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow
,/etc/group
等
1.批量添加用户(存在问题)
- 1.编辑一个文本用户文件
- 每一行按照
/etc/passwd
密码文件的格式书写,注意每个用户的用户名、UID
、宿主目录都不可以相同,密码栏可留做空白或输入x
号
- 2.以
root
身份执行命令/usr/sbin/newusers
,从刚创建的用户文件user.txt
中导入数据,创建用户
- 执行命令
vipw
或vi /etc/passwd
检查/etc/passwd
文件是否已经出现这些用户的数据,并且用户的主目录是否已经创建
- 3.执行命令
/usr/sbin/pwunconv
- 将
/etc/shadow
产生的shadow
密码解码,然后回写到/etc/passwd
中,并将/etc/shadow
的shadow
密码栏删掉;方便下一步的密码转换,即先取消shadow password
功能(此时不存在/etc/shadow文件)
- 4.编辑每个用户的密码对照文件
passwd.txt
- 格式为:
用户名:密码
- 5.以
root
身份执行命令/usr/sbin/chpasswd
- 创建用户密码,
chpasswd
会将经过/usr/bin/passwd
命令编码过的密码写入/etc/passwd
的密码栏
- 6.确定密码经编码写入
/etc/passwd
的密码栏后
- 执行命令
/usr/sbin/pwconv
将密码编码为shadow password
,并将结果写入/etc/shadow
- 可以到
/home
下检查这些用户主目录的权限是否正确,并登录验证用户密码是否正确
2.userdel
userdel 选项 用户名 选项: -r 把用户的主目录一起删除 例: userdel -r wd # 删除用户wd在系统文件中(主要是/etc/passwd, /etc/shadow, /etc/group等)的记录,同时删除用户的主目录
- 1.删除用户账号就是要将
/etc/passwd
等系统文件中的该用户记录删除,必要时还删除用户的主目录
3.usermod
usermod 选项 用户名 usermod -s /bin/bash -d /home/z–g developer wd # 将用户wd的登录Shell修改为bash,主目录改为/home/z,用户组改为developer # 常用的选项包括-c, -d, -m, -g, -G, -s, -u以及-o等,这些选项的与useradd命令中的选项一样,可以为用户指定新的资源值
4.passwd
passwd 选项 用户名 选项: -l 锁定密码,即禁用账号 -u 密码解锁 -d 使账号无密码 -f 强迫用户下次登录时修改密码
- 1.用户账号刚创建时没有密码,被系统锁定,无法使用,必须为其指定密码后才可以登陆使用
- 2.指定和修改用户密码的命令是
passwd
,超级用户可以为自己和其他用户指定密码,普通用户只能用它修改自己的密码- 3.如果默认用户名,则修改当前用户的密码;如果是超级用户,可以用
passwd 用户名
指定任何用户的密码
5.groupadd
groupadd 选项 用户组 选择: -g GID 指定新用户组的组标识号(GID) -o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同 groupadd group1 # 向系统中增加了一个新组group1,新组的组标识号是在当前已有的最大组标识号的基础上加1 groupadd -g 101 group2 # 向系统中增加了一个新组group2,同时指定新组的组标识号是101
6.groupdel
groupdel 用户组 # 删除一个已有的用户组 groupdel group1
7.groupmod
groupmod 选项 用户组 选项: -g GID 为用户组指定新的组标识号 -o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同 -n 新用户组 将用户组的名字改为新名字 groupmod -g 102 group2 # 将组group2的组标识号修改为102 groupmod –g 10000 -n group3 group2 # 将组group2的标识号改为10000,组名修改为group3
8.newgrp
newgrp 目的用户组 # 用户登录后,可使用newgrp切换到其他用户组 newgrp root # 当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组
9.chattr
chattr [-RV][-v<版本编号>][+/-/=<属性>][文件或目录...] -R : 递归处理,将指定目录下的所有文件及子目录一并处理 -v<版本编号> : 设置文件或目录版本 -V : 显示指令执行过程 +<属性> : 开启文件或目录的该项属性 -<属性> : 关闭文件或目录的该项属性 =<属性> : 指定文件或目录的该项属性 # 用chattr命令防止系统中某个关键文件被修改(只读文件) [root@localhost home]# chattr +i text.txt [root@localhost home]# lsattr text.txt ----i-------- text.txt # 让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件 [root@localhost home]# chattr +a /var/log/messages
- 改变文件属性
10.chgrp (change group)
chgrp [-R] 属组名 文件名 # 更改文件属组 -R:递归更改文件属组,在更改某个目录文件的属组时,如果加上-R的参>数,该目录下的所有文件的属组都会更改 [root@localhost ~]# chgrp wd hello.sh
- 1.修改文件和目录的所属组
11.chown (change owner)
chown [–R] 属主名 文件名 chown [-R] 属主名:属组名 文件名 [root@localhost ~]# chown wd:root hello.sh
- 1.修改文件和目录的所属用户和所属组
12.chmod (change mode)
数字类型改变文件权限 chmod [-R] xyz 文件或目录 # xyz 数字类型的权限属性,为 rwx 属性数值的相加 # -R 进行递归(recursive)的持续变更,以及连同次目录下的所有文件都会变更 例:将权限变成 -rwxr-xr-- ,那么权限的数值就成为 [4+2+1][4+0+1]>[4+0+0]=754 [root@www ~]# chmod 754 text.txt
符号类型改变文件权限 chmod 权限设置 文件名 例:将文件权限设置为 -rwxr-xr-- [root@www ~]# chmod u=rwx,g=rx,o=r text.txt # 拿掉全部人的可执行权限 [root@www ~]# chmod a-x text.txt
- 1.修改文件或目录的权限
- 2.权限有两种设置方法:一种是数字,一种是符号
- 3.使用数字来代表各个权限,各权限的数字对照:
r:4
,w:2
,x:1
- 4.使用符号来代表各个权限,各权限的符号对照:
用户:u
,组:g
,其他:o
,全部:a
,+:加入
,-:除去
,=:设定
,r:读
,w:写
,x:执行
13.umask
umask [-S][权限掩码] -S 以文字的方式来表示权限掩码
- 1.指定在建立文件或目录时预设的权限掩码
20.用户及组的系统文件
- 完成用户管理有许多种方法,但是每一种方法实际上都是对有关的系统文件进行修改
1./etc/passwd
用户名:密码:用户标识号:组标识号:注释性描述:主目录:登录Shell # 用户名 代表用户账号的字符串,由大小写字母或数字组成,登录名中不能有冒号:,因为冒号:在这里是分隔符,为了兼容起见,登录名中最好不要包含点字符.,并且不使用连字符-和加号+打头 # 密码 代表加密后的用户密码,虽然这个字段存放的只是用户口令的加密串,不是明文,但是由于/etc/passwd文件对所有用户都可读,所以这仍是一个安全隐患;因此现在许多Linux 系统都使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个特殊的字符x或者* # 用户标识号 代表标识用户标识,一般它与用户名是一一对应的,如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的密码、不同的主目录以及不同的登录Shell等;通常用户标识号的取值范围是0~65 535;0是超级用户root的标识号,1~99由系统保留,作为管理账号,普通用户的标识号从100开始;在Linux系统中,这个界限是500 # 组标识号 代表用户所属的用户组,它对应着/etc/group文件中的一条记录 # 注释性描述 记录着用户的一些个人情况 # 主目录 代表用户的起始工作目录,它是用户登录系统之后所处的目录;各用户的主目录都被组织在同一个特定的目录下/home,而用户主目录的名称就是该用户的登录名;各用户对自己的主目录有读、写、执行(搜索)权限 # 登录Shell 用户登录后要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell
- 1.
/etc/passwd
中一行记录对应着一个用户,每行记录又被冒号:
分隔为7个字段- 2.伪用户(
pseudo users
):这些用户在/etc/passwd
文件中也占有一条记录,但是不能登录,因为它们的登录Shell为空;主要是方便系统管理,满足相应的系统进程对文件属主的要求伪 用 户 含 义 bin 拥有可执行的用户命令文件 sys 拥有系统文件 adm 拥有帐户文件 uucp UUCP使用 lp lp或lpd子系统使用 nobody NFS使用
2./etc/shadow
登录名:加密密码:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志 # 登录名 是与/etc/passwd文件中的用户名一致的用户账号 # 加密密码 是加密后的用户密码 # 最后一次修改时间 表示从某个时刻起,到用户最后一次修改密码时的天数;时间起点对不同的系统可能不一样,SCO Linux 中,这个时间起点是1970年1月1日 # 最小时间间隔 表示两次修改密码之间所需的最小天数 # 最大时间间隔 表示密码保持有效的最大天数 # 警告时间 表示的是从系统开始警告用户到用户密码正式失效之间的天数 # 不活动时间 表示用户没有登录活动但账号仍能保持有效的最大天数 # 失效时间 表示一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期;期满后就不再是一个合法的账号,不能再用来登录
- 1.由于
/etc/passwd
文件是所有用户都可读的,存在安全问题,因此Linux系统都把加密后的密码分离出来,单独存放在一个文件中,这个文件是/etc/shadow
,超级用户才拥有该文件读权限,保证了用户密码的安全性- 2.
/etc/shadow
中的记录行与/etc/passwd
中的一一对应,它由pwconv
命令根据/etc/passwd
中的数据自动产生
3./etc/group
组名:密码:组标识号:组内用户列表 # 组名 是用户组的名称,由字母或数字构成;与/etc/passwd中的登录名一样,组名不应重复 # 密码 用户组加密后的密码,一般Linux 系统的用户组都没有密码,即这个字段一般为空,或者是*/x # 组标识号 与用户标识号类似,也是一个整数,被系统内部用来标识组 # 组内用户列表 属于这个组的所有用户的列表,不同用户之间用逗号,分隔;这个用户组可能是用户的主组,也可能是附加组
- 1.将用户分组是
Linux
系统中对用户进行管理及控制访问权限的一种手段- 2.每个用户都属于某个用户组;一个组中可以有多个用户,一个用户也可以属于不同的组。
- 3.当一个用户同时是多个组中的成员时,在
/etc/passwd
文件中记录的是用户所属的主组,也就是登录时所属的默认组,而其他组称为附加组- 4.用户要访问属于附加组的文件时,必须首先使用
newgrp
命令使自己成为所要访问的组中的成员- 5.用户组的所有信息都存放在
/etc/group
文件中
21.下载安装命令
- 1.
Linux
下的软件包可以细分成两种:源码包
和二进制包
- 2.
源码包
:指源代码程序,需要编译成二进制包才能被计算机识别并使用- 3.
二进制包
:指源码包经过成功编译之后产生的包,是Linux
下默认的软件安装包(例:xxx.rpm
)
RPM
二进制包的命名需遵守统一的命名规则,通过名称可以直接获取这类包的版本、适用平台等信息包名-版本号-发布次数-发行商-Linux平台-适合的硬件平台-包扩展名 例:httpd-2.2.15-15.el6.centos.1.i686.rpm httped:包名 httpd-2.2.15-15.el6.centos.1.i686.rpm: 包全名 2.2.15:包的版本号,版本号的格式通常为(主版本号.次版本号.修正号) 15:二进制包发布的次数 el*:软件发行商,el6 表示此包是由 Red Hat 公司发布,适合在 RHEL 6.x (Red Hat Enterprise Unux) 和 CentOS 6.x 上使用 centos:表示此包适用于 CentOS 系统 i686:表示此包使用的硬件平台 rpm:RPM 包的扩展名,表明这是编译好的二进制包,可以使用 rpm 命令直接安装(如果以 src.rpm 作为扩展名的 RPM 包,表明是源代码包,需要安装生成源码,然后对其编译并生成 rpm 格式的包,最后才能使用 rpm 命令进行安装)
- 4.通常
RPM
包采用系统默认的安装路径
1.rpm
- 1.
rpm
是Red Hat Linux
发行版专门用来管理Linux
各项套件(文件后缀为:.rpm
)的程序- 2.
rpm
类似于Android
中的.apk
文件,需要使用rpm
命令进行安装- 3.
rpm
软件包的安装和卸载都需要考虑包之间的依赖性,需要注意先后关系rpm [-acdhilqRsv][-b<完成阶段><套间档>+][-e<套件挡>][-f<文件>+][-i<套件档>][-p<套件档>+][-U<套件档>][-vv][--addsign<套件档>+][--allfiles][--allmatches][--badreloc][--buildroot<根目录>][--changelog][--checksig<套件档>+][--clean][--dbpath<数据库目录>][--dump][--excludedocs][--excludepath<排除目录>][--force][--ftpproxy<主机名称或IP地址>][--ftpport<通信端口>][--help][--httpproxy<主机名称或IP地址>][--httpport<通信端口>][--ignorearch][--ignoreos][--ignoresize][--includedocs][--initdb][justdb][--nobulid][--nodeps][--nofiles][--nogpg][--nomd5][--nopgp][--noorder][--noscripts][--notriggers][--oldpackage][--percent][--pipe<执行指令>][--prefix<目的目录>][--provides][--queryformat<档头格式>][--querytags][--rcfile<配置档>][--rebulid<套件档>][--rebuliddb][--recompile<套件档>][--relocate<原目录>=<新目录>][--replacefiles][--replacepkgs][--requires][--resign<套件档>+][--rmsource][--rmsource<文件>][--root<根目录>][--scripts][--setperms][--setugids][--short-circuit][--sign][--target=<安装平台>+][--test][--timecheck<检查秒数>][--triggeredby<套件档>][--triggers][--verify][--version][--whatprovides<功能特性>][--whatrequires<功能特性>] -a:查询所有套件 -c:只列出组态配置文件 -d:只列出文本文件 -h:显示安装进度 -i:显示套件的相关信息 -l:显示套件的文件列表及安装目录 -q:使用查询模式 -R:显示套件的关联性信息 -s:显示文件状态 -v:显示更详细的信息(执行过程) [-e <套件>]:卸载指定的套件 [-f <文件>]:查询拥有指定文件的套件 [-i <套件>]:安装指定的套件(install) [-p <套件>]:查询指定的RPM套件档 [-U <套件>]:如果该套件没安装过则直接安装;若安装则升级至最新版本 # rpm -q 包名 查询软件包是否安装 # 注意使用包名,不是包全名。因为已安装的软件包只需给出包名,系统就可以成功识别(使用包全名反而无法识别) [root@localhost home]# rpm -q yum yum-3.4.3-158.el7.centos.noarch # rpm -qa:查询系统中所有安装的软件包 # 可使用管道符查找出需要的内容 [root@localhost home]# rpm -qa | grep yum yum-plugin-fastestmirror-1.1.31-45.el7.noarch yum-metadata-parser-1.1.4-10.el7.x86_64 yum-3.4.3-158.el7.centos.noarch # 只列出组态配置文件 [root@localhost home]# rpm -qc yum /etc/logrotate.d/yum /etc/yum.conf /etc/yum/version-groups.conf # 只列出文本文件 [root@localhost home]# rpm -qd yum /usr/share/doc/yum-3.4.3/AUTHORS /usr/share/doc/yum-3.4.3/COPYING /usr/share/doc/yum-3.4.3/ChangeLog ... # 显示套件的关联性信息 [root@localhost home]# rpm -qR yum /usr/bin/python config(yum) = 3.4.3-158.el7.centos cpio ... # 显示文件状态 [root@localhost home]# rpm -qs yum 正常/etc/logrotate.d/yum 正常/etc/yum 正常/etc/yum.conf # 显示更详细的信息(执行过程) [root@localhost home]# rpm -qvs yum 正常-rw-r--r-- 1 root root 100 4月 13 2018 /etc/logr otate.d/yum 正常drwxr-xr-x 2 root root 0 4月 13 2018 /etc/yum 正常-rw-r--r-- 1 root root 970 4月 13 2018 /etc/yum. # 显示套件的文件列表及安装目录 [root@localhost home]# rpm -ql yum /etc/logrotate.d/yum /etc/yum /etc/yum.conf ... # rpm -qi 包名:查询软件包的详细信息 # 此时的-i 选项表示查询软件信息,是 information 的首字母 [root@localhost home]# rpm -qi yum Name : yum Version : 3.4.3 Release : 158.el7.centos Architecture: noarch Install Date: 2022年10月21日 星期五 18时09分32秒 Group : System Environment/Base Size : 5814102 License : GPLv2+ Signature : RSA/SHA256, 2018年04月25日 星期三 19时52分48秒, Key ID 24c6a8a7f4a80eb5 Source RPM : yum-3.4.3-158.el7.centos.src.rpm Build Date : 2018年04月13日 星期五 20时58分52秒 Build Host : x86-01.bsys.centos Relocations : (not relocatable) Packager : CentOS BuildSystem <http://bugs.centos> Vendor : CentOS URL : http://yum.baseurl/ Summary : RPM package installer/updater/manager Description : Yum is a utility that can check for and automatically download and install updated RPM packages. Dependencies are obtained and downloaded automatically, prompting the user for permission as necessary. # -p 表示查询未安装的软件包,是package 的首字母 # 注意:使用包全名,因为未安装的软件包需使用 绝对路径+包全名 的方式才能确定包 [root@localhost ~]# rpm -qip 包全名 # rpm -qf:命令查询系统文件属于哪个RPM包, file 的首字母 [root@localhost home]# rpm -qf /bin/ls coreutils-8.22-21.el7.x86_64 # 查找未安装软件包的依赖性 # 绝对路径+包全名 [root@localhost ~]# rpm -qRp /mnt/cdrom/Packages/bind-9.8.2-0.10.rc1.el6.i686.rpm
2.yum
# 基本语法 yum [options] [command] [package ...] options:可选,选项包括-h(帮助),-y(当安装过程提示选择全部为 "yes"),-q(不显示安装的过程)等等 command:要进行的操作 package:安装的包名 # yum常用命令 # 更新 1.列出所有可更新的软件清单命令:yum check-update 2.更新所有软件命令:yum update 3.仅更新指定的软件命令:yum update <package_name> # 安装 1.安装所有可安装软件:yum install 2.仅安装指定的软件命令:yum install <package_name> 3.重新安装软件包 yum reinstall <package_name> # 显示列表 1.列出所有可安裝的软件清单命令:yum list 2.查询执行软件包的安装情况:yum list <package_name> [root@localhost opt]# yum list jdk1.8 已加载插件:fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.tuna.tsinghua.edu * extras: mirrors.tuna.tsinghua.edu * updates: mirrors.tuna.tsinghua.edu 已安装的软件包 jdk1.8.x86_64 2000:1.8.0_171-fcs installed 3.列出所有可安装的软件包:yum list updates 4.列出所有已安装的软件包:yum list installed 5.列出所有已安装但不在 Yum Repository 內的软件包:yum list extras # 依赖情况 1.查看程序<package_name> 依赖情况:yum deplist <package_name> # 仓库 1.列出所有仓库:yum repolist all # 详细信息 1.查询执行软件包的详细信息:yum info <package_name> [root@localhost opt]# yum info jdk1.8 已加载插件:fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.tuna.tsinghua.edu * extras: mirrors.tuna.tsinghua.edu * updates: mirrors.tuna.tsinghua.edu 已安装的软件包 名称 :jdk1.8 架构 :x86_64 时期 :2000 版本 :1.8.0_171 发布 :fcs 大小 :279 M 源 :installed 简介 : Java Platform Standard Edition Development Kit 网址 :http://www.oracle/technetwork/java/javase/overview/index.html 协议 : http://java/license 描述 : The Java Platform Standard Edition Development Kit (JDK) includes both : the runtime environment (Java virtual machine, the Java platform classes : and supporting files) and development tools (compilers, debuggers, : tool libraries and other tools). : : The JDK is a development environment for building applications, applets : and components that can be deployed with the Java Platform Standard : Edition Runtime Environment. 2.列出所有需要更新的软件包信息:yum info updates 3.列出所有已安裝的软件包信息:yum info installed 4.列出所有已安裝但不在 Yum Repository 內的软件包信息:yum info extras 5.列出软件包提供哪些文件:yum provides <package_name> # 删除 1.删除软件包命令:yum remove <package_name> # 查询 1.查找软件包命令:yum search <keyword> [root@localhost opt]# yum search jdk1.8 已加载插件:fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.tuna.tsinghua.edu * extras: mirrors.tuna.tsinghua.edu * updates: mirrors.tuna.tsinghua.edu ================================== N/S matched: jdk1.8 ================================== jdk1.8.x86_64 : Java Platform Standard Edition Development Kit # 清除缓存命令: yum clean packages: 清除缓存目录下的软件包 yum clean headers: 清除缓存目录下的 headers yum clean oldheaders: 清除缓存目录下旧的 headers yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的 headers
- 1.
yum
(Yellow dog Updater, Modified
):专门为解决包的依赖关系的软件包管理器,类似腾讯电脑管家的软件一键安装,更新和卸载- 2.
yum
在服务器端存有所有的RPM
包,并将各个包之间的依赖关系记录在文件中- 3.当使用
yum
安装RPM
包时,yum
会先从服务器端下载包的依赖性文件,通过分析此文件从服务器端一次性下载所有相关的RPM
包并进行安装,从而解决RPM
依赖性问题- 4.使用
yum
安装软件包之前,需指定好yum
下载RPM
包的位置,此位置称为yum 源
(yum 源
指的就是软件安装包的来源)- 5.使用
yum
安装软件时至少需要一个yum 源
,yum 源
既可以使用网络yum 源
,也可以将本地光盘作为yum 源
- 网络
yum源
- 1.一般主机网络正常,可以直接使用网络
yum 源
,不需要对配置文件做任何修改- 2.网络
yum 源
配置文件位于/etc/yum.repos.d/
目录下,文件扩展名为*.repo
(只要扩展名为*.repo
"的文件都是 yum 源的配置文件)- 3.通常情况下
CentOS-Base.repo
文件生效- 4.如果修改网络
yum源
后需要执行:yum clean all
;yum makecache
vim /etc/yum.repos.d/CentOS-Base.repo [base]:容器名称,一定要放在[]中。 name:容器说明,可以随便写。 mirrorlist:镜像站点 baseurl: yum 源服务器的地址。默认是 CentOS 官方的 yum 源服务器 enabled:此容器是否生效,如果不写或写成 enabled 则表示此容器生效,写成enable=0 则表示此容器不生效。 gpgcheck:如果为 1 则表示 RPM 的数字证书生效;如果为 0 则表示 RPM 的数字证书不生效。 gpgkey:数字证书的公钥文件保存位置
3.wget
- 1.
wget
是一个从网络上自动下载文件的自由工具,支持通过HTTP
,HTTPS
,FTP
三个最常见的TCP/IP
协议下载(类似于Windows
下的迅雷)- 2.
wget
命令用来从指定的URL
下载文件# 安装wget yum install wget wget(选项)(参数) # wget URL:从指定地址下载文件 [root@localhost opt]#wget https://www.keaidian/uploads/allimg/190424/24110307_8.jpg # [root@localhost opt]# wget -a download.log https://www.keaidian/uploads/allimg/190424/24110307_8.jpg # 将下载信息存入日志文件 [root@localhost opt]# wget -a download.log https://www.keaidian/uploads/allimg/190424/24110307_8.jpg # wget -b url:后台下载 [root@localhost opt]# wget -b https://www.keaidian/uploads/allimg/190424/24110307_8.jpg 继续在后台运行,pid 为 61922。 将把输出写入至 “wget-log”。 # wget -c url:继续执行上次终端的任务 [root@localhost opt]# wget -c https://www.keaidian/uploads/allimg/190424/24110307_8.jpg # wget -d url:调试模式运行指令 [root@localhost opt]# wget -d https://www.keaidian/uploads/allimg/190424/24110307_8.jpg # wget -h url:显示指令帮助信息 [root@localhost opt]# wget -h https://www.keaidian/uploads/allimg/190424/24110307_8.jpg # wget -i url:从指定文件批量获取要下载的URL地址 [root@localhost opt]# cat > filelist.txt https://www.keaidian/uploads/allimg/190424/24110307_4.jpg https://www.keaidian/uploads/allimg/190424/24110307_8.jpg [root@localhost opt]# wget -i filelist.txt # wget -q url:不显示指令执行过程 [root@localhost opt]# wget -q https://www.keaidian/uploads/allimg/190424/24110307_8.jpg #wget -o download.log URL:把下载信息存入日志文件 [root@localhost opt]# wget -o test1.log https://www.keaidian/uploads/allimg/190424/24110307_8.jpg [root@localhost opt]# ls 24110307_8.jpg jdk-8u171-linux-x64.rpm test1.log [root@localhost opt]# cat test1.log --2022-10-25 05:28:41-- https://www.keaidian/uploads/allimg/190424/24110307_8.jpg 正在解析主机 www.keaidian (www.keaidian)... 101.26.37.47, 61.179.224.47, 106.74.11.126, ... 正在连接 www.keaidian (www.keaidian)|101.26.37.47|:443... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:318641 (311K) [image/jpeg] 正在保存至: “24110307_8.jpg” 0K .......... .......... .......... .......... .......... 16% 2.59M 0s 50K .......... .......... .......... .......... .......... 32% 775K 0s 100K .......... .......... .......... .......... .......... 48% 851K 0s 150K .......... .......... .......... .......... .......... 64% 1.03M 0s 200K .......... .......... .......... .......... .......... 80% 2.68M 0s 250K .......... .......... .......... .......... .......... 96% 927K 0s 300K .......... . 100% 15.6M=0.3s 2022-10-25 05:28:42 (1.16 MB/s) - 已保存 “24110307_8.jpg” [318641/318641]) # wget -O 别名 URL:从指定地址下载文件并起别名 [root@localhost opt]# wget -O test.jpg https://www.keaidian/uploads/allimg/190424/24110307_8.jpg --2022-10-25 05:22:31-- https://www.keaidian/uploads/allimg/190424/24110307_8.jpg 正在解析主机 www.keaidian (www.keaidian)... 101.26.37.47, 61.179.224.47, 106.74.11.126, ... 正在连接 www.keaidian (www.keaidian)|101.26.37.47|:443... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:318641 (311K) [image/jpeg] 正在保存至: “test.jpg” 100%[=============================================================================================================================================>] 318,641 1.12MB/s 用时 0.3s 2022-10-25 05:22:31 (1.12 MB/s) - 已保存 “test.jpg” [318641/318641]) [root@localhost opt]# ls jdk-8u171-linux-x64.rpm test.jpg # wget -P 目录 URL:从指定地址下载文件并保存在指定目录下 [root@localhost tmp]# wget -P /tmp/nginx_yum_source/ http://nginx/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm # get reject=xxx(文件格式) url:过滤指定格式下载 [root@localhost opt]# wget reject=gif https://wwwblogs/lukelook/p/11201098.html # wget --spider URL:测试下载连接是否可行 [root@localhost opt]# wget --spider https://www.keaidian/uploads/allimg/190424/24110 307_8.jpg 开启 Spider 模式。检查是否存在远程文件。 --2022-10-25 05:34:10-- https://www.keaidian/uploads/allimg/190424/24110307_8.jpg 正在解析主机 www.keaidian (www.keaidian)... 125.44.96.40, 101.26.37.47, 61.179.22 4.47, ... 正在连接 www.keaidian (www.keaidian)|125.44.96.40|:443... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:318641 (311K) [image/jpeg] 存在远程文件。 # FTP下载 [root@localhost opt]# wget ftp https://wwwblogs/lukelook/p/11201098.html
4.绿色软件安装
- 1.绿色软件:不需要安装,下载可以直接使用(或者解压缩可以直接使用)的软件
- 2.例:
Linux
安装Tomcat
22.磁盘管理命令
Linux
磁盘管理常用三个命令为df
、du
和fdisk
1.df(disk free)
df [-ahikHTm] [目录或文件名] 选项: -a :列出所有的文件系统,包括系统特有的 /proc 等文件系统 -k :以 KBytes 的容量显示各文件系统 -m :以 MBytes 的容量显示各文件系统 -h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示 -H :以 M=1000K 取代 M=1024K 的进位方式 -T :显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出 -i :不用硬盘容量,而以 inode 的数量来显示
- 1.检查文件系统的磁盘空间占用情况
- 2.默认显示系统内所有的 (不含特殊内存内的文件系统与
swap
) 的容量
2.du(disk used)
du [-ahskm] 文件或目录名称 选项: -a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已 -h :以人们较易读的容量格式 (G/M) 显示 -s :列出总量而已,而不列出每个各别的目录占用容量 -S :不包括子目录下的总计,与 -s 有点差别 -k :以 KBytes 列出容量显示 -m :以 MBytes 列出容量显示 # 检查根目录底下每个目录所占用的容量 [root@localhost ~]# du -sm /*
- 1.检查文件和目录的磁盘使用量
- 2.默认会分析当前所在目录里的子目录所占用的硬盘空间
3.fdisk
fdisk [-l] 装置名称 选项: -l :输出后面接的装置所有的分区内容。若仅有 fdisk -l 时, 则系统将会把整个系统内能够搜寻到的装置的分区均列出来
# 第一步 [root@localhost /]# df / <==注意:找出磁盘文件名,即/dev/mapper/centos-root 文件系统 1K-块 已用 可用 已用% 挂载点 /dev/mapper/centos-root 17811456 3229160 14582296 19% / # 第二步 [root@localhost /]# fdisk /dev/mapper/centos-root <==不要加上数字 欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 Device does not contain a recognized partition table 使用磁盘标识符 0xd7827351 创建新的 DOS 磁盘标签。 命令(输入 m 获取帮助): <==等待你的输入! # 第三步 命令(输入 m 获取帮助):m 命令操作 a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition <==删除一个partition g create a new empty GPT partition table G create an IRIX (SGI) partition table l list known partition types m print this menu n add a new partition <==新增一个partition o create a new empty DOS partition table p print the partition table <==在屏幕上显示分割表 q quit without saving changes <==不储存离开fdisk程序 s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit <==将刚刚的动作写入分割表 x extra functionality (experts only) 命令(输入 m 获取帮助):p 磁盘 /dev/mapper/centos-root:18.2 GB, 18249416704 字节,35643392 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0xd7827351 设备 Boot Start End Blocks Id System 命令(输入 m 获取帮助):q
4.mkfs(make filesystem)
mkfs [-t 文件系统格式] 装置文件名 -t :可以接文件系统格式,例:ext3, ext2, vfat 等(系统有支持才会生效) # 查看 mkfs 支持的文件格式 [root@localhost /]# mkfs + 2次Tab键 mkfs mkfs.cramfs mkfs.ext3 mkfs.minix mkfs.btrfs mkfs.ext2 mkfs.ext4 mkfs.xfs # 将分区 /dev/hdc6(可指定分区) 格式化为 ext3 文件系统 [root@localhost /]# mkfs -t ext3 /dev/hdc6 mke2fs 1.39 (29-May-2006) Filesystem label= <==这里指的是分割槽的名称(label) OS type: Linux Block size=4096 (log=2) <==block 的大小配置为 4K Fragment size=4096 (log=2) 251392 inodes, 502023 blocks <==由此配置决定的inode/block数量 25101 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=515899392 16 block groups 32768 blocks per group, 32768 fragments per group 15712 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 Writing inode tables: done Creating journal (8192 blocks): done <==有日志记录 Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 34 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. # 这样就创建了所需要的 Ext3 文件系统
- 磁盘分割完毕后进行文件系统的格式化
5.fsck(file system check)
fsck [-t 文件系统] [-ACay] 装置名称 选项: -t : 给定档案系统的型式,若在 /etc/fstab 中已有定义或 kernel 本身已支援的则不需加上此参数 -s : 依序一个一个地执行 fsck 的指令来检查 -A : 对/etc/fstab 中所有列出来的 分区(partition)做检查 -C : 显示完整的检查进度 -d : 打印出 e2fsck 的 debug 结果 -p : 同时有 -A 条件时,同时有多个 fsck 的检查一起执行 -R : 同时有 -A 条件时,省略 / 不检查 -V : 详细显示模式 -a : 如果检查有错则自动修复 -r : 如果检查有错则由使用者回答是否修复 -y : 选项指定检测每个文件是自动输入yes,在不确定那些是不正常的时候,可以执行 # fsck -y 全部检查修复 # 查看系统有多少文件系统支持的 fsck 命令 [root@localhost /]# fsck + 2次Tab键 fsck fsck.cramfs fsck.ext3 fsck.minix fsck.btrfs fsck.ext2 fsck.ext4 fsck.xfs # 强制检测 /dev/hdc6 分区 # 如果没有加上 -f 的选项,则由于这个文件系统不曾出现问题,检查的经过非常快速,若加上 -f 强制检查,才会一项一项的显示过程 [root@localhost /]# fsck -C -f -t ext3 /dev/hdc6 fsck 1.39 (29-May-2006) e2fsck 1.39 (29-May-2006) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information vbird_logical: 11/251968 files (9.1% non-contiguous), 36926/1004046 blocks
- 1.检查和维护不一致的文件系统
- 2.若系统掉电或磁盘发生问题,可利用
fsck
命令对文件系统进行检查
23.挂载及卸载
- 1.
Linux中
的根目录以外的文件要想被访问,需要将其关联到根目录下的某个目录来实现,这种关联操作就是挂载,这个目录就是挂载点,解除关联关系的过程称之为卸载- 2.挂载点的目录需要以下几个要求
- 1.目录事先存在,可以用mkdir命令新建目录
- 2.挂载点目录不可被其他进程使用到
- 3.挂载点下原有文件将被隐藏
6.mount
mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n] 装置文件名 挂载点 # 用默认的方式,将刚刚创建的 /dev/hdc6 挂载到 /mnt/hdc6 上面 [root@localhost /]# mkdir /mnt/hdc6 [root@localhost /]# mount /dev/hdc6 /mnt/hdc6 [root@localhost /]# df Filesystem 1K-blocks Used Available Use% Mounted on .....中间省略..... /dev/hdc6 1976312 42072 1833836 3% /mnt/hdc6
- 磁盘挂载
7.umount
umount [-fn] 装置文件名或挂载点 选项: -f :强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情况下 -n :不升级 /etc/mtab 情况下卸除 # 卸载/dev/hdc6 [root@localhost /]# umount /dev/hdc6
- 磁盘卸载
24.系统命令
1.systemctl
- 1.
systemctl
是一个systemd
工具,主要负责控制systemd
系统和服务管理器- 2.
systemd
是一个系统管理守护进程、工具和库的集合,用于取代System V
初始进程1.检查你的系统中是否安装有
systemd
并确定当前安装的版本[root@localhost /]# systemctl --version systemd 219 +PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT >+UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN # 安装了219版本的systemd
2.检查
systemd
和systemctl
的二进制文件和库文件的安装位置[root@localhost /]# whereis systemd systemd: /usr/lib/systemd /etc/systemd /usr/share/systemd >/usr/share/man/man1/systemd.1.gz [root@localhost /]# whereis systemctl systemctl: /usr/bin/systemctl /usr/share/man/man1/systemctl.1.gz
3.检查
systemd
是否运行[root@localhost /]# ps -ef | grep systemd root 1 0 0 2月05 ? 00:01:21 /usr/lib/systemd/systemd -->switched-root --system --deserialize 22 root 462 1 0 2月05 ? 00:00:15 /usr/lib/systemd/systemd-journald root 490 1 0 2月05 ? 00:00:00 /usr/lib/systemd/systemd-udevd root 626 1 0 2月05 ? 00:00:03 /usr/lib/systemd/systemd-logind dbus 634 1 0 2月05 ? 00:00:01 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation root 40156 22152 0 02:12 pts/0 00:00:00 grep --color=auto systemd # systemd是作为父进程(PID=1)运行的
4.分析
systemd
启动进程[root@localhost /]# systemd-analyze Startup finished in 930ms (kernel) + 5.071s (initrd) + 19.845s (userspace) = >25.847s
5.分析启动时各个进程花费的时间
6.分析启动时的关键链
7.列出所有可用单元(Systemctl接受服务(.service),挂载点(.mount),套接口(.socket)和设备(.device)作为单元)
8.列出所有运行中单元
8.列出所有失败单元
9.检查某个单元是否启用
10.列出所有服务(包括启用的和禁用的)
11.启动、重启、停止、重载服务以及检查服务状态# systemctl start httpd.service # systemctl restart httpd.service # systemctl stop httpd.service # systemctl reload httpd.service # systemctl status httpd.service # systemctl的start,restart,stop和reload不会从终端获取到任何输出内容,只有status命令可以打印输出
12.激活服务并在启动时启用或禁用服务(即系统启动时自动启动服务)
# systemctl is-active httpd.service # systemctl enable httpd.service # systemctl disable httpd.service
13.屏蔽(让它不能启动)或显示服务
# systemctl mask httpd.service # systemctl unmask httpd.service
14.使用
systemctl
命令杀死服务# systemctl kill httpd # systemctl status httpd
15.列出所有系统挂载点
16.挂载、卸载、重新挂载、重载系统挂载点并检查系统中挂载点状态# systemctl start tmp.mount # systemctl stop tmp.mount # systemctl restart tmp.mount # systemctl reload tmp.mount # systemctl status tmp.mount
17.启动时激活、启用或禁用挂载点(系统启动时自动挂载)
# systemctl is-active tmp.mount # systemctl enable tmp.mount # systemctl disable tmp.mount
18.屏蔽(让它不能启用)或可见挂载点
# systemctl mask tmp.mount # systemctl unmask tmp.mount
其余可参考:
https://linux/article-5926-1.html
或https://wwwblogs/aaronLinux/p/6861425.htm
l
2.service
- 1.服务(
service
) 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求(mysqld
,sshd
、防火墙等),因此又称为守护进程- 2.centOS7.0 后很多服务不再使用
service
,而是systemctl
- 3.
service
指令管理的服务在/etc/init.d
查看[root@localhost ~]# service 服务名 start|stop|restart|status start:启动服务; stop:停止服务; restart:重启服务; status: 查看服务状态;
3.source
source filename 或 . filename
- 1.使当前
shell
读入路径为filepath
的shell
文件并依次执行文件中的所有语句- 2.通常用于重新执行刚修改的初始化文件,使之立即生效
- 3.该命令可以用命令
.
来替代(相同含义)- 4.
source filename
与sh filename
及./filename
执行脚本的区别
- 1.当shell脚本具有可执行权限时,用
sh filename
与./filename
执行脚本没有区别;./filename
是因为当前目录没有在环境变量的PATH
中,所有.
是用来表示当前目录的- 2.
sh filename
重新建立一个子shell
,在子shell
中执行脚本里面的语句,该子shell
继承父shell
的环境变量,但子shell
新建的、改变的变量不会被带回父shell- 3.
source filename
其实只是读取脚本里面的语句依次在当前shell
执行,没有建立新的子shell
;脚本里面所有新建、改变变量的语句都会保存在当前shell
4.make
make [选项] make all:编译程序、库、文档等(等同于make) make install:安装已经编译好的程序,复制文件树中到文件到指定的位置 make unistall:卸载已经安装的程序 make clean:删除由make命令产生的文件 make distclean:删除由./configure产生的文件 make check:测试刚刚编译的软件(某些程序可能不支持) make installcheck:检查安装的库和程序(某些程序可能不支持) make dist:重新打包成packname-version.tar.gz # 一般操作流程: 1、解压缩 tar zxf xxxx.tgz 2、配置 cd xxxx ./configure 3、编译 make 4、安装 make install 5、卸载 make uninstall
- 1.
make
是用来编译的
5.nohup (no hang up)
nohup Command [ Arg … ] [ & ] Command:要执行的命令 Arg:一些参数,可以指定输出文件 &:让命令在后台执行,终端退出后命令仍旧执行 # 后台执行 root 目录下的 runoob.sh 脚本 [root@localhost ~]# nohup /root/runoob.sh & # 后台执行 root 目录下的 text.jar,并重定向输入到 text.log 文件 nohup java -jar /root/text.jar > text.log 2>&1 &
- 1.用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行
- 2.默认情况下(非重定向时),会输出一个名叫
nohup.out
的文件到当前目录下,如果当前目录的nohup.out
文件不可写,输出重定向到$HOME/nohup.out
文件中- 3.终端如果看到以下输出说明运行成功:
appending output to nohup.out
- 4.如果要停止运行,需要使用以下命令查找到
nohup
运行脚本的PID
,然后使用kill
命令来删除ps -aux | grep "runoob.sh"
或ps -ef | grep "runoob.sh"
- 5.
2>&1
:>&
是合并的意思,将标准错误 2 重定向到标准输出 1 ,标准输出 1 再被重定向输入到text.log
文件中
- 0 –
stdin (standard input,标准输入)
- 1 –
stdout (standard output,标准输出)
- 2 –
stderr (standard error,标准错误输出)
6.uname(unix name)
uname [-amnrsv][--help][--version] -a或--all 显示全部的信息。 -m或--machine 显示电脑类型。 -n或--nodename 显示在网络上的主机名称。 -r或--release 显示操作系统的发行编号。 -s或--sysname 显示操作系统名称。 -v 显示操作系统的版本。 --help 显示帮助。 --version 显示版本信息。 # 查看linux系统版本 uname -a Linux localhost.localdomain 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux # 显示计算机类型 uname -m
7. su(switch user)
su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]] -m -p 或 --preserve-environment :执行 su 时不改变环境变数 -c command 或 --command=command :变更为帐号为 USER 的使用者并执行指令(command)后再变回原来使用者 -s shell 或 --shell=shell :指定要执行的 shell (bash csh tcsh 等),预设值为 /etc/passwd 内的该使用者(USER) shell --help :显示说明文件 --version :显示版本资讯 - -l 或 --login :重新 login 为该使用者,大部份环境变数(HOME SHELL USER等等)都以该使用者(USER)为主,并且工作目录改变,如果没有指定 USER ,内定是 root USER :欲变更的使用者帐号 ARG :传入新的 shell 参数 # 变更帐号为 root 并在执行 ls 指令后退出变回原使用者 su -c ls root # 变更帐号为 root 并传入 -f 参数给新执行的 shell su root -f # 变更帐号为 wd 并改变工作目录至 wd 的家目录(home dir) su - wd
- 变更为其他使用者的身份
8.sudo(super user do)
-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 ) # 以root权限执行上一条命令 sudo !! # 以特定用户身份进行编辑文本 sudo -u wd vi index.html
- 以系统管理者的身份执行指令
8. exit
- 1.退出目前的
shell
- 2.执行
exit
可使shell
以指定的状态值退出- 3.若不设置状态值参数,则
shell
以预设值退出;状态值0
代表执行成功,其他值代表执行失败
9. which
which [文件...] -n<文件名长度> 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名 -p<文件名长度> 与-n参数相同,但此处的<文件名长度>包括了文件的路径 -w 指定输出时栏位的宽度 -V 显示版本信息 # 查看指令nginx的绝对路径 [root@localhost home]# which nginx /usr/sbin/nginx
- 1.用于查找指令
- 2.
which
指令会在环境变量$PATH
设置的目录里查找符合条件的指令
10.whereis
whereis [-bfmsu][-B <目录>...][-M <目录>...][-S <目录>...][文件...] -b :只查找二进制文件 -B<目录> :只在设置的目录下查找二进制文件 -f :不显示文件名前的路径名称 -m :只查找说明文件 -M<目录> :只在设置的目录下查找说明文件 -s :只查找原始代码文件 -S<目录> :只在设置的目录下查找原始代码文件 -u :查找不包含指定类型的文件 [root@localhost home]# whereis nginx nginx: /usr/sbin/nginx /usr/lib64/nginx /etc/nginx /usr/share/nginx /usr/share/man/man8/nginx.8.gz # 以上输出信息从左至右分别为查询的程序名、bash路径、bash的man 手册页路径 # 查询二进制文件 [root@localhost home]# whereis -b nginx nginx: /usr/sbin/nginx /usr/lib64/nginx /etc/nginx /usr/share/nginx
11.whatis
whatis 命令/系统调用/库函数/特殊文件名 [root@localhost /]# whatis ls ls (1) - list directory contents
- 用于查询一个命令执行什么功能,并将查询结果打印到终端上,相当于
man -f
12. bash
bash
是linux
下默认的shell
13. sh
sh
是unix
下默认的shell
14.alias
alias[别名]=[指令名称] [root@localhost /]# alias lx=ls [root@localhost /]# lx bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
- 1.用于设置指令的别名,若不加任何参数,则列出目前所有的别名设置
- 2.
alias
的仅用于该次登入的操作,若要每次登入自动设好别名,可在.profile
或.cshrc
中设定指令的别名
15.fg
- 重新启动前台被中断的任务
16.bg
- 把被中断的任务放在后台执行
Linux快捷键
- 1.直接点击两下
Tab
键:查看所有的命令- 2.
vi/vim
+目录+点击两下Tab
键:查看当前文件夹下的内容- 3.
cd
+-
:返回前一个目录
版权声明:本文标题:Linux操作命令 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/jiaocheng/1726362456a614743.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论