Linux操作系统笔记
Linux
关机命令
在Linux领域内大多用在服务器上,很少遇到关机的操作。毕竟服务器上跑一个服务是永无止境的,除非特殊情况下,不得已才会关机。
关机指令为:shutdown;
sync # 将数据由内存同步到硬盘中
shutdown # 后不加参数默认一分钟后关机,你可以man shutdown 来看一下帮助文档。例如你可以运行如下命令关机
shutdown -h 10 # 计算机将在10分钟后关机
shutdown -h now # 立即关机
shutdown -h 20:25 # 系统会在今天20:25关机
shutdown -h +10 # 10分钟后关机
shutdown -r now # 立即重启
shutdown -r +10 # 10分钟后重启
reboot # 就是重启,等同于 shutdown -r now
halt # 关闭系统,等同于 shutdown -h now 和 poweroff
最后总结一下,不管系统重启还是关机,首先需要执行 sync 命令,把内存中的数据写到磁盘中。
目录结构
- /bin:bin是Binary的缩写,这个目录存放着最经常使用的命令。
- /boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。(不要动)
- /dev:dev是Device(设备)的缩写,存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
- /etc:这个目录用来存放所有的系统管理所需要的配置文件和子目录。
- /home:用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
- /lib:这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。(不要动)
- /lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。(存放突然关机的文件)
- /media:Linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux会把识别的设备挂载到这个目录下。
- /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
- /opt:这是给主机额外安装软件所摆放的目录。比如你按照一个ORACLE数据库则就可以放在这个目录下。默认是空的。
- /proc:这个目录是一个虚拟的目录,它是系统的映射,我们可以通过直接访问这个目录来获取系统信息。(不用管)
- /root:该目录为系统管理员,也称为超级权限者的用户主目录。
- /run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删除或清除。
- /sbin:s就是Super User的意思,这里存放的是系统管理员使用的系统用管理程序。
- /srv:该目录存放一些服务启动之后需要提取的数据。
- /sys:这是Linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统sysfs
- /tmp:这个目录是用来存放一些临时文件的。
- /usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
- /usr/bin:系统用户使用的应用程序。
- /usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。
- /usr/src:内核源代码默认的放置目录。
- /var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
- /www:存放服务器网站相关的资源,环境,网站的项目
常用基本命令
目录管理
cd 地址# 切换目录
./ # 当前目录
cd .. # 返回上一级目录
cd ~ # 回到当前用户目录
ls # 列出目录
-a # all,查看全部的文件,包括隐藏文件
-l # 列出所有的文件,包含文件从属性和权限,没有隐藏文件
-al 或 -la # 列出全部的文件,包含文件从属性和权限,包含隐藏文件
pwd # 显示当前用户所在的目录
mkdir 目录名 # 创建一个目录
mkdir -p test1/test2/test3 # 创建多级目录
touch 文件名 # 创建文件
rmdir 目录名 # 删除一个目录
rmdir -p test1/test2/test3 # 删除多级目录
rmdir只能删除空的目录,如果下面有文件,需要先删除文件
cp 文件 目录 # 将文件拷贝一份放到指定目录中
rm 文件或目录 # 删除一个文件或目录
-f 文件或目录 # 忽略不存在的文件,不会出现警告,强制删除
-r 递归删除目录
-i 互动,删除时询问是否删除
mv 文件 目录 # 移动文件到指定目录
mv 文件名1 文件名2 # 如果目标目录中已经存在该文件,则为重命名
-f 强制
-u 只替换已经更新过的文件
文件权限属性
在Linux中第一个字符代表这个文件是目录、文件或链接文件等等:
- [ d ] 是目录
- [ - ] 是文件
- [ l ] 表示链接文档(link file)
- [ b ] 表示为装置文件里面的可供存储的接口设备(可随机存取装置)
- [ c ] 表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)
接下来的字符中,以三个为一组,且均为 [rwx] 的三个参数的组合
其中,[r] 代表可读(read)、[w] 代表可写(write)、[x]代表可执行(execute)
要注意的是,这三个权限的位置不会变化,如果没有权限,就会在相应的位置出现[-]
修改文件属性
1. 更改文件属组
chgrp [-R] 属组名 文件名
-R # 递归更改文件属组,就是在某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改
2. 更改文件属主,也可以同时更改文件属组
chown [-R] 属主名 文件名
chown [-R] 属主名:属组名 文件名
3. 更改文件9个属性(必须要掌握)
chmod [-R] xyz 文件或目录
Linux文件属性有两种设置方法,一种是数字,一种是符号
Linux文件的基本权限就有九个,分别是 owner/group/others 三种身份各有自己的 read/write/execute 权限
文件的权限字符为:[-rwxrwxrwx],这九个权限是三个三个一组的!其中我们可以使用数字来代表各个权限,各个权限的对照表如下:
r:4 w:2 x:1
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为:[-rwxrwx---]分数则是:
owner = rwx = 4 + 2 + 1 = 7
group = rwx = 4 + 2 + 1 = 7
others = --- = 0 + 0 + 0 = 0
chmod 770 filename
文件内存查看
Linux系统中使用以下命令来查看文件的内容:
你可以使用 man [命令] 来查看各个命令的使用文档,如:map cp
cat # 由第一行开始显示文件内容
tac # 从最后一行开始显示,可以看出tac是cat的倒着写的
nl # 显示的时候,顺便输出行号
more # 一页一页的显示内容,空格翻页,enter向下看一行 :f 显示行号
less # 于 more 很相似,但是比more更好,他可以往前翻页
head # 只看头几行,通过-n参数控制显示几行
tail # 只看尾巴几行
硬链接和软连接
ln 原文件 链接文件 # 硬链接
ln -s 原文件 链接文件 # 软链接
Vim编辑器
vim 文件名 # 如果该文件存在,则为编辑当前文件,如果不存在,则创建文件
Linux的文本编辑器
- 正常模式
在正常模式下,我们可以使用快捷键。
以 vim打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中,你可以使用『上下左右』按键来移动光标,你可以使用「删除字符』或『删除整行』来处理档案内容,也可以使用『复制、贴上』来处理你的文件数据。 - 编辑模式
在模式下,程序员可以输入内容。
按下 i, I, o,O, a,A, r,R等任何一个字母之后才会进入编辑模式,一般来说按i即可 - 命令行模式
在这个模式当中,可以提供你相关指令,完成读取、存盘、替换、离开 vim 、显示行号等的动作则是在此模式中达成的!
账号管理
添加用户
useradd -选项 用户名
-m 自动创建这个用户的主目录
-d 指定生成的目录
-G 给用户分配一个组
删除用户
userdel -选项 用户名
-r 删除用户时将他的目录页一并删除
修改用户
usermod 对应修改的内容 修改的那个用户
切换用户
su 用户名
su - 用户名 # 使得shell为可登录的shell
登出,退出当前登录
exit 或 logout
修改密码
root用户操作:
passwd 用户名
普通用户修改自己的密码:
passwd
root权限时可操作:
锁定账户
passwd -l 用户名 # 锁定之后这个用户就不能登录了
passwd -d 用户名 # 没有密码也不能登录,-d就是删除这个用户的密码
passwd -u 用户名 # 解锁用户账号
用户组管理
属主、属组
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理(开发、测试、运维、root)。不同Linux系统对用户的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新
创建用户组
groupadd 用户组名 # 创建完用户组后可以得到一个组的id,这个id是可以指定的!-g 520,若不指定就是自增1
删除用户组
groupdel 用户组名
修改用户组的权限信息和名字
groupmod -选项 用户组名
-g 修改组的id
-n 修改名字
拓展
/etc/passwd
用户名:口令(登录密码,我们不可见):用户标识号:组标识号:注释性描述:主目录:登录Shell
磁盘管理
df # 列出文件系统整体的磁盘使用量
df -h
du # 检查磁盘空间使用量
du -a
du -sm /*
进程管理
ps # 查看当前系统中正在执行的各种进程的信息!
ps -xx:
-a 显示当前终端运行的所有进程信息
-u 以用户的信息显示进程
-x 显示后台运行进程的参数
ps -aux|grep mysql
# | 在linux中这个符号叫做管道符
# grep 查找文件中符合条件的字符串
ps -ef #
ps -ef|grep mysql
-e:等价于 ‘-A’ ,表示列出全部的进程
-f:显示全部的列(显示全字段)
pstree -pu # 进程数
-p 显示父id
-u 显示用户组
kill -9 进程id # 强制杀掉进程
压缩和解压
# zip/unzip指令
# zip用于压缩文件,unzip用于解压的
zip -选项 定义压缩包名 压缩的文件或目录
-r 递归压缩,即压缩目录
unzip -选项<目录> 压缩包
-d<目录> 指定解压后的存放目录
# tar指令
# tar指令是打包的指令,最后打包后的文件是.tar.gz的文件
tar -选项 XXX.tar.gz 打包的内容 # 打包目录,压缩后的文件格式.tar.gz
-c 产生.tar打包文件
-v 显示详细信息
-f 指定压缩后的文件名
-z 打包同时压缩
-x 解包.tar文件
压缩:tar -zcvf XXX.tar.gz 打包的内容(如果是多个,用空格隔开)
解压:tar -zxvf XXX.tar.gz
时间日期类
date # 显示当前时间
date +%Y # 显示当前年份
date +%m 显示当前月份
date +%d 显示当前是哪一天
date "+%Y-%m-%d %H:%M:%S" # 显示年月日时分秒
cal # 本月日历
搜索查找类
# find指令
# find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或目录显示在终端
find 搜索范围 选项
-name<查询方式> 按照指定的文件名查找模式查找文件
-user<用户名> 查找属于指定用户名的所有文件
-size<文件大小> 按照指定的文件大小查找文件(+200M:大于200M的文件 -200M:小于 200M:等于,
单位:K,M,G)
# locate指令
# locate指令可以快速定位文件路径。locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。Locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新locate时刻
# 由于locate指令基于数据库查询,所以第一次运行前,必须使用updatedb指令创建locate数据库
locate poxiao
# 查找指令所在目录
which 指令
# grep指令和管道符|
# grep过滤查找,管道符,'”,表示将前一个命令的处理结果输出传递给后面的命令处理。
grep -选项 查找内容 源文件
-n 显示匹配行及行号
-i 忽略字母大小写
帮助指令
# man获得帮助信息
man 命令或配置文件
# help指令
help 命令
crond任务调度
crontab进行定时任务的设置
- 概述
任务调度:是指定系统在某个特定的时间执行特定的命令或程序
任务调度分类:
系统工作:有些重要的工作必须周而复始的执行,如病毒扫描 个别用户工作:个别用户可能希望执行某些程序,比如MySQL数据库备份
ceontab -选项
-e 编辑crontab定时任务
-l 查询crontab任务
-r 删除当前用户的crontab任务
案例:每天凌晨2:00将mysql数据库itcast,备份到文件中。提示:指令为:
0 2 * * * mysqldump -uroot -p123456 数据库 >> /home/db.bak
at定时任务
- at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行。
- 默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。
- at命令是一次性定时计划任务,执行完一个任务后不再执行此任务了
- 在使用at命令的时候,一定要保证atd进程的启动,可以使用相关指令来查看
未完!!!!!
环境安装
安装软件一般有三种方式:rpm、解压缩、yum在线安装
JDK安装
rpm方式
- 下载JDK rpm包,去官网下载即可
- 安装java环境
java -version# 检查当前系统是否存在java环境
# 如果有需要卸载
# rpm -qa|grep jdk #检测jdk版本信息
# rpm -e --nodeps jdk
# 卸载完成后可安装jdk
# rpm -ivh rpm包名
# 配置环境变量
- 运行Tomcat,进入bin目录,和我们以前在Windows下看的都是一样的
# 解压
tar -zxvf 压缩包名
# 执行:startup.sh -->启动tomcat
# 执行:shutdown.sh -->关闭tomcat
./startup.sh
./shutdown.sh
防火墙配置
确保Linux的防火墙端口是开启的,如果是阿里云,需要保证阿里云的安全组策略是开放的!
# 查看firewall服务状态
systemctl status firewalld
# 开启、重启、关闭、firewalld.service服务
# 开启
service firewalld start
# 重启
service firewalld restart
# 关闭
service firewalld stop
# 查看防火墙规则
firewall-cmd --list-all # 查看全部信息
firewall-cmd --list-ports # 只看端口信息
# 开启端口
开端口命令:firewall-cmd --zone=public --add-port=80/tcp --permanent
重启防火墙:systemctl restart firewalld.service
命令含义:
--zone #作用域
--add-port=80/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效
手动启动MariaDB
1、输入reboot 命令重启服务器
2、重启完成,登录服务器,输入netstat -nlp 命令检查 3306端口,发现 mysqld 服务没有启动
3、了解到mysqld 无法自动启动,尝试手动启动,启动命令 :systemctl start mariadb
4、启动完成后(等候时间 大约 3、4 秒 ),输入netstat -nlp 命令查看端口 3306 是否存在
项目jar包部署到服务器上
创建数据库
liunx 版本ubuntu 16.4
mysql 版本 5.6
1)准备*.sql文件 (* 是准备导入的sql文件的名字)
2)liunx 远程客户端 SecureCRT 7.0
alt+p 打开文件上传窗口 通过复制或者直接拖拽 将准备好的*.sql 文件上传到liunx服务器上
3)登陆liunx 服务器 输入mysql -u用户名 -p密码 (mysql 的用户名 密码)进入mysql数据库
4)show databases 查看当前mysql数据库管理工具中有哪些数据库
5)如果存在已有的 删除操作 drop database 数据库名称
6)创建数据库 create database 数据库名称 charset utf8 (指定字符集编码)
7)查看以上传的*.sql文件 一般都在/root/*.sql文件
8)use 数据库名称 切换到创建好要导入的数据中
9)执行导入 source /root/.sql 是导入在linux 上.sql文件的位置 source 导入命令
启动项目
启动jar包的命令为:
nohup java -jar xxxxxx.jar &
nohup:把输出内容放入到nohup的日志中并生成日志文件
java -jar:启动java的jar包命令
cc-java-export:此处放入你自己的jar包名称
&:关闭linux连接时 服务不会挂断
关闭项目
查看当前应用所占用端口:
netstat -nlp|grep 9090 //9090是系统启动访问的端口, 由此可得到9090 是java运行的端口,
关闭系统:
kill 9578 //9578是上面查询出来的进程id
Shell编程
Shell脚本的执行方式
脚本格式要求
- 脚本以#!/bin/bash开头
- 脚本需要有可执行权限
编写一个Shell脚本
- 创建一个Shell脚本,输出hello world!
脚本的常用执行方式
-
方式1:(输入脚本的绝对路径或相对路径)
说明:首先要赋予helloworld.sh脚本的执行权限,再执行脚本
-
方式2:(sh + 脚本)
说明:不用赋予脚本执行权限,直接执行即可
Shell的变量
Shell变量介绍
- Linux Shell中的变量分为,系统变量和用户自定义变量
- 系统变量:
$HOM
、$PWD
、$SHELL
、$USER
,比如:echo $HOME 等等… - 显示当前shell中所有变量:set
Shell变量的定义
- 定义变量:变量=值
- 撤销变量:unset 变量
- 声明静态变量:readonly变量,注意不能unset
变量定义规则
- 变量名称可以由字母、数字和下划线组成,但不能以数字开头
- 等号两侧不能有空格
- 变量名称一般习惯为大写
将命令的返回值赋给变量
A=`date`,反引号,运行里面的命令,并把结果返回给变量A
A=$(date),等价于反引号
设置环境变量
基本语法
- export 变量名=变量值(功能描述:将Shell变量输出为环境变量/全局变量)
- source 配置文件(功能描述:让修改后的配置文件立即生效)
- echo $变量(功能描述:查询环境变量的值)
shell脚本的多行注释
:<<!
内容...
内容...
内容...
内容...
!
位置参数变量
介绍
- 当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量
比如:sh var.sh 100 200,这个就是一个执行shell的命令行,可以在myshell脚本中获取到参数信息
基本语法
$n(功能描述:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})
$*(功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
$@(功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
$#(功能描述:这个变量代表命令行中所有参数的个数)
预定义变量
基本介绍
就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
基本语法
$$(功能描述:当前进程的进程号(PID))
$!(功能描述:后台运行的最后一个进程的进程号(PID))
$?(功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
运算符
注意:使用expr方式时才需要转义:\*
条件判断
需要加 if
支持else
案例:
流程控制
case
for循环
while循环
read读取控制台输入
系统函数
自定义函数