linux文件目录权限和系统基础优化命令

Posted tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux文件目录权限和系统基础优化命令相关的知识,希望对你有一定的参考价值。

一、用户

1、介绍

我们都知道linux中有root用户和普通用户,但是同样是普通用户,为什么有些用户的权限却不一样呢?
其实这就类似于我们的QQ群,root用户就是QQ群主,他拥有最高的权利,想干什么就干什么,
其他人都是普通用户,某一天,群主看这个小伙子不错,于是群主给了一些权限这个小伙子,
于是这个小伙子就成了QQ群的管理员,这个小伙子就比其他用户多了一些权限。

注意:root用户需要慎用,尤其是rm命令,必须慎用!!!因为root能把自己给搞死。。。

 

2、关于用户的一些命令

1. id
id 用户名    查看用户的身份信息
例如: id root  查看root用户的身份信息


2. 查看当前用户是谁
whoami


3. 创建用户
root用户才能创建用户,创建的都是普通用户。
useradd  用户名  # 创建用户
passwd   用户名  # 给用户设置密码

注意:由于系统服务的用户,默认是在1-1000以内的,因此新建的用户uid是从1000开始的


4. 删除用户
-f    强制删除用户
-r    同时删除用户以及家目录

userdel -r 用户名


5. 用户身份切换 
su - 用户名
注意:
    中间的横杠,表示完全环境变量切换 
    root切换成普通用户,不需要密码,反之需要密码


6. 退出当前用户会话 
logout

 

二、组

1、介绍

1. 多用户和组
现代操作系统一般属于多用户的操作系统,因此一台机器可以有多个用户,这些用户能同时登录这台计算机,进行各自的操作,相互之间不受影响。
但是这些用户的权限是有限制的,称为普通用户,且如果用户太多,管理起来就不方便,从而引入root用户。
root用户是唯一的,且拥有系统的所有权限。root用户所在的组称为root组。“组”是具有相似权限的多个用户的集合。


2. root的权限
Linux系统的特性就是可以满足多个用户,同时工作,因此Linux系统必须具备很好的安全性。
在安装Linux系统(CentOS,redhat)的时候,可以设置root管理员密码,这个root管理员就是所有UNIX系统中的超级用户,
它拥有最高的系统所有权,能够管理系统的各项功能,如添加/删除用户,启动/关闭进程,开启/禁用硬件设备等等。


3. 用户id(uid)
在Linux系统中,用户也有自己的UID身份账号且唯一
系统管理员root的UID为0
系统用户UID为1~999,Linux安装的服务程序都会创建独有的用户负责运行。
普通用户UID从1000开始:由管理员创建。


4. 组id(gid)
为了方便管理属于同一组的用户,Linux 系统中还引入了用户组的概念。通过组id,我们可以把多个用户加入到同一个组中,从而方便为组中的用户统一规划权限或指定任务。
例如一个公司拥有多个部门,每个部门都有很多员工,每个部门就组成了一个个的组,这个组内的所有人都拥有类似的权限。

Linux管理员在创建用户时,将自动创建一个与其同名的用户组,这个用户组只有该用户一个人

 

2、添加组

1. groupadd
groupadd命令用于将新组加入系统。

2. 格式
groupadd [参数] 组名称

3. 主要参数
-g gid:指定组ID号。
-o:允许组ID号,不必惟一。
-r:加入组ID号,低于499系统账号。
-f:加入已经有的组时,发展程序退出。

4. 组的信息
组的信息存放在/etc/group文件里面
例如:
root:x:0:

在 /etc/group 文件中,每一行就代表一个用户组,其格式是使用 3 个冒号隔开的 4 列。
第一列是用户组名
第二列代表密码(但是并不使用)
第三列代表用户组的数字ID
第四列是组成员,这里为空,说明还没有任何用户属于这个组。


5.应用实例
建立一个新组
groupadd -g 1002 zbj  # 创建了一个组名为zbj,组id为1002的组
/etc/group 文件中:
zbj:x:1002:

添加组成员
usermod -G 组名 用户名  # 把这个用户名添加到某个组

 

3、删除组

groupdel 组名

 

三、sudo命令

1、作用
sudo命令,就是让普通用户可以使用root的身份去执行命令


2、参数
-V 显示版本编号
-h 会显示版本编号及指令的使用方式说明
-l 显示出自己(执行 sudo 的使用者)的权限
-v 因为 sudo 在第一次执行时或是在 N 分钟内没有执行(N 预设为五)会问密码,这个参数是重新做一次确认,如果超过 N 分钟,也会问密码
-k 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟)
-b 将要执行的指令放在背景执行
-p prompt 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称
-u username/#uid 不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 username 的身份执行指令(#uid 为该 username 的使用者号码)
-s 执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell
-H 将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录(如不加 -u 参数就是系统管理者 root )
command 要以系统管理者身份(或以 -u 更改为其他人)执行的指令


3、使用sudo命令的配置过程
1.编辑 sudoers 文件,添加用户
vim /etc/sudoers  # 使用vim命令编辑配置文件
visudo    # 提供语法检测,更为友好

2.添加clj用户,让它可以使用root身份
/root 找到以下行:
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL

在这行下面添加:
clj    ALL=(ALL)       ALL  #允许clj在任何地方,执行任何命令

3.使用clj用户登录,测试sudo命令
clj登录  >     sudo  ls /root/
# 会提示输入clj这个用户的密码,输入即可

 

四、文件与目录权限

Linux权限的目的是:保护账户的资料

Linux权限主要依据三种身份来决定:
user/owner:文件使用者,文件属于哪个用户(属主)
group:文件属于哪个组(属组)
others:既不是user,也不再group,就是other,其他人

 

1、什么是权限

在Linux中,每个文件都有所属的所有者,和所有组,并且规定了文件的所有者,所有组以及其他人对文件的,可读,可写,可执行等权限。

对于目录的权限来说,可读是读取目录文件列表,可写是表示在目录内新增,修改,删除文件。可执行表示可以进入目录。

 

2、权限的详解

例如:
ll test.py 
-rw-r--r--. 1 root root 318 Jan  9 15:40 test.py


-rw-r--r--  
第一个字母为文件类型,后续9个字母,每3个一组,是三种身份的权限:
   -          rw-             r--             r-- 
文件类型    (属主权限)         (组权限)       (其他人权限)


实际上是两部分:
第一部分就是文件类型
其他三部分都是权限


文件类型:
-  普通文件 
d  文件夹 
l  快捷方式,软连接   link 快捷方式

b  块设备,存储媒体文件为主
c  代表键盘,鼠标等设备


权限:
r  read可读 
w  write可写 
x  executable可执行 
-  没有权限

注意:rwx的顺序就是这样的,不能是rxw、wxr等,只能是rwx、rw-、-wx等写法


对文件的权限来看 
r    可读文件的内容,例如:cat命令 
w    可修改文件的内容,例如:vim命令 
x    可执行,如同 .sh  .py  


对于目录的权限来看
可读是表示可读取目录文件列表,可写是表示在目录内新增,修改,删除文件。可执行表示可以进入目录。
r    可以查看文件夹内容,例如:ls命令
w    可以进入目录,创建文本,例如:touch 
x    可进入目录,例如:cd  


-rw-r--r--. 1 root root 318 Jan  9 15:40 test.py 完整的信息:
1.权限,第一个字母为文件类型,后续9个字母,每3个一组,是三种身份的权限
2.文件链接数         1
3.文件拥有者-属主    root
4.文件拥有组-属组    root
5.文件大小          318
6.最后一次被修改的时间日期    Jan  9 15:40
7.文件名           test.py

 

3、更改权限

1. chmod命令(change mode 更改权限)
u    user    属主  
g    group    属组
o    other     其他
a            所有,就是u g o

chmod [身份]     [参数]   [文件]
   u(user)   +(添加)  
   g(group)   -(删除)
   o(other)  =(赋值)
   a(all)


添加权限
chmod  u+r   file 
chmod  u+w   file 
chmod  u+x   file 
chmod  u+rwx file 

chmod  g+r    file 
chmod  g+w    file 
chmod  g+x    file
chmod  g+rwx  file 

chmod  o+r    file 
chmod  o+w    file 
chmod  o+x    file 
chmod  o+rwx  file 

chmod ug+rwx file
chmod go+rwx file chmod a
+rwx file # 给属主属组和其他人都设置rwx 删除权限: 把 + 修改成 - 即可,用法一样 2. 权限与数字的转换 r w x 4 2 1 可一次性修改权限 chmod 777 test.py # 把test.py这个文件的属主、属组和其他人的权限都改成:rwx rwx = 4+2+1 = 7 r-x = 4+1 = 5 rw- = 4+2 = 6 --- = 0 chmod 000 test.py # 把test.py这个文件的属主、属组和其他人的权限都改成:--- chmod 123 test.py # 把test.py这个文件的属主、属组和其他人的权限都改成:--x -w- -wx chmod 43 test.py 相当于 chmod 043 test.py chmod 3 test.py 相当于 chmod 003 test.py

 

4、修改文件权限属性

普通用户只能修改自己的文件名,时间与权限
因此修改其他用户权限,只能用root用户

1. chown修改属主
chown root clj.txt  # 把clj.txt这个文件的属主修改成root


2. chgrp修改属组
chgrp root clj.txt  # 把clj.txt这个文件的属组修改成root

 

5、软连接(快捷方式)

1. 语法
ln -s  目标文件  快捷方式路径/快捷方式名称

2. 例如
/opt下有test.py,里面只有一句:print("I am test.py")
ln -s /opt/test.py /tmp/t  # 为test.py文件生成快捷方式,快捷方式存放在/tmp目录下,快捷方式名为 t
创建完成后,t即代表了test.py
此时执行命令: ll t 结果:lrwxrwxrwx. 1 root root 12 Jan 9 20:14 t -> /tmp/test.py 可以发现首字符变成了 l 代表是软连接 使用快捷方式: 在/tmp下:python t # 输出: I am test.py 在其他目录: python /tmp/t # 输出: I am test.py

 

6、制作bin可执行命令

"""
/bin :系统的一些指令
/sbin: 超级用户指令系统管理命令,这里存放的是系统管理员使用的管理程序 

/usr/bin:用户安装的一些可执行程序,系统升级有可能会被覆盖.
/usr/sbin:超级用户才能使用的可执行程序,系统升级有可能会被覆盖.

/usr/local/bin:给用户放置自己的可执行程序,不受系统升级影响,用户编译安装软件时,一般放到/usr/local目录下
"""

# 0.创建自己的bin可执行文件思路
把某个脚本用软链接的方式指定到/usr/local/bin目录下即可


# 1.在某个目录下创建一个python脚本
# 一般制作自己的可执行文件,都存放在/usr/local目录下
cd /usr/local
vim test.py

# test.py写入一些代码测试,例如:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
print sys.argv


# 2.修改文件的权限,改为可执行
chmod 755 test.py


# 3.创建软链接(使用绝对路径)
ln -s /usr/local/test.py /usr/local/bin/test


# 测试,在任何目录下可直接执行
cd /tmp
test 1 2 3

 

五、其他

0、tar压缩解压命令

tar命令参数:
-x:解压
-c: 建立压缩档案
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件

这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。
-f 指定档案文件名或设备名,这个选项通常是必选的
-z:有gzip属性的
-j:有bz2属性的
-Z:有compress属性的
-v:显示所有过程
-O:将文件解开到标准输出

示例:
1. 压缩
tar -zcvf 路径/heihei.tar.gz clj.txt       # 把clj.txt这个文件压缩成heihei.tar.gz
tar -zcvf 路径/haha.tar.gz clj.txt test.py # 把clj.txt和test.py这两个文件压缩成haha.tar.gz

2. 解压
tar -zxvf heihei.tar  # 解压heihei.tar.gz


小结:
*.tar 用 tar –xvf 解压
*.gz 用 gzip -d或者gunzip 解压
*.tar.gz和*.tgz 用 tar –xzf 解压
*.bz2 用 bzip2 -d或者用bunzip2 解压
*.tar.bz2用tar –xjf 解压
*.Z 用 uncompress 解压
*.tar.Z 用tar –xZf 解压
*.rar 用 unrar e解压
*.zip 用 unzip 解压

 

1、其他解压缩命令

tar 
解包:tar xvf FileName.tar
打包:tar cvf 路径/FileName.tar DirName(要打包的文件)
(注:tar是打包,不是压缩!)


.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName

.tar.gz 和 .tgz 解压:tar zxvf FileName.tar.gz 压缩:tar zcvf 路径/FileName.tar.gz DirName
.bz2 解压1:bzip2
-d FileName.bz2 解压2:bunzip2 FileName.bz2 压缩: bzip2 -z FileName
.tar.bz2 解压:tar jxvf FileName.tar.bz2 压缩:tar jcvf FileName.tar.bz2 DirName
.bz 解压1:bzip2
-d FileName.bz 解压2:bunzip2 FileName.bz 压缩:未知

.tar.bz 解压:tar jxvf FileName.tar.bz 压缩:未知
.Z 解压:uncompress FileName.Z 压缩:compress FileName

.tar.Z 解压:tar Zxvf FileName.tar.Z 压缩:tar Zcvf FileName.tar.Z DirName

.zip 解压:unzip FileName.zip 压缩:zip 路径/FileName.zip DirName
.rar 解压:rar x FileName.rar 压缩:rar a 路径/FileName.rar DirName
5.使用实例 实例1:将文件全部打包成tar包 命令: tar -cvf log.tar log2012.log tar -zcvf log.tar.gz log2012.log tar -jcvf log.tar.bz2 log2012.log

 

2、netstat查看网络端口

1. 语法
linux查看网络端口的命令netstat 
netstat [参数]

2. 参数
    -a (all)显示所有选项,netstat默认不显示LISTEN相关
    -t (tcp)仅显示tcp相关选项
    -u (udp)仅显示udp相关选项
    -n 拒绝显示别名,能显示数字的全部转化成数字。(重要)
    -l 仅列出有在 Listen (监听) 的服務状态

    -p 显示建立相关链接的程序名(macOS中表示协议 -p protocol)
    -r 显示路由信息,路由表
    -e 显示扩展信息,例如uid等
    -s 按各个协议进行统计 (重要)
    -c 每隔一个固定时间,执行该netstat命令。 

3. 示例
列出所有端口:     netstat -a
列出所有tcp端口:  netstat -at
列出所有udp端口:  netstat -au

常用:netstat -tunlp

 

3、ps命令查看进程

1. 查看linux进程信息
命令:ps  # 相当于windows的任务管理器

2. 参数:
    -e 显示所有进程
    -f 全格式

3. 示例    
ps -e   显示所有进程,且显示进程所使用的环境变量。
ps -f   用ASCII字符显示树状结构,表达程序间的相互关系

f
ps -ef  是用标准的格式显示进程!!!
UID         PID   PPID   C    STIME    TTY          TIME       CMD
root         2      0    0    15:41     ?         00:00:00  [kthreadd]
root       87794  87790  0    17:18    pts/0      00:00:00    -bash

其中各列的内容意思如下:
UID    //用户ID、但输出的是用户名 
PID    //进程的ID 
PPID   //父进程ID 
C      //进程占用CPU的百分比 
STIME  //进程启动到现在的时间 
TTY    //该进程在那个终端上运行,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程。 
CMD    //命令的名称和参数

4. 其他参数显示不同的格式
-a    显示所有进程
-u    用户以及其他详细信息
-x    显示没有控制终端的进程

ps -aux  是用BSD的格式来显示,跟ps -ef相类似!!!

 

4、Kill命令杀死进程

kill命令用来删除执行中的程序或工作,kill还可将指定的信息送至程序。

1. 语法
kill [参数] 进程号

2. 参数
-a:当处理当前进程时,不限制命令名和进程号的对应关系
-l <信息编号>:若不加<信息编号>选项,则-l参数会列出全部的信息名称
-p:指定kill 命令只打印相关进程的进程号,而不发送任何信号
-s <信息名称或编号>:指定要送出的信息
-u:指定用户

3. 注意
kill命令可以带信号号码选项,默认信号是15

4. 信号
HUP     1    终端断线
INT     2    中断(同 Ctrl + C)
QUIT    3    退出(同 Ctrl + \\)
TERM   15    终止
KILL    9    强制终止
CONT   18    继续(与STOP相反, fg/bg命令)
STOP   19    暂停(同 Ctrl + Z)

只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略

5.示例
# 列出所有信号名称
kill -l

# 先用ps查找进程,然后用kill杀掉
ps -ef|grep vim  # 这条信息中可以找到vim这个进程的进程号,我这里测试时是14800
kill 14800

# 彻底杀死进程
kill –9 14800

 

5、killall命令批量杀死进程

通常来讲,复杂软件的服务程序会有多个进程协同为用户提供服务,如果逐个去结束这 些进程会比较麻烦,
此时可以使用 killall 命令来批量结束某个服务程序带有的全部进程。

killall其实就是ps命令和kill命令的结合

 

6、pkill

pkill 支持正则匹配的kill命令
和killall用法差不过,都是批量杀死进程

pkill vim    # 一次性杀死所有关vim的进程

 

7、SELinux功能

1. 介绍
SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,大多数生产环境也是关闭的做法,安全手段使用其他方法。
大多数ssh连接不上虚拟机,都是因为防火墙和selinux阻挡了。


2. 修改配置文件,永久关闭selinx
# 1.修改前备份
cp /etc/selinux/config /etc/selinux/config.bak

注意:/etc/selinux/config是真正的selinux的配置文件,而 /etc/sysconfig/selinux是一个它的软连接
即:ln -s /etc/selinux/config /etc/sysconfig/selinux,修改配置的时候,选择其中一个修改即可,是一样的。
# 2.找到配置文件 vim /etc/selinx/config 找到:SELINUX=enforcing这一行 修改为:SELINUX=disabled # 3.重启服务器,永久生效 3. 临时关闭(重启失效) # 获取selinux状态 getenforce # 参数 setenforce 参数 数字0 表示permissive,给出警告,不会阻止,等同disabled 数字1 表示enforcing,表示开启 # 修改 setenforce 0 # 临时关闭

 

8、iptables防火墙

centos7默认使用firewall作为防火墙

1. 查看
systemctl status firewalld # 查看防火墙状态
systemctl is-enabled firewalld.service  # 检查防火墙是否启动

iptables -L   查看防火墙规则 
iptables -F  清空防火墙

2. 临时关闭
# 下次开机会自动重启防火墙服务
systemctl  stop/start/restart  firewalld    # 关闭/开启/重启firewalld服务
iptables -F  清空防火墙

3. 永久关闭
# 把服务停了,然后再关闭开机自动开启防火墙的服务,可实现永久关闭。
systemctl  stop/start/restart  firewalld    # 关闭/开启/重启firewalld服务
iptables -F  清空防火墙
systemctl  disable/enable  firewalld        # 永久关闭/开启防火墙

 

9、Linux中文乱码问题

linux设置支持中文 

1.把linux系统的编码设置为utf8  
    1.设置一个文件/etc/locale.conf 
        命令:vim  /etc/locale.conf 
        修改内容:LANG="zh_CN.UTF-8"
    2.写入新的变量
        source /etc/locale.conf
    3. 查看系统当前字符集
        echo $LANG

2.设置远程登录软件xshell的编码也为utf8 
    保证xshell也是utf-8  就行

 

10、df查看磁盘空间的命令

df命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

1. 语法
df 参数

2. 参数
-h或--human-readable:以可读性较高的方式来显示信息;
-k或--kilobytes:指定区块大小为1024字节;
-T或--print-type:显示文件系统的类型;

3. 示例
查看系统磁盘设备,默认是KB为单位:
df

使用-h选项以KB以上的单位来显示,可读性高:
df -h

 

11、DNS服务

1. 解释
DNS(Domain Name System,域名系统),万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
通过域名,最终得到该域名对应的IP地址的过程叫做域名解析(或主机名解析)。


2. dns解析原理
    1.当用户在浏览器输入 www.baidu.com的时候
    2.第一步去本地dns缓存中查找域名记录
    3.如果没有就去 /etc/hosts文件中,查找是否有本地解析记录
    4.如果没有就去 /etc/resolv.conf  配置文件中指定的dns服务器中查找记录,如果没有,就是公网根本没有注册这个域名

3. 一些知名的DNS服务器
    114.114.114.114  114的dns服务器
    223.5.5.5         阿里的dns服务器
    223.6.6.6         阿里的dns服务器
    119.29.29.29     腾讯的dns服务器


4. linux的dns配置文件
1,/etc/hosts  优先级最高,本地dns记录解析 ,如果买不起域名,就用这个,做本地测试开发
命令:vim /etc/hosts
增加的内容:127.0.0.1 www.baidu.com

这样写的话,你在你的服务器上访问www.baidu.com永远只能访问到自己的127.0.0.1的ip地址
相当于在本地自定义了一个域名解析

2,/etc/resolv.conf 
在本地找不到,就会去这个配置文件中找你用于域名解析的服务器DNS

cat /etc/resolv.conf  # 查看默认使用的DNS
# dns服务器地址
nameserver 202.96.128.86  # 主dns
nameserver 202.96.134.166 # 备dns


可以修改DNS服务
命令:vim /etc/resolv.conf
修改内容:
    nameserver 223.5.5.5
    nameserver 119.29.29.29


5. nslookup域名查找命令
支持交互式的
直接 nslookup
然后在交互模式下输入网址进行域名解析

参数形式的
nslookup www.baidu.com

 

12、linux的计划任务

到了某个设置的时间,自动的执行某个任务

1. 语法
crontab 参数

2. 参数
-e:编辑该用户的计时器设置;
-l:列出该用户的计时器设置;
-r:删除该用户的计时器设置;
-u<用户名称>:指定要设定计时器的用户名称。


3. 配置信息
# crontab的配置文件
/etc/crontab

# 存放定时任务的文件
/var/spool/cron

4. 注意事项
第一点:
写计划任务时,命令必须加上绝对路径,
比如你要设计一个定时任务,要使用到echo这个命令,那么你不能直接写echo,
你要写echo这个命令的绝对路径:/usr/bin/echo
可用which echo 找到echo命令的绝对路径

第二点:
确保crontab服务运行  
systemctl status crond
ps -ef|grep crond

第三点:
检测crontab是否开机启动
systemctl is-enabled crond

5. crontab任务配置基本格式
     *            *            *            *                  *                     command
分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6,0或7代表星期天)      命令


星号(*):代表所有可能的值,比如第一个写 * 代表每一分钟,第二个写 * 代表 每个小时
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,
            例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10
            如果用在minute字段,表示每十分钟执行一次。
            */3 * * * * /usr/sbin/ntpdate ntp1.aliyun.com  每隔三分钟执行下时间同步

6. 练习 # 每天的下午4点28分执行重启nginx的命令 分 时 日 月 周 命令的绝对路径 28 16 * * * systemctl restart nginx # 每小时的3,15分执行命令 分 时 日 月 周 命令的绝对路径 3,15 * * * * 命令绝对路径 # 在上午8-11点的第3和第15分钟执行 分 时 日 月 周 命令的绝对路径 3,15 8-11 * * * 命令 # 每晚21:30执行命令 分 时 日 月 周 命令的绝对路径 30 21 * * * # 每周六、日的下午1:30执行命令 分 时 日 月 周 命令的绝对路径 30 13 * * 6,0 7. 设计定时任务示例 1,crontab -e 进入编辑定时任务 * * * * * /usr/bin/echo "爱就像蓝天白云" >> /tmp/love.txt 2, 查看定时任务 crontab -l 3,确保crontab服务运行 systemctl status crond ps -ef|grep crond 4,检测crontab是否开机启动 systemctl is-enabled crond 8. 取消定时器任务 crontab -r

9.开始/停止/重启
systemctl start/stop/restart crond

10.设置开机是否启动
systemctl enable/disable crond

 

13、linux下的环境配置文件

1.Linux的环境配置文件---- ~/.bashrc文件

~代表用户的家目录,如,root用户的家目录是:/root, 其他用户的家目录是:/home/用户名

.bashrc文件主要保存个人的一些个性化设置,如命令别名、路径等。也即在同一个服务器上,只对某个用户的个性化设置相关。它是一个隐藏文件,需要使用ls -a来查看。

.bash_history: 记录之前输入的命令

.bash_logout: 当你退出时执行的命令

.bash_profile: 当你登入shell时执行

.bashrc: 当你登入shell时执行

后两个的区别:\'.bash_profile\'只在会话开始时被读取一次,而\'.bashrc\'则每次打开新的终端时,都要被读取。

这些文件是每一位用户对终端功能和属性设置,修改.bashrc可以改变环境变量PATH、别名alias和提示符。

 

2.Linux的环境配置文件---- /etc/profile

除了可以修改用户目录下的.bashrc文件外,还可以修改如“/etc/profile”、“/etc/bashrc”、“/etc/profile.d”

但是修改/etc路径下的配置文件将会应用到整个系统,属于系统级的配置,而修改用户目录下的.bashrc则只是限制在用户应用上,属于用户级设置

两者在应用范围上有所区别,建议如需修改的话,修改用户目录下的.bashrc,即无需root权限,也不会影响其他用户

 

3.例子

设置PATH和PS1环境变量

# 我的服务器上再安装了一个python3版本,因此需要重新设置PATH环境变量
vim /etc/profile  # 系统级的设置
# 在文件的末尾添加上下面这段代码
PATH=/opt/node-v8.6.0-linux-x64/bin:/opt/python36/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/ruby/bin

# 还能继续修改,修改PS1,改变终端命令提示符
PS1="\\[\\e[01;31m\\]\\u@\\h \\[\\e[01;36m\\]\\w \\[\\e[01;32m\\]\\\\$ \\[\\e[00m\\]"

 

设置连接linux服务器后默认进入到某个目录下

# 个性化配置
vim ~/.bashrc

# 写入下面这段代码
# 开机默认进入/opt
cd /opt


# 也可以设置系统级别的
vim /etc/profile

# 写入下面这段代码
# 开机默认进入/opt
cd /opt

 

14、yum软件包管理

1. 什么是软件包
程序(软件)组成部分:
    二进制程序  可执行命令
    库          .so文件
    配置文件    .conf
    帮助文件    readme    /usr/share/man

软件包顾名思义就是将应用程序、配置文件和数据打包的产物


2. 各种系统的软件包格式
windows 
.exe 直接运行即可

macos叫做
.dmg格式的

centos系列的的软件包格式是
.rpm 格式

Debian和Ubuntu的软件包格式是
.deb格式


3. rpm
用法:rmp [选项] -a:查询所有套件; -b<完成阶段><套件档>+或-t <完成阶段><套件档>+:设置包装套件的完成阶段,并指定套件档的文件名称; -c:只列出组态配置文件,本参数需配合"-l"参数使用; -d:只列出文本文件,本参数需配合"-l"参数使用; -e<套件档>或--erase<套件档>:删除指定的套件; -f<文件>+:查询拥有指定文件的套件; -h或--hash:套件安装时列出标记; -i:显示套件的相关信息; -i<套件档>或--install<套件档>:安装指定的套件档; -l:显示套件的文件列表; -p<套件档>+:查询指定的RPM套件档; -q:使用询问模式,当遇到任何问题时,rpm指令会先询问用户; -R:显示套件的关联性信息; -s:显示文件状态,本参数需配合"-l"参数使用; -U<套件档>或--upgrade<套件档>:升级指定的套件档; -v:显示指令执行过程; -vv:详细显示指令执行过程,便于排错。
rpm常用的安装命令:
rpm -ivh xxx.rpm(rpm包) # 直接安装,如果要安装的软件已经存在,则不执行安装
rpm --force -ivh xxx.rpm # 忽略报错,强制安装
rpm -U xxx.rpm # 覆盖式安装,如果要安装的软件存在,则覆盖(也叫升级)

rpm的卸载命令:
rpm -qa # 列出所有安装过的软件
rmp -ql xxx # 查询是否安装了xxx软件
rmp -e xxx # 卸载xxx软件

rpm的显著缺点: rpm管理软件包的命令,很难用,需要手动解决依赖关系 例如: rpm
-ivh mysql-5-3-4.rpm 提示我少了什么。。。 我去把少的东西安装好之后。。。。又告诉我少了什么。。。。 4. yum命令 yum命令是在Fedora和RedHat以及SUSE中基于rpm的软件包管理器,可以自动处理依赖性关系, 并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装,如同python中的 pip 工具。
5. yum源的解释 yum就是为了解决依赖关系而存在的。yum源就相当是一个目录项, 当我们使用yum机制安装软件时,若需要安装依赖软件, 则yum机制就会根据在yum源中定义好的路径查找依赖软件,并将依赖软件安装好。 也就是说,yum会从指定的地方(相关网站的rpm包地址或本地的rpm路径)自动下载RPM包并且安装,能够很好的解决依赖关系问题。 6. 为什么要重新配置yum源 因为yum默认的仓库软件包不多,而且默认配置的是centos的国外仓库地址, 我们把它修改为阿里云的yum仓库,可以加速下载。 阿里云的yum:http://mirrors.aliyun.com,找到你对应的系统,点击帮助。 注意:!!!只有以 .repo的文件结尾,才会识别为是一个yum仓库 7. 步骤 0. 进入yum源目录 cd /etc/yum.repos.d/ 1.备份旧的yum源 mkdir allbak mv * allbak 2.下载新的阿里云yum源(主仓库) wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo -O 指定下载后的文件,存放到某个路径,且改名 配置第三方软件源,epel源(备用仓库) wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo 3.清空旧的yum缓存 yum clean all 4.生成新的阿里云的yum缓存 yum makecache 5.安装一个软件,测试一下 yum install redis -y #查看redis是从哪个yum源来的 -y 一路默认的yes 6.只有通过yum安装的软件,才可以通过systemctl 管理 systemctl start/stop/restart/status redis




8. yum参数 -h:显示帮助信息; -y:对所有的提问都回答“yes”; -c:指定配置文件; -q:安静模式; -v:详细模式; -d:设置调试等级(0-10); -e:设置错误等级(0-10); -R:设置yum处理一个命令的最大等待时间; -C:完全从缓存中运行,而不去下载或者更新任何头文件。 9. yum常用命令 yum repolist all 列出所有仓库 yum list all 列出仓库所有软件包 yum info 软件包名 查看软件包信息 yum install 软件包名 安装软件包 yum reinstall 软件包名 重新安装软件包 yum update 软件包名 升级软件包 yum remove 软件包名 移除软件包 yum clean all 清楚所有仓库缓存 yum check-update 检查可以更新的软件包 yum grouplist 查看系统中已安装的软件包 yum groupinstall 软件包组 安装软件包组

yum两种卸载方式:
1,只卸载软件包
yum remove xxx # 只卸载这个软件包本身

2,卸载软件包和它的依赖
yum history list xxx # 查询安装的xxx信息(可以看到一个ID选项)
yum history undo xxx_ID # 根据上面查询到的ID完全卸载xxx包,即卸载这个软件包和它的依赖包
10.yum命令用不了
有些版本的yum命令是有bug的,
http://www.rpmfind.net/linux/RPM/centos/7.6.1810/x86_64/Packages/yum-3.4.3-161.el7.centos.noarch.html
重新下载一个yum包(下载的是一个rmp包),需要用rpm安装,rpm -U xxx.rpm
11. 系统服务管理命令 只有通过yum安装的软件,才可以通过systemctl 管理 systemctl start/stop/restart/status redis systemctl stop/start network systemctl enable redis # 开启加载redis systemctl disable redis # 禁止redis开机自启

 

15、如何开启服务器的22端口(ssh)

1.ifconfig  # 查看ip网卡信息,记住eth0,eth1对应哪个ip地址
root@aliyunzbj /tmp o ifconfig
eth0: flags=2256<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.53  netmask 255.255.255.0  broadcast 192.168.10.255
        ...

eth1: flags=2257<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.26.66  netmask 255.255.255.0  broadcast 192.168.26.255
        ...

lo: flags=82<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.255.255.0
        ...

2.查看当前的iptables防火墙配置
root@aliyunzbj /tmp o iptables-save

...
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -j MANAGE-INPUT  # MANAGE-INPUT代表eth0网卡的防火墙策略
-A INPUT -i eth1 -j USER-INPUT  # USER-INPUT代表eth1网卡的防火墙策略
...
# 这里可以看到MANAGE-INPUT即eth0网卡开启了22端口,但是下面的策略并没有看到USER-INPUT(eth1)开启22端口
-A MANAGE-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
...


3.给网卡eth1添加22端口
# 可以直接复制上面的策略,把MANAGE-INPUT改成USER-INPUT即可
root@aliyunzbj /tmp o iptables -A USER-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

4.再次查看策略
root@aliyunzbj /tmp o iptables-save

...
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -j MANAGE-INPUT  # MANAGE-INPUT代表eth0网卡的防火墙策略
-A INPUT -i eth1 -j USER-INPUT  # USER-INPUT代表eth1网卡的防火

以上是关于linux文件目录权限和系统基础优化命令的主要内容,如果未能解决你的问题,请参考以下文章

Linux基础 08Linux用户权限相关命令

Linux系统常用基础命令

Linux 系统基础优化和常用命令

Linux基础知识-第一天

Linux运维应该怎么去学习?

linux基础命令之系统目录