Linux 常用命令

linux 常用命令

[root@an_python ~]# 用户名|38分隔线|主机名|当前在哪里|#root用户$非root用户

Linux命令语法

  1. 一般情况下,【参数】是可选的,一些情况下【文件或路径】也是可选的

  2. 参数 > 同一个命令,跟上不同的参数执行不同的功能

执行linux命令,添加参数的目的是让命令更加贴切实际工作的需要!

linux命令,参数之间,普遍应该用一个或多个空格分割!

命令 空格 参数 空格 【文件或路径】需要处理的内容
rm -rf /tmp/*
ls -la /home

mkdir 创建目录(make directory)

#递归创建a/b   c/d
mkdir -p a/b c/d
#递归创建test/a,b,c,d四个目录
mkdir -p test/{a,b,c,d}
#递归创建文件夹a/b/c/d/e
mkdir -p a/b/c/d/e

ls查看目录内容(list directory contents)

ls -al 查看详细信息

cd改变目录位置(change directory )

cd ~    返回家目录

pwd打印工作目录位置

touch创建文件

vi文本编辑器
需要输入a/i进入编辑模式,然后输入文本,按下esc键,回到命令模式,输入 :wq! 强制保存退出

  • G 快速到达最后一行
  • o 当前行下一行,创建一个新行,进入编辑模式
  • w write 写入
  • q quit 退出
  • ! 强制
  • 或者 :x 保存退出
  • :q 不保存退出
  • :q! 不保存强制退出

cat命令用于查看纯文本文件(常用于内容较少的)

cat xxx.py
#查看文件,显示行号
cat -n xxx.py

#在每一行的结尾加上$符
[root@master tmp]# cat -E 1.txt

#追加文字到文件
cat >>/tmp/an.txt << EOF

more命令用于查看内容较多的文本,more命令查看文本会以百分比形式告知已经看到了多少,使用回车键向下读取内容。

按下空格space是翻页
按下b键是上一页
回车键向下读取内容

echo命令用于在终端输出字符串或变量提取后的值,格式是“echo 【字符串|$变量】”

echo "666" > /tmp/chaoge.txt    写入文本
echo $PATH #取出打印PATH的值

Linux特殊符号

输入/输出 重定向符号
1.>>    追加重定向,把文字追加到文件的结尾
2.>     重定向符号,清空原文件所有内容,然后把文字覆盖到文件末尾
3.<     输入重定向
4.<<    将输入结果输入重定向
echo "python666" > /tmp/an.txt
echo "666" >> /tmp/an.txt
cat >>/tmp/an.txt << EOF

我想把命令执行的结果信息,写入到文件中:
ip addr > /tmp/network.txt   #标准输出重定向 把命令执行结果信息,放入到文件中
通配符*  
ls -l /etc/us*

cp复制命令

#移动xxx.py到/tmp目录下
cp xxx.py /tmp/
#移动xxx.py顺便改名为chaoge.py
cp xxx.py /tmp/chaoge.py
Linux下面很多命令,一般没有办法直接处理文件夹,因此需要加上(参数) 
cp -r 递归,复制目录以及目录的子孙后代
cp -p 复制文件,同时保持文件属性不变    可以用stat
cp -a 相当于-pdr
#递归复制test文件夹,为test2
cp -r test test2
cp是个好命令,操作文件前,先备份
cp main.py main.py.bak

mv移动(move)文件,文件夹

mv /home/shahe/an /tmp/an
文件/文件夹改名
mv x.log xx.log

rm删除命令(remove)

参数-i  需要删除确认
  -f  强制删除
    -r  递归删除目录和内容
rm an.py
#默认有提示删除,需要输入y
rm -f an.py #不提示,强制删除
#rm默认无法删除目录,需要跟上参数-r
rm -rf /tmp/an/

find查找命令

find 在哪里(目录) 什么类型(文件类型) 叫什么名字(文件名)
参数
-name 按照文件名查找文件
-type 查找某一类型的文件,诸如:
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。
s - socket文件
find /tmp/ -type f  -name "an.py"
#找出/tmp所有以 .txt 结尾的文件
find /tmp/ -type f -name "*.txt"
#找到/etc下所有名字以host开头的文件
find /etc -name 'host*'

管道符|

Linux提供的管道符“|”把两条命令隔开,管道符左边命令的输出会作为管道符右边命令的输入。
常见用法:
#检查python程序是否启动
ps -ef|grep "python"
#找到/tmp目录下所有txt文件
ls /tmp|grep '.txt'
#检查nginx的端口是否存活
netstat -tunlp |grep nginx

grep搜索命令

(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,使用正则表达式搜索文本,并把匹配的行打印出来。

语法:
grep [参数] [--color=auto] [字符串] filename
参数详解:
-i : 忽略大小写
-n : 输出行号
-v : 反向选择
--color = auto : 给关键词部分添加颜色
grep "我要找什么" /tmp/an.txt
#排除 -v,排除我要找的东西
grep -v "我要找什么 /tmp/an.txt

例题,找出/etc/passwd下root用户所在行,以及行号,显示颜色
cat /etc/passwd |grep '^root' --color=auto -n

head、tail查看文件

head显示文件前几行,默认前10行
tail显示文件后几行,默认后10行
#查看前两行
head -2 /tmp/an.txt
#查看后两行
tail -2 /tmp/an.txt
#持续刷新显示
tail -f xx.log
#显示文件10-30行
head -30 /tmp/an.txt |tail -21

alias别名命令

#让系统显示 do not use rm
echo do not use rm
#设置rm别名
alias rm='echo do not use rm'
#设置别名永久生效,写入到/etc/profile(针对登录用户的合同,设置环境变量)
vim /etc/profile #编辑文件
G  快速到达最后一行
o  当前行下一行,创建一个新行,进入编辑模式
source /etc/profile #读取文件(合同生效)
---------------
#取消别名
unalias rm

which查找命令

which命令用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录。
which指令会在环境变量$PATH设置的目录里查找符合条件的文件。
也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
which python

scp(secure copy)Linux之间复制文件和目录

scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。

语法
scp 【可选参数】 本地源文件 远程文件标记

参数:
-r :递归复制整个目录
-v:详细方式输出
-q:不显示传输进度条
-C:允许压缩

实例:
scp -r  本地文件夹  远程用户名@远程ip:远程文件夹/
scp -r /tmp/an root@192.168.1.155:/home/an
#复制远程文件到本地
scp root@192.168.1.155:/home/an.txt /tmp/an.txt
scp -r root@192.168.1.155:/home/an /home/

du统计文件大小

Linux du命令用于显示目录或文件的大小。

du会显示指定的目录或文件所占用的磁盘空间。

用法
du 【参数】【文件或目录】
-s 显示总计
-h 以k,M,G为单位显示,可读性强

top系统负载查看

第一行 (uptime)
系统时间 主机运行时间 用户连接数(who) 系统1,5,15分钟的平均负载
第二行:进程信息
进程总数 正在运行的进程数 睡眠的进程数 停止的进程数 僵尸进程数
第三行:cpu信息
1.5 us:用户空间所占CPU百分比
0.9 sy:内核空间占用CPU百分比
0.0 ni:用户进程空间内改变过优先级的进程占用CPU百分比
97.5 id:空闲CPU百分比
0.2 wa:等待输入输出的CPU时间百分比
0.0 hi:硬件CPU中断占用百分比
0.0 si:软中断占用百分比
0.0 st:虚拟机占用百分比
第四行:内存信息(与第五行的信息类似与free命令)
8053444 total:总量
7779224 used:已使用
274220 free:空闲(free+used=total)
359212 buff/cache:用作内核缓存的内存量
第五行:swap信息
4358088 avail Mem:缓冲的交换区总量,内存中的内容被换出到交换区,然后又被换入到内存,但是使用过的交换区没有被覆盖,交换区的这些内容已存在于内存中的交换区的大小,相应的内存再次被换出时可不必再对交换区写入。

date 时间

格式化输出
-d    --date=string    显示指定的时间,而不是当前时间
以年-月-日显示当前时间
date +"%Y-%m-%d %T"
以年-月-日 时分秒 显示当前时间
在Linux下系统时间和硬件时间不会自动同步,在Linux运行过程中,系统时间和硬件时间以异步的方式运行,互不干扰。
硬件时间的运行,是靠Bios电池来运行,而系统时间是用CPU tick来维持的。
在系统开机时候,会从Bios中获取硬件时间,设置为系统时间
硬件时钟的查看:hwclock

同步系统时间和硬件时间,可以用hwclock命令
//以系统时间为基准,修改硬件时间
[root@plocalhost ~ 10:29:07]#hwclock -w
//以硬件时间为基准,修改系统时间
[root@localhost ~ 10:29:21]#hwclock -s

ntpdate时间服务器

/bin/date     用于 Linux 时间 (软件时钟) 的修改与显示的指令;
/sbin/hwclock  用于 BIOS 时钟 (硬件时钟) 的修改与显示的指令。 这是一个 root 才能执行的指令,因为 Linux 系统上面 BIOS 时间与 Linux 系统时间是分开的,所以使用 date 这个指令调整了时间之后,还需要使用 hwclock 才能将修改过后的时间写入 BIOS 当中!
/usr/sbin/ntpd: 主要提供 NTP 服务的程序啰!配置文件为 /etc/ntp.conf
/usr/sbin/ntpdate: 用于客户端的时间校正,如果你没有要启用 NTP 而仅想要使用 NTP Client 功能的话,那么只会用到这个指令而已啦!

wget下载命令

wget -r -p http://www.baidu.com#下载保存到www.baidu.com文件中

开发常用命令

Linux 网络

启动网卡:
#编辑网卡配置文件
vim /etc/sysconfig/network-scripts/ifcfg-ens33 
#修改配置参数
ONBOOT=yes
然后重启systemctl restart network
  • ifconfig  查询、设置网卡和ip等参数
  • ifup,ifdown 脚本命令,更简单的方式启动关闭网络
  • ip  符合指令,直接修改上述功能

网卡配置文件解析

网络接口配置文件:/etc/sysconfig/network-scripts/ifcfg-ens33

DEVICE=: 关联的设备名称,要与文件名的后半部“INTERFACE_NAME”保持一致; 
BOOTPROTO={static|none|dhcp|bootp}: 引导协议;要使用静态地址,使用static或none;dhcp表示使用DHCP服务器获取地址;
IPADDR=: IP地址
NETMASK=:子网掩码
GATEWAY=:设定默认网关;
ONBOOT=:开机时是否自动激活此网络接口;
HWADDR=: 硬件地址,要与硬件中的地址保持一致;可省;
USERCTL={yes|no}: 是否允许普通用户控制此接口;
PEERDNS={yes|no}: 是否在BOOTPROTO为dhcp时接受由DHCP服务器指定的DNS地址;

启停网络:

ifup ens33
ifdown ens33
#启停网络服务
/etc/init.d/network start/stop/restart
#系统服务管理命令
systemctl restart/start/stop network

查看系统版本信息

#查看系统版本信息
cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core) 
#查看内核版本号
uname -r
3.10.0-693.el7.x86_64
#查看系统多少位
uname -m
x86_64
#查看内核所有信息
uname -a

用户管理篇

  • 现代操作系统一般属于多用户的操作系统,也就是说,同一台机器可以为多个用户建立账户,一般这些用户都是为普通用户,这些普通用户能同时登录这台计算机,计算机对这些用户分配一定的资源。
  • 普通用户在所分配到的资源内进行各自的操作,相互之间不受影响。但是这些普通用户的权限是有限制的,且用户太多的话,管理就不便,从而引入root用户。
  • 此用户是唯一的,且拥有系统的所有权限。root用户所在的组称为root组。“组”是具有相似权限的多个用户的集合。

root的权利

  • Linux系统的特性就是可以满足多个用户,同时工作,因此Linux系统必须具备很好的安全性。
  • 在安装RHEL7时设置的root管理员密码,这个root管理员就是所有UNIX系统中的超级用户,它拥有最高的系统所有权,能够管理系统的各项功能,如添加/删除用户,启动/关闭进程,开启/禁用硬件设备等等。
  • 因此“能力越大,责任越大”,root权限必须很好的掌握,否则一个错误的命令可能会摧毁整个系统。

root为什么叫root?

  • 在Linux系统中,用户也有自己的UID
  • 系统管理员UID为0,系统用户UID为1~999 (Linux安装的服务程序都会创建独有的用户负责运行。)
  • 普通用户UID从1000开始:由管理员创建

用户组GID

  1. 为了方便管理属于同一组的用户,Linux 系统中引入了组的概念。通过使用用户组号码(GID,Group IDentification),我们可以把多个用户加入到同一个组中,从而方便为组中的用户统一规划权限或指定任务。
  2. 假设有一个公司中有多个部门,每个部门有很多员工。如果只想让员工访问本部门内的资源,则可以针对部门而非具体的员工来设置权限。
  3. 例如,可以通过对技术部门设置权限,使得只有技术部门的员工可以访问公司的数据库信息等。
  4. Linux管理员在创建用户时,将自动创建一个与其同名的用户组,这个用户组只有该用户一个人

创建普通用户

#添加用户
useradd an 
#设置密码       
passwd redhat
root用户可以修改其他所有人的密码,且不需要验证

创建用户组

group命令用于创建用户组,方便针对一类用户安排权限。
groupadd it_group

删除用户userdel

-f     强制删除用户
-r    同事删除用户以及家目录
userdel -r pyyu

切换用户

su命令可以切换用户身份的需求,
su - username
su命令中间的-号很重要,意味着完全切换到新的用户,即环境变量信息也变更为新用户的信息
whoami #先看下当前用户(我是谁)
su - an #切换用户
logout  #退出用户登录
ctrl + d
Tip:
1. 超级用户root切换普通用户无需密码,例如“群主”想踢谁就踢谁
2. 普通用户切换root,需要输入密码
3. 普通用户权限较小,只能基本查看信息
4. $符号是普通用户命令提示符,#是超级管理员的提示符

sudo命令用来以其他身份来执行命令,预设的身份为root。在/etc/sudoers中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。

sudo 【选项】【参数】
-b:在后台执行指令;
-h:显示帮助;
-H:将HOME环境变量设为新身份的HOME环境变量;
-k:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码;。
-l:列出目前用户可执行与无法执行的指令;
-p:改变询问密码的提示符号;
-s<shell>:执行指定的shell;
-u<用户>:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份;
-v:延长密码有效期限5分钟;
-V :显示版本信息。

sudo必须编辑/etc/sudoers文件,并且只有root才能修改,root可以通过visudo命令直接编辑sudoers文件,使用这个命令还可以检查语法,比直接编辑 vim /etc/sudoers更安全
visudo
root    ALL=(ALL)       ALL
an  ALL=(ALL)       ALL   #允许an在任何地方,执行任何命令

实例:sudo ls /root/

文件与目录的权限篇

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

Linux权限主要依据三种身份来决定:

  • user/owner 文件使用者,文件属于哪个用户
  • group 属组,文件属于哪个组
  • others 既不是user,也不再group,就是other,其他人
  1. 在Linux中,每个文件都有属主,和属组,并且规定了文件的所有者,所有组以及其他人对文件的,可读,可写,可执行等权限。
  2. 对于目录的权限来说,可读是读取目录文件列表,可写是表示在目录内新增,修改,删除文件。可执行表示可以进入目录
  3. 对于文件的权限来说,可读是读取文件,可写是表示修改文件。可执行表示可执行该文件。

ls -al /etc/sysconfig/network-scripts/

分别为:权限 | 文件链接数 | 属主 | 属组 | 文件大小 | 修改时间 | 文件名

权限:第一个字母为文件类型,后续9个字母,每3个一组(属主,属组,其他用户)(文件:r-读read,w-写write,x-执行executable)

  1. - 一般文件
  2. d 文件夹
  3. l 软连接(快捷方式)
  4. b 块设备,存储媒体文件为主
  5. c 代表键盘,鼠标等设备

对于文件夹的权限

  • r 可以对此目录执行ls列出所有文件
  • w 可以在这个目录创建文件
  • x 可以cd进入这个目录,或者查看详细信息
    权限最高777,最低000

id命令查看用户信息

id指令查看用户所属群组
[root@localhost ~ 16:34:52]#id root
uid=0(root) gid=0(root) 组=0(root)

修改文件属性

* 普通用户只能修改自己的文件名,时间与权限(注意)
* 因此修改其他用户权限,只能用最nb的root用户
切换用户:su root
# `chown`修改属主
chown
chown root pyyu.txt

# `chgrp`修改属组
chgrp
chgrp root pyyu.txt

chmod修改文件/目录的权限

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

实例:chmod u-w py.txt
chmod 777 py.txt

mv py.txt an.txt    #修改文件名
touch chaoge.txt    #修改时间

ln软连接

软连接也叫做符号链接,类似于windows的快捷方式,常用于安装软件的快捷方式配置,如python,nginx等。

ln -s 目标文件  软连接名
修改软链接文件会修改源文件,但是删除软连接文件不会删除源文件

tar 压缩和解压文件。tar本身不具有压缩功能。他是调用压缩功能实现的

tar(选项)(参数)
-A或--catenate:新增文件到以存在的备份文件;
-B:设置区块大小;
-c或--create:建立新的备份文件;
-C <目录>:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
-d:记录文件的差别;
-x或--extract或--get:从备份文件中还原文件;
-t或--list:列出备份文件的内容;
-z或--gzip或--ungzip:通过gzip指令处理备份文件;
-Z或--compress或--uncompress:通过compress指令处理备份文件;
-f<备份文件>或--file=<备份文件>:指定备份文件;
-v或--verbose:显示指令执行过程;
-r:添加文件到已经压缩的文件;
-u:添加改变了和现有的文件到已经存在的压缩文件;
-j:支持bzip2解压文件;
-v:显示操作过程;
-l:文件系统边界设置;
-k:保留原有文件不覆盖;
-m:保留文件不被覆盖;
-w:确认压缩文件的正确性;
-p或--same-permissions:用原来的文件权限还原文件;
-P或--absolute-names:文件名使用绝对名称,不移除文件名称前的“/”号;
-N <日期格式> 或 --newer=<日期时间>:只将较指定日期更新的文件保存到备份文件里;
--exclude=<范本样式>:排除符合范本样式的文件。

实例:

tar -zxvf Python-3.7.0b3.tgz #解压
tar -czvf python.txt.tar.gz python.txt #压缩python.txt  
上述命令等于 tar -cvf python.tar python.txt
        gzip python.tar
tar -cf all_pic.tar *.jpg #压缩当前目录所有jpg结尾的文件
tar -xjf xx.tar.bz2  #解压缩bz2结尾的文件

netstat命令

netstat命令用来打印Linux中网络系统的状态信息。

语法【选项】
* netstat [选项]
* -t或--tcp:显示TCP传输协议的连线状况;
* -u或--udp:显示UDP传输协议的连线状况;
* -n或--numeric:直接使用ip地址,而不通过域名服务器;
* -l或--listening:显示监控中的服务器的Socket;
* -p或--programs:显示正在使用Socket的程序识别码和程序名称;
* -a或--all:显示所有连线中的Socket;

实例: netstat -tunlp


进程命令

ps查看进程

可以搭配kill指令随时中断、删除不必要的程序。

ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。

  • ps (参数)
  • -e显示所有程序
  • -f 显示UID等详细信息
  • ps -ef|grep mysql
  • ps -ef|grep redis-server

Kill命令

kill中断执行中的程序或工作。kill可将指定的信息送至程序。

选项:

  • -a:当处理当前进程时,不限制命令名和进程号的对应关系;
  • -l <信息编号>:若不加<信息编号>选项,则-l参数会列出全部的信息名称;
  • -p:指定kill 命令只打印相关进程的进程号,而不发送任何信号;
  • -s <信息名称或编号>:指定要送出的信息;
  • -u:指定用户。
只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略,下面是常用的信号:
1. HUP     1    终端断线
2. INT     2    中断(同 Ctrl + C)
3. QUIT    3    退出(同 Ctrl + \)
4. TERM   15    终止
5. KILL    9    强制终止
6. CONT   18    继续(与STOP相反, fg/bg命令)
7. STOP   19    暂停(同 Ctrl + Z)

pkill杀死进程
pkill命令可以按照进程名杀死进程。pkill和killall应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用kill来杀掉。

pkill nginx
pkill uwsgi

selinux防火墙

SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,这个功能管理员又爱又恨,大多数生产环境也是关闭的做法,安全手段使用其他方法。

大多数ssh连接不上虚拟机,都是因为防火墙和selinux阻挡了

永久关闭方式:

1. 修改配置文件,永久生效关闭selinux
cp /etc/selinux/config /etc/selinux/config.bak #修改前备份
2. 修改方式可以vim编辑,找到
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
3.用sed替换
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
4.检查状态
grep "SELINUX=disabled" /etc/selinux/config
#出现结果即表示修改成功

临时关闭selinux(命令行修改,重启失效):

getenforce #获取selinux状态
#修改selinux状态
setenforce 
usage:  setenforce [ Enforcing | Permissive | 1 | 0 ]
数字0 表示permissive,给出警告,不会阻止,等同disabled
数字1表示enforcing,表示开启

Tip:

  • 修改selinux配置后,想要生效还得重启系统,技巧就是(修改配置文件+命令行修改,达到立即生效)
  • 生产环境的服务器是禁止随意重启的!!!

iptables防火墙

在学习阶段,关闭防火墙可以更方便的学习,在企业环境中,一般只有配置外网ip的linux服务器才会开启防火墙,但是对于高并发流量的业务服务器仍然是不能开启的,会有很大性能损失,因此需要更nb的硬件防火墙。

关闭防火墙具体操作如下:

centos7默认已经使用firewall作为防火墙了
1.关闭防火墙
systemctl status firewalld #查看防火墙状态
systemctl stop firewalld    #关闭防火墙
systemctl disable firewalld#关闭防火墙开机启动
systemctl is-enabled firewalld.service#检查防火墙是否启动

hostnamectl设置主机名

* [root@yugo /tmp 11:04:42]#Neroi set-hostname pyyuc
* [root@pyyuc ~ 11:05:12]#Neroi
* Neroi

DNS

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

查看Linux的dns,唯一配置文件:

  • cat /etc/resolv.conf
  • dns服务器地址

  • nameserver 119.29.29.29
  • nameserver 223.5.5.5

本地强制dns解析文件/etc/hosts

  • /etc/hosts
  • 主机IP 主机名 主机别名
  • 127.0.0.1 www.pyyuc.cn

nslookup常用域名查询工具,查看DNS信息。

nslookup有两种工作模式,即“交互模式”和“非交互模式”。在“交互模式”下,用户可以向域名服务器查询各类主机、域名的信息,或者输出域名中的主机列表。而在“非交互模式”下,用户可以针对一个主机或域名仅仅获取特定的名称或所需信息。

进入交互模式,直接输入nslookup命令,不加任何参数,则直接进入交互模式,此时nslookup会连接到默认的域名服务器(即/etc/resolv.conf的第一个dns地址)或输入nslookup -nameserver/ip.进入非交互模式:直接输入nslookup 域名就可以了。

实例:nslookup www.baidu.com

计划任务crond服务

什么是计划任务:特定时间自动执行的任务

crond服务相关的软件包
[root@MiWiFi-R3-srv ~]# rpm -qa |grep cron
cronie-anacron-1.4.11-14.el7.x86_64
crontabs-1.11-6.20121102git.el7.noarch
cronie-1.4.11-14.el7.x86_64

这些包在最小化安装系统时就已经安装了,并且开机自启crond服务,并为我们提供好编写计划任务的crontab命令。

crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似

  • rontab (选项)(参数)
  • -e:编辑该用户的计时器设置;
  • -l:列出该用户的计时器设置;
  • -r:删除该用户的计时器设置;
  • -u<用户名称>:指定要设定计时器的用户名称。
  • 存放定时任务的文件:/var/spool/cron

注意:

  1. 查看计划任务的执行:tail -f /var/log/cron
  2. 写计划任务时,命令必须用绝对路径,否则可能:从日志中看,确实触发了计划任务的执行,但是命令却没有执行成功,比如 * reboot就会出现这种情况,需要将reboot写成/usr/sbin/reboot
  3. 计划任务执行的命令是否存在,软件是否安装
  4. 确保crontab服务运行
#实例:
systemctl status crond
ps -ef|grep crond

systemctl is-enabled crond #检测crontab是否开机启动
#在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件
# 时间      脚本名/命令
#实例:每天8.30上班
30 08 * * *  去上班
#每分钟执行一次命令
* * * * * 命令
#每小时的3,15分组执行命令
3,15 * * * * 命令
#在上午8-11点的第3和第15分钟执行
3,15 8-11 * * * 命令
#每晚21:30执行命令
30 21 * * * 命令
#没周六、日的1:30执行命令
30 1 * * 6,0 命令
#每周一到周五的凌晨1点,清空/tmp目录的所有文件
0 1 * * 1-5 /usr/bin/rm -rf /tmp/*
#每晚的21:30重启nginx
30 21 * * * /opt/nginx/sbin/nginx -s reload
#每月的1,10,22日的4:45重启nginx
45 4 1,1,10,22 * * /opt/nginx/sbin/nginx -s reload
#每个星期一的上午8点到11点的第3和15分钟执行命令
3,15 8-11 * * 1 command

Linux软件包管理

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

软件包顾名思义就是将应用程序、配置文件和数据打包的产物,所有的linux发行版都采用了某种形式的软件包系统,这使得linux软件管理和在windows下一样方便,suse、red hat、fedora等发行版都是用rpm包,Debian和Ubuntu则使用.deb格式的软件包。

在早期系统运维中,安装软件是一件非常费事费力的事情。系统管理员不得不下载软件源代码编译软件,并且为了系统做各种调整。

尽管源代码编译形式的软件增强了用户定制的自由度,但是在小软件上耗费精力是缺乏效率的,于是软件包应运而生。

软件包管理可以将管理员从无休止的兼容问题中释放。yum工具就可以自动搜索依赖关系,并执行安装。

RPM软件包管理器

软件包管理器核心功能

  1. 制作软件包 .rpm
  2. 安装、卸载、升级、查询、校验

在RPM(红帽软件包管理器)公布之前,要想在 Linux系统中安装软件只能采取源码包的方式安装。早期在 Linux 系统中安装程序是一件非常困难、耗费耐心的事情,而且大多数 的服务程序仅仅提供源代码,需要运维人员自行编译代码并解决许多的软件依赖关系,因此 要安装好一个服务程序,运维人员需要具备丰富知识、高超的技能,甚至良好的耐心。而且在 安装、升级、卸载服务程序时还要考虑到其他程序、库的依赖关系,所以在进行校验、安装、 卸载、查询、升级等管理软件操作时难度都非常大。

RPM 机制则为解决这些问题而设计的。RPM 有点像 Windows 系统中的控制面板,会建 立统一的数据库文件,详细记录软件信息并能够自动分析依赖关系。

#现在要安装mysql
#下载地址:https://dev.mysql.com/downloads/mysql/ wget ......
安装    rpm -ivh filename.rpm     # i表示安装   v显示详细过程  h以进度条显示
升级    rpm -Uvh filename.rpm #Uvh  若没安装则安装  Fvh若没安装则不安装
卸载    rpm -e filename.rpm #需要手动解决依赖 不如 yum remove
查询软件描述信息    rpm -qpi filename.rpm/app   #q是否安装  qi说明信息  ql生成的文件列表    qc配置文件路径
列出软件文件信息         rpm -qpl filename.rpm
查询文件属于哪个RPM  rpm -qf filename
rpm有包的依赖问题,因此难以安装和卸载。

yum命令

yum命令是在Fedora和RedHat以及SUSE中基于rpm的软件包管理器,它可以使系统管理人员交互和自动化地管理RPM软件包,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。

尽管 RPM 能够帮助用户查询软件相关的依赖关系,但问题还是要运维人员自己来解决, 而有些大型软件可能与数十个程序都有依赖关系,在这种情况下安装软件会是非常痛苦的。 Yum 软件仓库便是为了进一步降低软件安装难度和复杂度而设计的技术。Yum 软件仓库可以根据用户的要求分析出所需软件包及其相关的依赖关系,然后自动从服务器下载软件包并安 装到系统。

Yum 软件仓库中的 RPM 软件包可以是由红帽官方发布的,也可以是第三方发布的,当 然也可以是自己编写的。

自动搜索最快镜像插件    yum install yum-fastestmirror
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  provides  */nslookup   查看某个软件依赖哪个包

yum源配置

  • YUM的基本工作机制如下:
    • 服务器端:在服务器上面存放了所有的RPM软件包,然后以相关的功能去分析每个RPM文件的依赖性关系,将这些数据记录成文件存放在服务器的某特定目录内。
    • 客户端:如果需要安装某个软件时,先下载服务器上面记录的依赖性关系文件(可通过WWW或FTP方式),通过对服务器端下载的纪录数据进行分析,然后取得所有相关的软件,一次全部下载下来进行安装。
#yum源目录
cd /etc/yum.repos.d/
#查看yum源文件
ls -l

配置阿里云yum源

1.好习惯,备份yum源
mkdir repo_bak
mv *.repo repo_bak/
2.下载阿里云repo文件
wget http://mirrors.aliyun.com/repo/Centos-8.repo
3.清空yum缓存并且生成新的yum缓存
yum clean all
yum makecache
4.安装软件扩展源
yum install -y epel-release

dnf新一代的RPM软件包管理器

DNF由Python3写成,降低了内存占用,提高了运行速度,加强了依赖分析能力,提高了用户的体验。所以代替YUM是一个必然的结果。

DNF 并未默认安装在 RHEL 或 CentOS 7系统中,但是 Fedora 22/CentOS 已经默认使用 DNF .

1、为了安装 DNF ,您必须先安装并启用 epel-release 依赖。

yum install epel-release -y # 安装依赖
yum install dnf # 安装DNF
dnf --version # 版本
dnf list installed  #已安装
dnf search ping # 不知道想要安装的软件的准确名称时,可以用该命令来搜索软件包
dnf provides /bin/bash  # 查看哪个软件包提供的某一文件时使用
dnf info nano # 详情
dnf install nano # 安装
dnf update systemd #升级
dnf check-update # 检查系统中所有软件包的更新
dnf update 或 dnf upgrade # 升级所有系统软件包
dnf remove nano 或 dnf erase nano # 删除软件包(相当于卸载)
dnf autoremove # 删除无用孤立的软件包
dnf clean all # 删除缓存的无用软件包

DNF 包管理器作为 YUM 包管理器的升级替代品,它能自动完成更多的操作。但在我看来,正因如此,所以 DNF 包管理器不会太受那些经验老道的 Linux 系统管理者的欢迎。举例如下:

  • 在 DNF 中没有 –skip-broken 命令,并且没有替代命令供选择。
  • 在 DNF 中没有判断哪个包提供了指定依赖的 resolvedep 命令。
  • 在 DNF 中没有用来列出某个软件依赖包的 deplist 命令。
  • 当你在 DNF 中排除了某个软件库,那么该操作将会影响到你之后所有的操作,不像在 YUM 下那样,你的排除操作只会咋升级和安装软件时才起作用。

系统服务管理命令

  • 如果使用过RHEL6系统,应该已经习惯了service、chkconfig等命令来管理系统服务,
  • 但是在RHEL7系统中改变了systemctl来管理系统服务。
posted @ 2020-06-05 01:37  Neroi  阅读(115)  评论(0编辑  收藏  举报