Linux常用命令(你一定用得上!)
文章目录
- :star: 用户有关命令
- :star: 用户权限有关配置文件
- :star: 运行级别
- :question: **找回root密码(面试题)**
- :star: 文件有关
- :star: 权限有关
- :star: 定时任务调度
- cornd
- **at定时任务**
- :star: 磁盘相关
- 分区
- :star: **网络配置**
- DNS
- :star: 进程管理
- :star: 服务管理
- :star: 动态监控进程
- :star: **RPM和YUM**
- :star: Shell编程
- 基本语法
- 设置环境变量
- shell如何多行注释
- 位置参数变量
- 运算符
- 条件判断
- 流程控制
- :star: 日志
欢迎大家提出建议和交流技术,如果您觉得有帮助,请帮我点个赞。
⭐️ 用户有关命令
hostnamectl set-hostname [主机名] 修改主机名
ueseradd 创建用户
userdel 删除用户
passwd [用户名] 为用户创建密码
groupadd[组名称] 来创建组
groupdel [组名称] 删除组
如果创建用户每指定组,他就会自动创建个和它用户名称一模 一样的组,再把它自己放进去。
id [用户名称] 查看用户id和组id、
useradd -g [组名] [用户名] 创建一个用户并添加到指定组
usermod -g [组名] [用户名] 修改用户的组
usermod -d [目录名] [用户名] 改变用户的初始登录命令。【如果用户不是root用户那么,如果没有权限进入该目录也会报错】
文件
⭐️ 用户权限有关配置文件
/etc/passwd
用户的配置文件,记录各种信息
每行的含义 用户名: 口令: 用户标识符 :组标识号: 注释性描述 : 主目录: 登录shell
/etc/shadow
口令的配置文件
每行的含义:登录名: 加密口令:最后一次修改时间2:最小时间间隔 :最大时间间隔 :警告时间:不活动时间:失效时间:标志
/etc/group
组的配置文件,记录linux包含的组的信息
每行:组名: 口令 : 组织识号 : 组内用户列表
⭐️ 运行级别
0 关机
1 单用户【找回丢失密码】
2 多用户状态没有网络服务
3 多用户状态有网络服务
4 系统未使用保留给用户
5 图形界面
6 系统重启
使用最多的是3和5
init [0-5] 切换过运行级别
在Centos以前在etc/inittab文件中
现在
multi-user.target:analogous to runlevel 3
graphical.target:analogous to runlevel 5
查看当前的运行级别 : systemctl get-default
切换运行继运行级别 :systemclt set-default [].target
改变了级别重启后,将默认不会进入之前的级别
❓ 找回root密码(面试题)
1.启动系统,进入开机的时候快熟按下e进入编辑界面
2.找到linux 16的UTF-8后输入: init=/bin/sh 后按ctrl+x进入单用户模式
3.再输入 mount -o remount,rw/按回车 输入passwd
4.在输入touch /.autorelabel 在回车
5输入。exec /sbin/init (耐心等待,过程有点长)系统就会自动重启。
⭐️ 文件有关
linux中的隐藏文件都是由.开头
如果你的文件是用.开头那么他自然就成为了一个隐藏文件。
ln指令(在home目录下使用)
也叫软连接也称为符号链接,类似于windows里的快捷方式、西湖哟啊存放链接其他文件的路径
ln -s [原文件或目录] [软连接名] 给原文件创建一个软链接,或者说快捷方式。
rm [软链接名] 删除软链接
软链接和硬链接的区别
软链接:
1. **以路径的形式存在。类似于Windowsc操作系统中的快捷方式。**
2. **可以跨文件系统、硬链接不可以**
3. **软链接可以对一个不存在的文件名进行链接**
4. **软链接可以对目录进行链接**
硬链接:
1.**硬链接,以副本的形式存在。但不占用实际空间。**
2.**不允许给目录创建硬链接**
3.**硬链接只有在同一个文件系统中才能创建**
⭐️ 权限有关
linux 组管理和权限管理
1. linux每个组必须属于一个组,不能独立于组外。
2. 一般来说谁创建了这个文件,就是这个文件的所有组
3. 这个用户所在组也对哪个文件有一定的权限
4. 对于不在用户所在组的其他组也对这个文件也有一定的权限
chown [用户名][文件名/目录] 修改文件所有者
如果想要目录里面的文件或者目录以一起修改成其他所有者只需要在在命令后面加个 -R
chgrp[组名][文件名] 修改用户所有组
改变用户所在组
权限的基本介绍
0-9位说明
1. 红色 第0位确定文件文件类型(d,-,l,c,b)
-代表普通文件
l是连接文件
d是目录
c是字符设备:鼠标,键盘
b是块设备:硬盘
2. 绿色 第1-3位确定所有者组(该文件的所有者)拥有该文件的权限。---User
rwx文件
r代表可读(red)
w代表可写 (write)但是不能删除 删除一个文件删除的权限的前提是要对文件所在组有写的权限
x代表可以执行(execute)
rwx目录
r 代表可读 可以读取,ls查看目录内容
w 代表可写 可以修改,对目录进行创建+删除+重命名
x代表执行;可以进入该目录
3. 橙色4-6为确定所有组(同用户的组)拥有该文件的权限,--group
4. 蓝色 7-9位 确定其他用户拥有该文件的权限---Other
也可以用数字来表示 r=4、w=2、x=1 rwx=4+2+1=7
其他说明:
1 文件:硬盘连接数 目录:子目录数
root 用户
root 组
1213 文件大小,如果是文件夹则显示字字节数
Feb 2 09:39 最后修改日期
abc 文件名
修改权限
u:所有者 g:所有组 o:其他人 a:所有人(u、g、o总和)
chmod u=rwx,g=rx,o=x 文件名/目录名 给u、g、o、分配 目录/文件 权限,
chmod [用户/组/其他]+[权限] 文件名/目录名 增加权限
chmod [用户/组/其他]-[权限] 减去文件
修改文件所有者
chmod -777 [文件/目录] 代表用户其他用户组都有读写运行的权限
如果要对目录内的文件进行操作,需要有对该目录相应的权限
⭐️ 定时任务调度
cornd
crond
crontab [选项] 进行 定时任务的设置进入到crond里面
-e 编辑crontab定时任务
-l 查询crontab任务
-r 删除当前用户所有的crontab任务
service crond restart 重启任务调度
进入后在输入* * * * * [想启用的命令]
第一个\* 一小时当中的第几分钟 0-59
第二个\* 一天 当中的几小时 0-23
第三个\* 一个月中的第几天 1-31
第四个\* 一年当中的第几个月 1-12
第五个\* 一个星期中的星期几 0-7(0和7都是星期天)
特殊符号
, 代表不连续的时间
- 代表连续的时间范围
*/n 代表每隔多久执行一次,
任务调度:是指系统在某个时间执行的特定的命令或程序。
任务调度分类:1、系统工作:有些重要的工作鼻血周而复始地执行。如病毒扫描等
个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份。
at定时任务
1.at命令地一次性定时计划任务,at的守护进程**atd**会以后台模式运行,检查作业队列来运行。
2.默认情况下,atd守护进程每60秒检查作业(任务)队列,有作业(任务)是,会检查作业运行时间,如时间与当前时间匹配,则运行此作业。
3.at命令是一次性定时计划任务,执行完一个任务后不再执行此任务了
4.在使用at命令的时候、一定要保证atd进程的启动,可以用相关指令来查看(ps -ef | grep atd检测atd是否在运行的)
atd会每60秒检查工作队列录里面有没有可以执行的脚本或者指令,如果有他就会去执行,依次执行然后执行到没有为止
at [选项] [时间]
在输入Cltr+D输入两次 结束at命令的输入
选项:
-m 当指定的任务被完成后,将给用户发送邮件,即使没有标准输出
-I atq的别名 atq:查看任务列表
-d atrm的别名
atrm [任务序号] 删除任务
-v 显示任务将被执行的时间
-c 打印任务的内容到标准输出
-V 显示版本信息
-q<队列> 使用指定的队列
-f<文件> 从指定文件读入任务而不是从标准输入读入
-t<时间参数> 以时间参数的形式提交重要运行的任务 时间参数 :at [参数] + [参数]
now 今天
tomorrow 明天
am 上午
pm 下午
day 天
mouth 月
minutes 分
s 秒
hour 小时
year 年
⭐️ 磁盘相关
磁盘分区挂载
linux分区
1.linux无论有几个分区,分给哪一个目录使用,**它归根结底就只有一个根目录**,一个独立且唯一的文件结构,linux中每个分区都是用来组成整个文件系统的一部分。
2.linux采用了一种叫“载入”的处理方法,他的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录连联系起来。这时要载入的一个分区将使它的储存空间在一个目录下获得。
挂载 mount
lsblk 查看磁盘挂载的目录
lsblk -f 是分区更加清晰
UUID 唯一标识符磁盘,磁盘格式化后都会分配
linux硬盘分IDE和SCSI硬盘,目前基本上SCSI
IDE:驱动器标识符为“hdx~”其中hd表明分区所在的设备类型是IDE硬盘,“x”为盘号(a为基本盘、b为基本从属盘,c为辅助主盘,d为辅助从属盘),“~”代表分区,前四个分区用数字1到4表示,他们分别是主分区或扩展分区,从5开始就是逻辑分区。
SCSI:标识为“sdx~”,其中“sd“用来表示分区设备类型为SCSI,其余和IDE硬盘表示一样。
给虚拟机添加硬盘
打开虚拟机设置----硬盘----添加----硬盘(SCSI)
**重启系统才可以识别**
分区
进入/dev查看硬盘,在用fdisk 分区工具进入到硬盘,输入n创建新硬盘,在输入p,在输入硬盘的起始和结束扇区位置。q是不保存退出,w是保存退出。
格式化
分好区后必须要格式化,不格式化不能用
mkfs -t [分区类型] [硬盘]
常见的文件分区系统
ext系列、xfs、reiserfs、jfs、nfs、ocfs、gfs、swap、vfat=fat32
挂载
mount [硬盘] [目录] 挂载
umount [硬盘] [目录] 卸载挂载 <一定要退出硬盘挂载文件后在卸载挂载>
重启后挂载关系就没有了
挂载后一定要进入,fstab一直挂载,添加完成mount -a
注意:一定不要写错了,不然会导致开不了机
磁盘文件查询
df -TH 查询整体磁盘使用情况
使用率达到百分之80,就要想办法增加容量
du -h 查询指定目录的磁盘占用情况,默认为当前目录
-s 指定目录占用大小总汇
-h 带计量单位
-a 含文件
--[max]-depth=[子目录个数] 子目录的深度,类似于tree
-c 列出明细的同事,增加汇总
磁盘情况-工作实用指令
ls -l | grep "^-" 代表我只需要以-开头的,-开头都是文件,
wc 统计个数
-l 只显示行数
⭐️ 网络配置
ifconfig linux查看ip
平时学习可以用自动获取ip,做服务器必须要固定ip
IPADDR ip地址
NETMASK 子网掩码
GATEWAY 网关
设置主机名
hostname 查看主机名
vim /etc/hostname 修改主机名
hostnamectl set-hostname [主机名] 修改主机名
设置hosts映射
hosts文件
一文本文件,用来记录ip和hostname的映射关系
可以添加ip地址和主机名或者域名地址,使其系统可以直接ping主机名或者域名
windows
/c/window/systme32/dirvers/etc/hosts
linux
/etc/hosts 文件里面可以修改
DNS
Domain Name System 的缩写,就是域名解析控制协议
是互联网上作为域名和IP地址相互映射的一个分布式数据库,通俗易懂来说就是把ip地址作为一个好记的域名来访问。
nslookup [域名] windows查看域名ip
【DNS服务器全球13个主服务器在美国还有8个备份的也在美国,其中一个在日本,另外两个在英国和瑞典】
主机名解析机制分析
1.浏览器先检查浏览器缓存中有没有该域名解析IP地址,有就先调用这个IP完成解析;如果没有,就检查DNS解析器缓存,如果有就直接返回IP完成解析。这两个缓存,可以理解为本地解析器缓存。
2.一般来说当电脑第一次成功访问某一网站后,在一定时间内,浏览器或操作系统会缓存他的IP地址(DNS解析记录)。在windows命令行中输入
ipconfig /displaydns 查看DNS域名解析缓存
ipconfig /flishdns 手动清理DNS缓存
3.如果本地解析器某一找到对应映射,检查系统中hosts文件中有没有配置对应的ip映射,如果有,则完成解析并返回。
4.如果本地DNS解析器缓存和hosts文件中均没有找到对应的IP则到域名服务DNS进行解析域
DNS域名劫持
黑客修改你的hosts文件
⭐️ 进程管理
程序运行起来就是个进程
在liunx中,每个执行的程序都被称为一个进程。每一个进程都分配一个ID号(**pid**,进程号)
每个进程都看你以两种方式存在,前台和后台,
前台:用户目前屏幕上可以进行操作的
后台:实际上在操作,但屏幕无法看到的进程
一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,直到关机才结束。
ps 查看正在运行的进程
-a 看所有进程
-u 以用户的格式显示进程
-x 显示后台进程运行的参数
-e 显示当前所有进程
-f 全格式
-ef 以全格式显示当前所有进程
USER PID %CPU %MEM
PPID 父进程
VSZ (虚拟内存)
RSS(物理内存)
TTY (终端)
STAT(运行状态 s表示休眠 r表示运行 N表示进拥有比普通优先级更低 D短期等待 Z僵5死 (需要定时进行清除) T被跟踪或者被停止了)
START(执行开始时间)
TIME(占用的cpu时间)
COMMAND(进程名,过长就截断显示)
父进程:可以创建或生产多个子进程
终止进程kill和killall
某个进程执行一般需要停止是,或是已经消耗了很大的系统资源时,此时可以考虑停止该进程,使用kill命令来完成
kill [选项] 进程号 杀死终止该进程
-9 强迫停止
killall 进程号 杀死终止该进程和该进程的所有子进程
/bin/systemctl start [进程].service 启动服务
查看进程树
pstree 以树状形式显示进程
-p 显示进程PID
-u 显示进程的所属用户
⭐️ 服务管理
服务管理本质就是进程,但是是运行在后台的,通常会监听某个端口,等待其他程序的请求如(sshd mysqld 防火墙),也被称为守护进程。软件客户端可以通过去访问端口来运行这个服务。
service 服务名[选项] **(Centos7以上不在使用)**
start 启动
stop 停止
restart 重启
reload 重新加载
status 查看状态
service 指令管理在 /etc/init.d查看
setup
前面带\*号的就代表随着linux的启动一起启动
没带\*号的就代表要自己手动启动
服务运行级别
0 1 2 3 4 5 6
开机的流程
开机--bios--/boot-systemd进程1--运行级别--运行级别对应的服务
chkconfig
通过 chkconfig 命令可以给服务的**各个运行级别**设置自启动/关闭
chkconfig 指令管理可以在/etc/init.d内查看
chkconfig --list 查看服务
chkconfig --level [运行级别] 服务名 on/off
chkconfig设置后需要重启机器才生效
案例:对network服务进行各种操作,吧network在5运行级别给关闭,然后打开
systemctl(Centos7开始用这个)
语法 systemctl [start stop restart status(查看状态)] 服务名
systemctl 指令管理服务在/usr/lib/systemd/system内查看
sytemctl设置服务的自启动状态
systemctl list-unit-files 查看状态
systemctl enable[服务名] 设置服务开机自启
systemctl disable [服务名] 关闭服务开机启动
systemctl is-enabled [服务名] (查询某个服务是否是自启动的)
防火墙:firewalld
netstat -anp 查看网络状态和协议
关闭或重启防火墙后,立即生效
这种方式只是临时生效,当重启系统后,还是回归对以前服务的设置。
如果希望设置某个服务自启动或者关闭永久生效,需要使用 Systemctl enable
systemctl disable
telnet
真正的服务需要防火墙打开,但是外面就不能请求数据,就不能跟服务器端口通讯。这是需要把你的需要的端口打开。
firewall-cmd --permanent --add-port=端口号/协议 打开 端口
firewall-cmd --permanent --remove-port=端口号/协议号 关闭端口
firewall-cmd --reload 重新载入才可以生效
firewall-cmd --query-port=端口/协议 查看端口是否开放
⭐️ 动态监控进程
top
-d [秒数] 指定top命令几秒更新一次,默认是三秒
-i 不显示僵尸和闲置的进程
-p 指定ID来显示这个进程的状态
top内
P 以CPU 使用来排序
M 以内存来排序
N 以PID排
u 指定看用户
k 终止指定的进程
负载均衡三个加起来除以三不超过0.7
监控网络状态
netstat 监控网络状态
-an 按一定顺序排
-p 进程端口号显示
local Address 本地地址
foreign Address 外部地址
ping 测试网络是否通顺
⭐️ RPM和YUM
rpm用于互联网下载包的打包及安装工具,它包含在某些linux分发版中。它生产具有.RPM扩展名的文件。RPM是redhat package Manager(redhat软件包管理工具)的缩写,类似于windows的setup.exe。
rmp包的简单查询指令
rpm -qa 显示所有安装的rmp包列表
rpm -q [软件包] 指定查询软件包是否安装
rpm -qi [软件包] 查询软件包信息
rpm -ql [软件包] 查询包安装的位置和创建的文件
rpm -qf [路径] 查询软件包中的文件
rpm -e [软件包] 卸载软件包
如果其他软件包依赖于你要卸载的软件包,卸载时则会产生错误。如果要强制安装后面加上--nodpes,强制删除
rmq -ivh [rpm包的路径] 安装rpm包
i=install 安装
v=verbose 提示
h=hash 进度条
firefox-60.2.2-1.el7.centos.x86_64
firefox:名称
版本号:60.2.2-1
使用操作系统 el7.centos.x86_64
表示centos7.x的64位系统
如果是i686、i386表示是32位系统,
noarch表示通用
YUM是一个shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包且安装,可以自动处理依赖关系、并且一次安装所有依赖的软件包。
yum remove 删除包和依赖关系
yum list 列出安装包
yum insatll [软件包] 安装软件
如果需要在linux下进行javaee的开发,我们需要安装如下软件
JDK8
ideaIU
msql
apache-tomcat
centos
配置环境变量在 /etc/profile内‘
⭐️ Shell编程
shell是一个命令解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用来shell来启动,挂起,停止甚至是编写一下程序
脚本要以 #!/bin/bash
脚本需要可执行权力
可以以.sh后缀结尾,也可以不用
sh [脚本]
执行方法可以bash [脚本]
也可以绝对路径和相对路径./[脚本]但是要给执行权限 chmod
shell变量
linux shell变量分为,系统变量和用户自定义变量。
系统变量:$HOME $POW $SHELL $USER等等,
显示在shell中set显示所有系统变量
shell变量的定义
基本语法
定义变量:变量名=值(中间不用打空格)
撤销变量:unset变量
声明变量:redonly变量,注意:不能unset变量
变量输出的时候要加$
定义变量的规则
变量名称可以由字母、数字和下划线组成、但是不能以数字结尾
等号两侧不能有空格
变量名一般习惯为大写(可以用小写,)
将命令的返回值赋给变量
加上反引号``比如A=`date`,运行里面的结果,并把结果返回给A
A=(date)等价于反引号
设置环境变量
expoxt 变量名=变量名 :将shell变量输出为环境变量,可以理解为全局变量
source 配置文件 : 可以让修改后的配置信息立即生效
echo $ : 查询变量的值
定义一个变量后最后用source刷新一下
shell如何多行注释
:<
位置参数变量
当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量
$0对应的是当前Shell脚本程序的名称
$#对应的是总共有几个参数 分别对待
$\*对应的是所有位置的参数值 整体对待
$1$2$3....则分别对应着第N个位置的参数值,
预定义变量
预先定义的变量,可以直接在shell脚本使用
$$ 当前进程的进程号PID
$! 后台运行的最后一个进程号
$? 对应的是显示上次一命令的执行返回值,如果这个值的变量为0,证明上一个命令正确执行;如果这个变量非0,则证明上一个命令吧正确
运算符
基本语法
$((运算式))或者$[运算符] 或者
expr m (+/-) n (注意空格)
expr \*,/,% 乘 除 取余
条件判断
基本语法
[ 条件 ]前后要有空格
使用$?验证(0为正确,其他数字则为错误)
文件测试的参数:
-d 测试文件是否为目录类型
-e 测试文件是否存在
-f 判断是否为一般文件
-r 测试当前用户是否有权限读取
-w 测试当前用户是否有权限写入
-x 测试当前用户是否有权限执行
在Shell终端中逻辑“与”的运算符号是**&&**。它表示当前面的命令执行成功后才会执行它后面的命令。
逻辑“或”,它在linux系统中运算符号为**||**,表示当前**前面的命令执行失败**后才会执行它后面的命令,
第三种逻辑语句“非”,在linux系统中的运算符号是一个叹号**(!)**,
他表示把条件测试中的判断结果取yu反值。
整数比较
-eq 是否等于
-ne 是否不等于
-gt 是否大于
-lt 是否小于
-le 是否等于或小于
-ge 是否大于或等于
字符串比较语句用于判断测试字符串是否为空值,或两个字符串是否相同。
= 比较字符串内容是否相同
!= 比较字符串内容是否不同
-z 判断字符串内容是否为空
流程控制
case语句
基本语法
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
for循环
基本语法
for 变量 in 值1 值2 值3...
do
程序/代码
done
基本语法2
for ((初始值;循环控制条件;变量变化))
do
程序
done
while循环
基本语法
while [ 条件判断式 ]
do
程序
done
read读取控制台输入
read [选项] [参数]
-p 指定读取值时的提示符
-t 指定读取值是等待的时间(秒),如果没有在指定的时间内输入,就不在等待
参数
变量:指定读取值的变量
shell编程和其他语言语言,有系统函数,也可以自定函数。
系统函数
basename 返回完整路径最后的/部分,常用于获取文件名
basename [路径]
basename [路径] [后缀]
dirname 返回完整路径最后/的前面部分
dirname [绝对路径] 从包含绝对路径的文件名中,去除文件名(非目录)
自定义函数
function funname()
{
Action;
[return int;]
}
调用 funname
⭐️ 日志
绝大部分的日志文件在/var/log里面
日志管理服务
centos7是rsyslogd centos6的是syslogd
查询linux中的rsyslogd服务是否启动
ps aux | grep rsyslogd | grep -v "grep"
查询rsyslogd服务的自启动状态
systemctl list-unit-files | grep rsyslog
配置文件:/etc/rsyslog.conf
编辑文件的格式为:*.* 第一个*代表日志的类型,第二个就代表日志的级别
日志的类型:
auth pam产生的日志
authpriv ssh,ftp等登陆信息的验证信息
corn 时间任务相关
kern 内核
lpr 打印
mail 邮件
mark(syslog)-rsyslog 服务内部的信息,时间标识
news 新闻组
user 用户程序产生的相关信息
uucp unix to nuix copy 主机之间相关的通信
local 1-7 自定义日志设备
日志级别 :从上到下,级别从低到高,纪律信息就越少
debug 有调试信息的,日志通讯最多是
info 一般信息日志,最常用
notice 最具有重要性的普通条件的信息
warning 警告级别
err 错误级别,阻止某个功能或者模块不能正常工作的信息
crit 严重级别,阻止某高官功能或者模块不能正常工作的信息
alert 需要立即修改的信息
emerg 内核崩溃等重要信息
none 什么都不记录
由日志服务rsyslogd记录的日志文件,日志文件的格式包含以下4列:
事件产生的时间
产生事件的服务器的主机名
产生事件的服务名或程序名
事件的具体信息
日志轮替
日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存范围之后
日志轮替文件命名
centos7使用logrotate进行日志轮替管理,要想改变日志轮替文件名字,通过/etc/logrotate.conf配置文件中的dateext参数
如果配置文件中由“dateext” 参数,那么日志会用日期来作为日志文件的后缀,这样的日志文件不会重叠,也就不需要日志文件的改名,只需要指定保存日志个数,删除多余的日志文件即可。
如果配置文件中没有“dateext”参数,日志文件就需要进行改名了。