目录
一.文件权限命令
1.1 linux系统相对安全的原因
1. 使用Linux系统的人数少,尤其在国内,很少有人关注Linux。
2. 因为Linux开源,任何的系统漏洞都会被民间高手,或者是官方人员很快的发现。从漏洞的发现到补丁的放出,时间相当短,没有时间给病毒或者黑客作乱的机会。
3. 然后就是linux的权限管理,linux的权限管理很严格。病毒或者黑客想修改系统文件或者系统日志,除非有管理员密码。所以就算中了病毒,病毒的危害也非常的小,重要的系统文件都不会被破坏。所以发现了病毒稍做处理就搞定了。
4. 还有就是linux系统的程序管理。linux安装程序,基本都是利用程序管理软件,比如ubuntu、debian下的软件中心、centos,fedora和红帽的yum。linux系统安装程序基本上都是用软件管理程序,从程序开发者官网上或者是相应的发行版社区直接下载安装。不会有被恶意篡改的软件被安装到使用者的电脑上。
1.2 文件权限的种类
1.3 文件属性解析
[root@xxx01 ~]# ls -l
-rw-r--r-- 1 root root 302 8月27 9:24 namelist
【 1 】 【2】 【3】 【4】 【5】 【6】 【7】
解析:
第一列:由10个字符组成。第一个字符表示文件类型,第2~10个字符表示权限
权限由9个字符构成: 前三个字符表示owner拥有的权限
中间三个字符表示group下的所有成员拥有的权限
后三个字符表示other的权限
第二列:文件的硬链接数
第三列:owner的名称
第四列:group的名称
第五列:文件大小
第六列:该文件的最后一次访问时间
第七列:该文件名
1.4 文件权限的针对者
从文件属性的第一列的解析来看,文件的权限是针对于三种不同用户来设定的
-
拥有者,即文件的owner
-
用户组,即文件的所属组
-
其他人,即除了上述两种情况的其他情况,称为others
1.5 文件的权限修改(chmod)
语法1:chmod [ugoa][+-=][rwx] [filename] 该指令只能是root和owner自己使用
解析:
u: 表示owner,即第2~4个字符
g: 表示group,即第5~7个字符
o: 表示other,即第8~10个字符
a: 表示all, 即所有人
+: 表示在原有的权限上添加新权限
-: 表示在原有的权限上撤销权限
=: 覆盖原有的权限,授予新权限
语法2:chmod [421] [filename]
解析:第二个参数中的三个数字分别表示owner,group,other的权限
即每个数字表示某一个身份的权限之和。
案例1:赋予文件file1所属组写权限
chmod g+w file1
案例2:取消所有者,用户组,其他人三个部分对file1的写权限
chmod ugo-w file1
案例3:设定目录dir1为所有用户具有全部权限
chmod 777 dir1
案例4:chmod 763 file1
7表示拥有者的权限是可读可写可执行
6表示所属组的权限是可读可写
3表示其他人的权限是可写可执行
扩展====================>
文件和目录创建后有默认权限:
root身份创建的:
文件:644
目录:755
普通用户创建的:
文件:664
目录:775
赋值权限问题:
针对于文件而言:权限可以任意chmod,但是在应用时,会涉及到权限够不够的问题
如果文件有执行权限,则必须给读权限。
合理性问题:如果文件有写权限,应该给读权限
针对于目录而言:权限可以任意chmod,但是在应用时,会涉及到权限够不够的问题
如果有r权限,应该赋予x权限
如果有w权限,应该赋予x权限
1.6 文件所属组的修改(chgrp)
格式:chgrp [-R] [newGroup] filename 该指令只能是root用户使用
功能描述:改变文件或目录的所属组
案例1: 改变文件file1的所属组为adm
chgrp dam file1
案例2:修改目录dir1及其子目录和文件的用户组为michael
chgrp -R michael dir1
1.7 文件拥有者的修改(chown)
格式1:chown [-R] [newOwner] filename 该指令只能是root用户使用
参数: -R 表示递归修改拥有者
案例1:改变文件file1的所有者为nobody
chown nobody file1
案例2:修改目录dir1及其子目录和文件的拥有者为michael.
chown -R michael: dir1
格式2:chown newOwner:newGroup filename #可以有chgrp的功能
案例3:将install.log的拥有者与群组改为root
chown root:root install.log
案例4:修改目录dir1的用户组为root
chown .root dir1
二.sudo指令的应用
2.1 sudo简介
有的时候,在操作和管理Linux时,我们需要切换成root身份才能进行,比如修改权限等。su可以用于切换成root账号,但是需要使用root账号的密码(管理员把自己的密码给普通用户 不合适吧)。
sudo,则是root给普通用户的一个特殊指令,普通用户不用再特意切换成root身份,就可以使用root才能使用的一些指令。仅仅需要普通用户自己的密码即可(通过配置,甚至可以不用密码)
当然,普通用户拥有sudo的使用权,必须是管理员root事先通过审核,才能开放给普通用户的。(即,除非是信任用户,否则一般用户默认是不能操作sudo的)
2.2 sudo的配置
2.2.1 修改文件的方式
方式1:root用户直接vi /etc/sudoers 然后强制保存
方式2:直接输入牛掰哄哄的visudo
2.2.2 visudo
[root@xxx01 ~]# visudo
进入后,找到第100行和110行。
- 在100行的 root ALL=(ALL) ALL下面填写 ---配置这个,就可以使用sudo了。
scott ALL=(ALL) ALL
- 在110行的 #%whell ALL=(ALL) NOPASSWD:ALL下面填写 --配置这个,就可以不用再输入密码了
scott ALL=(ALL) NOPASSWD:ALL
-解析: scott ALL=(ALL) ALL
第一列:使用sudo的账号
第二列:客户端计算机主机名
第三列:可切换的身份
第四列:可使用的指令,注意使用具体指令时需要使用绝对路径,多个指令用逗号分开
三.软件管理机制
3.1 linux软件管理介绍
- RPM
这个机制最早是由Red Hat这家公司开发出来的,后来实在很好用,因此很多distributions就使用这个机制来作为软件安装的管理方式。包括Fedora、CentOS、SuSE等知名的开发商。
- DPKG
这个机制最早是由Debian Linux社群所开发出来, 通过dpkg的机制,Debian提供的软件就能够简单的安装起来,同时还能提供安装后的软件信息,非常不错。只要是衍生自Debian的其他Lunix distributions大多使用了dpkg这个机制来管理软件的,包括B2D,ubuntu等。
- 第一种方式:我们人工的一步一步的检测和安装所依赖的软件,直到依赖环境都存在。
- 第二种方式:就是使用一种自动管理机制,先获取依赖关系做成列表,查看平台是否已经存在所需要的环境,如果不存在,自动管理机制通过依赖关系,来获取所需要的软件,进行顺序安装,从而解决这样的问题。
3.2 二进制安装
3.2.1 JDK的安装
步骤1)上传jdk的二进制安装包 jdk-8u221-linux-x64.tar.gz,比如上传到/root/下
步骤2)解压jdk安装包
```shell
[root@xxx01 ~]# tar -zxvf ./jdk-8u221-linux-x64.tar.gz -C /usr/local
```
步骤3)切换到/usr/local下并更名
```shell
[root@xxx01 ~]# cd /usr/local
[root@xxx01 local]# mv jdk1.8.0_221/ jdk
```
步骤4)配置环境变量
环境变量的配置有三个位置可选,分别是以下三个位置
```
/etc/profile :系统级别的环境变量配置文件 所有用户都可以使用
~/.bash_profile :用户级别的环境变量配置文件 只对于一个用户好使
~/.bashrc :用户级别的环境变量配置文件 只对于一个用户好使
```
注意:真实环境中,我们应该选择用户级别的环境变量,这样的好处是,即使配错了,我们可以使用root账号来帮助修改。如果是系统级别的,配错了的话,root账号也不好使了,得另想办法,麻烦死了。
但是在学习期间,避免麻烦,直接配置系统级别的环境变量即可。
```shell
[root@xxx01 ~]#vim /etc/profile
........省略...................
# JDK environment
JAVA_HOME=/usr/local/jdk
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
小贴士:原有的PATH值拼在新值的后面
```
步骤5)让环境变量生效(刷新环境变量)
```shell
[root@xxx01 ~]# source /etc/profile
```
步骤6)验证是否生效
```
[root@xxx01 ~]# java -version
[root@xxx01 ~]# javac
```
扩展:二进制软件包的安装还有执行程序式的安装,只需要运行安装指令后,跟着提示进行下一步下一步的操作即可。类似于windows平台上的软件安装界面。
3.3 rpm机制安装
3.3.1 MYSQL的安装
步骤1)上传mysql相关的软件包,比如上传到/root下
```
mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
```
步骤2)拆包
```shell
[root@xxx01 ~]# tar -xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
[root@xxx01 ~]# ll
mysql-community-client-5.7.28-1.el7.x86_64.rpm
mysql-community-common-5.7.28-1.el7.x86_64.rpm
mysql-community-devel-5.7.28-1.el7.x86_64.rpm
mysql-community-embedded-5.7.28-1.el7.x86_64.rpm
mysql-community-embedded-compat-5.7.28-1.el7.x86_64.rpm
mysql-community-embedded-devel-5.7.28-1.el7.x86_64.rpm
mysql-community-libs-5.7.28-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
mysql-community-server-5.7.28-1.el7.x86_64.rpm
mysql-community-test-5.7.28-1.el7.x86_64.rpm
小贴士: 其实我们是想安装mysql-community-server-5.7.28-1.el7.x86_64.rpm
```
步骤3)安装mysql
```shell
1. 先检查是否安装了mariadb, 如果已经安装,就卸载掉
[root@xxx01 ~]# rpm -qa | grep mariadb
mariadb-libs-5.5.64-1.el7.x86_64
[root@xxx01 ~]# rpm -e mariadb-libs-5.5.64-1.el7.x86_64 --nodeps
2. 安装mysql-common
[root@xxx01 ~]# rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm
3. 安装mysql-lib
[root@xxx01 ~]# rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
4. 安装mysql-client
[root@xxx01 ~]# rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
5. 安装mysql-server
[root@xxx01 ~]# rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm
--------------------------到此为止,rpm安装完毕 -----------------------
mysql在linux中的服务项叫mysqld
6. 启动mysql的服务项mysqld
[root@xxx01 ~]# systemctl start mysqld
[root@xxx01 ~]# systemctl status mysqld 并查看
7. 查看mysql提供的默认密码,并复制, 注意,如果服务项启动失败,则不会产生mysqld.log文件
[root@xxx01 ~]# cat /var/log/mysqld.log | grep password
8. 登录mysql,并修改密码
[root@xxx01 ~]# mysql -uroot -p'9Pe%mQVcs-#<' 回车即可
.... 进入后,修改密码
mysql> alter user root@'localhost' identified by '@Mmforu45';
9. 如果想要远程连接该机器上的mysql server, 那么mysql server需要进行远程授权
mysql> grant all privileges on *.* to root@'%' identified by '@Mmforu45';
然后可以在windows启动navicat 远程连接linux上的mysql了。
```
3.4 yum在线安装机制
3.4.1 NGINX的安装
1) 下载源码包,并解压到你喜欢的位置
```shell
[root@xxx01 ~]# tar -zxvf nginx-1.8.0.tar.gz -C /usr/local
```
2)进入该软件的家里
```shell
[root@xxx01 ~]# cd /usr/local/nginx-1.8.0
```
3)执行配置信息
注意:需要c语言环境提前安装好
```shell
[root@xxx01 ~]# yum -y install gcc-c++
[root@xxx01 ~]# yum install -y pcre pcre-devel
[root@xxx01 ~]# yum install -y zlib zlib-devel
[root@xxx01 ~]# yum install -y openssl openssl-devel
```
安装好环境后,在配置nginx的属性信息
```shell
[root@xxx01 nginx-1.8.0]# ./configure \
--prefix=/usr/local/nginx-1.8.0 \
--pid-path=/usr/local/nginx-1.8.0/tmp/nginx.pid
```
4)在家里执行编译指令
```shell
[root@xxx01 nginx-1.8.0]# make
```
5)在家里执行安装指令
```shell
[root@xxx01 nginx-1.8.0]# make install
```
如果出现了bin或者sbin目录,则表示安装成功。
6)清空缓存
```
[root@xxx01 nginx-1.8.0]# make clean
```
四.LINUX的其他常用操作
4.1 虚拟机的克隆
步骤1)先克隆机器
```
先关掉要克隆的机器,然后
右键点击机器名称--->管理-->克隆-->虚拟机的当前状态-->创建完整克隆-->虚拟机名称--完成
```
步骤2)修改IP和主机名以及映射文件,然后重启
```shell
[root@xxx01 ~]# hostnamectl set-hostname xxx02
[root@xxx01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@xxx01 ~]# vim /etc/hosts
[root@xxx01 ~]# reboot
```
步骤3)测试是否可以通信
```
[root@xxx01 ~]# ping xxx02
[root@xxx02 ~]# ping xxx01
```
4.2 scp指令
作用:用于远程拷贝文件
语法: scp [-r] filename.... 远程用户名@远程机器IP:pathname
(=-=!!!,最近学习的压力稍微有点点大了,每天接收的东西有点过载,全都是新的概念,还需要不断去熟练各种命令,多少有点手忙脚乱,但幸运的是身边有厉害的人进行指导解惑,努力坚持,小白相信所熬的夜都不会白费,每天的努力,不管大小慢慢积累,最终会带来意想不到的收获,目前要做到的就是收心,抛开一切不该有的杂念,然后默默前行,即便这条道路上只有一个人,也不用怕,因为成功总是掌握在少数人手中!一起努力,冲冲冲~~~)