Linux 系统
2020-12-28 11:18:52 2 举报
AI智能生成
Linux系统入门教程
作者其他创作
大纲/内容
基础篇
Linux 方向
Linux 运维工程师
Linux 嵌入式工程师
在Linux 下做各种程序开发(Java ,PHP...)
Linux 应用领域
个人桌面应用领域
服务器应用领域
嵌入式应用领域
CentOS 网络连接三种形式
桥连接
好处: 通讯比较畅通
坏处: 可能会造成ip冲突
NAT模式
网络地址转换方式 好处: Linux系统可以访问外网,不会造成ip冲突
主机模式
你的Linux是一个独立的主机不能访问外网
vmtools安装
介绍
可以直接粘贴命令 在 windows 和 centos 系统之间 ,可以设置 windows 和 centos的共享文件
Linux 目录结构
介绍
经典的一句话 在Linux 世界里,一切皆文件
linux的文件系统是采用层式的树状目录结构,在此结构中的最上层是根目录 / 然后在此根目录下在创建其它目录
具体结构
bin
是 Binary 的缩写,这个目录存放着最重经常用的命令
sbin
s 就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
home
存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名
root
该目录为系统管理员,也称作超级权限者的用户目录
lib
系统开机所需要最基本的动态连接共享库,其作用类似于 Windows 里面的Dll文件 几乎所有的应用程序都需要用到这些共享库
etc
所有的系统管理所需要的配置文件和子目录
user
用户的很多应用程序和文件都放在这个目录下,类似于Window的 program files目录
boot
存放启动Linux 时使用一些核心文件,包括一些连接文件以及镜像文件
proc
这是一个虚拟的目录,它是系统内存的映射,访问这个目录获取系统信息
srv
service的缩写,目录存放一些服务启动之后需要提取的数据
sys
目录下安装了2.6内核中新出现的一个文件系统
tmp
该目录存放一些临时文件
dev
类似于windows 的设备管理器,把所有的硬件用文件的形式进行存储
media
linux 系统会自动识别一些设备,例如 U盘,光驱等,当识别后,linux会把识别的设备挂载到这个目录下
mnt
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在 mnt上,然后进入该目录就可以查看里面的内容
opt
给主机安装软件所摆放的目录
user/local
这是另一个给主机额外安装软件所安装的目录,一般通过编译源码方式安装程序
var
该目录存放不断扩充着的东西,习惯将经常被修改的目录放在这个目录下,包括各种日志文件
selinux
一种安全子系统,它能控制程序只访问特定文件
总结
linux 目录中有且只有一个根目录
linux 的各个目录存放的内容是预先规划好的,不要乱放
linux是以文件的形式管理我们的设备,因此linux一切皆为文件
linux 那个文件存放什么东西,大家必须有一个认识
学习完,脑海中应该有一颗linux 目录树
实操作篇
vi 和 vim 编辑器
介绍
所有的linux 系统都会内建 vi文本编辑器
vim 具有程序编辑的能力,可以看做是 vi 的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计
三种常见模式
正常模式
可以使用[上下左右]按键来移动光标,可以使用 [删除字符] 或 [删除整行]来处理档案内容,也可以使用 [复制粘贴]来处理你的文件数据
插入模式
按下 i,l,o,0,a,A,r,R 等任何一个字母之后进行编辑模式
命令行模式
可以提供你相关指令,完成读取,存盘,替换,离开vim,显示行数等的动作在此模式达成的
常见快捷键命令
拷贝当前行 yy 然后p粘贴
删除当前行 dd (如果删除n行 ndd)
查找某个字符串 /查找的字符串 通过n下一个字符串
查看文件行数 set nu 取消行数 set nonu
到文档最末行直接输入[G] 到最首行[gg]
修改文件然后又撤销这个动作,在正常模式输入 u
将光标移动到指定的行数 shift +g
开机,重启和用户注销
重启/关机
shutdown -h now 立即关机
shutdown -h 1 一分钟后关机
shutdown -r now 立即重启
reboot 重启
sync 把内存的数据同步到磁盘上,防止数据丢失(建议关机之前执行sync)
用户注销
logout 注销这个指令在图形运行级别是无效的
用户相关
用户管理
创建用户
useradd tom
指定hom/具体文件夹如何指定呢
user add -d /home/target xm
修改用户密码
passwd tom
删除用户
userdel tom
userdel -r tom
查询用户信息
id tom(tom为用户名)
切换用户
su - tom(用户名)
细节: 1),从权限高的用户到权限低的用户不需要输入密码,反之需要 2),当需要返回原来的用户时使用 exit 指令
用户组
查看当前登录用户的用户组
whoami
增加组
groupadd wudang
删除组
groupdel wudang
用户与用户组
增加用户的时候指定用户组
创建用户组 groupadd wudang
useradd -g wudang zwj
修改用户的用户组
创建少林组 groupadd shaolin
usermod -g shaolin zwj
用户和组的相关配置文件
/etc/passwd
用户(User) 的配置文件,记录用户的各种信息
zwj:x:1001:1003::/home/zwj:/bin/bash
zwj
用户名
1001
用户id
1003
组id
/home/zwj
家目录
/bin/bash
shell
/etc/shadow
口令(密码)配置文件
/etc/group
组(Group) 的配置文件,记录Linux包含的组信息
wudang:x:1002:
wudang
组名称
1002
组id
常用指令
linux 指令运行级别
0
关机
1
单用户(找回丢失密码)
2
多用户无网络服务
3
多用户有多网络服务
4
保留
5
图形界面
6
重启
面试题: 如果忘记了root密码,怎么进行找回呢?
虚拟开机按e -> 然后在utf8后面添加 init=/bin/sh -> ctrl+x 执行 -> passwd -> 执行 exec /sbin/init
帮助指令
man
man ls
help
help cd
文件目录类指令
显示当前工作路径的绝对路径 - pwd
显示当前目录的文件和目录 - ls
切换目录 - cd
目录的创建 - mkdir [-p创建多级目录] 文件名
删除目录 - rmdir
创建一个空文件 - touch
拷贝文件到指定目录 - cp
移除文件或目录 - rm 指令
移动文件与目录或重命名 - mv
查看文件内容 - cat
以全屏的方式按页显示(小型)文本文件的内容 - more
分屏查看大型文件内容(如日志) - less
> 输出重定向 和 >>追加
ls -l > 文件
列表的内容写入文件 a.txt (覆盖写)
ls -al >> 文件
列表的内容追加到文件 的末尾(不会覆盖)
cat 文件1 > 文件2
查看文件1的内容写入 文件中
echo 内容 >> 文件
指定内容到文件的末尾
输出内容到控制台 - echo
输出环境变量 echo $PATH
输出指定内容 echo 字符串
显示文件的开头信息 - head
head -n 5 文件
显示(日志)文件尾部内容 - tail
tail -f 文件
软链接也叫符号连接,类似于windows里面的快捷方式,存放了链接其他文件的路径 - ln
栗子, 在/home目录下创建一个软连接,linkToRoot,连接到 /root 目录
创建软连接
ln -s /root/ linkToRoot
删除软连接
rm -rf linkToRoot
查看已经执行过历史命令,也可以是执行历史指令 - history
显示全部历史指令
history
显示最近10个
history 10
执行某个查询出来命令
!行号
时间日期类指令
显示当前时间 - date
查看日历信息 - cal
搜索查找指令
find指令
find /home/ -name [hello.txt]
find /opt/ -user root
find / -size +20M
locate指令
grep 指令和管道符号 |
cat a.txt | grep -ni yes
压缩和解压指令
gzip /gunzip
gzip hello.txt
gunzip hello.txt.gz
zip / unzip
zip -r mypackage.zip /home/
unzip -d /opt/tmp/ mypackage.zip
tar 指令
解压到指定目录(指定目录必须存在)
tar -zxvf myhome.tar.gz -C /opt/
压缩文件
tar -zcvf a.tar.gz a.txt a1.txt
压缩指定目录下面的文件
tar -zcvf myhome.tar.gz /home/
组管理和权限管理
Linux 组基本介绍
在Linux 的每个用户必须属于一个组,不能独立于组外,在Linux 中每个文件有所有这,所在组,其它组的概念 1,所有者 2,所在组 3,其他组 4,改变用户所在组
文件/目录 所有者
查看文件所有者 - ls -ahl
修改文件的所有者
chown 用户名 文件名
组的创建
groupadd 组名称
groupadd monster
useradd -g monster fox
id fox
查看文件/目录所在组
ls -ahl 查看文件所在组
修改文件所在组
chgrp 组名 文件名
其它组
除文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组
改变用户所在组
usermod -g 组名 用户名
usermod -d 目录名 改变该用户登录的初始目录
权限
-rw-r--r--. 1 tom1 bandit 0 12月 12 15:06 ok.txt
-
表示普通文件
d
表示目录
l
表示软连接
c
表示字符设备[鼠标,键盘]
b
表示块文件[硬盘]
rw-
表示文件所有者拥有的权限 (r 读权限 w写权限 -没有权限)
rwx
作用到 文件
x代表可执行(execute)可以被执行
作用到 目录
x 代表可执行(execute)可以进入该目录
r--
表示 文件所在组的用户只拥有读的权限
r--
表示文件其它组拥有的读权限
1
如果是文件表示硬链接个数
如果是目录,则代表目录下面的子目录有多少个
tom1
属于那个用户
bandit
属于那个组
0
表示文件的大小 0个字节
如果是目录显示 4096
12月 12 15:06
文件最后的修改时间
修改权限 - chmod
1), + , - , = 变更权限
chmod u=rwx,g=rx,o=x
chmod o+w
chmod a-x
2),通过数字变更权限
栗子
修改文件所有者 - chown
chown tom1 abc (将abc文件用户修改为 tom1)
chown -R tom1 kkk/ (将kkk文件夹里面的所有文件都修改为 tom1)
修改文件所在的组 - chgrp
chgrp shaolin a.txt (把a.txt 的组修改为 shaolin)
chgrp -R shaolin kkk/ (将kkk文件夹内所有的组都修改为 shaolin)
定时任务调度 - crontab
每小时每1分钟执行都会自动调用 ls -l /etc
① crontab -e
② */1 * * * * ls -l /etc >> /tmp/tp.txt
参数说明
第1个 *
一小时当中的第几分钟 范围 0-59
第2个 *
一天当中的第几小时 范围 0-23
第3个 *
一个月当中的第几天 范围 1-31
第4个 *
一年当中的第几个月 范围 1-12
第5个 *
一周当中的星期几 范围 0-7(0和7都代表星期日)
特殊符号说明
*
代表任何时间,比如第一个* 代表一小时中每分钟都执行一次的意思
,
代表不连续的时间。比如 0 8,12,16 * * 命令,代表每天的8点0分,12点0分,16点0分都执行一次命令
-
代表连续的时间范围。比如 0 5 * * 1-6 代表在周一到周六的凌晨5点0分执行命令
*/n
代表没隔多久执行一次,比如 */10 * * * * 代表每隔10分钟执行一次命令
Linux 磁盘分区,挂载
1), mbr 分组
最多支持四个主分区
系统只能安装在主分区
拓展分区要占一个主分区
mbr 最大只支持2TB 但拥有最好兼容性
2), gtp分区
支持无限多个主分区(但操作系统可能限制,比如windows 下最多128个分区)
最大支持18EB的大容量 (EB = 1024PB, PB=1024TB)
windows 7 64位支持gtp
如何查看系统分区和挂载情况
lsblk [-f](老师不离开)
字段解释
NAME
分区情况
FSTYPE
分区类型
LABEL
UUID
唯一标识分区的40位不重复的字符串
MOUNTPOINT
挂载点
如何添加一块硬盘
1),虚拟机添加硬盘
vmware 设置硬盘添加硬盘 ...
2), 分区
fdisk /dev/sdb
3), 格式化
mkfs -t ext4 /dev/sdb1
4), 挂载
mount /dev/sdb1 /home/newdisk
5_, 设置可以自动挂载
编辑 /etc/fstab
/dev/sdb1 /home/newdisk xfs defaults 0 0
刷新使其生效 - mount -a
卸载已经存在分区
umount /dev/sdb1
磁盘情况查询
df -lh
du -h
工作中常用命令
统计/home 文件夹下文件的个数
ls -l /home | grep "^-" | wc -l
统计/home下面目录的个数
ls -l /home | grep "^-" | wc -l
统计/home 文件夹下文件个数,包括自文件夹里的
ls -lR /home/ | grep "^-" | wc -l
统计文件夹下目录的个数,包括子文件夹里的
ls -lR /home/ | grep "^d" | wc -l
以树状显示目录结构
yum install tree
网络配置
自动获取
指定固定的ip
修改配置文件
ONBOOT="yes"
BOOTPROTO=static
IPADDR=192.168.73.110(后面的范围在 0-255之间)
GATEWAY=192.168.72.2(虚拟网络编辑器 -> Nat设置 -> 网关ip地址)
DNS1=114.114.114.114
重启服务
service network restart
问题
如果Windows无法ping 同linux 则需修改
本地网络 -> 网络连接 -> VMware Network Adapter VMnet8
如果Linux 无法ping 通 windows 或者无法ping通 www.baidu.com
1),vi /etc/resolv.conf
nameserver 114.114.114.114
nameserver 114.114.114.115
nameserver 114.114.114.115
2),service network restart
进程管理
进程的基本介绍
1), 在Linux 中,每个执行的程序(代码)都称为一个进程,每一个进程都分配一个ID号
2), 每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程,例如 www服务器
3), 每个进程都可能以俩种方式存在 前台和后台 所谓前台进程就是用户目前的屏幕上可以进行操作的,后台进程则是实际上可以进行操作,由于屏幕上无法看到的进程,通常以后台方式执行
4), 一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,直到关机才结束
显示系统执行的进程 - ps
ps -aux | more (more 分页)
USER : 用户名
PID : 进程号
%CPU : 进程占用cpu的%比
%MEM : 占用内存的%比
VSZ : 占用虚拟内存的情况
RSS : 使用物理内存的情况
TTY : 使用的终端是哪一个
STAT : 指当前进程的状态,S 代表休眠 r表示正在运行
START : 系统启动时间
TIME : 占用cpu的总时间
COMMAND :线程启动命令行是怎么运行的
查询系统执行的父进程 - ps
ps -ef | more
PID : 进程ID
PPID : 父进程ID
终止进程 - kill / killall
-9 : 表示强迫进程立即停止
查看进程树 - pstree
yum -y install psmisc
服务管理
systemctl | start| restart| reload | status | stop [服务名]
如查看防火墙状态
systemctl status firewalld
细节讨论
关闭或者启用防火墙后,立即生效 ( 可以使用 [telnet ip 端口] 来查看是否生效端口)
这种方式只是临时生效,当重启系统后,还是回归以前对服务的设置
如果希望设置某个服务自启动或者关闭永久生效,要使用 chkconfig指令
查看全部服务名及状态
systemctl list-unit-files
sudo systemctl list-unit-files
如查看 防火墙服务状态
systemctl list-unit-files | grep firewalld
监控网络状态
动态监控进程 - top
-d 秒数
指定top命令每隔几秒更新,默认是3秒在top命令的交互模式当中可以执行的命令
-i
使top不显示任何闲置或者僵死的进程
-p
通知指定监控进程id 来仅仅监控某个进程的状态
top - 交互操作说明
P
以cpu的使用频率进行排序
M
以内存的使用率排序
N
以pid排序
q
退出app
查看系统网络情况 - netstat
安装 netstat : yum install net-tools
查看所有的网络服务
netstat -anp | more
RPM 和 YUM 远程包管理
RPM
简单查询指令 -rpm -qa | grep xx
查看软件包版本信息 -rpm -qi 软件包名
查询软件安装到什么地方 - rpm -ql 软件名
查询当前文件属于那个软件的 - rpm -qf file路径
卸载指令
rpm -e rpm包的名称
安装指令
rpm -ivh rpm包路径 (i 是install v是提示 h进度条)
YUM
查看安装软件是否存在 -yum list | grep xx
安装指定的包
yum -install xxx
查看
把图形化界面切换成命令行模式
下载图形化
yum groupinstall "GNOME Desktop" "Graphical Administration Tools"
获取当前模式
multi-user.target
切换成图形化界面
systemctl set-default graphical.target
重启
reboot
Linux 之JavaEE 定制篇
JDK
上传到 /opt目录下
配置环境变量
/etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_231
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
注销用户,环境变量才能生效
source /etc/profile
问题 ?
如果修改配置文件错误可能使linux命令失效
/bin/vi /etc/profile
tomcat
上传tomcat到/opt目录下
在 /bin目录下 启动tomcat
开放防火墙的 8080 端口
查看防火墙状态
systemctl status firewalld
查看防火墙开放的端口
firewall-cmd --list-all
开放 8080 端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent
重启防火墙
firewall-cmd --reload
外网可以访问了
idea
直接去官网下载 idea的linux版本,然后上传至opt/目录下
把linux的命令行模式切换成图形化模式
在 bin/idea.sh 启动idea
mysql
nginx
http://nginx.org/en/download.html 官网下载 tar包 放在 opt目录下面
在解压的目录中 ./configure
大数据-Shell编程篇
Shell 是什么?
Shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统程序,用户可以用Shell 来启动,挂起,停止甚至是编写一些程序。
Shell 的快速入门
编写一个脚本输出 hello word
创建一个文件并添加内容
vim myshell.sh (.sh标识为 shell脚本)
给当前用户添加创建ehll的可执行权限
chmod u+x myshell.sh
执行的俩种方式
绝对路径
./myshell.sh
相对路径
/root/myshell.sh
如果不给可执行权限可以通过
sh ./myshell.sh
Shell 变量
系统变量
$HOME , $PWD , $ SHELL , $USER 等等
用户自定义变量
定义变量
变量 = 值
销毁变量
unset 变量
声明静态变量
redonly 变量,注意静态变量不能 unset
可把一个变量提升为全局环境变量,供其它shell使用
子主题
Shell变量定义的规则
变量名称可以由字母,数字和下划线组成,但是不能以数字开头
等号俩侧不能有空格
变量名称一般习惯为大写
将命令的返回值赋给变量
A = `ls -la` 反引号,运行里面的命令,并把结果返回给变量A
A=$(ls -la) 等价于反引号
Shell 设置环境变量
基本语法
export 变量名=变量值(将shell变量输出位环境变量)
source 配置文件(让修改的配置信息立即生效)
echo $变量明 (查询环境变量值)
全局环境变量
定义全部环境变量 /etc/profile
export 变量名=值
获取全局环境变量
$变量名
位置参数变量
基本语法
$n
n为数字,$0代表命令本身,$1-$9代表第一个到第九个参数,室以上的参数,室以上的参数需要用大括号包含 ${10}
$*
这个变量代表命令行中所有的参数,$*把所有的参数都看成一个整体
$@
这个变量代表着命令行中所有的参数,不过$@把每个参数都区分对待
$#
这个变量代表着命令行中所有参数的个数
Shell 多行注释
:<<! 内容 !
预定义变量
基本语法
$$
当前进程的进程号 PID
$!
后台运行的最后一个进程的进程号PID
$?
最后一次执行的命令的返回状态,如果这个变量的值为0,证明上个命令正确执行,如果为非0 ,则证明上一个命令不正确
运算符
$((运算式)) 或者 $[运算式]
expr m+n
判断语句
常用判断条件
俩个整数的比较
= 字符串比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
按照文件权限进行判断
-r 有读的权限
-w 有写的权限
-x 有执行的权限
按照文件类型进行判断
-f 文件存在并且设计一个常规的文件
-e 文件存在
-d 文件存在并是一个目录
流程控制
if判断
案例
case 语句
应用案例
for循环
$*
$@ 推荐使用
使用方式2
while 循环
read 读取控制台输入
基本语法
read(选项)(参数)
-p : 指定读取时的提示符
-t : 指定读取时等待时间,如果没有在指定时间内输入就不在等待了
变量 : 指定读取的变量名
应用实例
读取控制台输入一个num值
读取控制台输入一个num值,在10s内输入
函数
系统函数
basename基本语法
basename /root/shell/fortest.sh
basename /root/shell/fortest.sh .sh
dirname基本语法
dirname /root/shell/fortest.sh
自定义函数
编写一个自定义函数计算俩个函数的和
#!/bin/bash
function getsum(){
SUM=$[$n+$t]
}
read -p "请输入第一个数" n
read -p "请输入第二个数" t
#调用getsum
getsum $n $t
echo "结果为 $SUM"
function getsum(){
SUM=$[$n+$t]
}
read -p "请输入第一个数" n
read -p "请输入第二个数" t
#调用getsum
getsum $n $t
echo "结果为 $SUM"
综合案例
自定义shell脚本.sh
每日凌晨2点备份数据库
crontab -e
* 2 * * * /usr/sbin/mysql_db_backup.sh
Python 定制篇
无法为立即文档创建临时文件: 设备上没有空间
df -h
cd / && du -h -x --max-depth=1
0 条评论
下一页