linux-文件和用户管理

实验室和寝室两地学习,编辑器又是typora无法云同步,只好通过gitee来远程同步,git四件套由让我非常焦躁

决定先进行linux和shell的基础学习,再尝试编写或CV自动化脚本

1.虚拟机搭建linux系统

1.1安装虚拟机软件(VMware)

软件下载:VNware workstations pro

官网下载后的秘钥:

1
2
3
4
5
6
7
8
9
10
11
YG5H2-ANZ0H-M8ERY-TXZZZ-YKRV8

UG5J2-0ME12-M89WY-NPWXX-WQH88

UA5DR-2ZD4H-089FY-6YQ5T-YPRX6

GA590-86Y05-4806Y-X4PEE-ZV8E0

ZF582-0NW5N-H8D2P-0XZEE-Z22VA

YA18K-0WY8P-H85DY-L4NZG-X7RAD

创建过程基本就是一路默认,主要在资源添加上

一个是内存和硬盘的配置

一个是centos镜像文件的添加

碰到的问题:

  1. VMware虚拟机的设置无法进行编辑

    现象:当VMware设置无法进行编辑时,可以看到在编辑界面是处于灰色的状态,此时就无法设置。

    原因:当前虚拟机是处于挂起状态,挂起状态的虚拟机,是无法进行编辑的。

    解决:要对虚拟机进行编辑,先要把这个虚拟机关机才行。请点击左侧开启图标的下拉三角,在弹出的下拉菜单中有一项是“关机”。

  2. 无法连接虚拟设备 ide1:0,因为主机上没有相应的设备

    未添加centos的镜像文件或光驱

  3. 启动vm虚拟机里的系统时,提示此主机支持 AMD-V,但 AMD-V 处于禁用状态

    解决:进入BIOS,进入advanced—CPU configuration—SVM mode,设置为enable

小技巧

  1. 快照:可以方便的将虚拟机恢复到快照拍下来的时刻
  2. 克隆:可以克隆出来一台和当前虚拟机一样的虚拟机,也就是原始机的景象。

1.2linux系统安装

图形界面安装,同样是傻瓜式的下一步就可以

需要注意的几点:

1.硬盘分区

2.时区设置

3.安装软件:带有GUI的服务器,附加选项:开发工具和兼容程序库

4.重新启动后:login用户名默认:root

进入GUI界面后需要将强制注册的用户注销,然后选择未列出的账户,填入root

获取管理员权限。

5.添加网络连接

  • 在设置中选择网络—选择有线—点击打开,

  • 打开finalshell,建立连接,可以通过finalshell软件实现对虚拟机的远程管理

至此,虚拟服务器建立成功!

1.3 远程访问

  • 安装远程访问工具SecureCRT

    安装过程按照SecureCRT的安装文档进行安装。

  • 连接:

    VM端查询分配的ip:192.168.25.128

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    [biongd@localhost Desktop]$ ip addr
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
    valid_lft forever preferred_lft forever
    2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:57:6b:4b brd ff:ff:ff:ff:ff:ff
    inet 192.168.25.128/24 brd 192.168.25.255 scope global dynamic eno16777736
    valid_lft 1207sec preferred_lft 1207sec
    inet6 fe80::20c:29ff:fe57:6b4b/64 scope link
    valid_lft forever preferred_lft forever
    3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
    link/ether 52:54:00:2b:d2:1c brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
    valid_lft forever preferred_lft forever
    4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 500
    link/ether 52:54:00:2b:d2:1c brd ff:ff:ff:ff:ff:ff

    SecureCRT :对该IP进行连接(可以现在本地尝试ping通)

  • image-20210629095057592

  • image-20210629095122751image-20210629095138496

1.4 Linux目录结构

image-20210629095239897

1
2
3
4
5
6
在Linux文件系统中有两个特殊的目录,一个用户所在的工作目录,也叫当前目录,可以使用一个点 . 来表
示;另一个是当前目录的上一级目录,也叫父目录,可以使用两个点 .. 来表示。
. :代表当前的目录,也可以使用 ./ 来表示;
.. :代表上一层目录,也可以 ../来代表。
如果一个目录或文件名以一个点 . 开始,表示这个目录或文件是一个隐藏目录或文件(如:.bashrc)。即以
默认方式查找时,不显示该目录或文件。

image-20210629095314850

1
2
3
4
5
6
7
8
9
10
11
12
bin (binaries)存放二进制可执行文件
sbin (super user binaries)存放二进制可执行文件,只有root才能访问
etc (etcetera)存放系统配置文件
usr (unix shared resources)用于存放共享的系统资源
home 存放用户文件的根目录
root 超级用户目录
dev (devices) 用于存放设备文件
lib (library)存放跟文件系统中的程序运行所需要的共享库及内核模块
mnt (mount)系统管理员安装临时文件系统的安装点
boot存放用于系统引导时使用的各种文件
tmp (temporary)用于存放各种临时文件
var (variable)用于存放运行时需要改变数据的文件

开发人员关注目录:

  • 配置目录etc:软件安装后配置文件选择放入的地址。
  • 软件安装目录:usr/local
  • 安装应用程序目录:opt,部署的API程序一般放在这个目录。部署的API放入用户的目录:/home/用户名
  • 注意:Linux系统的文件系统是以斜杠“/”开始,不是windows中的盘符概念。

2.文件管理

2.1linux目录结构

Linux的目录结构为树状结构,最顶级的目录为根目录 /。其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们。

绝对路径与相对路径:

  • 绝对路径:由根目录 / 写起,例如: /usr/share/doc 这个目录。
  • 相对路径:不是由 / 写起,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成:cd ../man这就是相对路径的写法。

2.2文件类型

常见:

  • 以 - 开头:普通文件(文本文件,二进制文件,压缩文件,电影,图片。。。)
  • 以d开头:目录文件(蓝色)
  • 以 . 开头:隐藏文件

非常见:

2.3文件管理命令(命令 选项 参数)

概念:

命令历史的查看方法:光标,也就是通过上下键

相对路径(cd到目标路径下):

  • 当前位置:./或者什么都不用
  • 上一级目录:../ 两级:../../

命令:

  1. 改变目录:cd 绝对命令/相对命令

  2. 显示文件夹文件:

    ls(list)、ll =ls -l(lang):显示详细信息

    ls -ld=ls -l -d:显示文件和目录

    ls -a : 全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用)

  3. 打印当前位置:

    pwd

  4. 创建文件:

    touch /d:/program files/{1.txt ,2.txt ,3.txt }(可以创建多个)

  5. 创建目录:mkdir 路径和目录

    • 在/home文件夹下创建a1文件夹:mkdir /home/a1 创建多个目录:mkdir /home/{a1 , a2}
    • 在/home文件夹下创建a1/b1两级文件夹:mkdir -p /home/a1/b1(当创建目录没有上一级时,自动创建)
    • 创建并显示创建过程:mkdir -v 创建多级并且看到过程:mkdir -pv
    • 例子:mkdir -pv /home/{123/{aa,bb}, 456} home下创建123,456两个文件夹,123下创建aa,bb两个文件夹
  6. 复制:

    cp 源文件 目标文件夹

    cp -r 原目录 目标文件夹

    • 拷贝文件:cp /home/a1/b1/c1.txt /root/桌面/
    • 拷贝目录(及目录先全部文件和目录):cp -r /home/a1 /root/桌面(recurse递归)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    常用参数:
    -a:相当於 -pdr 的意思,至於 pdr 请参考下列说明;(常用)
    -d:若来源档为连结档的属性(link file),则复制连结档属性而非文件本身;
    -f:为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
    -i:若clear问动作的进行(常用)
    -l:进行硬式连结(hard link)的连结档创建,而非复制文件本身;
    -p:连同文件的属性一起复制过去,而非使用默认属性(备份常用);
    -r:递归持续复制,用於目录的复制行为;(常用)
    -s:复制成为符号连结档 (symbolic link),亦即『捷径』文件;
    -u:若 destination 比 source 旧才升级 destination !
  7. 移动或改名:

    mv 源文件路径 目标文件路径

    移动并修改文件名:mv 源文件路径 目标文件路径/文件名

    只改名不移动,也得用mv

    mv /temp/a111 /temp/b222

  8. 删除:

    rm -rf 文件或目录的路径(强制删除)

    删除home文件下的a1,a2文件,保留b1目录:rm -rf /home/a*

    删除home文件下的a1,b2,保留c3:rm -rf /home/a1 /home/b2

  9. 查看文件内容:

    • 全部:cat 目标文件路径

    • 翻页:more 目标路径。对于大文件,more可以从第一页显示,通过回车可以换行,空格可以翻页,:f :立刻显示出档名以及目前显示的行数

    • 一页一页翻动:less 目标路径。less运行时可以输入的命令有:

      1
      2
      3
      4
      空白键 :向下翻动一页;
      [pagedown]:向下翻动一页;
      [pageup] :向上翻动一页;
      q :离开 less 这个程序
    • 头部:head -4 /1.txt只看前四行

    • 尾部:tail -3 /1.txt 只看最后3行

    • grep:过滤关键字 grep dd /1.txt

    • 注意:无法删除隐藏文件(以 . 开头的文件),想要删除隐藏文件只能通过隐藏文件的文件名删除

      eg:touch /home/{file1, file2, .file3}

      rm -rf /home/*只能删除file1和file2

      rm -rf /home/.file3

  10. 修改文件内容:

    • 重定向:>

      ls / 是查看根目录下的内容

      ls / > /home/a1.txt 意思就是将ls /的结果输入/home/a1.txt

    • 文件编辑器1:gedit(记事本)

    • 文本编辑器2:vi/vim命令:

      • 临时文件:vim /1.txt 异常退出时会产生一个临时文件(保存你之前的工作)

        ls看不到,需要ls -a查看隐藏文件。

        临时文件的解决:rm -rf

      • 进入文本插入模式:i/o/a/A

      • 进入可视化界面:v

      • 进入末行模式(扩展模式): 冒号:

        • 退出编辑器 : :wq写入并退出 :q!不保存退出 :w保存 :w /tmp/123.txt 另存为到tmp下

        • 查找替换:1.5 s/原内容/新内容/全局

          eg:1,5 s/123456/654321/g 将1-5行范围内的所有123456替换为654321

      • 退出到命令控制模式:esc

      • 复制光标的那一行:yy 粘贴刚才复制的一行到光标所在处:p

      • 删除光标的一行: dd

      • 复制或删除多行呢? 3yy就是复制3行,5dd就是删除5行

      • 撤销:u

        - 给每行添加标号:set  nu        取消添加行号:set nonu        显示控制字符:set list   
        
1
- 光标定位:0 $行首行尾;gg G首行  末行  3G进到第三行;/String进行检索
  1. 写入文件

    echo 把内容重定向到指定的文件中 ,有则打开,无则创建

    1
    2
    语法: echo '内容'>文件名称 覆盖模式
    echo '内容'>>文件名称 追加模式
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #示例:
    [root@centoslina01 kkb]# echo 'jiaobaoyu'>lina01.txt
    [root@centoslina01 kkb]# echo 'jiaobaoyu'>lina01.txt
    [root@centoslina01 kkb]# cat lina01.txt
    jiaobaoyu
    [root@centoslina01 kkb]# echo 'jiaobaoyu'>>lina02.txt
    [root@centoslina01 kkb]# echo 'jiaobaoyu'>>lina02.txt
    [root@centoslina01 kkb]# cat lina02.txt
    jiaobaoyu
    jiaobaoyu

2.4文件的查找和压缩

1.查找

  • which:命令查找

    1
    2
    3
    [root@localhost ~]# which ls
    alias ls='ls --color=auto'
    /usr/bin/ls
  • find:文件查找,针对文件名(最重要)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    find /etc -name '123.txt'(按姓名进行查找)
    命令 路径 选项 描述
    按文件大小查找:
    find /etc -size +5M(+5M大于5M,-5M小于5M)
    按目录深度查找:
    find / -maxdepth 3 -a -name 文件名
    按属主,属组查找:
    find /home -user user01
    按文件类型:(比如-:普通文件;l:链接文件;b:硬件文件;d:目录文件)
  • locate:文件查找,依赖数据库

2. 打包(压缩):gzip/tar

1
2
3
4
5
6
7
8
9
10
11
12
13
一般Linux 上常用的压缩方式是选用tar 将许多文件打包成一个文件,再以 gzip压缩命令压缩成紧
xxx.tar.gz(或者xxx.tgz)的文件。
常用参数:
-c:创建一个新tar文件
-v:显示运行过程的信息
-f:指定文件名
-z:调用gzip 压缩命令进行压缩
-t:查看压缩文件的内容
-x:解开tar 文件
打包:tar -cvf xxx.tar 要打包的文件或目录的列表,用空格隔开
打包并且压缩:tar -zcvf xxx.tar.gz 要打包的文件或目录的列表,用空格隔开
解压:tar -xvf xx.tar
tar -zxvf xx.tar.gz -C /usr/kkb 注意-C大写,防止拆包解压的路径找不到

image-20210629104524177

2.5 查看文件内容

cat:查看文件内容

其他查看文件姿势的命令:

1,tac:从最后一行开始显示,可以看出tac与cat字母顺序相反;

2,nl:显示的时候输出行号;

3,more:一页一页的显示文件内容;

4,less与more类似,但它可以向前翻页;

5,head:只看前几行;

6,tail:只看最后几行;

7,od:以二进制的方式读取文件。

3.用户管理(/etc/passed)

Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。每个用户账号都拥有一个唯一的用户名和各自的口令。用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录

3.1用户/组基本概念

  1. 用户的作用:

    查看当前登录的用户信息;查看文件的owner;查看运行进程的username

  2. 用户/组信息存储的文件:

  • 查看:

    1
    #语法 cat /etc/passwd

    image-20210629095618958

  • 用户基本信息文件(/etc/passwd,平时用的最多)

    • /etc/passwd(被冒号分割为7列字段)每一行是一个用户的信息

      root​:x:0:0:root:/root:/bin/bash 对应着分别是:

    • root:用户名

    • x:密码占位符,具体的密码信息保存在密码信息文件中

    • 0:uid(Userid)给用户的编号

    ​ 特权用户(超管):0;系统用户(如system,操作系统给自身的授权):1~499;普通用户:1000+

    • 0:gid(Groupid):组编号,将用户又进行了分组

    • root:描述,对账号信息进行描述,如manager,student等,一般不需要描述,就用用户名

    • /root:家目录(用户的具体文件图片,下载等储存在家目录中)

    • /bin/bash(Bourne-Again Shell):登录shell(壳),运行命令解释器。定义,解释和执行命令

      /bin/bash/nologin:表示该用户不能登入系统

  • 用户密码信息文件(/etc/shadow)

    • 1列(如aaa):用户名
    • 2列(如$6$DBdYLADGNCM4FGS6FDS2): $6代表加密算法,后面的代表,后面的代表加密后的密码
    • 3列(如18320):linux诞生时间到密码最后一次修改时间

    • 4列(如0):最小间隔,密码最短的可修改时间。0也就是每天都可以修改,5就是5天内不能修改

    • 5列(如99999):最大时间间隔,即密码有效期。99999也就是无限
    • 6(如7):警告时间(比如最大间隔30天,倒数还剩7天弹出警告)
    • 7.8列:不活动时间(长时间不用到期就禁用用户)和失效时间(超时就禁用用户)。
    • 9列:预留
  • 组信息文件(/etc/group)

    用户在创建的时候就会创造出同名组,后面在创造同样权限的用户时,直接拖到组里就行了

    被冒号被分割为4列:

    • 1列(root):组名
    • 2列(x):组密码
    • 3列(0):组id
    • 4列:组成员

3.2用户/组管理

上面说到的/etc/passwd,/etc/group,两个文件记录了用户和组的信息,其中用户信息中也包含了组的信息,也就是gid

用户

  1. 创建用户:useradd user01

    • 更改用户id(默认从1001开始):useradd user01 -u 1100
    • 指定用户家目录:useradd user01 -d /file

    选项:

    1
    2
    3
    4
    5
    6
    #选项: -c comment 指定一段注释性描述。
    -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
    -g 用户组 指定用户所属的用户组。
    -G 用户组,用户组 指定用户所属的附加组。
    -s Shell文件 指定用户的登录Shell。
    -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
  2. 修改密码(口令):passwd user01,,,弹出输入密码窗口,输入密码即可(root改自己的直接passwd就行)。默认用户名时修改当前用户

  3. 查看用户:id user01, 显示用户详细信息

  4. 删除用户:userdel -r(必须加) user01

  5. 修改用户属性:

    usermod -s /sbin/nologin user01(让用户无法登陆)

    usermod -u 1002 user01(将user01用户的uid修改为1002)

用户组

组的类型:基本组和附加组

  • 基本组:随用户创建的组,组名随用户名,显示在etc/passwd(第四个参数),组路径在/etc/group

  • 附加组:张三和李四用户创建的时候都创建了组,当张三又添加到了李四组的时候,李四组对于张三来说就是附加组,基本组只有一个,而附加组可以有多个。

  1. 创建组:groupadd net01 -g 2000

  2. 查看etc/group中组net01信息: grep ‘net01’ /etc/group

  3. 删除组:groupdel net01

  4. 把用户从组中删除:gpasswd -d A(用户名) GROUP(组名)

    注意:用户至少有一个组

  5. 更改gid:groupmod -g 1520 B

命令总结

useradd创建用户

usermod修改用户

groupadd创建组

-u制定用户的uid

-g制定用户的基本组 usermod AAA -g CCC

-G制定用户的附加组

/etc/passwd查看的是用户的基本组(id)

/etc/group查看的是用户的附加组,id命令也可以

1
2
3
4
5
6
7
8
9
10
例子:创建AAA,BBB两个用户,创建CCC组;更改AAA的基本组为CCC,更改BBB的附加组为CCC;从CCC中删除BBB用户。
useradd AAA //此时的AAA用户基本组即AAA
grep AAA /etc/passwd //可以看到gid为1508
grep AAA /etc/group //同样可以看到
useradd BBB
groupadd CCC
usermod AAA -g CCC //将AAA用户的基本组改为CCC(AAA组就空了,相当于把AAA搬到CCC里面去了)
usermod BBB -G CCC //给BBB用户增加附加组(CCC)
gpasswd -d BBB CCC//将BBB用户从CCC中删除
gpasswd -d AAA CCC//删不掉

3.3提权(变身超管)

普通用户能力有限,平时尽量少用管理员,使用普通用户登录,但是当需要使用特殊权限行为时,可以切换身份

  1. 永久提权(切换用户):su(switch users)

    su - root , 之后输入root用户密码就行了

    exit 退出超管用户

    也可以su - user01,切换到普通用户

  2. 临时提权:sudo,使用普通用户登录,获得部分特权功能

    如何分配权限:

    /etc/sudoers文件中107行:%wheel ALL=(ALL)NOPASSWD:ALL

    允许wheel用户组中的用户在不输入该用户的密码的情况下使用所有命令。

    1
    2
    3
    4
    5
    在root用户下
    useradd user01 -G wheel就给了user01权限
    切换到user01用户下
    useradd user02 //报错,还没有提权
    sudo useradd user02 //当前用户没有权利,任何特权命令都需要sudo提权

4.文件权限(ls -l查看)

image-20210629110951696

4.1概念:

网络上各种app的会员,授权都是对用户的授权,由管理员决定某个用户能否访问某些文件(图片,视频,执行文件等)。

设置权限的元素:

权限对象、权限类型

权限对象:ugo ,即属主、属组、其他。 a:全体用户

权限种类:读:r=4;写入:w=2;执行:x=1

4.2设置权限ugo(授权)

授权只是针对文件/目录,也就是让文件/目录在不同的属主、属组访问的时候可以指定权限。

注意-R参数,chmod -R操作可以对目录下的所有文件和目录实现修改

  1. 更改权限:

    • 使用符号:chmod u+r file1.txt

      ​ 命令 对象加减权限 目标文件或目录

      用户:u - r:减去权限 u=r:覆盖,不管之前的权限,现在就只有读权限

      组: g = rwx

      其他用户:o = r。。。

      1
      2
      eg: 
      chmod a=r-x file1//表示r-x对应rwx,就是给全体用户读和执行的权限

      通过ls -l file1查看文件详细信息

      -rw-r--r--. 1 root root 0 4月 13 20:49 file1

      • 第一列:权限设置 (11个字符)

        ​ 刨去第一个-和最后一个.剩下9个字符:

        ​ 前三个(rw-):属主权限;中间三个(r—):属组权限;最后三个(r—):其他权限

        代表file1这个文件面对属主有读写权限,面对属组和其他只有读的权限

    • 使用数字:

      chmod u=1 file1 //表示属主具有执行权限

      chmod 671 file1//表示属主6(rw-),属组7(rwx),其他人1(—x)

  2. 更改属主,属组

    对之前的file1文件的属主和属组进行修改:

    ​ -rw-r—r—. 1 root root 0 4月 13 20:49 file1

    • 更改属主和属组:chown user01. hr file1

      -rw-r—r—. 1 user01 hr 0 4月 13 20:49 file1

    • 只更改属主:chown user01 file1

    • 只更改属组:chown hr file1

    • 同时更改:chown user01:hr file1

4.3设置权限ACL(acess control list)

问题:有一个文件需要给四个不同用户分配不同的权限怎么办?

属主,属组,其他用户只有三个权限类型肯定没法满足

这时候就需要ACL来进行补充,也就是ugo的加强版。限制用户对文件的访问

命令:

  • 修改文件的用户权限列表:

    setfacl -m u:user01:rwx file1.txt

    setfacl -m g:hr:rwx file1.txt

    setfacl -m o::rwx file1.txt

  • 查看当前文件的用户权限列表:getfacl file.txt

  • 删除列表中的某一用户的权限:

    etfacl -x u:user01 file1.txt //将文件中某一用户的权限删除

    etfacl -b file1.txt //将文件扩展出的权限全部删除

有了setfacl就不用了ls -l查看详细信息了,一个文件的多个用户权限设置只能通过getfacl看到,在ls -l显示的时候是多个设置叠加的结果

1
2
3
4
5
6
setfacl -m u:user01:rwx file1.txt
seffacl -m u:user02:rw file1.txi
//此时file1对于user01和user02就有不同的权限了
getfacl file1.txt
user:user01:rwx
user:user02:rw

4.4特殊权限

  1. 特殊位:

    suid(sgid)是针对文件所设置的一个特别的权限。

    功能:使调用文件的用户,临时具备属主的能力。

    命令:chmod u=s file.txt

    详细信息显示的权限:-rwsr-xr-x.

    此时别的用户调用file.txt的时候就具备了属主的权限

  2. 添加属性:

    chattr:给文件添加限制属性,超管也会受影响

    例如命令:Chattr +i file1.txt //文件禁止删除

  3. 进程掩码:

    umask:新建文件和目录的权限会被umask影响

    直接敲入umask就能看到,默认的权限掩码就是0022

    之所以默认创建目录/文件夹的权限是755

    就是用0777-0022

    默认创建文件的权限是644

    就是用0755-0111

    设置umask即可以调整文件默认权限

5. 其他命令

5.1 查看进程快照

ps : - axu 显示当前进程的快照

查看Java进程:ps - axu | grep java

查看MySQL进程 ps - axu | grep mysql

5.2 管道 |

管道是Linux中比较重要且常用的一个内容,其作用是将一个命令的输出作为另一个命令的输入,组合使用

1
ls --help | more #分页查看帮助信息,按q退出

6. VIM编辑器

6.1 vim模式

vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。

6.1.1 命令模式

用户刚刚启动 vi/vim,便进入了命令模式。

1
2
3
4
5
6
7
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i
当作了一个命令。
以下是常用的几个命令:
i 切换到输入模式,以输入字符。
x 删除当前光标所在处的字符。i
: 切换到底线命令模式,以在最底一行输入命令。
若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。

命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令

6.1.2 输入模式

在命令模式下按下i就进入了输入模式。

1
2
3
4
5
6
7
8
9
10
在输入模式中,可以使用以下按键:
字符按键以及Shift组合,输入字符
ENTER,回车键,换行
BACK SPACE,退格键,删除光标前一个字符
DEL,删除键,删除光标后一个字符
方向键,在文本中移动光标
HOME/END,移动光标到行首/行尾
Page Up/Page Down,上/下翻页
Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
ESC,退出输入模式,切换到命令模式

6.1.3 底线命令模式

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

1
2
3
4
5
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
在底线命令模式中,基本的命令有(已经省略了冒号):
q 退出程序
w 保存文件
按ESC键可随时退出底线命令模式。

6.2 实例

创建一个新的名为 lina03.txt 的文件:

1
vim lina03.txt

直接输入 vim 文件名 就直接进入 vim 的一般模式了。
PS: vim 后面一定要加文件名,不管该文件存在与否!

image-20210629105811788

按下 i 进入输入模式(也称为编辑模式),开始编辑文字在一般模式之中,只要按下 i, o, a 等字符就可以进入输入模式了!
在编辑模式当中,你可以发现在左下角状态栏中会出现 –INSERT- 的字样,那就是可以输入任意字符的提示。
这个时候,键盘上除了 Esc 这个按键之外,其他的按键都可以视作为一般的输入按钮了,所以你可以进行任何的编辑。

指令 说明
:w 将编辑的数据写入硬盘档案中(常用)
:w! 若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊!
:q 离开 vi (常用)
:q! 使用 ! 为强制离开不储存档案
:wq 储存后离开,若为 :wq! 则为强制储存后离开 (常用)
:set
number
显示行号
:set
nonumber
取消行号显示

7. 常用网络操作

7.1 主机名操作

1
2
hostname :显示主机名 
hostname XXX :修改主机名,不推荐,临时生效 永久生效修改主机名需要修改/etc/sysconfig/network文件

7.2 查询系统完整信息

1
uname -a:显示完整的系统信息

7.3 IP操作

查看IP地址:ip addr

修改IP地址:修改/etc/sysconfig/network-scripts/

1
2
3
4
cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# vim ifcfg-eno16777736
BOOTPROTO:"DHCP"--->BOOTPROTO:"static"
ONBOOT:"NO"---->ONBOOT:"yes"

image-20210702104424643

7.4 网络服务管理

1
2
3
4
5
查看网络服务状态:systemctl status network
启动网络服务:systemctl start network
停止网络服务:systemctl stop network
重启网络服务:systemctl restart network
设置开机启动:systemctl enable network

7.5 防火墙设置

1
2
3
4
5
6
7
8
查看防火墙状态: systemctl status firewalld
动防火墙: systemctl start firewalld
闭防火墙: systemctl stop firewalld
询防火墙服务是否开机启动:systemctl is-enabled firewalld
机时启用防火墙服务:systemctl enable firewalld
机时禁用防火墙服务:systemctl disable firewalld
询已经启动的服务列表:systemctl list-unit-files|grep enabled
询启动失败的服务列表:systemctl --failed

8. Linux上部署Web项目

8.1 远程上传工具的使用

image-20210702123625594连接后直接拖拽

8.2 安装JDK

1、上传jdk文件到linux
使用SecureFX连linux后,将JDK压缩包上传到新建的mysoft文件夹。
2、解压压缩包

image-20210702123721198

3、测试jdk是否安装成功

1
2
3
4
5
6
7
8
[root@localhost mysoft]# ls
apache-tomcat-8.5.56.tar.gz jdk1.8.0_11 jdk-8u11-linux-x64.tar.gz
[root@localhost mysoft]# cd jdk1.8.0_11
[root@localhost jdk1.8.0_11]# cd bin
[root@localhost bin]# ./java -version
java version "1.8.0_11"
Java(TM) SE Runtime Environment (build 1.8.0_11-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)

4、配置环境变量

1
2
3
4
[root@localhost bin]# cd /
[root@localhost /]# vim /etc/profile
export JAVA_HOME=/mysoft/jdk1.8.0_11
export PATH=$PATH:$JAVA_HOME/bin

5、使环境变量及时生效

1
[root@localhost /]# source /etc/profile

6、查看变量是否更新成功:

1
[root@localhost /]# echo $PATH

7、在任意目录下测试环境是否配置成功

1
[root@localhost /]# java -version

8.3 安装tomcat

安装Tomcat之前要保证JDK安装成功哦!

1、上传Tomcat压缩包到根目录的mysoft文件夹,之前已经完成
2、解压:

1
tar -xzvf apache-tomcat-8.5.56.tar.gz

3、启动Tomcat

1
2
3
4
cd apache-tomcat-8.5.56/
ll
cd bin
sh startup.sh

image-20210702125135758

4、关闭防火墙

5、关闭tomcat

sh shutdown.sh

8.4 安装MySQL

网上比较好的方法:

https://blog.csdn.net/weixin_44197839/article/details/116128038?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.control

需要注意的问题:

  1. 这里的文件名应该是mysql.server

    1
    2
    3
    检查一下/etc/init.d/mysql是否存在,若否,
    cp /root/packet/mysql/support-files/mysql-server /etc/init.d/mysql
    cp /root/packet/mysql/support-files/mysql-server /etc/init.d/mysqld
  2. 用navicat进行远程访问前,应先关闭防火墙!!!

笨方法

YUM( Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。

它基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,无须繁琐地一次次下载、安装.

步骤1: 检测系统是否自带安装mysql

1
[root@centoslina01 ~]# yum list installed | grep mysql

步骤2: 删除系统自带的mysql及其依赖(防止后面安装发生冲突)

1
[root@centoslina01 ~]# yum -y remove mysql-libs.x86_64

步骤3: 给CentOS添加rpm源,并且选择较新的源,RPM软件包管理器缩写

1
[root@centoslina01 ~]# wget --no-check-certificate dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm

步骤4: 安装第一步下载的rpm文件

1
2
[root@centoslina01 ~]# yum install mysql-community-release-el6-5.noarch.rpm
此处需要输入"y"

[root@centoslina01 ~]# yum repolist enabled | grep mysql //列出你所有的yum repo文件

image-20210702145039688

步骤5: 使用yum安装mysql

1
2
[root@centoslina01 ~]# yum install mysql-community-server
此处输入3次“y”

步骤6: 启动mysql服务

1
[root@centoslina01 ~]# service mysqld start

image-20210702145318682

步骤7: 查看mysql是否自启动,并且设置开启自启动

1
2
[root@centoslina01 ~]# chkconfig --list | grep mysqld
0 1 2 3 4 5 6 代表centOS启动状态

image-20210702145349443

1
[root@centoslina01 ~]# chkconfig mysqld on

步骤8: 修改字符集为UTF-8

1
2
3
4
5
6
[root@centoslina01 ~]# vim /etc/my.cnf
在[mysqld]部分添加: character-set-server=utf8

在文件末尾新增[client]段,并在[client]段添加:default-character-set=utf8

esc退出编辑 :wq保存退出

image-20210702145509277

修改完成后保存重启服务

1
[root@centoslina01 ~]# service mysqld restart

步骤9: 修改默认配置

1
2
[root@centoslina01 ~]# mysql_secure_installation
按照提示进行配置,这里默认root用户的密码空,直接回车即可。此处输入内容:"y","y","n","y","y"

image-20210702160201901

步骤10:授权远程登录

1
2
3
4
5
6
7
8
方案1:实现远程连接(授权法)- 将权限改为ALL PRIVILEGES
[root@centoslina01 ~]# mysql -uroot -p
mysql> use mysql;
Database changed
mysql> flush privileges;
//mysql 新设置用户或更改密码后需用flush privileges刷新MySQL的系统权限相关表,否则会出现拒绝访问
mysql> select host,user,password from user;
这样机器就可以以用户名root密码root远程访问该机器上的MySql

image-20210702160322553

1
2
3
4
5
方案2:实现远程连接(改表法)
use mysql;
update user set host = '%' where user = 'root' and host='localhost';
GRANT ALL PRIVILEGES ON . TO 'username'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
flush privileges;

8.5 部署web项目

8.5.1 如何从idea导出war包

https://www.bilibili.com/read/cv6007628/

img

img

img

imgimg

然后直接导入tomcat下的webapps就可以了,tomcat启动时自动部署!!

注意:在导入linux时需要必须用二进制传

8.5.2 错误解决

报错:

image-20210702224231445

解决:

  1. 报错原因:这是web.xml文件存放的位置导致的,web.xml存放于web-info下访问受到限制,如下图:

    img

    解决:将web.xml文件移动到web content目录下问题就解决了

    img

  2. 一个工程在eclipse里面正常运行,打成war包在本机的tomcat下面也可以运行,但是放到芝加哥的linux服务器的tomcat下面访问,结果是:

    1
    2
    3
    4
    5
    6
    7
    HTTP Status 404 - Servlet action is not available

    type Status report

    message Servlet action is not available

    description The requested resource (Servlet action is not available) is not available

    原来是 发到linux的时候 application.properties文件没有改登录数据库的用户名和密码!