Linux基本

一、安装

(一)bios basic input / output system

  1. cpu虚拟化技术需要开启

    intel

    amd

  2. 不同品牌进入bios快捷键不一样

(二)vmware

  1. 新建

  2. 配置硬件

    • 硬盘

      • 建议单个虚拟硬盘文件,比较好管理

      • r如果有转移的需求,建议多个

        u盘的格式化

        ntfs

    • 网络

      • 只可以访问主机资源

        host only

      • 可以自由访问网络资源

        brige 桥接:主机与虚拟机 各自独立ip

        NAT:网络地址转换。主机和虚拟机同一个ip

      • 桥接模式 一定要显示vmnet 所对应的网络适配器 为本地用来上网的适配器硬件

        查询方法:右下角网络图标--网络和internet-更改适配器-查看本地网络的适配器

        如果上不了网查看是否选择本地网卡

    • 光驱

      需要指定光驱硬件,读取资源的来源

      • 物理光驱,比较少用

      • iso文件:选择本地iso后要选择上方的自动连接

        如果没有指定会进入网络安装模式 报错:DHCP ckent...

  3. 安装时

    (1)系统安装目标:直接指定硬盘,选择Done完成

    (2)网络:打开按钮------自动进行dhcp 分配地址

    • 动态分配地址,租约到就收回

    • 有时挂起:挂起时保留的ip,因为没有使用,租约到期,被收回或者给他人使用。导致挂起的虚拟机恢复后,因为ip仍然是之前配置的,无法上网。需要重新启动网络,再次动态分配一个地址。

    (3)用户root密码的设置

  4. 安装好之后

    • 登录
      • 输入root用户名
      • 回车-----提示输入密码
      • 此时输入的密码是不可见的,输完直接回车即可进入系统
      • 正确提示:root@localhost #
  5. 常见问题

    • 网络ip addr

      • 只有本地回路 loopback ens33 只有一行信息

      (1)vmnet0 桥连接模式在安装vmware未安装成功 需要 将 C盘属性安全的第1个和第4个权限全部打开

      (2)gui安装界面 点击打开网络按钮

      ​ 偶发:显示按钮打开,但实际相关的配置信息没有保存,导致相关的虚拟网卡适配器,没有开机启动

二、虚拟化(硬件)软件

1.vmware

  1. 该公司其他软件

    workstation

    esxi 虚拟管理系统

2.virtualbox

3.bochs

仅模拟 不是完全虚拟

4.通过系统资源 来虚拟化出来一些硬件(实现硬件相应的功能)

三、linux的理解

(一)linux内核:kernel

(二)unix有自己的内核和相关的外围软件。收费

(三)自己造内核

  1. minix内核:为了教学用
  2. linus:结合社区,持续更新
  3. gnu project:Gnu is Not Unix。自己造内核,同时自己造软件。gpl开源协议

(四)根据不同的外围软件的分类及管理方式

​ 出现不同的发行版 distrbution distro

  1. 两发发行版派系
  • debian系
    • debian
    • unbuntu 开发者常用
  • redhat系
    • redhat
    • centos
  1. linux支持的桌面

    kde、gnome、lxde、xfce、unity

  2. 与windows的区别

    • linux常用服务器,比较稳定

    • windows常用语pc,也有服务器,但没有linux稳定

四、网络相关知识

UID:唯一标志

ONBOOT=yes:表示开机启动自动连接

GATEWAY=:表示网关地址

1.基础

  1. bootproto

    • 网络地址的协议

      static

      dhcp

  2. gateway

    • 网关

      • 内网与外界通信时,需要经过的通道,方便管理和监控。

      • 与本机ip前三段一致,第4位是1,一般是172.16.8.1

      • 通过命令添加网关,也可以修改配置文件

      • route命令(centos7不再使用)

  3. dns

    • 域名服务器

      • 8.8.8.8 谷歌域名服务器

      • 国内114 域名服务器

    • 通过域名访问时,将域名发送给域名解析服务器,转换域名为ip后进行通信。

      假如没有配置域名服务器:ping xx.xx.xx.xx 可以ping通;

2.相关配置文件

  1. 域名服务器路径

    可以ping通,但是ping baidu.com 提示unknown host,需要配置域名解析服务

    复制代码
    cat /etc/resolv.conf
  2. 编辑网络配置文件

    ens33没有获得ip,将最后一行ONBOOT=no修改为yes,修改完后重启网络systemctl restart network

    复制代码
    vi /etc/sysconfig/network-scripts/ifcfg-ens33

    ens33参数说明

    sh 复制代码
    TYPE="Ethernet"		#网卡类型(通常是Ethemet以太网)
    PROXY_METHOD="none"	#代理方式:为关闭状态
    BROWSER_ONLY="no"	#只是浏览器:否
    BOOTPROTO="static"	#网卡的引导协议【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="ab60d501-535b-49f5-a76b-3336a4120f64"#通用唯一识别码,每一个网卡都会有,不能重复,否则两台linux机器只有一台可上网
    DEVICE="ens33"		#网卡设备名称,必须和'NAME'值一样
    ONBOOT="yes"		#是否开机启动,要想网卡开机就启动或通过 `systemctl restart network`控制网卡,必须设置为 `yes`
    IPADDR=192.168.31.59	# 本机IP
    NETMASK=255.255.255.0		#子网掩码
    GATEWAY=192.168.31.1		#默认网关
    DNS1=8.8.8.8#
    DNS2=8.8.8.5#
    ZONE=public#

3.相关命令

  1. ping

    测试当前服务器是否可以连接目的主机

    复制代码
    ping www.baidu.com
  2. 查看ip地址

    方法一

    复制代码
    ip addr
    
    ip a

    方法二

    sh 复制代码
    1.需要先安装网络工具
    yum install net-tools
    
    2.查询ip地址
    ifconfig
  3. 网络命令

    修改配置文件后,通常需要重新启动服务

    sh 复制代码
    重启
    systemctl restart network
    
    停止
    systemctl stop network
    
    开始
    systemctl start network
    
    状态
    systemctl status network
  4. systemctl 还可以 enable服务 和 disable服务,安装的服务是否被启动

4.网络出现问题时如何排查

  1. 服务

  2. 网络接口配置

  3. ping

    网关、常见网站

  4. dhcp时 是否挂机?

5.修改静态IP

复制代码
vi /etc/sysconfig/network-scripts/ifcfg-ens33

6.网络连接的三种模式

桥接模式

虚拟系统可以和外部系统通讯 ,但是容易造成IP冲突

NAT模式

网络地址转换模式,虚拟系统可以和外部系统通讯 ,不造成IP冲突

主机模式

独立的系统

五、关机、重启、登录、注销

1.关机、重启

关机

shell 复制代码
#立刻关机
shutdown -h now

#1分钟后关机
shutdown -h 1

#希望在09:35关闭计算机
shutdown -h 9:35

#终止定时关机
shutdown -c

#关机,和shutdown -h now一个作用
halt

重启

sh 复制代码
#现在重新启动计算机
shutdown -r now

#现在重新启动计算机
reboot

把内存的数据同步到磁盘

sh 复制代码
sync

不管是重启系统还是关闭系统,首先要运行sync命令,把内存中的数据写到磁盘中

目前的shutdown/reboot/halt等命令均已经在关机前进行了sync,老韩提醒:小心驶得万年船

2.登录、注销

  • 登录时尽量少用root帐号登录,因为它是系统管理员,最大的权限,避免操作失误。可以利用普通用户登录,登录后再用"su -用户名'命令来切换成系统管理员身份。

  • 在提示符下输入 logout即可注销用户

    logout注销指令在图形运行级别无效,在运行级别3下有效。

3.运行级别 runlevel

选项

0∶系统停机状态,系统默认运行级别不能设置为0,否则不能正常启动

1:单用户【找回丢失密码】,root权限,用户系统维护,禁止远程登录

2:多用户状态没有网络服务

3:多用户状态有网络服务

4:系统未使用保留给用户

5:图形界面

6:系统正常关闭并重启,默认运行级别不能设置为6,否则不能正常启动

常用的是3和5

命令

复制代码
init 0
init 1
init 2
init 3
init 4
init 5
init 6

六、目录介绍

linux中一切皆文件

1. 目录结构

  • /bin: bin是Binary的缩写, 这个目录存放着最经常使用的命令。
  • /boot: 这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。(不要动)
  • /dev : dev是Device(设备)的缩写, 存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
  • **/etc: 这个目录用来存放所有的系统管理所需要的配置文件和子目录。**yum安装的软件会装载此目录
  • /home:用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
  • /lib: 这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。(不要动)
  • /lost+found: 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。(存放突然关机的一些文件)
  • /media:linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
  • /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。(我们后面会把一些本地文件挂载在这个目录下)
  • **/opt:这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。**安装的第三方文件,比如JDK、Tomcat、Mysql
  • /proc: 这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。(不用管)
  • /root:该目录为系统管理员,也称作超级权限者的用户主目录。
  • /sbin:s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
  • /srv:该目录存放一些服务启动之后需要提取的数据。
  • /sys:这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统sysfs 。
  • /tmp:这个目录是用来存放一些临时文件的。用完即丢的文件,可以放在这个目录下,安装包!
  • /usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
  • /usr/bin: 系统用户使用的应用程序。
  • /usr/sbin: 超级用户使用的比较高级的管理程序和系统守护程序。Super
  • /usr/src: 内核源代码默认的放置目录。
  • /var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
  • /run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。
  • /www:存放服务器网站相关的资源,环境,网站的项目

2.文件类型的颜色

文件颜色代表含义

蓝色文件----------表示目录

灰色文件----------表示其他文件

白色文件----------表示一般性文件,如文本文件,配置文件,源码文件等

浅蓝色文件----------表示软链接文件,主要是使用ln -s命令建立的文件

绿色文件----------表示可执行文件,可执行的程序

红色文件-----------表示压缩文件或者包文件

黄色文件-----------表示设备文件

红色闪烁------------表示链接的文件有问题。比如原文件删除后,原文件会闪烁。

Linux下用字符表示的文件类型

复制代码
-:普通文件
d:目录文件
l:链接文件
b:块设备文件
c:字符设备文件
p:管道文件

七、目录相关命令

1.进入 cd

语法

复制代码
cd

例子

sh 复制代码
#进入上级目录
cd ..

#进入当前用户主目录
cd ~

#进入上两级目录
cd ../..

#进入当前目录命令
cd .

#进入/usr/local目录
cd /usr/local

2.查看 ls

sh 复制代码
#列出当前目录中所有的子目录和文件(不包含隐藏文件  .开头的)
ls			

#列出目录下的所有的子目录和文件(包含隐藏文件  .开头的)
ls -a       

#列出文件的详细信息(包括权限、所有者、文件大小等) 两种方式
ls -l	
ll

#列出当前目录中所有以"test"开头的详细内容
ls -l test*			

#按文件最后修改时间排序,降序
ls -t		

#按文件大小排序,从大到小
ls -S		

#显示目录
ls -d 		

#查看文件大小时增加可读性(1K 2M 2G) 两种方式
ls -l -h
ll -h

#查询文件inode号(inode存储文件的详细信息) 信息编号,类似于人的身份证号码
ls -i 

#递归按层显示,每层显示完后 显示下一层
ls -R      

#字符文件
ls -c

ls -l 或ll详解

复制代码
lrwxrwxrwx.   1 root root    7 1月  23 01:01 bin -> usr/bin

drwxr-xr-x.   4 root root   30 1月  25 13:28 home
sh 复制代码
第一栏位:
	-:普通文件
	l:是软链接,类似于windows的快捷方式
	d:是目录,相当于windows的文件夹
	c:是字符设备文件,鼠标,键盘
	b:是块设备,比如硬盘
	rwxrwxrwx:rwx分别代表读、写、执行权限。
			   第1-3位确定所有者(该文件的所有者)拥有该文件的权限。 --user
			   第4-6位确定所属组(同用户组的)拥有该文件的权限。 --group
			   第7-9位确定其他用户拥有该文件的权限。 --other

第二个栏位,表示文件个数。如果是文件的话,那这个数目自然是1了,如果是目录的话,那它的数目就是该目录中的文件个数了。

第三个栏位,表示该文件或目录的拥有者。若使用者目前处于自己的Home,那这一栏大概都是它的账号名称。

第四个栏位,表示所属的组(group)。每一个使用者都可以拥有一个以上的组,不过大部分的使用者应该都只属于一个组,只有当系统管理员希望给予某使用者特殊权限时,才可能会给他另一个组。

第五栏位,表示文件大小。文件大小用byte来表示,而空目录一般都是1024byte,当然可以用其它参数使文件显示的单位不同,如使用ls --k就是用kb莱显示一个文件的大小单位,不过一般我们还是以byte为主。  

第六个栏位,表示最后一次修改时间。以"月,日,时间"的格式表示,如Aug 15 5:46表示8月15日早上5:46分。

第七个栏位,表示文件名。我们可以用ls --a显示隐藏的文件名。
  • pwd

    显示当前工作目录

  • ll 和 ls -l 效果一样

  • --help

3.新建 mkdir

语法

shell 复制代码
mkdir 目录名

选项

shell 复制代码
-p	用于创建多级目录
-m:创建指定权限的目录

例子

sh 复制代码
#新建目录
mkdir dir1

# 从根目录开始创建。在目录//home下创建目录tools   
mkdir  /home/tools    	 

#同时创建3个目录
mkdir dir2 dir3 dir4          	 

#同时创建一个3层目录
mkdir -p dir1/dir2/dir3       

#新建目录dir,并设置所有权限
mkdir -m 777 dir

4.删除 rmdir

语法

shell 复制代码
#删除一个空目录
rmdir  目录名 
shell 复制代码
#递归删除,会出现警告
rm -r  
#强制删除,不会出现警告
rm -f    
#强制删除文件夹,用于删除非空目录
rm -rf
#系统直接全部被删除(勿用)
rm -rf  /*                          

例子

sh 复制代码
#删除/opt目录下的文件a.txt (系统会询问是否删除)
rm /root/a.txt

#强行删除/opt目录下的文件a.txt(直接删除,系统不会提示)
rm -f /root/a.txt

#强行删除/opt/chen/目录下的 polo/文件夹
rm -rf /opt/chen/polo/

#删除/opt/chen/目录下的所有内容
rm -rf /opt/chen/*

5.重命名 mv

在同一目录下mv表示重命名

语法

shell 复制代码
mv 原目录名 新目录名

例子

shell 复制代码
#在同一个目录下为改名
mv test test1

6.拷贝 cp

语法

shell 复制代码
cp -r				拷贝目录必须加  -r    进行递归

选项

sh 复制代码
-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
-d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
-f:覆盖已经存在的目标文件而不给出提示。
-i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。
-p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
-r:若给出的原文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
-l:不复制文件,只是生成链接文件。

例子

shell 复制代码
#复制文件test.txt到/usr/local目录
cp test.txt /usr/local

#将一个文件夹复制到另一个文件夹下
cp -r /home/packageA /home/packageB

#再次复制文件test.txt到/usr/local目录,强制覆盖
cp -f test.txt /usr/local

#再次复制文件test.txt到/usr/local目录,询问是否强制覆盖
cp -i test.txt /usr/local

#复制文件tests.txt到/usr/local目录,并把修改时间和访问权限也复制
cp -p test.txt /usr/local
shell 复制代码
#将一个文件夹下的所有内容复制到另一个文件夹下
--方法一
cp -r /home/packageA/* /home/cp/packageB/`
--方法二
cp -r /home/packageA/. /home/cp/packageB/`

7.移动 mv

语法

shell 复制代码
mv 

选项

sh 复制代码
-b: 当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份。
-i: 如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件,输入 y 表示直接覆盖,输入 n 表示取消该操作。
-f: 如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件。
-n: 不要覆盖任何已存在的文件或目录。
-u:当原文件比目标文件新或者目标文件不存在时,才执行移动操作。

例子

shell 复制代码
#将dir1移动到home中
mv dir1 /home       

#移动两个目录 f2 f3 到目录 /opt下
mv f2 f3 -t /opt

#当前目录的test.tar.gz 移动到 /usr/local目录,并重命名为testtest.tar.gz
mv test.tar.gz /usr/local/testtest.tar.gz

#移动目录到上级目录
mv f3 ../

#移动f2到/opt下,但/opt已存在f2,会询问是否覆盖
mv f2 -i /opt

#移动f2到/opt下,但/opt已存在f2,强制覆盖
mv f2 -f /opt

8.路径的表示

  1. 相对路径

    复制代码
    ./  表示当前目录
    
    ../ 表示上一级目录
    
    通过../  ./  来代替pwd显示的内容
  2. 绝对路径

    复制代码
    /etc/resolv.conf         从根目录开始

八、文件相关命令

1.查看

cat

由第一行开始显示文件内容,用来读文章或者读取配置文件

sh 复制代码
#获取test.txt文件所有内容
cat test.txt

#无论是否为空行,都显示行号
cat -n test.txt

#显示行号,除了空行
cat -b test.txt

#连续读取两个文件,按顺序输出
cat test1.txt test2.txt

#倒序输出
--其实就是cat倒过来写即可
tac test.txt

nl

读取的内容显示行号

sh 复制代码
#显示行号,除了空行
--默认就是这个
nl test.txt

#无论是否为空行,都显示行号
nl -b a test.txt

#行号靠最左显示
nl -n ln test.txt

#行号靠最右显示
nl -n rn test.txt

#行号靠最右显示,不足位数左边补0
nl -n rz test.txt

more

  • 一页一页显示内容

语法

复制代码
more 文件名
sh 复制代码
#向下滚动一屏(3种方法)
z
空格键
ctrl+f

#向上滚动一屏(2种方法)
b
ctrl+b

#查看下一行内容
回车键

#输出文件名和当前行的行号
:f

#退出more模式
q
sh 复制代码
#每次显示5行
more -5 test.txt

#从第5行开始显示
more +5 test.txt

#每次翻页时,先清空屏幕内容
more -5 -p test.txt

#若遇到连续两行以上的空白行,合并为一行空白行
more -s test.txt

less

  • 空格翻页
  • 上下键可以前进和后退
  • 通过q退出

语法

sh 复制代码
less 文件名
sh 复制代码
#显示当前行数的百分比
less -m test.txt

#显示当前行数/总行数和百分比
less -M test.txt

#显示连续空行为一行
less -s test.txt

进入less模式之后的操作

sh 复制代码
g:移动到第一行

G:移动到最后一行

u:向前移动半屏

d:向后移动半屏

f:向后移动指定行数或一屏

b:向前移动指定行数或一屏

j:向下移动一行(↑也可以替代)

k:向上移动一行(↓也可以替代)

q:结束less模式

more和less区别

  • less可以按键盘上下方向键显示上下内容,more不能通过上下方向键控制显示
  • less不必读整个文件,加载速度会比more更快
  • less退出后shell不会留下刚显示的内容,而more退出后会在shell上留下刚显示的内容
  • head 用来显示文件开头的内容

  • 默认head命令打印其相应文件的开头10行

参数说明

sh 复制代码
-q 隐藏文件名

-v 显示文件名

-c<字节> 显示字节数

-n<行数> 显示的行数

案例

sh 复制代码
1.默认前10行
head test.log

2.输出文件的头7行(两种方式)
head -n 7 test.log

head 7 test.log

3.输出文件除了最后7行的全部内容
head -n -7 test.log

4.显示文件的前100个字符
head -c 100 test.log

5.显示文件的第10-20行
head -20 test | tail -10

tail

  • tail用来显示文件尾部的内容
  • 使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容.

参数说明

shell 复制代码
命令格式: tail[必要参数][选择参数][文件]
-f 循环读取
-q 不显示处理信息
-v 显示详细的处理信息
-c<数目> 显示的字节数
-n<行数> 显示行数
-q, --quiet, --silent 从不输出给出文件名的首部
-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒

案例

sh 复制代码
1.默认后10行
tail test.log   

2.查询日志尾部最后10行的日志
tail  -n  10   test.log   

3.从第10行开始显示内容
tail  -n +10   test.log  

4.多用于查看动态内容,不用刷新
tail -f test.log	

5. 循环实时查看最后1000行记录(最常用的)
tail  -fn 1000   test.log  

一般还会配合着grep用,例如 :

js 复制代码
 tail -fn 1000 test.log | grep '关键字'

如果一次性查询的数据量太大,可以进行翻页查看,例如:

js 复制代码
tail -n 4700  aa.log |more -1000 可以进行多屏显示(ctrl + f 或者 空格键可以快捷键)

2.新建

vi

shell 复制代码
--如果文件不存在则新建这个文件,如果文件存在就是修改这个文件
vi 文件名

touch

shell 复制代码
--只新建。可以同时新建多个文件
touch 文件名

#同时创建两个文件
touch test1.txt test2.txt

#批量创建文件(如创建2000个文件)
touch test{0001..2000}.txt

>、>>创建

复制代码
>		直接覆盖原文件,不会有任何提示

>>		追加在原文件末尾,不会覆盖原文件的内容
  • > 意思是创建,>>是追加
sh 复制代码
#创建文件
> chen.txt

cat

shell 复制代码
--其实用的也是 > 和 >> ,但是有一点不一样的是,敲完上述命令会进入chen.txt的编辑模式,可以直接输入你想要写入的内容,最后按回车键换一行后再ctrl+d退出
cat > chen.txt
cat >> chen.txt

3.删除 rm

语法

shell 复制代码
#force(强制),不进行提示信息的提醒 
rm -f               

#递归删除    针对文件夹
rm -r                 

#删除前逐一询问确认
rm -i               

#删除当前目录下所有文件,强制删除
rm -rf              

4.拷贝 重命名

语法

shell 复制代码
#把hello文件拷贝到/opt/test下
cp -r hello /opt/test                            

#将文件newfile拷贝到opt目录下的dir01中,并重命名为new

cp -r newfile /opt/dir01/new            

#远程拷贝
scp /home/administrator/news.txt [email protected]:/etc/squid**

/home/administrator/   本地文件的绝对路径
news.txt             要复制到服务器上的本地文件
root                 通过root用户登录到远程服务器(也可以使用其他拥有同等权限的用户)
192.168.6.129        远程服务器的ip地址(也可以使用域名或机器名)
/etc/squid             将本地文件复制到位于远程服务器上的路径

5.移动 重命名

语法

shell 复制代码
#重命名为file_2
mv file_1 file_2                  

#将文件file移动到/home/dir中
mv file  /home/dir                       

#将文件移动到home目录下,并重命名为new
mv newfile  /home/new         

6.链接(面试题)

软连接

  • 类似windows下的快捷方式,删除原文件,快捷方式也访问不了
  • 链接文件内存储的是原文件的inode,也就是说是用来指向原文件,这两个文件的inode是不一样的。可以通过ls -i查看索引节点

语法

复制代码
ln -s  原文件 目标文件

例子

shell 复制代码
#创建软链接
ln -s f1 f2       把f2 链接到f1

#echo指向文件写入内容
--给f1写入内容,通过cat查找,f2也会显示内容,删除f1,f2不能再用

echo "i love you" >>f1

cat f1
cat f2

#查看索引节点
[root@localhost home]# ls -i
33642041 f1  34353106 f2

特点

  • 类似于windows中的快捷方式
  • 有自己的索引和存储block模块,但是数据块只保存原文件的文件名和i节点号,并没有实际的文件数据。
  • 链接文件中存储的是被链接文件的元信息,路径或者inode节点
  • 原文件添加内容后,软链接里面也会有原文件的内容。但是查找过程会多一个环节,就是软链接里面存的是原文件路径,而不是内容,最后是通过原文件路径去找i节点,再通过i节点去找内容
  • 删除被链接文件(原文件),软连接不能使用
  • 软链接可以链接任何类型的文件,包括目录和设备文件都可以作为被链接的对象

硬链接

  • 硬链接实际上是为文件建一个别名,链接文件和原文件实际上是同一个文件。可以通过ls -i来查看一下,这两个文件的inode号是同一个,说明它们是同一个文件

  • A是原文件,B是硬链接,那么他们两个指向了同一个文件!允许一个文件拥有多个路径,用户可以通过这种方式链接到一些重要的文件,防止误删。

语法

shell 复制代码
ln  原文件 目标文件

例子

shell 复制代码
#创建硬链接
ln  f3 f4 

#echo指向文件写入内容
--给f3写入内容,通过cat查找,f4也会显示内容,删除f3,f4还能用

echo "i love you" >>f3

cat f3
cat f4

#查看索引节点
[root@localhost home]# ls -i
34353107 f3  34353107 f4

复制

  • 复制产生的文件是一个独立的文件,有自己的元信息和inode节点

    [root@localhost home]# touch f3
    [root@localhost home]# cp f3 f4
    [root@localhost home]# ls -i
    34353106 f3 34353107 f4

特点

  • 可以看成是同一个文件,多个入口
  • 硬链接的两个文件是独立的两个引用计数文件,他们共用同一份数据,所以他们拥有相同的索引和存储block模块
  • 修改链接文件和被链接文件中的其中一个,另一个都改变
  • 删除硬链接中的任意一个文件,另外一个文件不会被删除。没有任何影响,链接文件一样可以访问,内容和被链接文件一模一样。
  • 不能跨分区
  • 不能针对目录使用
  • 硬链接占用的空间和被链接文件一样大(其实就是同一片空间)
  • 无论修改原文件还是硬链接文件,都是修改同一片区域
  • 硬链接 ≠ 复制。复制相当于将原文件进行一个拷贝,为另一个全新的文件,与原文件没有关系了。修改任何一个都不会影响另一个。

查看索引节点

shell 复制代码
ls -i

ls -li
sh 复制代码
[root@localhost home]# ls -li
总用量 8
34353107 -rw-r--r--. 2 root root 2 3月  30 06:36 f1
34353107 -rw-r--r--. 2 root root 2 3月  30 06:36 f2
[root@localhost home]# ls -i
34353107 f1  34353107 f2
[root@localhost home]#

硬链接和复制区别

  • 复制相当于将原文件进行一个拷贝,为另一个全新的文件,与原文件没有关系了,修改任何一个都不会影响另一个;而硬链接修改链接文件或被链接文件其中一个,另一个都会改变
  • 复制产生的文件是一个独立的文件,有自己的元信息和inode节点
  • 删除或修改复制文件,对原文件不会产生任何影响,反过来也是一样的
  • 复制可以复制文件,也可以复制目录。而硬链接不能针对目录使用

软链接和硬链接区别

  • 创建软链接:ln -s 原文件名 目标文件名;

    创建硬链接:ln 原文件名 目标文件

  • 软链接与原文件有不同的i节点

    硬链接与原文件有相同的i节点

  • 删除原文件后,软链接不可用

    删除原文件后,硬链接可以使用(至少有一个硬链接指向原文件)

  • 创建软连接时,应该指定原文件的绝对路径

九、编辑模式

1.vi

vi 某个文件后进入的是命令模式,输入i会进入到编辑模式,输入冒号会进入到底线命令模式。

复制代码
步骤:

vi test					进入test文件的名模式

i						vi后键盘按i进入到编辑模式,通过上下键操作

esc:					退出编辑模式,此时切换到命令模式

编辑后按ESC键和冒号后输入wq保存退出,输入q不保存退出

进入vi

sh 复制代码
vi filename               打开或新建文件,并将光标置于第一行首

vi +n filename           打开文件,并将光标置于第 n行首

vi + filename             打开文件,并将光标置于最后一行首

vi -r filename            在上次正用 vi编辑时发生系统崩溃,恢复文件

vi file1....filen            打开多个文件,依次编辑

命令行模式

命令模式 vi/vim+文件名 进入命令模式 不可以输入文字,只能识别命令

复制代码
a:在光标所在字符后插入
A:在光标所在行尾插入
i:在光标所在字符前插入
I:在光标所在行行首插入
o:在光标下插入新行
O:在光标上插入新行

编辑模式

按i/a/o进入,可以继续输入文字

ESC 返回到命令模式。

底线命令模式

在命令模式下按下:(英文冒号)就进入了底线命令模式。

按ESC键可随时退出底线命令模式。

复制代码
:wa		保存并退出

:q		退出

:w		保存文本

:q!		强制退出

:n		将光标移到第n行		

:set nu		显示行号

:set nonu	取消行号

/word		向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可!(常用)

?word		向光标之上寻找一个字符串名称为 word 的字符串。

2.vi/vim按键说明

第一部分:一般模式可用的光标移动、复制粘贴、搜索替换等

移动光标的方法
h 或 向左箭头键(←) 光标向左移动一个字符
j 或 向下箭头键(↓) 光标向下移动一个字符
k 或 向上箭头键(↑) 光标向上移动一个字符
l 或 向右箭头键(→) 光标向右移动一个字符
[Ctrl] + [f] 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)
[Ctrl] + [b] 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)
[Ctrl] + [d] 屏幕『向下』移动半页
[Ctrl] + [u] 屏幕『向上』移动半页
+ 光标移动到非空格符的下一行
- 光标移动到非空格符的上一行
n< space> 那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。
0 或功能键[Home] 这是数字『 0 』:移动到这一行的最前面字符处 (常用)
$ 或功能键[End] 移动到这一行的最后面字符处(常用)
H 光标移动到这个屏幕的最上方那一行的第一个字符
M 光标移动到这个屏幕的中央那一行的第一个字符
L 光标移动到这个屏幕的最下方那一行的第一个字符
G 移动到这个档案的最后一行(常用)
nG n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu)
gg 移动到这个档案的第一行,相当于 1G 啊!(常用)
n< Enter> n 为数字。光标向下移动 n 行(常用)
搜索替换
/word 向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可!(常用)
?word 向光标之上寻找一个字符串名称为 word 的字符串。
n 这个 n 是英文按键。代表重复前一个搜寻的动作。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串!
N 这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。
删除、复制与粘贴
x, X 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用)
nx n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。
dd 删除游标所在的那一整行(常用)
ndd n 为数字。删除光标所在的向下 n 行,例如 20dd 则是删除 20 行 (常用)
d1G 删除光标所在到第一行的所有数据
dG 删除光标所在到最后一行的所有数据
d$ 删除游标所在处,到该行的最后一个字符
d0 那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符
yy 复制游标所在的那一行(常用)
nyy n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用)
y1G 复制游标所在行到第一行的所有数据
yG 复制游标所在行到最后一行的所有数据
y0 复制光标所在的那个字符到该行行首的所有数据
y$ 复制光标所在的那个字符到该行行尾的所有数据
p, P p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行!举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢?那么原本的第 20 行会被推到变成 30 行。(常用)
J 将光标所在行与下一行的数据结合成同一行
c 重复删除多个数据,例如向下删除 10 行,[ 10cj ]
u 复原前一个动作。(常用)
[Ctrl]+r 重做上一个动作。(常用)

第二部分:一般模式切换到编辑模式的可用的按钮说明

进入输入或取代的编辑模式
i, I 进入输入模式(Insert mode):i 为『从目前光标所在处输入』, I 为『在目前所在行的第一个非空格符处开始输入』。(常用)
a, A 进入输入模式(Insert mode):a 为『从目前光标所在的下一个字符处开始输入』, A 为『从光标所在行的最后一个字符处开始输入』。(常用)
o, O 进入输入模式(Insert mode):这是英文字母 o 的大小写。o 为『在目前光标所在的下一行处输入新的一行』;O 为在目前光标所在处的上一行输入新的一行!(常用)
r, R 进入取代模式(Replace mode):r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 ESC 为止;(常用)
[Esc] 退出编辑模式,回到一般模式中(常用)

第三部分:一般模式切换到指令行模式的可用的按钮说明

指令行的储存、离开等指令
:w 将编辑的数据写入硬盘档案中(常用)
:w! 若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊!
:q 离开 vi (常用)
:q! 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。
注意一下啊,那个惊叹号 (!) 在 vi 当中,常常具有『强制』的意思~
:wq 储存后离开,若为 :wq! 则为强制储存后离开 (常用)
ZZ 这是大写的 Z 喔!若档案没有更动,则不储存离开,若档案已经被更动过,则储存后离开!
:w [filename] 将编辑的数据储存成另一个档案(类似另存新档)
:r [filename] 在编辑的数据中,读入另一个档案的数据。亦即将 『filename』 这个档案内容加到游标所在行后面
:n1,n2 w [filename] 将 n1 到 n2 的内容储存成 filename 这个档案。
:! command 暂时离开 vi 到指令行模式下执行 command 的显示结果!例如 『:! ls /home』即可在 vi 当中看 /home 底下以 ls 输出的档案信息!
:set nu 显示行号,设定之后,会在每一行的前缀显示该行的行号
:set nonu 与 set nu 相反,为取消行号!
  • .swp

    (1)临时文件,有时可能阻碍文件的保存,需要删除后,对原文件进行修改和保存

    (2)有时通过ctrl+z 强制退出可能会产生

3.vim

vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。

vim 则可以说是程序开发者的一项很好用的工具。

所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在。

连 vim 的官方网站 (http://www.vim.org) 自己也说 vim 是一个程序开发工具而不是文字处理软件。

4.vi/vim工作模式

十、查找

1.查找

find

查找文件或目录

语法

shell 复制代码
find [搜索范围] [选项]

选项

shell 复制代码
-name		按照指定的文件名查找
-path   	可以对文件的dir_name、file_name匹配
-type		通过文件类型查找
-mtime  	查找几日之内或几日之前的文件
-mmin 		查找几分钟之内或几分钟之前的文件
-size		按照指定的文件大小查找文件

-a:与,即&&(默认都是与)
-o:或:即||
-not:非,即条件结果取反

-empty		搜索空文件
-user		查找属于指定用户名文件
-group		查找属于指定用户组文件

通过文件名搜索

shell 复制代码
#根据名称查找/home目录下的hello.txt文件
find /home -name hello.txt

#将当前目录及其子目录下所有文件后缀为 .txt 的文件列出来
find . -name "*.txt"

#将/etc及其子目录下所有文件后缀为 .conf 的文件列出来
find /etc -name "*.conf"

#查找/opt/dir目录下的.txt文件
find /opt -path "/*dir*/*.txt"
--在这里是不能使用-name的。因为 -name 是不能使用 / 的,除非文件名包含了 / , 因为 -name 只能匹配 file_name (即文件名),并不匹配 dir_name (即目录名)

通过文件的类型来搜索

sh 复制代码
#在/opt目录下查找所有的目录
find /opt -type d

#在/opt目录下查找所有的文件
find /opt -type f

通过文件的时间搜索

sh 复制代码
#在/opt目录下查找修改时间在5日以内的文件
find /opt -mtime -5

#在/opt目录下查找修改时间在3日以前的文件
find /opt -type f -name "*.txt" -mtime +3

#在/opt目录下查找更改时间在5分钟以内的.txt文件
find /opt -type f -name "*.txt" -mmin -5

#在/opt目录下查找修改时间在10分钟以前的文件
find /opt -mmin +10

注意:

  • 无论是 -mtime +5 还是 -mtime -5 ,第五天内修改过的文件都不会被搜索出来,可看下图

通过文件的大小来搜索

b:512字节的块**(默认)**,1b = 512c

c:bytes,指定字节大小

w:等价于两个bytes,1w=2c,一般用户匹配中文

k:平时常说的1kb,1k=1024c=2b

M:1MB,1M=1024k=2048b

G:1GB,1GB=1024MB=2048*1024b

复制代码
+n		大于
-n		小于
n		等于
sh 复制代码
#在~/test目录下查找所有size=0字节的文件
find ~/test -size 0
 

#在~/test目录下查找所有size<100k的文件
find ~/test -size -100k
 

#在~/test目录下查找所有size>1MB的文件
find ~/test -size +1M

通过编程中的"与、或、非"来搜索

  • -a:与,即&&(默认都是与)
  • -o:或:即||
  • -not:非,即条件结果取反
sh 复制代码
#在~/test目录下查找文件大小在1kb和10kb内的所有文件
find ~/test -size +1k -size -10k
find ~/test -size +1k -a -size -10k
 

#在~/test目录下查找大于1kb或类型为普通文件的文件
find ~/test -size +1k -o -type f
 

#在~/test目录下查找非空文件
find ~/test -not -size 0
 

#在~/test目录下查找文件或目录
find ~/test -type f -o -type d

搜索空文件

sh 复制代码
find ~/test -empty -type f

通过文件所属用户搜索

sh 复制代码
find ~/test -user root

通过文件所属组group搜索

sh 复制代码
find ~/test -group root

which

查找某个指令的路径

shell 复制代码
#查找ls命令的位置
which ls

2.搜索

grep

在文件中查找字符串

  • 常常和管道符 | 结合使用
  • grep过滤查找,管道符 "|",表示将前一个命令的处理结果输出传递给后面的命令处理

语法

shell 复制代码
grep [选项] 查找内容 原文件

grep的常用选项参数

shell 复制代码
-G	默认值
-F	相当于使用fgrep,但必须用 -F
-E	相当于使用egrep,但必须用 -E。匹配多个条件使用
-V	打印 grep 的版本号
sh 复制代码
#查找f1和dir文件
ls  | grep -E "f1|dir"

匹配控制选项参数

sh 复制代码
-n		显示匹配行及行号
-e		当你有多个正则表达式想同时匹配时,可以用 -e,一个 -e 接一个正则表达式,它们是或的关系,不是与的关系
-i		忽略首字母大小写
-v		反转匹配,选择没有被匹配到的内容
-w		匹配整词,精确的单词,单词的两边必须是非字符符号(即不能是字母数字或下划线)
-x		精确匹配。仅选择与整行完全匹配的匹配项
sh 复制代码
#查找含f或d的文件
ls | grep -e f -e d

#查找dir文件,忽略首字母大写。意思就是大小写都显示
ls | grep -i dir
--结果:
dir
DIR

#包含dir的文件都不显示
ls | grep -v dir

#查找jj.txt。只输入一个j是匹配不出来的
ls | grep -w jj

#查找jj.txt。与-w相比,-x必须输入整个文件名
ls | grep -x jj.txt

一般输出控制选项

sh 复制代码
-s			禁止显示错误信息
-q			安静模式,不会有任何输出内容,查找到匹配内容会返回0,未查找到匹配内容就返回非0
-m num		匹配 num 次后停止
-c			匹配成功数量
-l			列出匹配成功结果的文件来源(标准输入或文件名称)
-H			给每一个匹配结果打印来源(标准输入、文件名)
sh 复制代码
#匹配d开头文件3次
ls | grep -m 3 d

#匹配dir文件的数量
ls | grep -c dir

输出控制参数讲解

sh 复制代码
-b	输出的同时打印字节偏移
-n	输出的同时打印行号
-H	给每一个匹配结果打印来源(标准输入、文件名)
-h	输出是不显示来源(默认)
-o	只显示匹配 PATTERN 的部分
sh 复制代码
#显示匹配的dir同时显示行号
ls | grep -n dir

上下文线控制选项

sh 复制代码
-A num	匹配到搜索到的行以及该行下面的num行
-B num	匹配到搜索到的行以及该行上面的num行
-C num	匹配到搜索到的行以及上下各num行
sh 复制代码
#显示dir3及下面的2行
ls | grep -A 2 dir3

#显示dir3及上面的2行
ls | grep -B 2 dir3

#显示dir3及上下的2行
ls | grep -C 2 dir3

文件和目录选项

sh 复制代码
-a		不忽略二进制的数据
-d		当要查找的是目录而非文件时,必须使用这项参数
-r		以递归方式读取每个目录下的所有文件; 这相当于-d recurse选项。

常用语法

写的正则表达式最好用 ""包起来,当碰到需要转义符的时候才会生效

sh 复制代码
#查找/opt/dir下.txt文件
ls /opt/dir | grep ".txt"

#查找指定进程
ps -ef | grep "java"

#查找指定进程并统计数量
ps -ef | grep -c "java"

#从文件中查找关键字
grep "b" jj.txt

#从文件中查找关键字并输出它的行号
grep -n "b" jj.txt

#从多个文件中查找关键字
grep "b" jj.txt bb.txt

#查找jj.txt文件中的"b"
cat jj.txt | grep "b"

#查找jj.txt文件中的"b",并显示行号
cat jj.txt | grep -n "b"

#从文件中查找关键字后,再从结果中找到指定关键字
cat jj.txt | grep "s" | grep "b"

#找出文件中的空白行
grep -n ^$ jj.txt

3.查看历史指令

选项

sh 复制代码
-c		清除历史记录
-w		将目前的 history 记忆内容写入 histfiles

例子

shell 复制代码
#查看所有历史指令
history

#查看命令mkdir 的历史执行记录
history | grep mkdir 

#查看最近使用的10个指令(两种方式)
history 10
history | tail -10

#执行历史记录中,序号为5的命令 
!5

#执行上一条命令(直接输入两个感叹号)
!!

#清除历史记录
history -c

#将当前所有历史记录写入历史文件中,默认写入 ~/.bash_history 
history -w

cat ~/.bash_history#查看写入的历史记录

十一、Linux中三种时间

1.分类

  • atime
  • ctime
  • mtime
简名 全名 中文 作用
atime Access Time 访问时间 最后一次访问文件(读取或执行)的时间
ctime Change Time 变化时间 最后一次改变文件(属性或权限)或者目录(属性或权限)的时间
mtime Modify Time 修改时间 最后一次修改文件(内容)或者目录(内容)的时间

2.如何查看atime、ctime、mtime

复制代码
stat filename

3.什么命令会修改atime、ctime、mtime

N表示没改变,Y表示改变了

命令 atime mtime ctime
mv N N Y
cp Y N N
chmod N N Y
chown N N Y
touch Y Y Y
>、>> Y Y Y
vim、vi(不修改文件的内容) Y N N
vim、vi(修改文件中的内容) Y Y Y
./test.sh Y N N

为什么修改内容,三个时间都会变呢?

因为对文件编辑之后,不仅访问了文件(改变了atime),还增删了内容,这个文件的大小等状态也发生了变化,所以mtime、ctime变化也很正常

mv

不管是重命名还是移动结果都一样

cp

执行.sh文件

注意!貌似只有第一次执行的时候会更新atime哦!

十二、权限的操作

  • 为了管理多用户在对资源使用时的各自的操作的类型和范围

  • 通过分组将不同的权限分不到不同的组中,再通过用户不同组的归属,进行权限的分配和管理

  • 用户------->组---------->组各自的权限

1.用户的管理

创建用户 useradd

用户账号的管理工作主要涉及到用户账号的添加、修改和删除。

添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号、用户组、主目录和登录Shell等资源。

语法

shell 复制代码
useradd 选项 用户名

细节说明

创建用户后,默认该用户的家目录在/home/用户名

选项

shell 复制代码
-c comment 指定一段注释性描述。
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 手工指定用户的初始组。一般以和用户名相同的组作为用户的初始组,在创建用户时会默认建立初始组。一旦手动指定,则系统将不会在创建此默认的初始组目录。
-G 	指定用户的附加组。我们把用户加入其他组,一般都使用附加组。
-m 使用者目录如不存在则自动建立。
-s Shell文件 指定用户的登录Shell。
-u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。

例子

shell 复制代码
# 此命令创建了一个用户kuangshen,其中-m选项用来为登录名kuangshen产生一个主目录 /home/kuangshen
useradd -m kuangshen



--增加用户账号就是在/etc/passwd文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow, /etc/group等。

删除用户 userdel

  • 如果一个用户的账号不再使用,可以从系统中删除。
  • 删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。

语法

shell 复制代码
userdel 选项 用户名

选项

shell 复制代码
-r 它的作用是把用户的主目录一起删除。

例子

shell 复制代码
#删除保留家目录
userdel kuangshen

#同时删除用户的家目录。
--慎重选择,如果要保留资料,那么就普通删除
userdel -r kuangshen

修改用户 usermod

修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。

语法

shell 复制代码
usermod 选项 用户名

选项

shell 复制代码
-c comment 指定一段注释性描述。
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 手工指定用户的初始组。一般以和用户名相同的组作为用户的初始组,在创建用户时会默认建立初始组。一旦手动指定,则系统将不会在创建此默认的初始组目录。
-G 	指定用户的附加组。我们把用户加入其他组,一般都使用附加组。
-m 使用者目录如不存在则自动建立。
-s Shell文件 指定用户的登录Shell。
-u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。

例子

shell 复制代码
#修改用户zwj所在组为wudang
usermod -g wudang zwj

#将qinqiang的主目录改为/home/233
usermod -d /home/233 qinqiang

#此命令将用户kuangshen的登录Shell修改为ksh,主目录改为/home/z,用户组改为developer。
usermod -s /bin/ksh -d /home/z --g developer kuangshen

添加用户到附属组

sh 复制代码
#添加chen到附属组dj
usermod -G dj chen

#查看dj组是否有用户chen
cat /etc/group

切换用户 su

语法

shell 复制代码
su 用户名

例子

shell 复制代码
#切换到kuangshen用户
su kuangshen

#切回root用户
su root		需要输入root密码

#回到原来用户
在终端输入exit或logout或使用快捷方式ctrl+d,可以退回到原来用户,其实ctrl+d也是执行的exit命令

用户密码设置 passwd

  • 一般通过root创建用户的时候!要配置密码
  • 用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。
  • 指定和修改用户口令的Shell命令是passwd。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。

语法

shell 复制代码
passwd 选项 用户名

选项

shell 复制代码
-l 锁定账户密码
-u 解锁账户密码
-d 删除密码
-f 强迫用户下次登录时修改口令。

例子

普通用户修改自己的口令时,passwd命令会先询问原口令,验证后再要求用户输入两遍新口令,如果两次输入的口令一致,则将这个口令指定给用户;而超级用户为用户指定口令时,就不需要知道原口令。

shell 复制代码
#当前用户修改密码
passwd

#超级用户修改密码
passwd kuangshen
shell 复制代码
#为用户指定空口令时,执行下列形式的命令:
passwd -d kuangshen

#passwd 命令还可以用 -l(lock) 选项锁定某一用户,使其不能登录,例如:
passwd -l kuangshen

锁定账户 passwd

root,比如张三辞职了!冻结这个账号,一旦冻结,这个人就登录不上系统了!

shell 复制代码
# 锁定之后这个用户就不能登录了!
passwd -l qinjiang 

# 没有密码也不能登录!
passwd -d qinjiang 

显示用户id、所属组id

id会显示用户以及所属群组的实际与有效ID。若两个ID相同,则仅显示实际ID。若仅指定用户名称,则显示目前用户的ID。

shell 复制代码
#显示当前用户id
id

#查看fox所属的组
id fox

显示当前用户所在目录

复制代码
pwd

显示当前用户

shell 复制代码
whoami

who am i

2.用户组的管理

每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理(开发、测试、运维、root)。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。

用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。

创建用户组 groupadd

语法

shell 复制代码
groupadd 选项 用户组

选项

shell 复制代码
-g GID 指定新用户组的组标识号(GID)。
-o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。

例子

shell 复制代码
#此命令向系统中增加了一个新组group1,新组的组标识号是在当前已有的最大组标识号的基础上加1。
groupadd group1

#此命令向系统中增加了一个新组group2,同时指定新组的组标识号是101。如果不指定会自增1
groupadd -g 101 group2

增加用户并指定组 useradd

shell 复制代码
useradd -g 用户组 用户名
sh 复制代码
#先创建组
groupadd dj  

#新建用户cx,指定到dj组
--如果没有指定值,会默认生成一个跟用户名相同的组
useradd -g dj cx

删除用户组 groupdel

语法

复制代码
groupdel 用户组

例子

shell 复制代码
#此命令从系统中删除组group1。
groupdel group1

修改用户组 groupmod

语法

复制代码
groupmod 选项 用户组

选项

shell 复制代码
-g GID 为用户组指定新的组标识号。

-o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。

-n新用户组 将用户组的名字改为新名字

例子

shell 复制代码
#创建一个新组
groupmod dj2

#将用户cx的组改为dj2
groupmod -g dj2 cx

切换用户组

如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限。

用户可以在登录后,使用命令newgrp切换到其他用户组,这个命令的参数就是目的用户组。

shell 复制代码
#这条命令将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组。

$ newgrp root			$b表示普通用户,#表示超级用户

查看用户和组

cat /etc/passwd

  • 用户的配置文件,记录中用户的各种信息

  • 这个文件的每一行都代表着每一个用户,我们可以从这里看出这个用户的主目录在哪里,可以看到属于哪一个组

    复制代码
    chenxin:x:1001:0::/home/chenxin:/bin/bash
    
    用户名:口令:用户id(UID):组id(GID):描述性信息:主目录:默认Shell
    
    "x" 表示此用户设有密码,但不是真正的密码,真正的密码保存在 /etc/shadow 文件中

cat /etc/group

用户组的所有信息都存放在/etc/group文件中。

此文件是记录组 ID(GID)和组名相对应的文件。前面讲过,etc/passwd 文件中每行用户信息的第四个字段记录的是用户的初始组 ID,那么,此 GID 的组名到底是什么呢?就要从 /etc/group 文件中查找。

复制代码
cat /etc/group

root:x:0:root,linuxsir

组名:口令:组id(GID):该用户组中的用户列表

这里的 "x" 仅仅是密码标识,真正加密后的组密码默认保存在 /etc/gshadow 文件中。
  • cat /etc/shadow

    口令的配置文件

3.文件的权限和归属

1. 查看文件/目录所有者

一般为文件的创建者,谁创了该文件,就自然的成为该文件的所有者。

查看文件的所有者

复制代码
ls -l 或者 ll

第1个root代表用户名,第2个代表组名

2. rwx权限详解

"可读"表示能够读取目录内的文件列表;

"可写"表示能够在目录内新增、删除、重命名文件;

"可执行"则表示能够进入该目录。

文件的读、写、执行权限可以简写为rwx,亦可分别用数字4、2、1 来表示,文件所有者,所属组及其他用户权限之间无关联

文件所有者 文件所属组 其他用户
执行 执行 执行
字符表示 r w x r w x r w x
数字表示 4 2 1 4 2 1 4 2 1

文件权限的数字法表示基于字符表示(rwx)的权限计算而来,其目的是简化权限的表示。例如,若某个文件的权限为7 则代表可读、可写、可执行(4+2+1);若权限为6 则代表可读、可写(4+2)。我们来看这样一个例子。现在有这样一个文件,其所有者拥有可读、可写、可执行的权限,其文件所属组拥有可读、可写的权限;而且其他人只有可读的权限。那么,这个文件的权限就是rwxrw-r--,数字法表示即为764。不过大家千万再将这三个数字相加,计算出7+6+4=17 的结果,这是小学的数学加减法,不是Linux 系统的权限数字表示法,三者之间没有互通关系。Linux 系统的文件权限相当复杂,但是用途很广泛,建议大家把它彻底搞清楚之后再学习下一节的内容。现在来练习一下。请各位读者分别计算数字表示法764、642、153、731 所对应的字符表示法,然后再把rwxrw-r--、rw--w--wx、rw-r--r--转换成数字表示法。

3. ls -l显示内容说明

案例

复制代码
lrwxrwxrwx.   1 root root    7 1月  23 01:01 bin -> usr/bin

drwxr-xr-x.   4 root root   30 1月  25 13:28 home

说明

sh 复制代码
第一栏位:
	-:普通文件
	l:是软链接,类似于windows的快捷方式
	d:是目录,相当于windows的文件夹
	c:是字符设备文件,鼠标,键盘
	b:是块设备,比如硬盘
	rwxrwxrwx:rwx分别代表读、写、执行权限。
			   第1-3位确定所有者(该文件的所有者)拥有该文件的权限。 --user
			   第4-6位确定所属组(同用户组的)拥有该文件的权限。 --group
			   第7-9位确定其他用户拥有该文件的权限。 --other

第二个栏位,表示文件个数。如果是文件的话,那这个数目自然是1了,如果是目录的话,那它的数目就是该目录中的文件个数了。

第三个栏位,表示该文件或目录的拥有者。若使用者目前处于自己的Home,那这一栏大概都是它的账号名称。

第四个栏位,表示所属的组(group)。每一个使用者都可以拥有一个以上的组,不过大部分的使用者应该都只属于一个组,只有当系统管理员希望给予某使用者特殊权限时,才可能会给他另一个组。

第五栏位,表示文件大小。文件大小用byte来表示,而空目录一般都是1024byte,当然可以用其它参数使文件显示的单位不同,如使用ls --k就是用kb莱显示一个文件的大小单位,不过一般我们还是以byte为主。  

第六个栏位,表示最后一次修改时间。以"月,日,时间"的格式表示,如Aug 15 5:46表示8月15日早上5:46分。

第七个栏位,表示文件名。我们可以用ls --a显示隐藏的文件名。

4. 修改权限

权限说明

前三位代表文件所有者的权限(u表示)

中间三位代表文件所在组的权限(g表示)

后三位代表其他组的权限(o表示)

所有人(a表示。u、g、o的总和)

方式一字符修改

+、-、=变更权限

  • +:增加权限
  • -:取消权限
  • =:设定权限
shell 复制代码
chmod u=rwx,g=rx,o=x 文件/目录名

chmod o+w 文件/目录名

chmod a-x 文件/目录名
sh 复制代码
1.给abc文件的所有者读写执行的权限,给所在组读执行权限,给其他组读执行权限
chmod u=rwx,g=rx,o=rx abc

2.给abc文件的所有者除去执行的权限,增加组写的权限
chmod u-x,g+w abc

3.给abc文件的所有者、所在组、其他组同时添加读的权限
chmod a+r abc
方式二数字修改
sh 复制代码
#给这个文件所有权限
chmod 777 文件/目录名

#给所有者所有权限,所属组读执行权限,其他组执行权限
chmod 751 文件/目录名
shell 复制代码
#将home/abc.txt文件的权限修改成 rwxr-xr-x,使用数字的方式实现
chmod 755 home/abc.txt

5. 修改文件所有者

语法

复制代码
chown

例子

shell 复制代码
#将hell.taxt的文件所有者改为mary
chown mary hell.txt        

#将目录/opt/test的所有者改为mary  
chown mary /opt/test     
     
#将目录/opt/test及其所有子目录及文件的所有者改为mary  
chown -R  mary /opt/test

6. 修改文件所属组

语法

复制代码
chgrp

例子

shell 复制代码
#将hell.taxt的文件所在的组改为mary
chgrp mary hell.txt        

#将目录/opt/test的所在的组改为mary  
chgrp mary /opt/test     
     
#将目录/opt/test及其所有子目录及文件的所在的组改为mary    
chgrp -R  mary /opt/test  

7.其他组

除文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组

修改用户所在组

语法

shell 复制代码
usermod -g 新组名 用户名

usermod -d 目录名 用户名 改变该用户登录的初始目录	#需用需要有进入新目录的权限,否则报错

例子

shell 复制代码
#修改用户zwj所在组为wudang
usermod -g wudang zwj

十三、磁盘管理

1.df

df命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

语法

shell 复制代码
df [-ahikHTm] [目录或文件名]

选项

shell 复制代码
-a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
-k :以 KBytes 的容量显示各文件系统;
-m :以 MBytes 的容量显示各文件系统;
-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
-H :以 M=1000K 取代 M=1024K 的进位方式;
-T :显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
-i :不用硬盘容量,而以 inode 的数量来显示

例子

shell 复制代码
# 将系统内所有的文件系统列出来!
--在 Linux 底下如果 df 没有加任何选项
--那么默认会将系统内所有的 (不含特殊内存内的文件系统与 swap) 都以 1 Kbytes 的容量来列出来!

df

文件系统                  1K-块    已用    可用 已用% 挂载点
/dev/mapper/centos-root 8374272 1062120 7312152   13% /
devtmpfs                 485780       0  485780    0% /dev
tmpfs                    497948       0  497948    0% /dev/shm
tmpfs                    497948    7860  490088    2% /run
tmpfs                    497948       0  497948    0% /sys/fs/cgroup
/dev/sdb1               1014680    2564  943356    1% /newdisk
/dev/sda1               1038336  135380  902956   14% /boot
tmpfs                     99592       0   99592    0% /run/user/0
shell 复制代码
# 将容量结果以易读的容量格式显示出来
df -h

文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root  8.0G  1.1G  7.0G   13% /
devtmpfs                 475M     0  475M    0% /dev
tmpfs                    487M     0  487M    0% /dev/shm
tmpfs                    487M  7.7M  479M    2% /run
tmpfs                    487M     0  487M    0% /sys/fs/cgroup
/dev/sdb1                991M  2.6M  922M    1% /newdisk
/dev/sda1               1014M  133M  882M   14% /boot
tmpfs                     98M     0   98M    0% /run/user/0
shell 复制代码
# 将系统内的所有特殊文件格式及名称都列出来
df -aT

文件系统                类型         1K-块    已用    可用 已用% 挂载点
rootfs                  -                -       -       -     - /
sysfs                   sysfs            0       0       0     - /sys
proc                    proc             0       0       0     - /proc
devtmpfs                devtmpfs    485780       0  485780    0% /dev
securityfs              securityfs       0       0       0     - /sys/kernel/security
tmpfs                   tmpfs       497948       0  497948    0% /dev/shm
devpts                  devpts           0       0       0     - /dev/pts
tmpfs                   tmpfs       497948    7860  490088    2% /run
tmpfs                   tmpfs       497948       0  497948    0% /sys/fs/cgroup
cgroup                  cgroup           0       0       0     - /sys/fs/cgroup/systemd
pstore                  pstore           0       0       0     - /sys/fs/pstore
cgroup                  cgroup           0       0       0     - /sys/fs/cgroup/devices
cgroup                  cgroup           0       0       0     - /sys/fs/cgroup/net_cls,net_prio
cgroup                  cgroup           0       0       0     - /sys/fs/cgroup/pids
cgroup                  cgroup           0       0       0     - /sys/fs/cgroup/memory
cgroup                  cgroup           0       0       0     - /sys/fs/cgroup/cpuset
cgroup                  cgroup           0       0       0     - /sys/fs/cgroup/cpu,cpuacct
cgroup                  cgroup           0       0       0     - /sys/fs/cgroup/blkio
cgroup                  cgroup           0       0       0     - /sys/fs/cgroup/hugetlb
cgroup                  cgroup           0       0       0     - /sys/fs/cgroup/perf_event
cgroup                  cgroup           0       0       0     - /sys/fs/cgroup/freezer
configfs                configfs         0       0       0     - /sys/kernel/config
/dev/mapper/centos-root xfs        8374272 1062120 7312152   13% /
selinuxfs               selinuxfs        0       0       0     - /sys/fs/selinux
systemd-1               autofs           0       0       0     - /proc/sys/fs/binfmt_misc
debugfs                 debugfs          0       0       0     - /sys/kernel/debug
mqueue                  mqueue           0       0       0     - /dev/mqueue
hugetlbfs               hugetlbfs        0       0       0     - /dev/hugepages
/dev/sdb1               ext4       1014680    2564  943356    1% /newdisk
/dev/sda1               xfs        1038336  135380  902956   14% /boot
tmpfs                   tmpfs        99592       0   99592    0% /run/user/0
shell 复制代码
# 将 /etc 底下的可用的磁盘容量以易读的容量格式显示
df -h /etc

文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root  8.0G  1.1G  7.0G   13% /

2.du

Linux du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的,这里介绍Linux du命令。

与 df 不一样的是,du 这个命令其实会直接到文件系统内去搜寻所有的文件数据。

语法

shell 复制代码
du [-ahskm] 文件或目录名称

选项

shell 复制代码
-a :显示所有目录或文件的大小
-h :以K,M,G为单位,提高信息可读性
-s :列出总量而已,而不列出每个各别的目录占用容量;
-S :不包括子目录下的总计,与 -s 有点差别。
-k :以1024 bytes为单位。列出容量显示;
-m :以1MB为单位。列出容量显示;
--max-depth=1 表示只深入到第1层目录,此处设置为0,即表示不深入到子目录。

例子

shell 复制代码
# 只列出当前目录下的所有文件夹容量(包括隐藏文件夹):
--直接输入 du 没有加任何选项时,则 du 会分析当前所在目录的文件与目录所占用的硬盘空间。

du

16./redis
8./www/.oracle_jre_usage  # 包括隐藏文件的目录
24./www
48.                        # 这个目录(.)所占用的总量
shell 复制代码
# 将文件的容量也列出来
du -a

4./redis/.bash_profile
4./redis/.bash_logout    
....中间省略....
4./kuangstudy.txt # 有文件的列表了
48.
shell 复制代码
# 检查根目录底下每个目录所占用的容量
--通配符 * 来代表每个目录。
du -sm /*

0/bin
146/boot
.....中间省略....
0/proc
.....中间省略....
1/tmp
3026/usr  # 系统初期最大就是他了啦!
513/var
2666/www
sh 复制代码
#流出opt目录,深度为1
du -h --max-depth=1 /opt

3. 查看所有设备及挂载情况

lsblk用于列出所有可用块设备的信息,而且还能显示他们之间的依赖关系,但是它不会列出RAM盘的信息。

语法

复制代码
lsblk

选项

shell 复制代码
-a, --all            显示所有设备。
-b, --bytes          以bytes方式显示设备大小。
-d, --nodeps         不显示 slaves 或 holders。
-D, --discard        print discard capabilities。
-e, --exclude <list> 排除设备 (default: RAM disks)。
-f, --fs             显示文件系统信息。
-h, --help           显示帮助信息。
-i, --ascii          use ascii characters only。
-m, --perms          显示权限信息。
-l, --list           使用列表格式显示。
-n, --noheadings     不显示标题。
-o, --output <list>  输出列。
-P, --pairs          使用key="value"格式显示。
-r, --raw            使用原始格式显示。
-t, --topology       显示拓扑结构信息。-a, --all            显示所有设备。
-b, --bytes          以bytes方式显示设备大小。
-d, --nodeps         不显示 slaves 或 holders。
-D, --discard        print discard capabilities。
-e, --exclude <list> 排除设备 (default: RAM disks)。
-f, --fs             显示文件系统信息。
-h, --help           显示帮助信息。
-i, --ascii          use ascii characters only。
-m, --perms          显示权限信息。
-l, --list           使用列表格式显示。
-n, --noheadings     不显示标题。
-o, --output <list>  输出列。
-P, --pairs          使用key="value"格式显示。
-r, --raw            使用原始格式显示。
-t, --topology       显示拓扑结构信息。

例子

sh 复制代码
1.lsblk

NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   10G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0    9G  0 part
  ├─centos-root 253:0    0    8G  0 lvm  /
  └─centos-swap 253:1    0    1G  0 lvm  [SWAP]
sr0              11:0    1  4.3G  0 rom


NAME :这是块设备名。
MAJ:MIN :本栏显示主要和次要设备号。
RM :本栏显示设备是否可移动设备。注意,在本例中设备sdb和sr0的RM值等于1,这说明他们是可移动设备。
SIZE :本栏列出设备的容量大小信息。例如10G表明该设备大小为10G,而1K表明该设备大小为1KB。
RO :该项表明设备是否为只读。在本案例中,所有设备的RO值为0,表明他们不是只读的。
TYPE :本栏显示块设备是否是磁盘或磁盘上的一个分区。在本例中,sda和sdb是磁盘,而sr0是只读存储(rom)。
MOUNTPOINT :本栏指出设备挂载的挂载点。
sh 复制代码
2.lsblk -f

NAME            FSTYPE      LABEL           UUID                                   MOUNTPOINT
sda
├─sda1          xfs                         248990cf-cffe-4b3f-ac4e-d2ee25459d01   /boot
└─sda2          LVM2_member                 Zl2Twp-gutn-oVHF-fCqn-YPRj-1vp4-KllWxh
  ├─centos-root xfs                         ef6483e7-9209-4f5d-9f53-5ed246ca47c4   /
  └─centos-swap swap                        d428d502-3119-4529-ab5a-f55588f1b98b   [SWAP]
sr0             iso9660     CentOS 7 x86_64 2018-11-25-23-54-16-00

4.分区

语法

复制代码
fdisk [必要参数][选择参数]

选项

sh 复制代码
1.必要参数:

-l 列出素所有分区表
-u 与"-l"搭配使用,显示分区数目

2.选择参数:
-s<分区编号> 指定分区
-v 版本信息

3.选项
m :显示菜单和帮助信息
a :活动分区标记/引导分区
d :删除分区
l :显示分区类型
n :新建分区
p :显示分区信息
q :退出不保存
t :设置分区号
v :进行分区检查
w :保存修改
x :扩展应用,高级功能

查看设备。下面的sdb是之前在虚拟机手动添加的硬盘,目的是练习分区、格式化、挂载、永久挂载命令

sh 复制代码
lsblk

NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   10G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0    9G  0 part
  ├─centos-root 253:0    0    8G  0 lvm  /
  └─centos-swap 253:1    0    1G  0 lvm  [SWAP]
sdb               8:16   0    1G  0 disk
sr0              11:0    1  4.3G  0 rom

新建分区

1.命令行输入,弹出以下内容

sh 复制代码
[root@localhost ~]#fdisk /dev/sdb
sh 复制代码
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x2f2536bd 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):

2.输入m,弹出以下内容

复制代码
m
sh 复制代码
命令操作
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a 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
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   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)

3.选择n新建分区,弹出以下内容

复制代码
n
sh 复制代码
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended

4.选择p,弹出以下内容

复制代码
p

#如果选择1增加1个分区,如果2就是增加2个分区
分区号 (1-4,默认 1):

5.选择1,弹出以下内容

复制代码
起始 扇区 (2048-2097151,默认为 2048):

6.回车,弹出以下内容

复制代码
Last 扇区, +扇区 or +size{K,M,G} (2048-2097151,默认为 2097151):

7.回车,弹出以下内容

复制代码
命令(输入 m 获取帮助):

8.输入w写入分区并退出,若不保存输入q

5.磁盘格式化

查看设备

sh 复制代码
lsblk -f
sh 复制代码
NAME            FSTYPE      LABEL           UUID                                   MOUNTPOINT
sda
├─sda1          xfs                         248990cf-cffe-4b3f-ac4e-d2ee25459d01   /boot
└─sda2          LVM2_member                 Zl2Twp-gutn-oVHF-fCqn-YPRj-1vp4-KllWxh
  ├─centos-root xfs                         ef6483e7-9209-4f5d-9f53-5ed246ca47c4   /
  └─centos-swap swap                        d428d502-3119-4529-ab5a-f55588f1b98b   [SWAP]
sdb
└─sdb1
sr0             iso9660     CentOS 7 x86_64 2018-11-25-23-54-16-00

语法

复制代码
mkfs

选项

sh 复制代码
-t 文件系统格式:用于指定格式化的文件系统,如 ext3、ext4;

例子

sh 复制代码
#将sdb1格式化
mkfs -t  ext4 /dev/sdb1

再次查看设备,sdb1出现了UUID,说明这块分区已经格式化了

sh 复制代码
lsblk -f
sh 复制代码
NAME            FSTYPE      LABEL           UUID                                   MOUNTPOINT
sda
├─sda1          xfs                         248990cf-cffe-4b3f-ac4e-d2ee25459d01   /boot
└─sda2          LVM2_member                 Zl2Twp-gutn-oVHF-fCqn-YPRj-1vp4-KllWxh
  ├─centos-root xfs                         ef6483e7-9209-4f5d-9f53-5ed246ca47c4   /
  └─centos-swap swap                        d428d502-3119-4529-ab5a-f55588f1b98b   [SWAP]
sdb
└─sdb1          ext4                        be5c9b0e-57d3-4574-ba58-5431a14b3a63
sr0             iso9660     CentOS 7 x86_64 2018-11-25-23-54-16-00

6.磁盘挂载与卸除

挂载

指的就是将设备文件中的顶级目录连接到 Linux 根目录下的某一目录(最好是空目录),访问此目录就等同于访问设备文件。

纠正一个误区,并不是根目录下任何一个目录都可以作为挂载点,由于挂载操作会使得原有目录中文件被隐藏,因此根目录以及系统原有目录都不要作为挂载点,会造成系统异常甚至崩溃,挂载点最好是新建的空目录。

前面讲过,根目录下的 /dev/ 目录文件负责所有的硬件设备文件,事实上,当 U 盘插入 Linux 后,系统也确实会给 U 盘分配一个目录文件(比如 sdb1),就位于 /dev/ 目录下(/dev/sdb1),但无法通过 /dev/sdb1/ 直接访问 U 盘数据,访问此目录只会提供给你此设备的一些基本信息(比如容量)。

总之,Linux 系统使用任何硬件设备,都必须将设备文件与已有目录文件进行挂载。

注意:用命令行挂载重启后会失效

语法

复制代码
mount

例子

shell 复制代码
1.根目录,新建newdisk。
--挂载的地方一定非要在根目录,也可以在root,也可以在home目录下
[root@localhost /]# mkdir newdisk

2.将sdb1挂载到newdisk
mount /dev/sdb1 /newdisk

查看设备。sdb1后面多了一个挂载点

复制代码
lsblk -f

NAME            FSTYPE      LABEL           UUID                                   MOUNTPOINT
sda
├─sda1          xfs                         248990cf-cffe-4b3f-ac4e-d2ee25459d01   /boot
└─sda2          LVM2_member                 Zl2Twp-gutn-oVHF-fCqn-YPRj-1vp4-KllWxh
  ├─centos-root xfs                         ef6483e7-9209-4f5d-9f53-5ed246ca47c4   /
  └─centos-swap swap                        d428d502-3119-4529-ab5a-f55588f1b98b   [SWAP]
sdb
└─sdb1          ext4                        be5c9b0e-57d3-4574-ba58-5431a14b3a63   /newdisk
sr0             iso9660     CentOS 7 x86_64 2018-11-25-23-54-16-00

永久挂载(自动挂载)

通过修改/etc/fstab实现永久挂载,添加完成后执行mount -a即可生效

sh 复制代码
1.进入fstab

vi /etc/fstab

2.添加挂载信息
方法一:通过名字直接写
/dev/sdb1                                       /newdisk                ext4    defaults        0 0

方法二通过UUID
UUID=be5c9b0e-57d3-4574-ba58-5431a14b3a63		/newdisk                ext4    defaults        0 0

重启后,查看设备挂载并没有消失

sh 复制代码
NAME            FSTYPE      LABEL           UUID                                   MOUNTPOINT
sda
├─sda1          xfs                         248990cf-cffe-4b3f-ac4e-d2ee25459d01   /boot
└─sda2          LVM2_member                 Zl2Twp-gutn-oVHF-fCqn-YPRj-1vp4-KllWxh
  ├─centos-root xfs                         ef6483e7-9209-4f5d-9f53-5ed246ca47c4   /
  └─centos-swap swap                        d428d502-3119-4529-ab5a-f55588f1b98b   [SWAP]
sdb
└─sdb1          ext4                        be5c9b0e-57d3-4574-ba58-5431a14b3a63   /newdisk
sr0             iso9660     CentOS 7 x86_64 2018-11-25-23-54-16-00

卸载

语法

复制代码
umount 设备名称 或者挂载目录

umount /dev/sdb1	或者umount /newdisk

选项

shell 复制代码
选项:
-f :强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情况下;
-n :不升级 /etc/mtab 情况下卸除。

例子

shell 复制代码
umount /dev/sdb1

查看设备。会发现sdb1后面的挂载点没有了

复制代码
lsblk -f

NAME            FSTYPE      LABEL           UUID                                   MOUNTPOINT
sda
├─sda1          xfs                         248990cf-cffe-4b3f-ac4e-d2ee25459d01   /boot
└─sda2          LVM2_member                 Zl2Twp-gutn-oVHF-fCqn-YPRj-1vp4-KllWxh
  ├─centos-root xfs                         ef6483e7-9209-4f5d-9f53-5ed246ca47c4   /
  └─centos-swap swap                        d428d502-3119-4529-ab5a-f55588f1b98b   [SWAP]
sdb
└─sdb1          ext4                        be5c9b0e-57d3-4574-ba58-5431a14b3a63
sr0             iso9660     CentOS 7 x86_64 2018-11-25-23-54-16-00

7.磁盘实用指令

1.统计文件夹下文件的个数

shell 复制代码
#统计etc下文件的个数
ls -l /etc | grep "^-" | wc -l

2.统计文件夹下目录的个数

sh 复制代码
#统计etc下目录的个数
ls -l /etc | grep "^d" | wc -l

3.统计文件夹下文件的个数,包括子文件夹里的

sh 复制代码
ls -lR /etc | grep "^-" | wc -l

4.统计文件夹下目录的个数,包括子文件夹里的

sh 复制代码
ls -lR /etc | grep "^d" | wc -l

5.以树状显示目录结构

sh 复制代码
1.安装tree
yum install tree

2.显示tmp
tree /tmp

/tmp/
├── systemd-private-6aabace300d647608d7f97fd4ca60046-chronyd.service-q3Lgjw
│   └── tmp
├── vmware-root_5964-726237471
├── vmware-root_5999-1681333115
├── vmware-root_6017-1715412458
└── vmware-root_6028-726237631

6 directories, 0 files

十四、进程管理

Linux中一切皆文件

(文件:读写执行(查看,创建,删除,移动,复制,编辑),权限(用户、用户组)。系统:(磁盘,进程))

对于我们开发人员来说,其实Linux更多偏向于使用即可!

基本概念

1、在Linux中,每一个程序都是有自己的一个进程,每一个进程都有一个id号!

2、每一个进程呢,都会有一个父进程!

3、进程可以有两种存在方式:前台!后台运行!

4、一般系统的服务都是后台运行的,而且都会常驻在系统中,只有关机才会结束。基本的程序都是前台运行的!

查看进程 ps

选项

shell 复制代码
-a 显示当前终端运行的所有的进程信息(当前的进程一个)
-u 以用户的信息显示进程
-x 显示后台运行进程的参数!

查看所有进程

shell 复制代码
ps -A

查看特定的进程。java进程。父进程id是7807

sh 复制代码
ps -ef | grep java

结果显示:
root       8104   7807  0 14:05 pts/1    00:00:00 grep --color=auto java

显示所有进程信息,连同命令行

sh 复制代码
ps -ef

--结果显示:
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 10:12 ?        00:00:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2      0  0 10:12 ?        00:00:00 [kthreadd]
root          3      2  0 10:12 ?        00:00:00 [ksoftirqd/0]
root          5      2  0 10:12 ?        00:00:00 [kworker/0:0H]
--字段含义
UID:表示用户ID
PID:表示进程ID
PPID:表示父进程号
C:表示CPU的占用率
STIME:进程的启动时间
TTY:登入者的终端机位置
TIME:表示进程执行起到现在总的CPU占用时间
CMD:表示启动这个进程的命令

显示所有进程更详细的信息,包括进程占用CPU、内存

sh 复制代码
ps -aux|grep sshd

--结果显示:
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.6 127980  6544 ?        Ss   10:12   0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2  0.0  0.0      0     0 ?        S    10:12   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    10:12   0:00 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S<   10:12   0:00 [kworker/0:0H]
--字段含义:
USER:表示哪个用户启动了这个进程
PID :进程ID
%CPU:进程CPU的占用率
%MEM:进程物理内存的占用率
VSZ :进程占用的虚拟内存量 (Kbytes)
RSS :进程当前实际上占用了多少内存
TTY :进程是在哪个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
STAT:该程序目前的状态,主要的状态有
  R :运行;该程序目前正在运作,或者是可被运作
  D:不可中断:一般是IO进程
  S :中断;该程序目前正在睡眠当中 (可说是 idle 状态),但可被某些讯号 (signal) 唤醒。
  T :停止:该程序目前正在侦测或者是停止了
  Z :僵尸:该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (僵尸) 程序的状态
START:该进程启动的时间点
TIME :进程从启动后到现在,实际占用CPU的总时间
COMMAND:启动该进程的命令

根据CPU、内存使用来降序排序

sh 复制代码
ps -aux --sort -pcpu

ps -aux --sort -pmem

查看进程树 pstree

sh 复制代码
#看父进程我们一般可以通过目录树结构来查看!
1.需要先安装
yum install psmisc

2.pstree -pu
-p 显示父id
-u 显示用户组

杀死进程 kill

杀掉进程,等价于window结束任务!

sh 复制代码
kill -9 进程的id

killall 进程名称

十五、压缩解压缩

概念

归档,也称为打包,指的是一个文件或目录的集合,而这个集合被存储在一个文件中。归档文件没有经过压缩,因此,它占用的空间是其中所有文件和目录的总和。

复制代码
通常,归档总是会和系统(数据)备份联系在一起,不过,有关数据备份的内容,留到后续章节讲,本章仅学习归档命令的基本使用。

和归档文件类似,压缩文件也是一个文件和目录的集合,且这个集合也被存储在一个文件中,但它们的不同之处在于,压缩文件采用了不同的存储方式,使其所占用的磁盘空间比集合中所有文件大小的总和要小。

压缩 是指利用算法将文件进行处理,已达到保留最大文件信息,而让文件体积变小的目的。其基本原理为,通过查找文件内的重复字节,建立一个相同字节的词典文件,并用一个代码表示。比如说,在压缩文件中,有不止一处出现了 "C语言中文网",那么,在压缩文件时,这个词就会用一个代码表示并写入词典文件,这样就可以实现缩小文件体积的目的。

1.tar

压缩

shell 复制代码
选项:
-z           压缩tar.gz格式    
-j			 压缩tar.bz2格式
-c           代表压缩
-v           详细显示操作信息,压缩文件的过程
-f           后面紧跟 压缩之后的文件名
shell 复制代码
#将目录里所有jpg文件打包成jpg.tar
tar -cvf jpg.tar *.jpg 

#将目录里所有jpg文件打包成jpg.tar.gz
tar -zcvf jpg.tar *.jpg

#把anaconda-ks.cfg文件和/tmp目录打包成ana.tar文件包
tar -cvf ana.tar anaconda-ks.cfg /tmp/

#将chen归档并压缩成test.tar.gz格式压缩包(test为压缩包名)
tar -zcvf test.tar.gz  chen

#将chen打包bz2格式压缩包
tar -jcvf test.tar.bz2  chen

解压缩

默认提取到当前目录,不会创建和压缩文件名称一样的目录

shell 复制代码
选项:
-z                    解压tar.gz格式
-j					  解压tar.bz2格式
-x                    代表解压
-v                    解压过程详细信息
-f                    后面紧跟 解压之后的文件名
-C 					  大写C。指定解压缩目录
shell 复制代码
#解压 tar包
tar -xvf file.tar 

#将gz格式test解压到目录/home/dir1
tar -zxvf test.tar.gz  -C /home/dir1

#将bz2格式test解压到目录/home/dir1
tar -jxvf test.tar.bz2 -C /home/dir1

2.zip

需要安装

shell 复制代码
yum install zip
yum install unzip

压缩

shell 复制代码
选项:
-r	递归压缩目录,及将制定目录下的所有文件以及子目录全部压缩。
-m	将文件压缩之后,删除原始文件,相当于把文件移到压缩文件中。
-o    将压缩文件内的所有文件的最新变动时间设为压缩的时间
-v	显示详细的压缩过程信息。
-q	在压缩的时候不显示命令的执行过程。
-压缩级别	压缩级别是从 1~9 的数字,-1 代表压缩速度更快,-9 代表压缩效果更好。
-u	更新压缩文件,即往压缩文件中添加新文件。
shell 复制代码
#将anaconda-ks.cfg压缩,包名为ana
zip ana.zip anaconda-ks.cfg

#使用 -r 压缩目录
--创建目录
mkdir dir1

--压缩目录
zip -r dir1.zip dir1

解压

shell 复制代码
选项:
-d 		目录名	将压缩文件解压到指定目录下。
-n		解压时并不覆盖已经存在的文件。
-o		解压时覆盖已经存在的文件,并且无需用户确认。
-v		查看压缩文件的详细信息,包括压缩文件中包含的文件大小、文件名以及压缩比等,但并不做解压操作。
-t		测试压缩文件有无损坏,但并不解压。
-x  	指定不要处理压缩文件中的那些文件
shell 复制代码
#不论是文件压缩包,还是目录压缩包,都可以直接解压缩
unzip dir1.zip

#使用 -d 选项手动指定解压缩位置
unzip -d /tmp/ ana.zip

十六、服务管理

1.systemctl管理指令

语法

sh 复制代码
#启动服务
systemctl start 服务名

#停止服务
systemctl stop 服务名

#重启服务
systemctl restart 服务名

#查看服务状态
systemctl status 服务名

2.systemctl设置服务的自启动状态

sh 复制代码
#查看服务开机启动状态,grep可以进行过滤
systemctl list-unit-files [| grep 服务名]

#设置服务开机启动
systemctl enable 服务名

#关闭服务开机启动
systemctl disable 服务名

#查看某个服务是否是自启动的
systemctl is-enabled 服务名

3.应用

sh 复制代码
#查看防火墙开机启动状态
systemctl list-unit-files | grep firewalld

#查看防火墙当前状况
systemctl status firewalld

#查看防火墙是否自启动
systemctl is-enabled firewalld

4.防火墙配置

复制代码
教程:https://www.cnblogs.com/auguse/p/13325522.html

1、查看firewall的状态

shell 复制代码
firewall-cmd --state

2、firewalld基本命令

sh 复制代码
#查看状态
systemctl status firewalld
shell 复制代码
# 开启 
systemctl start  firewalld

# 重启 
systemctl restart  firewalld

# 关闭
systemctl stop firewalld

# 开机启动
systemctl enable firewalld      

#取消开机启动
systemctl disable firewalld            

4、查看防火墙规则

shell 复制代码
firewall-cmd --list-all 

5.查看端口列表

sh 复制代码
firewall-cmd --permanent --list-ports

结果:
9090/tcp 9100/tcp 3000/tcp

6、查询、开放、关闭端口

查询端口是否开放

shell 复制代码
firewall-cmd --query-port=8080/tcp

开放端口

sh 复制代码
# 开放8080端口
1.方法一
firewall-cmd --zone=public --add-port=8080/tcp --permanent

2.方法二
firewall-cmd --permanent --add-port=8080/tcp

#更新防火墙规则,每次开放完后要执行此命令
firewall-cmd --reload
shell 复制代码
# 参数解释
1.firewall-cmd:是Linux提供的操作firewall的一个工具;
2.--zone=public:设置作用域为公共的
3.--add-port:标识添加的端口;
4.--permanent:表示设置为永久生效,没有此参数重启后失效;

关闭端口

shell 复制代码
#关闭8080端口
1.方法一
firewall-cmd --zone=public --remove-port=8080/tcp --permanent

2.方法二
firewall-cmd --permanent --remove-port=8080/tcp

#更新防火墙规则,每次开放完后要执行此命令
firewall-cmd --reload

十七、动态监控系统

1.介绍

top与ps命令很相似,他们都是用来显示正在执行的进程。top与ps最大的不同之处,在于top在执行一段时间可以更新正在运行的进程

2.应用

查看所有进程的资源占用情况

复制代码
top

top命令行选项

sh 复制代码
-d	秒数。指定top命令每隔几秒更新。默认是3秒

-i	使top不显示任何限制或者僵死进程

-p	通过指定监控进程ID来仅仅监控某个进程的状态
sh 复制代码
#指定系统每隔5秒自动更新
top -d 5

交互命令

输入top命令后,按下面键进行切换

sh 复制代码
#监控每个逻辑CPU的状况
top  ,按 1

#高亮显示当前运行进程
top ,按 b

#显示进程完整路径和程序名
top ,按 c

#切换显示CPU
top,按t

#按CPU使用率从大到小排序
top,按P

#切换显示Memory
top,按m

#按Memory占用率从大到小排序
top,按M

#以PID排序
top,按N

#按累计运行时间Time从大到小排序
top,按T

#高亮CPU列
top,按b、x

#彩色高亮显示
top,按z

#调配色方案
top,按Z或shift+z

#通过"shift + >"或"shift + <"可以向右或左改变排序列
top shift + >或shift + <

#忽略闲置和僵死进程,这是一个开关式命令
top,按i

#杀掉进程
top,按k,输入PID
sh 复制代码
#监控特定用户,比如监控fox
1.输入top命令,然后回车

2.输入u,然后输入fox,再回车
sh 复制代码
#终止指定进程,终止fox用户登录

1.输入top命令,回车

2.输入k,输入要结束的进程ID,再回车

3.输入9,再回车。强制删除,再看就没有fox登录状态了

3. top命令监控列表的详细解析

统计信息区(系统资源信息区)

前五行,即列表上方的五行

![img](https://img-blog.csdnimg.cn/img_convert/940a31e9c093490ab56273cba42435e1.png) > 第一行:输出系统任务队列信息 * **19:46:10**:系统当前时间 * **up 2days 2:53**:系统开机后到现在的总运行时间 * **1 user**:当前登录用户数 * **load average: 0, 0.04, 0.05**:系统负载,系统运行队列的平均利用率,可认为是可运行进程的平均数;三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值;单核CPU中load average的值=1时表示满负荷状态,多核CPU中满负载的load average值为1\*CPU核数 > 第二行:任务进程信息 \[![img](https://img-blog.csdnimg.cn/img_convert/81f6279fbcc4f1c96d0caccf0ed1b05a.png) * \*\*total:\*\*系统全部进程的数量 * \*\*running:\*\*运行状态的进程数量 * \*\*sleeping:\*\*睡眠状态的进程数量 * \*\*stoped:\*\*停止状态的进程数量 * \*\*zombie:\*\*僵尸进程数量 > 第三行:CPU信息 \[![img](https://img-blog.csdnimg.cn/img_convert/5e262b00c4828930f8fc1df6de245672.png) * \*\*us:\*\*用户空间占用CPU百分比 * \*\*sy:\*\*内核空间占用CPU百分比 * \*\*ni:\*\*已调整优先级的用户进程的CPU百分比 * \*\*id:\*\*空闲CPU百分比,越低说明CPU使用率越高 * \*\*wa:\*\*等待IO完成的CPU百分比 * \*\*hi:\*\*处理硬件中断的占用CPU百分比 * \*\*si:\*\*处理软中断占用CPU百分比 * \*\*st:\*\*虚拟机占用CPU百分比 > 第四行:物理内存信息 \[![img](https://img-blog.csdnimg.cn/img_convert/28c6721212776bcaad14812cd64e30c0.png) 以下内存单位均为**MB** * **total**:物理内存总量 * **free**:空闲内存总量 * **used**:使用中内存总量 * **buff/cacge**:用于内核缓存的内存量 > 第五行:交换区内存信息 \[![img](https://img-blog.csdnimg.cn/img_convert/ca5a882bbc8bbf9807cdb67959122a4e.png) * **free**:空闲交换区总量 * **used**:使用的交换区总量 * **avail Mem**:可用交换区总量 \*\*注:\*\*如果used不断在变化, 说明内核在不断进行内存和swap的数据交换,说明内存真的不够用了 \*\*问题:\*\*内存空间还剩多少空闲呢? \*\*答案:\*\*空闲内存=空闲内存总量+缓冲内存量 +可用交换区总量 #### 进程信息区(进程列表) \[![img](https://img-blog.csdnimg.cn/img_convert/117de51ebb86b0d93911f5e2c96e68b7.png) * **PID**:进程号 * **USER**:运行进程的用户 * **PR**:优先级 * **NI**:nice值。负值表示高优先级,正值表示低优先级 * **VIRT**:进程虚拟内存的大小,只要是进程申请过的内存,即便还没有真正分配物理内存,也会计算在内;VIRT=SWAP+RES * **RES**:进程实际使用的物理内存大小,不包括 Swap 和共享内存 * **SHR** :共享内存大小,比如**与其他进程共同使用的**共享内存、加载的动态链接库以及程序的代码段等 * **S** :进程状态 * R=运行状态 * S=睡眠状态 * D=不可中断的睡眠状态 * T=被跟踪/停止 * Z=僵尸进程 * **%CPU**:CPU 使用率 * **%MEM**:进程使用武力内存占系统总内存的百分比 * **TIME+**:上次启动后至今的总运行时间 * **COMMAND**:命令名or命令行 > 内存的重点 * 虚拟内存通常并不会全部分配给物理内存,从上面的输出可以发现每个进程的虚拟内存都比物理内存大得多 * 共享内存 SHR 并不一定是共享的,比如程序的代码段、非共享的动态链接库 * SHR 也包括了进程间真正共享的内容,所以在计算多个进程的内存使用时,不要把所有进程的 SHR 直接相加得出结果 > %CPU * 表示进程的 CPU 使用率 * 是用户态和内核态 CPU 使用率的**总和(us+sy)** * 包括进程用户空间使用的 CPU、通过系统调用执行的内核空间 CPU、在就绪队列等待运行的 CPU * 在虚拟环境中, 它还包括了运行虚拟机占用的 CPU * 没有细分进程的用户态 CPU 和内核态 CPU #### 进程状态 * R=运行状态 * S=睡眠状态 * D=不可中断的睡眠状态 * T=被跟踪/停止 * Z=僵尸进程 ## 十八、监控网络状态 > 语法 netstat [选项] > 选项 -an 按一定顺序排列输出 -p 显示哪个进程在调用 > 例子 ```sh #查看服务名为sshd的服务的信息 netstat -anp | grep sshd ``` ## 十九、rpm和yum ### 1.rpm rpm用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文·件。RPM是RedHat Package Manager (RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat的标志,但理念是通用的。 Linux的分发版本都有采用(suse,redhat, centos等等),可以算是公认的行业标准了。 #### rpm包查看 > rpm包简单查询指令 ```sh #查询安装的所有firfox包 rpm -qa | grep firefox --rpm包名基本格式: firefox-60.2.2-1.el7.centos7.x86_64 名称:firefox 版本号:60.2.2-1 适用操作系统:el7.centos7.x86_64。表示centos7.x的64位系统,如果是i686、i386表示32位系统,noarch表示通用 #查询firfox软件包是否安装 rpm -q firefox #查询软件包信息 rpm -qi firefox #查看软件安装哪里了,以及软件包中的软件 rpm -ql firefox #文件全路径名,查询文件所属的软件包 rpm -qf /usr/lib64/firefox/platform.ini ``` #### rpm包卸载 > 语法 rpm -e 包名称 > 例子 ```sh #删除firfox软件包 rpm -e firefox #强制删除。但是不建议,因为依赖于该软件包的程序可能会无法运行 rpm -e --nodeps firefox ``` #### rpm包安装 > 语法 rpm -ivh 包全路径名称 > 参数说明 i=install 安装 v=verbose 提示 h=hash 进度条 > 例子 ```sh #安装火狐。前提是将已经下载好的rpm上传到了opt目录下 rpm -ivh /opt/firefox-60.2.2-1.el7.centos7.x86_64 ``` ### 2.yum Yum是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。 #### 查看 > 语法 ```sh #查询yum服务器是否有需要安装的软件 yum list | grep 包名称 ``` > 例子 ```sh yum list | grep firefox firefox.i686 78.7.0-2.el7.centos updates firefox.x86_64 78.7.0-2.el7.centos updates ``` #### 安装 > 语法 yum install 包名称 > 例子 ```sh #安装firefox yum install firefox ``` ## 二十、软件安装 ### 1.安装方式 * yum * rpm 类似于windows安装包 * 解压(tar包) * make 源码直接编译的安装方式 ### 2...JDK安装 #### tar包解压安装 > 上传tar包到tmp目录下 jdk-8u211-linux-x64.tar.gz > 解压 ```sh 1.进入tmp --注意版本,别傻乎乎直接复制 cd /tmp 2.解压至opt目录下 tar -zxvf jdk-8u211-linux-x64.tar.gz -C /opt 3.进入opt目录将jdk改名 cd /opt mv jdk1.8.0_211 jdk1.8 ``` > 配置环境变量 1.进入文件 vi /etc/profile 2.将下面的内容添加在末尾 # JAVA_HOME export JAVA_HOME=/opt/jdk1.8 export PATH=$PATH:$JAVA_HOME/bin 3.执行命令使配置生效 source /etc/profile 4.检测安装是否成功,分别输入以下3个命令 java javac java -version #### rpm安装 > rpm下载地址http://www.oracle.com/technetwork/java/javase/downloads/index.html > 如果有安装jdk 则卸载 ```sh 1.查看java版本信息 java -version java version "1.8.0_121" Java(TM) SE Runtime Environment (build 1.8.0_121-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode) 2.查看jdk的rpm安装包 rpm -qa|grep jdk jdk1.8.0_121-1.8.0_121-fcs.x86_64 3.卸载 rpm -e --nodeps jdk1.8.0_121-1.8.0_121-fcs.x86_64 4.查看 java -version -bash: /usr/bin/java: No such file or directory # OK ``` > 将JDK的rpm包上传至opt目录下 jdk-8u221-linux-x64.rpm > 安装JDK ```shell rpm -ivh /opt/jdk-8u221-linux-x64.rpm ``` > 配置环境变量 ```sh 1.进入profile vi /etc/profile 2.将下面的信息,放在文件末尾 JAVA_HOME=/usr/java/jdk1.8.0_221-amd64 CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin export PATH CLASSPATH JAVA_HOME 3.保存退出 按Esc键,随后按冒号,输入wq保存退出 4.让新增的环境变量生效! source /etc/profile 4.检测安装是否成功,分别输入以下3个命令 1.java 2.javac 3.java -version java version "1.8.0_221" Java(TM) SE Runtime Environment (build 1.8.0_221-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode) ``` ### 3.Tomcat安装 #### tar包解压 > 上传tar包至tmp目录下 apache-tomcat-8.5.55.tar.gz > 解压 ```sh 1.进入tmp目录 cd /tmp 2.解压至opt目录下 tar -zxvf apache-tomcat-8.5.55.tar.gz -C /opt 3.进入opt目录,改名改为tomcat cd /opt mv apache-tomcat-8.5.55 tomcat ``` > 启动tomcat * 方式一 #直接通过绝对路径启动 /opt/tomcat/bin/startup.sh * 方式二 1.需要先给执行权限,这里给全部权限 cd /opt/tomcat/bin #先进入bin目录 chmod 777 startup.sh #给所有权限 > 开放8080端口 ```sh # 查询端口是否开放 firewall-cmd --query-port=8080/tcp # 开放8080端口 firewall-cmd --permanent --add-port=8080/tcp #更新防火墙规则 firewall-cmd --reload ``` ```sh # 参数解释 1、firwall-cmd:是Linux提供的操作firewall的一个工具; 2、--permanent:表示设置为永久生效,没有此参数重启后失效; 3、--add-port:标识添加的端口; ``` > 访问 别傻乎乎复制,注意自己的ip和端口 http://172.16.6.117:8080/ ### 4.MySQL安装 #### tar包解压安装 > 上传tar包至root目录下 mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz > ⾸先查询已安装的Mariadb 安装包 rpm -qa|grep mariadb mariadb-libs-5.5.60-1.el7_5.x86_64 > 卸载 rpm -e --nodeps mariadb-libs > 解压至/usr/local/目录下,并重命名为mysql 1.解压 tar -zxvf /root/mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz -C /usr/local/ 2.进入local cd /usr/local 3.重命名 mv mysql-5.7.30-linux-glibc2.12-x86_64 mysql > 创建MySQL⽤户和⽤户组 1.创建用户组 groupadd mysql 2.创建用户,并指定用户组 useradd -g mysql mysql > 修改MySQL⽬录的归属⽤户 chown -R mysql:mysql ./ > 如果有my.cnf,先将其删除 rm -rf /etc/my.cnf > 新建MySQL配置文件,并将下面内容写入,最后ESC--\>wq保存退出 vi /etc/my.cnf [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 socket=/var/lib/mysql/mysql.sock [mysqld] skip-name-resolve #设置3306端⼝ port = 3306 socket=/var/lib/mysql/mysql.sock # 设置mysql的安装⽬录 basedir=/usr/local/mysql # 设置mysql数据库的数据的存放⽬录 datadir=/usr/local/mysql/data # 允许最⼤连接数 max_connections=200 # 服务端使⽤的字符集默认为8⽐特编码的latin1字符集 character-set-server=utf8 # 创建新表时将使⽤的默认存储引擎 default-storage-engine=INNODB lower_case_table_names=1 max_allowed_packet=16M > 创建/var/lib/mysql ⽬录,并修改权限 1.创建 mkdir /var/lib/mysql 2.修改权限 chmod 777 /var/lib/mysql > 正式开始安装MySQL 1.进入mysql cd /usr/local/mysql 2.安装。执行完此命令后会出现下图。记住下⾯打印出来的root 的密码,后⾯⾸次登陆需要使⽤ ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data ![安装mysql](https://img-blog.csdnimg.cn/img_convert/0c9b104ea8003258dc796e4dcbc677ad.jpeg) > 复制启动脚本到资源⽬录,并修改/etc/init.d/mysqld ,修改其basedir 和datadir 为实际对应⽬录,最后 保存退出 1.复制 cp ./support-files/mysql.server /etc/init.d/mysqld 2.进入mysqld vi /etc/init.d/mysqld 3.修改成下面效果 basedir=/usr/local/mysql datadir=/usr/local/mysql/data 4.最后ESC-->wq保存退出 ![修改mysql配置文件](https://img-blog.csdnimg.cn/img_convert/f52e924ba4405b6165e9c53234e995d1.jpeg) > 设置MySQL系统服务并开启⾃启 1.⾸先增加mysqld 服务控制脚本执⾏权限 chmod +x /etc/init.d/mysqld 2.同时将mysqld 服务加⼊到系统服务 chkconfig --add mysqld 3.最后检查mysqld 服务是否已经⽣效即可 chkconfig --list mysqld ![设置mysql开机自启](https://img-blog.csdnimg.cn/img_convert/abe2ba627068422b265a7f32ed1fe57c.jpeg) 这样就表明mysqld 服务已经⽣效了,在2、3、4、5运⾏级别随系统启动⽽⾃动启动,以后可以直接使 ⽤service 命令控制mysql 的启停。 > 启动mysqld服务 service mysqld start ![启动mysql服务](https://img-blog.csdnimg.cn/img_convert/d4c13c7f10a3ca62d6efa2b5b431033d.jpeg) > 将MySQL 的bin ⽬录加⼊path 环境变量。 这样⽅便以后在任意⽬录上都可以使⽤mysql 提供的命令。 1.编辑~/.bash_profile,在⽂件末尾处追加如下信息,最后保存退出 vi ~/.bash_profile export PATH=$PATH:/usr/local/mysql/bin ![配置环境变量](https://img-blog.csdnimg.cn/img_convert/f82dd0033db18e9bb775d9d89f316cde.jpeg) > 执⾏如下命令使环境变量⽣效 source ~/.bash_profile > ⾸次登陆MySQL。之前安装完成后的提示密码:jjipg5rg\&ofQ 以root 账户登录mysql ,使⽤上⽂安装完成提示的密码进⾏登⼊ mysql -u root -p ![登录mysql](https://img-blog.csdnimg.cn/img_convert/d7fb549c5d742295abe3554e878a53a6.jpeg) > 修改ROOT账户密码 在mysql的命令⾏执⾏如下命令即可,密码可以换成你想⽤的密码即可 #123456是你要设置的密码 #user()表示当前用户 alter user user() identified by "123456"; #刷新生效 flush privileges; ![修改密码](https://img-blog.csdnimg.cn/img_convert/4ebc53bb0d02801bb56bb51f94f5fbe8.jpeg) > 设置远程主机登录。分别执行下面3条命令 use mysql; grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option; flush privileges; ![mysql设置远程登录](https://img-blog.csdnimg.cn/img_convert/a3e5431dcedc67e7890c6ad2f95c27a0.jpeg) > 退出mysql exit > 开放3306端口。不开放Navicat会连接不上 # 查询端口是否开放,如果结果为no,那么继续执行下面语句 firewall-cmd --query-port=3306/tcp # 开放3306端口 firewall-cmd --permanent --add-port=3306/tcp #更新防火墙规则 firewall-cmd --reload > Navicat连接测试 ![Navicat连接测试](https://img-blog.csdnimg.cn/img_convert/50a100806d4b314addee4557f1fc0c21.jpeg) #### rpm、yum安装 > 将rpm包上传至opt目录下 mysql57-community-release-el7-11.noarch.rpm > 安装 ```sh rpm -ivh /opt/mysql57-community-release-el7-11.noarch.rpm ``` > 更改mysql配置文件 ```sh vi /etc/yum.repos.d/mysql-community.repo ``` ```sh #5.6的enabled=0 改为1 enabled=1 #5.7的enabled=1 改为0 enabled=0 ``` > 安装mysql ```sh yum install mysql-community-server 点击y回车安装 ``` > 查看mysql ```sh 查找mysql:systemctl list-unit-files | grep mysql 查看mysql服务状态: systemctl status mysqld 启动mysql: systemctl start mysqld 查看mysql服务状态: systemctl status mysqld mysql服务随系统启动 执行该命令 :systemctl enable mysqld ``` > mysql设置密码 ```sh #进入mysql: mysql -u root -p 新安装没有密码 回车进入 #查看数据库: show databases #进入mysql修改密码: use mysql; update user set password=password('123456') where user='root'; flush privileges; ``` > mysql程授权 ```sh #mysql设置远程登录: grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option; #刷新 flush privileges; ``` ### 5.docker安装 #### 1.安装环境要求 ##### 内核版本要求 Linux要求内核3.0以上 uname -r 结果:3.10.0-957.el7.x86_64 ##### Centos7 * 要安装 Docker Engine,需要 CentOS 7 的维护版本,不支持或未测试存档版本(一句话:需要正常迭代版本的 Centos 7 系统,其他系统都不行) * 必须启用 centos-extras 存储库,该存储库默认情况下处于启用状态,但是如果已禁用它,则需要重新启用它 * 建议使用 overlay2 存储驱动程序 ##### 为什么不用别的版本? * CentOS 6 因内核太旧,即使支持安装 docker,但会有各种问题,不建议安装 * CentOS 7 的 extras 源虽然可以安装 docker,但包比较旧,建议从官方源或镜像源站点下载安装 docker * CentOS 8 有新技术 podman 代替 docker * 因此建议在 CentOS 7 上安装 docker #### 2.安装 ##### 1. CentOS7更换yum源 Linux使用的下载源服务器属于国外,下载速度相对国内会慢很多,像大家日常使用的阿里云和腾讯云等国内服务器厂商,镜像源都默认为自己相关的镜像源,所以在使用时下载应用的速度很快。 1.备份(针对所有CentOS可用,备份文件在当前路径下) mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.安装wget yum -y install wget 3.下载CentOS 7的repo文件 如果还wget安装不了的话,请使用curl安装(第2条命令) 1.阿里云源: wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo #或者 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 2.网易云源: wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo 4.更新镜像源 1.#清除缓存 yum clean all 2.#生成缓存 yum makecache 3.更新yum源,等待更新完毕即可。(执行加载完后会卡顿一会) yum -y update 4.再次清除 yum clean all 5再次生成缓存 yum makecache ##### 2.安装docker ###### 官方安装手册参考 https://docs.docker.com/engine/install/centos/ ###### 查看Centos版本 cat /etc/redhat-release ###### yum安装gcc 这一步可以暂时跳过 yum -y install gcc yum -y install gcc-c++ ###### 卸载旧版本docker 1.查找是否有旧版本的docker yum list installed | grep docker 2.移除旧版本 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine 如果出现下图就可以了 ![删除旧docker](https://img-blog.csdnimg.cn/img_convert/f3b85d33d39d028c372e5c9e8e2ca970.jpeg) **注意** * /var/lib/docker/ 下的内容(包括 images,containers,volumes,networks)被保留 * Docker Engine 软件包现在称为 docker-ce ###### 安装 * 使用 Docker 仓库进行安装 在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库,随后可以从仓库安装和更新 Docker。 1.配置 1.安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。 yum install -y yum-utils device-mapper-persistent-data lvm2 2.添加软件源信息,国内 Repository 更加稳定 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 3.更新 yum makecache fast 2.安装最新版本的 Docker Engine 和 Container yum install docker-ce docker-ce-cli containerd.io **注意** * 如果提示接受**GPG密钥**,请验证指纹是否与 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35 匹配,如果是,可接受 * 安装成功后不代表 Docker 已成功,且 Docker 组虽已创建,但没有用户添加到该组 3.启动docker systemctl start docker 4.通过运行hello-world 映像来验证是否正确安装了Docker Engine docker run hello-world 在安装过程中第一次失败了,重新运行了命令又好了。 ![测试docker](https://img-blog.csdnimg.cn/img_convert/8a112c2d00b634a221c9e901651cfde6.jpeg) #### 3.docker配置镜像加速 ##### 1.阿里云镜像加速地址 * 阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors * 登录后,左侧菜单选中镜像加速器就可以看到你的专属地址了 ![获取阿里云镜像加速地址](https://img-blog.csdnimg.cn/img_convert/010cf975519cb5c3fb784d4da00b414f.jpeg) ##### 2.配置文件 1.新建docker目录 mkdir -p /etc/docker 2.在 /etc/docker/下创建daemon.json,并添加刚才获取的阿里云镜像地址,最后保存退出 vi /etc/docker/daemon.json 以下json内容每个人的不一样 { "registry-mirrors": ["https://0ij4sffa.mirror.aliyuncs.com"] } 3.设置生效,并启动docker systemctl daemon-reload # 重启docker systemctl restart docker ##### 3.也可以添加多个镜像地址 配置多个地址,避免某个站点不行时可以自动切换到后面的站点 vi /etc/docker/daemon.json { "registry-mirrors": ["https://0ij4sffa.mirror.aliyuncs.com", "https://cr.console.aliyun.com/", "http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn", "https://reg-mirror.qiniu.com"] } systemctl daemon-reload # 重启docker systemctl restart docker #### 4.docker服务和容器设置开机自启 > 在etc/rc.d/rc.local目录下写上需要开机启动的命令: ```sh 1.先给文件拥有者给 执行权限 x chmod +x /etc/rc.d/rc.local 2.查看所有容器ID。包括未启动的容器 docker ps -a 3.进入rc.local vi /etc/rc.d/rc.local 4.进入后,在touch /var/lock/subsys/local下方添加docker服务启动命令和docker容器开机自启命令 #docker服务开机自启 systemctl start docker #docker容器开机自启 docker start fcab64956a00 2a6a314eac60 --fcab64956a00 2a6a314eac60 分别是mysql和tomcat的容器ID,容器id可以通过docker ps -a查看所有容器 ``` #### 5.卸载docker yum remove docker-ce docker-ce-cli containerd.io \*\*备注:\*\*主机上的 Images、containers、volumes、自定义配置文件不会被删除 > 若要删除执行下面命令 rm -rf /var/lib/docker ### 6.宝塔面板安装 https://www.bilibili.com/video/av91821322 ## 二十一、MySQL5.7修改密码 ### update修改 * update直接编辑那个自动的mysql库中的user表 * use mysql的意思是切换到mysql这个库,这个库是所有的用户表和权限相关的表都在这个库里面,我们进入到这个库才能修改这个库里面的表。 * mysql5.7 user表里已经去掉了password字段,改为了authentication_string。 ```mysql 1.先进行登录 mysql -u root -p 2.切换mysql库 use mysql; 3.修改 格式:update user set authentication_string=password("新密码") where user='用户名'; 例子:update user set authentication_string=password("112233") where user='root'; 4.刷新权限 flush privileges; 5.exit退出,重新登录 ``` 注意:如果Mysql的版本是5.7以下的话update语句更换如下: ```mysql update user set password=passworD("112233") where user='root'; ``` ### alter修改 ```mysql 1.先进行登录 mysql -u root -p 2.修改 格式:alter user "用户名" identified by "新密码"; 也可以使用alter user user() identified by "123456";#user()表示当前用户 例子:alter user "root" identified by "112233"; 3.刷新权限 flush privileges; 4.exit退出,重新登录 ``` ### 修改远程授权密码 mysql修改完密码后,远程授权也要修改,否则Navcait会连接不上 ```mysql #登录 use mysql; #授权。 格式:grant all privileges on *.* to 'root'@'%' identified by '密码' with grant option; 例子:grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option; #刷新权限,否则不会生效 flush privileges; ``` ## 二十二、MySQL5.7忘记密码 > 检查mysql服务是否启动,如果启动就关闭 ```shell #检查 ps -ef | grep -i mysql #关闭 service mysqld stop ``` > 修改mysql的配置文件my.conf ```sh 1.进入文件 vi /etc/my.cnf 2.在文件的[mysqld]标签下添加一句:skip-grant-tables,最后保存退出 ``` ![mysql忘记密码修改配置文件](https://img-blog.csdnimg.cn/img_convert/96dc9d67428d27960643247468e3f42b.jpeg) > 启动数据库 ```sh service mysqld start ``` > 修改密码 ```shell 1.进入mysql mysql -u root 2.切换到mysql表 use mysql; 3.修改 update user set authentication_string=password("112233") where user='root'; 4.exit退出,重新登录 ``` > 重新进入mysql的配置文件my.conf 将刚才添加的skip-grant-tables删除 ```sh vi /etc/my.cnf ``` > 重启数据库 ```sh service mysqld restart ``` > 用刚才修改的密码重新登录mysql就好了 ```sh musql -u root -p ``` ## 二十三、配置环境变量的几种方式 ### 1.环境变量配置文件 | 用户 | 环境变量配置文件 | |---------|-----------------------------------------| | 所有用户 | /ect/profile/etc/bashrc/etc/environment | | root | ~/.bashrc~/.bash-profile | | 非root用户 | /home/非root用户名/.bashrc | #### 更新环境变量 source /etc/profile or . /etc/profile  ### 2.环境变量配置方式 #### Linux读取环境变量 读取系统已有环境变量的方法 export 显示当前系统定义的所有环境变量 echo $PATH 输出当前的PATH环境变量的值 [![img](https://img-blog.csdnimg.cn/img_convert/839c3ab735129d84a4195c05a36c0bb4.png)](https://img2018.cnblogs.com/i-beta/1896874/202001/1896874-20200113144636196-1658800887.png) PATH 变量定义的是运行命令的查找路径,以冒号 : 分割不同的路径 #### 方式一: export PATH export PATH=/usr/local/src/python3/bin:$PATH # 或者把PATH放在前面 export PATH=$PATH:/usr/local/src/python3/bin ##### 注意点 * 生效时间:立即生效 * 生效期限:当前打开的终端有效,窗口关闭后无效 * 生效范围:当前登录用户 * 需要加上$PATH,否则会覆盖原有路径 #### 方式二: vim \~/.bashrc vim ~/.bashrc # 在最后一行加上 export PATH=$PATH:/usr/local/src/python3/bin ##### 注意点 * 生效时间:使用相同的用户打开新的终端时生效,或者手动 source \~/.bashrc 生效 * 生效期限:永久有效 * 生效范围:当前登录用户 * 可能会被后续的环境变量文件覆盖了PATH的值 #### 方式三: vim \~/.bash_profile vim ~/.bash_profile # 在最后一行加上 export PATH=$PATH:/usr/local/src/python3/bin ##### 注意点 * 生效时间:使用相同的用户打开新的终端时生效,或者手动 source \~/.bash_profile 生效 * 生效期限:永久有效 * 生效范围:当前登录用户 * 如果没有 \~/.bash_profile 文件,则可以编辑 \~/.profile 文件或者新建一个 #### 方式四: vim /etc/bashrc # 如果/etc/bashrc文件不可编辑,需要修改为可编辑 chmod -v u+w /etc/bashrc vim /etc/bashrc # 在最后一行加上 export PATH=$PATH:/usr/local/src/python3/bin ##### 注意点 * 生效时间:使用相同的用户打开新的终端时生效,或者手动 source /etc/bashrc 生效 * 生效期限:永久有效 * 生效范围:所有用户 #### 方式五: vim /etc/profile # 如果/etc/profile文件不可编辑,需要修改为可编辑 chmod -v u+w /etc/profile vim /etc/profile # 在最后一行加上 export PATH=$PATH:/usr/local/src/python3/bin ##### 注意点 * 生效时间:使用相同的用户打开新的终端时生效,或者手动 source /etc/profile 生效 * 生效期限:永久有效 * 生效范围:所有用户 #### 方式六: vim /etc/environment # 如果/etc/bashrc文件不可编辑,需要修改为可编辑 chmod -v u+w /etc/environment vim /etc/profile # 在最后一行加上 export PATH=$PATH:/usr/local/src/python3/bin ##### 注意点 * 生效时间:使用相同的用户打开新的终端时生效,或者手动 source /etc/environment 生效 * 生效期限:永久有效 * 生效范围:所有用户 ### 3.环境变量加载原理解析 思考:上述六种环境变量的配置方式, Linux是按什么顺序加载的呢?是否会相互覆盖相同的环境变量呢? #### 环境变量的分类 用户级别环境变量配置文件: * \~/.bashrc * \~/.profile * \~/.bash_profile(centos7 无) * /home/非root用户名/.bashrc 系统级别环境变量配置文件: * /etc/bashrc * /etc/profile * /etc/bash_profile(centos7 无) * /etc/environment #### 环境变量加载顺序 1. /etc/environment 2. /etc/profile 3. /etc/bashrc 4. \~/.profile 5. \~/.bashrc

相关推荐
alden_ygq14 分钟前
nginx 出现大量connect reset by peer
服务器·网络·nginx
口嗨农民工17 分钟前
svn status . 命令返回分析
linux·svn
“αβ”24 分钟前
Linux平台下SSH 协议克隆Github远程仓库并配置密钥
linux·ssh·github
wangchen_028 分钟前
linux-进程信号的产生
linux·运维·服务器
秋水丶秋水38 分钟前
IP SSL怎么签发使用
服务器·https·ssl
胖大和尚43 分钟前
vim启动的时候,执行gg
linux·编辑器·vim
DBWYX1 小时前
Linux proc文件系统 内存影射
linux·c
闪电麦坤951 小时前
思路解析:第一性原理解 SQL
服务器·数据库·sql
坐怀不乱杯魂1 小时前
linux - 权限的概念
linux
坐怀不乱杯魂1 小时前
Linux - 基础指令
linux