Linux基本使用

Posted 蜡笔没有大象

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux基本使用相关的知识,希望对你有一定的参考价值。

Linux

教程:兄弟连的Linux教程

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

一、Linux由来

Linux系统诞生于1991年,由芬兰大学李纳斯和后来陆续加入的众多爱好者共同开发完成。

Linux是开源软件,源代码开放的UNIX。

二、Linux发展

Linux主要版本:

LAMP代表

  • L : linux 操作系统
  • A : Apache Web服务器
  • M : mysql数据库
  • P : php语言

三、Linux应用领域

  • 基于Linux企业服务器
  • 嵌入式应用
  • Linux在电影娱乐业

四、Linux分区

4.1、分区

Linux系统只能有4个分区,3个主分区,1个扩展分区。而扩展分区可以再次分4小分区?

4.2、格式化

写入文件格式,通常一个新硬盘,都是需要格式化,才能进行存储文件内容的,而格式化就是写一个架子来规定硬盘可以存储什么样的文件,在Linux中有EXT2EXT3EXT4

4.3、分区设备文件名

系统自己做的,对于我们来说是透明的

4.4、挂载

就像于给分区分配实际内存,比如Windows中C盘有100G的空间

Linux中,必须分区

  • /(根分区)

  • swap分区(交换分区,内存2倍,不超过2G)

  • 推荐分区

    • /boot(启动分区,200MB)

五、VMware网卡之间关系

VMware虚拟机中的网络选项

桥接模式 --- 使用的是真实网卡就是从路由中分配IP

NAT 模式 ---- 使用VMware 8网卡通信

仅主机模式 --- 使用VMware1网卡通信

六、Linux学习建议

6.1、Linux不靠扩展名区分文件类型

  • 压缩包:*.gz*.bz2*.tar.bz2*.tgz
  • 二进制软件包:*.rpm
  • 脚本文件:*.sh
  • 配置文件:*.conf

七、Linux常用命令

7.1、文件处理命令

以点开头的文件就是隐藏文件

命令格式

命令 [-选项] [参数]

ls -a /etc

  • 命令名称:ls

  • 命令英文原意:list

  • 命令所在目录:/bin/ls

  • 命令执行权限:所有用户

  • 功能描述:显示目录文件

  • 语法:`ls 选项[-aldh] [文件或目录]

    • -a 显示所有文件,包括隐藏文件
    • -l 详细 信息显示
    • -d 查看目录属性
    • -i 显示ID
    • -h 以单位(KB、MB)显示文件大小

文件头表示意义

d开头表示是一个文件夹

-开头表示是一个文件

-rw-r--rr--rw对应root所属人,-r对应所属组,那么r、w、x都是意思呢?

r:读

w:写

x:执行

7.1.2、目录处理命令

创建一个目录

  • 命令名称:mkdir

  • 命令英文原意:make directories

  • 命令所在路径:/bin/mkdir

  • 执行权限:所有用户

  • 语法:mkdir -p [目录名]

  • 功能描述:创建新的目录

    • -p 代表递归创建
  • 示例

  • mkdir -p /tmp/project/c
    mkdir /tmp/project/c++
    

进入目录

cd

cd ../返回上级目录

cd ./同级目录

查看当前所有路径

命令名称:pwd

命令英文原意:print working directory

命令所在路径:/bin/pwd

执行权限:所有用户

语法:pwd

功能描述:显示当前目录

示例:

pwd
/tmp/project/c

删除文件夹

删除目录

命令名称:rmdir

命令英文原意:remove empty directories

命令所在路径:/bin/rmdir

执行权限:所有用户

语法:rmdir [目录名]

功能描述:只能删除空目录,所以此命令用的少

示范

rmdir /tmp/project/c

文件拷贝

命令名称:cp

命令英文原意:copy

命令所在路径:/bin/cp

执行权限:所有用户

语法:cp -rp [原文件路径] [目标文件路径]

​ -r 复制目录

​ -p 保留原文件属性

功能描述:复制文件或目录,目录需要带上-r

示例

cp -r /tmp/project/c /home/roo

也可以一次性赋值多个目录
cp -r /tmp/project/c /tmp/project/c++ /home/root


剪切、改名文件或目录

命令名称:mv

命令原意:move

命令所在目录:/bin/mv

执行权限:所有永辉

语法:mv [原文件或目录路径] [目标目录]

功能:剪切文件、改名

示例:

mv /tmp/pro/c /home/roo

改名
mv /tmp/pro/c++ /tmp/pro/c

删除文件或目录

命令名称:rm

命令英文原意:remove

命令所在路径;/bin/rm

执行权限:所有用户

语法:rm -rf [文件或目录]

​ -r 删除目录

​ -f 强制删除

功能描述:删除文件

示例

rm /tmp/pro/c

7.1.3、文件处理命令

创建文件

命令名称:touch

命令所在路径:/bin/touch

执行权限:所有用户

语法:touch [文件名]

功能描述:创建空文件

示例:touch /tmp/Hello.java

注意事项:可以创建带有空格的文件,必须加双引号才行,不然会当做两个文件来创建

如:touch Project File 会当做两个文件

解决办法是加上双引号:touch "C++ Java Project"

显示文件全部内容

命令名称:cat

命令所在路径:/bin/cat

执行权限:所有用户

语法:cat [文件名]

​ -n 显示行号

功能描述:显示文件内容

示例:cat /etc/issue

​ cat -n /etc/issue

倒序显示文件全部内容

命令名称:tac

命令所在路径:/bin/tac

执行权限:所有用户

语法:tac [文件名]

​ -n 显示行号

功能描述:显示文件内容

示例:tac /etc/issue

​ tac -n /etc/issue

显示文件内容带分页

命令名称:more

命令所在路径:/bin/more

执行权限:所有用户

语法:more [文件名]

​ (空格) 或 f 翻页

​ 回车 换行

	  q或Q				退出

功能描述:分页显示文件内容

示例:more /etc/servimces

分页显示文件内容带上下翻页

命令名称:less

命令所在路径:/usr/bin/less

执行权限:所有用户

语法:less [文件名]

​ PU 和 PD 上一页,下一页

​ 回车 换行

	  q或Q				退出			

​ 输入/ 再输入关键字进行搜索,再输入n表示下一个

功能描述:分页显示文件内容(可向上翻页)

示例:less /etc/servimces

显示文件前面几行内容

命令名称:head

命令所在路径:/usr/bin/head

执行权限:所有用户

语法:head [文件名]

​ -n 指定行数

示例:head -n 20 /etc/servimces

如果不指定默认显示前10行

显示文件末尾内容

命令名称:tail

命令所在路径:/usr/bin/tail

执行权限:所有用户

语法:tail [文件名]

​ -n 执行从尾部开始显示几行

​ -f 动态显示文件默认内容

示例:tail -n 18 /etc/servimces

7.1.4、链接命令

链接文件 软连接 or 硬链接

命令名称:ln

命令影院原意:link

命令所在路径:/bin/ln

执行权限:所有用户

语法:ln -s [原文件] [目标文件]

​ -s 创建软连接

​ 去掉-s硬链接

功能描述:生成链接文件

软链接与硬链接的区别

软链接:像是一个windows中的快键方式

硬链接:是一个文件的拷贝 + 同步更新

7.2、权限管理命令

7.2.1、权限管理命令chmod

命令名称:chmod

命令英文原意:change the permissions mode of a file

命令所在路径:/bin/chmod

执行权限:所有用户

语法:

  1. chmod [{ugoa} {+-=} {rwx} [文件或目录]]

    符号 代表
    u 所属者
    g 所属组
    o 其他人
    a 所有人
    对应字母 所代表的权限
    r
    w
    x 执行
  2. chmod [权限数字 [文件或目录]]

    权限对应数字
    r 4
    w 2
    x 1
  3. 参数 : -R 递归修改,就是修改目录中所有权限

功能描述:改变文件或目录的权限

以字符方式修改权限

-rw-r--r-- 1 root root 0 Apr 29 17:56 Hello.java

chmod u=rwx Hello.java

-rwxr--r-- 1 root root 0 Apr 29 17:56 Hello.java

以数字修改权限

chmod 774 Hello.java

[root@iZ8vb6xljiklnfnmawnio3Z temp]# chmod 774 Hello.java

7.2.2、其他权限管理命令

修改文件或目录所属者

命令名称:chown

命令英文原意:change file ownership

命令所在路径;/bin/chown

执行权限:所有用户

语法:chown [所属者] [文件或目录]

功能描述:改变文件或目录的所有者

示例:chown xiaoxin /temp

​ 修改/temp目录所属者为:xiaoxin

改变文件或目录所属组

命令名称:chgrp

命令英文原意:change file group ownership

命令所在路径:/bin/chgrp

执行权限:所有用户

语法:chgrp [用户组] [文件或目录]

功能描述:改变文件或目录所属组

示例:chgrp xiaoxin /tmp/temp

​ 改变/tmp/temp目录用户组为xiaoxin

修改默认创建文件或目录的权限

命令名称:umask

命令英文原意:the user file-creation mask

命令所在路径:Shell内置命令

执行权限:所有用户

语法:umask [-S]

​ -S 以rwx形式显示新建文件默认权限

功能描述:显示、设置文件的默认权限

示例:umask -S

注意事项

  1. 如果加上-S参数以可读方式显示
  2. 如果没有加上-S是数字方式显示,而且数字方式不是正常阅读的,需要用777-得到的数字等于的就是权限表示
[root@iZ8vb6xljiklnfnmawnio3Z ~]# umask 
0022

777 - 0022 = 0755  ===> -rwx r-x r-x

7.3、文件搜索命令

命令名称:find

命令所在路径:/bin/find

执行权限:所有用户

语法:find [搜索范围] [匹配条件]

功能描述:文件搜索

7.3.1、find各种使用方法以及举例

7.3.1.1、根据名字查询找

find /etc/ -name init

不区分大小写查找

find /etc/ -iname init

模糊查找

find / -name *init* # 查询包括init字符的文件
find / -name init???    # init开头后面3个位置字符的文件名

7.3.1.2、根据文件大小查找

linux中文件大小划分

1数据块 ======== 521字节 0.5kb

100MB === 102400KB

find / -size +大小
符号代表 作用
+n 大于n
-n 小于n
n 等于

7.3.1.3、根据文件或目录所属者查找

find /home -user xiaoxin   # 根据所属者查找
find /home -group xiaoxin  # 根据所属组查找

7.3.1.4、根据文件属性来查找

find /etc -cmin -5
# 在/etc目录下查找被修改过属性的文件和目录

参数

  • amin访问时间
  • cmin问价耐属性
  • mmin文件内容

7.3.1.5、根据文件类型查找

  • -type
    • f 文件
    • d 目录
    • l 软连接文件

find /etc -name init -a -type f

7.3.1.6、根据i编号查询

根据文件的编号来查询文件或目录

find / -inum 1179683

7.3.1.7、逻辑命令 与 或

  • -a 就是与
  • -o 就是或

示例

find /etc -size +100 -a size -200

7.3.1.8、根据查询结果进行筛选显示

find /etc -name init -exec ls -l {} ;

就是对查询结果进行再一次操作,还可以再次进行筛选

-exec相当于连接另一个命令的意思

7.3.2、其他搜索命令

7.3.2.1、文件搜索命令,与find类似,但是比它快

命令名称:locate

命令所在路径:/usr/bin/locate

执行权限:所有用户

语法:locate 文件名

功能描述:在文件资料库中查找文件

范围:locate init

find命令的比较,locate命令查找比find命令快,但是有缺点,locate命令是通过一个文件来查找的,所以他快,但是有时候,你新建里的文件,var/lib/mlocate没有更新到最新创建的文件,就会搜索不到,如果想要解决,就需要updatedb命令来更新一下文件

7.3.2.2、命令搜索工具

命令名称:which

命令所在路径:/usr/bin/which

执行权限:所有用户

语法:which命令

功能描述:搜索命令所在目录以及别名信息

示例:which cp

另一个命令搜索工具,搜索出来的命令带命令的帮助文档位置

命令名称:whereis

命令所在路径:/usr/bin/whereis

执行权限:所有用户

语法:whereis [命令名称]

功能描述:搜索命令所在目录及帮助文档路径,以及配置文件所在位置

示例:whereis ls

7.3.2.3、文件内容搜索

命令名称:grep

命令所在路径:/bin/grep

执行权限:所有用户

语法:grep -i v [指定字符串] [文件]

功能描述:在文件中搜寻字符串匹配的行并输出

​ -i 不区分大小写

​ -v 排除指定字符串

示范:grep mysql /root/install.log

grep "on an" /etc/issue

帮助类型

1:命令帮助

5:配置文件帮助

7.4、帮助命令man

命令名称:man

命令英文原意:manual

命令所在路径:/usr/bin/man

执行权限:所有用户

语法:man [命令或配置文件]

功能描述:获取帮助信息

示例:

  • 获取命令的帮助man ls
    • 查看ls命令的帮助信息,是less和more命令的组合
  • 获取配置文件的帮助man servimces
    • 查看配置文件servimces的帮助信息
    • 在获取配置信息的帮助的时候不要带上绝对路径

7.4.1、帮主命令help获取Shell内置命令的帮助

命令名称:help

命令所在路径:Shell内置命令

执行权限:所有用户

语法:help 命令

功能描述:获取Shell内置命令的帮助信息

示例:help cd

7.4.2、简介获取命令信息whatis

命令名称:whatis

命令所在路径:/usr/bin/whatis

语法:whatis 命令

示例:whatis cp

7.4.3、简介获取配置文件信息apropos

命令名称:apropos

命令所在路径:/usr/bin/apropos

语法:apropos 配置文件

示例:apropos servimces

7.5、用户管理命令

7.5.1、添加用户useradd

命令名称:useradd

命令所在路径:/usr/sbin/useradd

执行权限:root

语法:useradd用户名

功能描述:添加新用户

示例:useradd xiaoxin

7.5.2、设置密码passwd

命令名称:passwd

命令所在领:/usr/bin/passwd

执行权限:所有用户

语法:passwd 用户名

功能描述:设置用户密码

示例:passwd xiaoxin

7.5.3、查看登陆用户信息who

命令名称:who

命令所在领:/usr/bin/who

执行权限:所有用户

语法:who

功能描述:查看登陆用户信息

示例:who

7.5.4、更加详细查看登陆用户信息w

命令名称:w

命令所在路径:/usr/bin/w

执行权限:所有用户

语法:w

功能描述:查看登陆用户详细信息

示例:w

7.6、压缩解压命令

7.6.1解压缩gzip、

压缩

命令名称:gzip

命令所在路径:/bin/gzip

执行权限:所有用户

语法:gzip [文件]

功能描述:只能压缩文件

压缩后文件格式:.gz

注意事项:压缩后,原文件就会没有

解压

命令名称:gunzip

命令所在路径:/bin/gunzip

执行权限:所有用户

语法:gunzip [压缩文件]

功能描述:加压缩.gz的压缩文件

压缩后文件格式:gz

注意事项:解压后,原压缩文件就会没有

7.6.2、解压缩tar

压缩

命令名称:tar

命令所在路径:/bin/tar

执行权限:所有用户

语法:tar 选项[-zcf] [压缩后文件名] [目录]

​ -c 打包

​ -v 显示详细信息

​ -f 指定文件名

​ -z 打包同时压缩

功能描述:打包目录:

压缩后文件格式.tar.gz

注意事项:

  1. 如果想要打包的同时压缩命令一定要这么写:tar -zcf 名字.tar.gz] [要压缩的目录]

解压缩tar

tar命令加压缩语法:

​ -x 解包

​ -v 显示详细信息

​ -f 执行解压文件

​ -z 解压缩

示例:tar -zxvf [需要解压名.tar.gz]

注意事项:

  1. 这里顺序也不能换tar -zxvf [需要解压名.tar.gz]也就是说先要加压缩,在解包

7.6.3、解压缩zip

压缩

命令名称:zip

命令所在路径:/usr/bin/zip

执行权限:所有用户

语法:zip 选项[-r] [压缩后的文件名] [文件或目录]

-r是压缩目录所用到的

压缩后的文件格式:.zip

解压

命名名称:unzip

命令所在目录:/usr/bin/unzip

执行权限:所有用户

示例:unzip test.zip

7.6.4、压缩命令bzip2

压缩

命令名称:bzip2

命令所在路径:/usr/bin/bzip2

执行权限:所有用户

语法:bzip2 选项[-k] [文件]

参数说明:-k产生压缩文件后保留原本文件

压缩后文件格式:.bz2

示例:bzip2 -k temp

tar -cjfv JavaProject.tar.bz2 JavaProject

解压

命令名称:bunzip2

命令所在路径:/usr/bin/bunzip2

执行权限:所有用户

语法:bunzip2 选项[-k] [压缩文件]

-k 解压后保留原文件

示例:bunzip2 -k temp.bz2

tar -xjf Java.tar.bz2

7.7、网络命令

7.7.1、write给本地用户发送信息

指令名称:write

所在路径:/usr/bin/write

执行权限:所有用户

语法:write <用户名>

功能描述:给本地用户发信息,以Ctrl + D保存结束

示例:write xiaoxin

7.7.2、wall-给所有用户发送信息

指令名称:wall

所在路径:/usr/bin/wall

执行权限:所有用户

语法:wall [message]

示例:wall 消息

7.7.3、ping-发送网络请求

命令名称:ping

命令所在路径:/bin/ping

执行权限:所有用户

语法:ping [-c] IP地址

-c 执行发送次数

示例:ping www.baidu.com 会一直发送,Ctrl+D结束

ping -c 3 www.baidu.com 3次结束

7.7.4、ifconfig-查看网络

命令名称:ifconfig

命令所在路径:/sbin/ifconfig

执行权限:root

语法:ifconfig 网卡名称 IP地址

功能描述:查看和设置网卡信息

示例:ifconfig eth0 192.168.8.250

ifconfig 只是查看网络信息

7.7.5、last-列出过去登入系统的用户信息

命令名称:last

命令所在路径:/usr/bin/last

执行权限:所有用户

语法:last

功能描述:列出目前与过去登入系统的用户信息

示例:last

7.7.6、lastlog-特定用户最后登入时间

命令名称:lastlog

命令所在路径:/usr/bin/lastlog

执行权限:所有用户

语法:lastlog

功能描述:检查某特定用户上次登录的时间

示例:lastlog -u 用户ID

7.7.7、traceroute-查看数据到主机间路径

命令名称:traceroute

命令所在路径:/bin/traceroute

执行权限:所有用户

语法:traceroute

功能描述:显示数据包到主键间路径

示例:traceroute www.baidu.com

详细看:https://commandnotfound.cn/linux/1/335/traceroute-%E5%91%BD%E4%BB%A4

7.7.8、netstat-显示网络相关信息

命令名称:netstat

命令所在路径:/bin/netstat

执行权限:所有用户

语法:netstat [参数]

参数:

  1. -t : TCP协议
  2. -u:UDP协议
  3. -l:监听
  4. -r:路由
  5. -n :显示IP地址和端口号

功能描述:显示网络相关信息

示例:

  1. netstat -tlun 查看本机监听端口
  2. netstat -an 查看本机所有的网络
  3. netstat -rn 查看本机路由表

7.7.9、setup-配置网络

命令名称:setup

命令所在路径:/usr/bin/setup

执行权限:root

语法:setup

功能描述:配置网络

安装:https://blog.csdn.net/zhangzhikaixinya/article/details/46691323

7.7.10、mount-挂载命令

命令名称:mount

命令所在路径:/bin/mount

执行权限:所有用户

语法:mount [-t文件系统] 设备文件名 挂载点

示例:mount -t iso9660 /dev/sr0 /mnt/cdrom

7.8、关机重启命令

7.8.1、shutdown

语法:shutdown [参数] 时间

参数:

  1. -c : 取消前一个关机命令
  2. -h:关机
  3. -r:重启

使用举例:shutdown -r now

now当前时间

7.8.2、退出登录命令

logout

八、vim

8.1、vim常用操作

  1. 创建或打开文件vim filename
  2. 退出:wq
  3. esc退出编辑模式,切换命令模式

8.1.1、插入命令

命令 作用
a 在光标所在字符后插入
A 在光标所在行尾插入
i 在光标所在字符前插入
I 在标签所在行行首插入
o 在光标下插入新行
O 在光标上插入新行

8.1.2、定位命令

命令 作用
:set nu 设置行号
:set nonu 取消行号
gg 到第一行
G 到最后一行
nG 到第n行
:n 到第n行
:$ 移至行尾
:0 移至行首

8.1.3、删除命令

命令 作用
x 删除光标所在处字符
nx 删除光标所在处后n个字符
dd 删除光标所在行,ndd删除n行
dG 删除光标所在行到文件末尾内容
D 删除光标所在处到行尾内容
:n1,n2d 删除指定范围的行

8.1.4、复制和剪切命令

命令 作用
yy 复制当前行
nyy 复制当前行一下n行
dd 剪切当前行
ndd 剪切当前行一下n行
p、P 粘贴在当前光标所在行下或行上

8.1.5、替换和取消命令

命令 作用
r 取代光标所在字符
R 从光标所在处开始替换字符,按Esc结束
u 取消上一步操作

8.1.6、搜索和搜索替换命令

命令 作用
/string 搜索指定字符串
搜索时忽略大小写:set ic
n 搜索指定字符的下一个出现位置
:%s /old/new/g or c 全文替换指定字符串
:n1,n2s/old/new/g or c 在一定范围内替换指定字符串

g代表不询问替换

c询问替换

8.1.7、保存与退出命令

命令 作用
:w 保存修改
:w new_filename 另存为指定文件
:wq 保存修改并退出
ZZ 保存修改并退出
:q! 不保存修改退出
:wq! 强制修改保存并退出(文件所有者与root可以使用)

8.2、vim使用技巧

导入那个执行结果 : :r 命令

:r 文件路径,就会将这个文件导入到打开文件所在路径

  1. :!which 指令:显示执行所在路径

自定义快捷键

:map 命令+自定义操作

  1. :map ^p I#<ESC> 在头部插入#
  2. :map ^B 0x 删除首行第一个字符
  3. :map i2210075017@qq.com 在光标处插入邮箱

注意:^是 Ctrl + V + 你要设置的快捷键

连续行注释

:n1, n2s/^/#/g ^行首,#要替换内容 g不用询问

:n1, n2s/^#//g 去掉行首的#号

替换

:ab mymail 2210075017@qq.com 输入mymail后就会自动替换邮箱

如果想永久生效,那么配置文件就必须写在用户目录下命名为.vimmrc文件就会自定义的配置就会永久生效

九、软件包管理

软件包分类

  1. 源码包
  2. 二进制包(RPM包、系统默认包)

9.1、RPM包管理

安装略过

9.1.1、查询是否安装

rpm -q 包名   不用全包名,只要包名就可以了
rpm -qa   查询所有已经安装包

9.1.2、查询详细信息

rpm -qi 包名
- i 查询软件信息
- p 查询未安装包信息,得在包目录下

9.1.3、查看系统文件属于哪个rpm包

rpm -qf 系统文件名

rpm -ql 包名,查看包名安装在哪个文件路径下

9.1.4、查看软件包的依赖性

rpm -qR 包名
-R: 查询软件包的依赖性
-p: 查询未安装包信息(在没有安装包的路径下查询)

9.1.5、RPM包校验

rpm -V 已经安装的报名
-V: 晓燕指定RPM包中文件

验证内容参数如下:
S : 文件大小是否修改
M : 文件类型或文件的权限是否被修改
5 : 文件MD5校验和是否修改(可以看做文件内容是否改变)
D : 设备中,从代码是否改变
L : 问价你路径是否改变
U : 问价耐属性(所有者)是否改变
G : 文件属组是否改变
T : 文件修改时间是否改变
文件类型:
	c : 配置文件
	d : 普通文件
	g : "鬼"文件
	l : 授权文件
	r : 描述文件

9.1.6、RPM包中文件提取

rpm2cpio 包全名 cpio -idv .文件绝对路径

cpio 选项 <文件|设备>
 选项:
 	-i: copy-in,还原
 	-d: 还原时自动新建目录
 	-v: 显示还原过程

rpm2cpio 将rpm包转换为cpio格式的命令

cpio 是一个标注农工局,用于创建软件档案文件和档案文件中提取文件

示例

rpm -qf /bin/ls
# 查询ls属于哪个包
mv /bin/ls /tmp/
# 造成ls命令误删除假象
rpm2cpio /mnt/cdrom/Packages/coreutil-8.4-19.el16.i686.rpm | cpio -div ./bin/ls
cp /root/bin/ls /bin/

9.2、yum在线管理

9.2.1、IP地址配置

setup
vim /etc/sysconfig/network-scripts/ifcfg-eth0
把ONBOOT = "no" 改为yes

servimce network restart

9.2.2、修改yum源

vim /etc/yum.repos.d/CentOS-Base.repo

参数说明
	- [base] 容器名称,一定要放在[]中
	- name : 容器说明,自己可以随意写
	- mirrorlist : 镜像站点,这个可以注释掉
	- baseurl : 我们yum源服务器的地址。默认是CenOS服务yum源服务器
	- enabled : 此容器是否生效,如果不写或写成enabled=1都是生效,写成enabled=0就是不生效
	- gpgcheck : 如果是1是指RPM的数字证书生效
	- gpgkey : 数字证书的公钥文件保存位置。不用修改

9.2.3、查询可用软件包列表

yum list
# 查询所有可用软件包列表

9.2.4、搜索安装包

yum search 关键字
# 搜索服务器删给所有和关键字相关的包

9.2.5、安装

yum -y install 包名
参数:
	install  安装
	-y : 自动回答yes

9.2.6、升级

yum -y update 包名
参数:
	update 升级
	-y: 自动回答yes

注意事项:

  1. 如果yum -y update 没有写指定包名,那么就会升级所有软件包括内核,如果升级内核,需要在服务器本地进行配置,所以千万不要全部升级
  2. 使用yum安装的,尽量不要卸载

9.2.7、卸载

yum -y remove 包名

9.2.8、Yum软甲那组管理命令

# 1. 查出所有可用的软件组列表
yum grouplist

# 2. 安装指定软件组,组名可以由grouplist查出来,如果名字有空格,要用双引号抱起来
yum groupinstall 软件组名

# 3. 卸载指定软件组
yum groupremove 软件组名

9.2.9、光盘yum源

9.3、源码包管理

区别

  1. 概念上区别
  2. 可选安装位置

安装准备

  1. 安装C语言编译器 gcc
  2. 下载要安装的源码

注意事项

  1. 源代码保存位置:/usr/local/src
  2. 软件安装位置:/usr/local/
  3. 如何确定安装过程报错:
    • 安装过程停止,并出现error、warning或no的提示

源码包安装过程

  1. 下载源码包
  2. 解压缩下载的源码包
  3. 进入解压缩目录

./config 软件配置与检查

  • 定义需要的功能选项
  • 检查系统环境是否符合安装要求
  • 把定义好的功能选项和检测系统的信息都吸入Makefile文件,用于后续编辑

在解决之后,需要先查看两个文件

  1. INSTALLREADME 分别是:安装说明,使用说明

开始操作

  1. 进入到包目录后,直接解压
  2. ./config --prefix=/usr/local/名字
  3. make 编译
  4. make install 编译安装

注意事项

  1. 如果在编译的时候出现错误,可以使用make clean 来清理编译出的垃圾文件

9.4、脚本安装包

概念

  1. 脚本安装包并不是独立的软件包类型,常见的安装十源码包
  2. 是人为把安装过程写成了自动安装的脚本,只要执行脚本,定义简答参数,即可安装

.sh后缀的文件,直接运行即可,进入目录,./*.sh

*代表当前文件的名字

十、用户和用户组管理

10.1、用户配置文件

10.1.1、用户信息文件

用户信息文件/etc/passwd

概念

在Linux中主要是通过用户配置文件来查看和修改用户的信息

/etc/passwd文件中每个用户字段的说明

第1字段:用户名称

第2字段:密码标志

第3字段:UID(用户ID)

  • 0: 超级用户
  • 1-499: 系统用户(伪用户)
  • 500-65535:普通用户

第4字段:GID(用户初始组ID)

第5字段:用户说明

第6字段:家目录

  • 普通用户:/home/用户名/
  • 超级用户:/root/

第7字段:登陆之后的Shell

什么是初始组和附加组

初始组:就是用户一登陆就立刻拥有的用户组先关权限,每个用户的初始组只能有一个,一半就是和这个用户的用户名相同的组名作为这个用初始组

附加组:指用户可以加入多个其他用户组,并拥有这个用户组对应的权限。附加组可以加入多个

用户对应的密码在影子文件中:/etc/shadow

10.1.2、影子文件

影子文件所在路径

/etc/shadow

vim /etc/shadow

第1字段:用户名

第2字段:加密密码

  • 如果密码位是:!!* 代表没有密码,不能登录

第3字段:面膜最后一次修改日期

  • 使用1970年1月1日作为标准时间,每过一天时间戳加1

第4字段:两次密码的修改间隔时间(和第3字段比)

第5字段:密码有效期(和第3个字段相比)

第6字段:密码修改到期前的警告天数(和第5字段相比)

第7字段:密码过期后的宽限天数(和第5字段比较)

  • 0:代表密码过期后立即生效
  • -1:代表密码永久不会失效

第8字段:账号失效时间

  • 用时间戳表示

第9字段:保留

时间戳换算

  • 把时间戳换算为日期
date -d "1970-01-01 时间戳 days"
  • 日期换算为时间戳
echo $(($(date --date="时间" +%s)/86400+1))
echo $(($(date --date="2020/07/02" +%s)/86400+1))

10.1.3、组信息文件

组信息文件 /etc/group

第1字段:组名

第2字段:组密码标志

第3字段:GID

第4字段:组中附加用户

组密码文件 /etc/gshadow

第1字段:组名

第2字段:组面膜

第3字段:组管理员用户名

第4字段:组中附加用户

10.1.4、用户管理相关文件

10.1.4.1、用户的家目录

普通用户:/home/用户名,所有者和所属组都是此用户,权限是700

超级用户:/root/,所有这和所属组都是root用户,权限是550

10.1.4.2、用户的邮箱

目录:/var/spool/mail/用户名/ 如果有邮件就会出现在这个文件中

10.1.4.3、用户模板目录

目录:/etc/skel/ 此目录下所有文件,在创建新用户的时候都会从这里copy一份到新用户家目录下

10.2、用户管理命令

10.2.1、useradd-用户添加命令

命令格式

useradd [参数] 用户名
参数:
	-u UID : 手工指定用户的UID
	-d 家目录: 手工指定用户的家目录
	-c 用户说明: 手工指定用户的说明
	-g 组名:手工指定用户的初始组 --> 不建议使用
	-G 族名:	指定用户的附加组
	-s shell: 手工指定用户的登陆shell。默认是/bin/bash.

示例:useradd -u 666 -G root,bin -d /home/lamp1 -c "test user" -s /bin/bash sc

useradd sc后修改的其实就是一下文件

grep sc /etc/passwd
grep sc /etc/shadow
grep sc /etc/group
grep sc /etc/gshadow
ll -d /home/lamp/
ll /var/spool/mail/lamp

用户默认值文件

/etc/default/useradd

  • GROUP=100 用户默认组
  • HOME=/home 用户家目录
  • INACTIVE=-1 密码过期宽限天数(shadow文件7字段)
  • EXPIRE= 密码失效时间
  • SHELL=/bin/bash 默认shell
  • SKEL=/etc/skel 模板目录
  • CREATE_MAIL_SPOOL=yes 是否建立邮箱

注意事项:

  1. Linux中有共有模式与私有模式,现在创建的用户默认都是私有,所以GROUP=100 就不起作用

/etc/login.defs

PASS_MAX_DAYS   99999	# 密码有效期
PASS_MIN_DAYS   0		# 密码修改间隔
PASS_MIN_LEN    5		# 密码最小5位
PASS_WARN_AGE   7		# 密码到期警告
UID_MIN         1000	# 最小和最大UID范围
UID_MAX         60000
ENCRYPT_METHOD SHA512    # 加密模式

10.2.2、passwd-修改用户密码

命令格式:

passwd [参数] 用户名
参数:
	-S : 查询用户密码的密码状态。仅root用户可用
	-l : 暂时锁定用户。仅root用户可用
	-u : 解锁用户。仅root用户可用
	--stdin : 可以通过管道符输出的数据作为用户的密码

使用举例

查看密码状态

passwd -S user1
user1 PS 2020-07-02 0 99999 7 -1 (Password set, SHA512 crypt.)
# 用户名密码设定时间(2020-07-02) 密码修改间隔时间(0) 
# 密码有效期(99999)  警告时间(7)   密码不失效(-1)

锁定用户与解锁用户

passwd -l user1
passwd -u user1

其实锁定用户,就是改的是/etc/shadow文件,在密码前面加了个!!

没有加锁

已经加锁

使用字符串作为密码

echo "123" | passwd --stdin user1

10.2.3、usermod-修改用户信息 和 chage-修改用户密码状态

修改用户信息-usermod

命令格式

usermod [参数] 用户名
参数:
	-u: UID		修改用户名的UID号
	-c: 用户说明  修改用户的说明信息
	-G: 组名	   修改用户的附加组
	-L: 		临时锁定用户(lock)
	-U: 		解锁用户锁定(unLock)

举例:
usermod -c "test user" -G root -u 550 user1

修改用户密码状态-chage

命令格式

chage [参数] 用户名
参数:
	-l:		列出用户的详细密码状态
	-d日期:  修改密码最后一个更改日期(shadow3字段)
	-m 天数: 两次密码修改间隔(4字段)
	-M 天数: 密码有效期(5字段)
	-W 天数: 密码过期前警告天数(6字段)
	-I 天数: 密码过后宽限天数(7字段)
	-E 日期: 账号失效时间(8字段)

注意事项:

其实上面的功能我们可以在/etc/shadow文件中直接通过Vim来修改,但是为什么要学习这个命令呢?

chage -d 0 用户名
# 这个命令其实就是把密码修改日期归0了(shadow3字段)
# 这样用户一登录就要修改密码

就是为了这条命令。

10.2.4、userdel-删除用户 和 su-用户切换命令

删除用户userdel

命令格式

userdel [-r] 用户名
参数:
	-r: 删除用户的同时删除用户家目录

底层做的事情

vim /etc/passwd
vim /etc/shadow
vim /etc/group
vim /etc/gshadow
rm -rf /var/spool/mail/用户名
rm -rf /home/用户名/

查看用户ID

命令格式

id 用户名
uid=1000(user1) gid=1000(user1) groups=1000(user1)

切换用户身份su

命令格式:

su [参数] 用户名
参数:
	-: 选项只使用"-"代表连带用户的环境变量一起切换
	-c: 仅执行一次命令,而不是切换用户身份
	
例子:
su - root
su - root -c "useradd user2"

10.3、用户组管理

10.3.1、添加用户组

命令格式

groupadd [参数] 组名
参数:
	-g GID 		指定组ID

10.3.2、修改用户组

命令格式

groupmod [参数] 组名
参数:
	-g GID 		指定组ID
	-n 新组名	  修改组名
	
例子
groupmod -n testgrp groupl
# 把组名groupl 修改为testgrp

10.3.3、删除用户组

groupdel 组名

10.3.4、用户添加组或从组中删除

gpasswd [参数] 组名
参数:
	-a 用户名:		把用户加入组
	-d 用户名:		把用户从组中删除 

10.3.5、修改用户组的注意事项

  1. 要删除组,但是要删除组中已经有用户,那得看该用户的初始组是哪个,如果不是要删除的组,那么可以直接把这个组删除掉;如果组下用户的初始组是该组,那么就必须先删除用户

十一、权限管理

11.1、ACL权限

什么是 ACL权限,它的出现以及应用场景

Linux系统所自带的权限系统,已经无法满足我们的需求。

比如,创建一个/project目录,指定它的所属组,所有人,以及其他人。对属主(root)以及属组都有rwx权限,其他人无权限。

这个时候又来一个用户,他得有r-x读与运行权限,这个时候就需要ACL权限

一个目录只能属于一个用户组

首先来查看系统有哪些分区

df -h

查看ACL权限是否开启

dumpe2fs -h /dev/vda1
参数:
	-h: 仅显示超级块中信息,而不显示磁盘快组的详细信息

目前所有Linux系统都已默认开启ACL

临时开启分区ACL权限

mount -o remount.acl
# 重新挂载根分区,并挂载加入acl权限

永久生效开启ACL权限

vim /etc/fstab
# UUID=1114fe9e-2309-4580-b183-d778e6d97397 /                       ext4    defaults,acl        1 1
mount -o remount
# 重新挂载文件系统或重启系统,使修改生效

上图场景的模拟

# 先来添加几个用户
useradd student1
useradd student2
useradd student3

# 创建一个学生用户组
groupadd Stu
# 添加用户到组
gpasswd -a student1 Stu
gpasswd -a student2 Stu
gpasswd -a student3 Stu

# 创建目录
mkdir /project

# 修改目录权限
chown root:Stu /project  
# 设置权限
chmod 770  /project #xrwx
# 查看权限
ll -d /project

# 添加试听用户
useradd st
passwd st

# 开始给st用户设置ACL权限
setfacl -m u:st:rx /project
# u表示给用户
# g表示给用户组
# 后面跟目录或文件

# 查看ACL权限
# getfacl 目录或文件
getfacl /project

11.1.1、查看与设定ACL权限

查看ACL权限

getfacle 目录/文件名
# 查看ACL权限

设定ACL权限

setfacl [参数] 目录/文件名
参数:
	-m: 设定ACL权限
	-x: 删除指定的ACL权限
	-b: 删除所有的ACL权限
	-d: 设定默认ACL权限
	-k: 删除默认ACL权限
	-R:	递归设定ACL权限
	
	
示例:
setfacl -m u:用户名:对应权限 目录
u: 表示用户
g: 表示用户组

setfacl -m u:st:rx /project

11.1.2、最大有效权限mask与删除ACL权限

mask的作用

mask用来指定最大有效权限的。如果我给用户赋予了ACL权限,是需要和mask的权限“相与”才能得到用户的真正权限

[root@iZ8vb6xljiklnfnmawnio3Z ~]# getfacl /root/project
getfacl: Removing leading \'/\' from absolute path names
# file: root/project
# owner: root
# group: Stu

user:st:r-x

mask::r-x

只有mask 和 user 全向相与才是真正可用权限

删除ACL权限

setfacl -x u:用户名 文件名
# 删除指定用户的ACL权限

setfacl -x g:用户组名 文件名
# 删除指定用户组的ACL权限

setfacl -b 文件名
# 删除文件的所有ACL权限

11.1.3、默认ACL权限和递归ACL权限

什么是递归

递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限

递归的给目录设置权限

setfacl -m u:用户名:权限 -R 文件名

注意事项:

  1. 使用上面命令,是对已经存在的文件或目录设置权限,如果是之后再新建的就不会有权限
  2. 解决办法是:设置默认权限

默认ACL权限

默认ACL权限就是如果父目录设定ACL权限,那么父目录所新建的子文件都会继承父目录的ACL权限

setfacl -m d:u:用户名:权限 文件名

11.2、文件特殊权限

11.2.1、SetUID----4

什么是SetUID

用来以该文件属主身份运行的一个权限。

简单的说:一个文件有SUID权限的话,那么其他用户在运行这个文件的时候,就会拥有属于该文件的属主权限

  1. 只有可执行的二进制程序才能设定SUID权限。
  2. 命令执行者要对该程序拥有x(执行)权限
  3. 命令执行者在执行噶程序时,获得程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主)
  4. SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效

简单的应用场景

passwd命令拥有SetUID权限,所以普通用户可以修改自己的密码

ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd

cat命令没有SetUID权限,所以普通用户不能查看/etc/shadow文件内容

ll /bin/cat
-rwxr-xr-x. 1 root root 54160 Oct 31  2018 /bin/cat

SetUID权限的执行流程

11.2.1.1、设定SetUID的方法

4代表SUID

chmod 4755 文件名   # 建议这种方式来操作。如果文件没有x权限那么就会有错误 是大写的`S`
chmod u+s 文件名

这是没有x权限,但是以chmod u+s 文件 给予的SETUID权限,会发现有大写S

建议

对于关键目录严格控制此权限。比如://usr

11.2.2、SetGID -- 2

SetGID对目录的作用

  1. 普通用户必须对此目录拥有rx权限,才能进入此目录
  2. 普通目录在此目录中的有小组会变成此目录的属组
  3. 若普通用户对此目录拥有w权限时,新建的文件默认数组就是这个目录的属组

SetGID对文件的作用

  1. 只有可执行的二进制程序才能设置SGID权限

  2. 命令执行者要对该程序拥有x(执行)权限

  3. 命令执行在执行程序的时候,组身份升级为该程序文件的属组

  4. SetGID权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效

11.2.2.1、设定SetGID

chmod 2755 文件名
chmod g+s 文件名

实战举例

cd /tmp/
mkdir test
# 设置GID
chmod g+s test

# 设置所有用户都有权限
chmod 777 test
# 切换用户,查看user1用户

以上是关于Linux基本使用的主要内容,如果未能解决你的问题,请参考以下文章

linux打开终端如何启动scala,如何在终端下运行Scala代码片段?

c_cpp Robolution基本代码片段

[linux][c/c++]代码片段01

Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段

[linux][c/c++]代码片段02

如何从片段外部清除/重置地图?