Linux笔记
[root@VM-8-5-centos ~]# ls -d ...
root:当前用户
VM-8-5-centos:主机名
~:当前所在文件夹
#:命令提示符(root用户,$:普通用户)
-:命令描述,-表简写,–表全称(directory)
挂载点
挂载概述

挂在实现了文件系统与硬盘物理结构的隔离
如上图所示,硬盘SDA1划分了两个区域,其中2区挂载在根目录下,而属于2区根目录下的boot挂载在1区,对boot的操作变成了对1区的操作。
同样的,若此时有一名用户想独自使用一块硬盘存放自己的信息,它只需要将硬盘SDA2挂载在home下。从系统层面上来看,操作此用户与其它用户无异。

挂载的过程
存储设备:分区–>按文件系统格式化–>挂载
挂载的意义
挂载不仅仅是将存储设备映射到Linux下的一个目录那么简单。
将光盘(cdrom)挂载到/mnt/cdrom下:
mount /dev/cdrom /mnt/cdrom/
如果我们不挂载光盘设备,直接去访问/dev/cdrom,系统会提示它不是目录。查看详细信息会发现它属于块设备文件(光盘,磁盘等存储设备都属于块设备),它其实是一个类似指针的东西,指向这个分区的原始数据块。也就是说,在mount之前,系统并不知道这个数据块的文件目录组织形式,不知道哪个数据块代表文件。
通过mount [-t vfstyoe] 操作来指定文件系统的类型(通常不必指定,mount会自动选择正确的类型),然后挂载,系统就知道这个设备的文件目录结构,从而能够访问设备上的文件。
总结
在Linux看来,任何硬件设备都是文件,都有一套属于自己的文件系统(文件目录结构),因此问题就是,当Linux使用这些硬件时,只有将Linux本身的文件目录与硬件设备的文件目录合二为一,硬件设备才能为我们所有。合二为一这个过程成为挂载。
硬盘分类:
- HDA:IDE
- SDA:SATA,SCSI
- VDA:虚拟化硬盘
VAB,SDB表示第二块硬盘,SDB2表示第二块硬盘的第二个分区
vim
普通模式:复制,粘贴,删除
y:复制
p:粘贴
y+$/^:从光标向前(向后)复制
yy:整行复制
y+w:复制单词(从光标开始)
d:删除
u:撤销
G:跳转到尾部
gg:跳转到头部
命令模式
:set nu(nonu):显示(隐藏)行号
/word:查找单词word(n:下一个)
%s/y/x/g:y全局替换x
系统管理
进程和服务
进程:一个正在执行的程序或命令(cd,ls等命令,属于进程,用完即销毁)
服务:计算机启动之后一直存在,常驻内存的进程
服务概述
服务的基本语法
centos6:service 服务名 start|stop|restart|status
centos7:systemctl start|stop|restart|status 服务名
查看系统服务:ls /usr/lib/systemd/
查看其它服务:ls /usr/lib/systemd/system
服务的开机自启动

开机自启动状态修改:systemctl enable/disable 服务名
当前状态修改:systemctl start/stop 服务名
常用基本命令
帮助命令
- man:获得帮助信息(外部命令)
man ls
- help:获得shell内置命令的帮助信息(内部命令。一部分基础功能的命令是内嵌在shell中的,会随着shell一起加载,常驻在内存中)
help cd
内部命令和外部命令判断:type
- 命令 --help:获得命令的简略信息
文件目录命令
目录命令
- pwd:当前工作区的绝对路径
- -P:物理路径(针对软连接)
- cd:切换路径
- /root/decktop(绝对 . ./ :上一级 ./:本级
- -:在两个文件夹下切换
- (空):回到用户目录
- ls:列出目录内容
- -a:全部文件(连同隐藏文件)
- -l:长数据串列出,包含文件属性和权限(ll是其别名)
- mkdir:创建文件夹
- rmdir:删除文件夹
- -p:递归创建(删除)文件夹
文件命令
- touch:创建空文件
- cp source dest:复制source文件(目录)到dest
- -r:递归复制文件夹
- rm:删除文件(目录)
- -r:递归删除文件夹
- -f:强制删除
- -v:显示指令的详细执行过程
- mv:移动文件(目录),可实现重命名
- cat:查看文件内容
- more:文件内容分屏查看器
- less:文件内容分屏查看器(大型文件)
查找命令
- find:查找文件(目录)
- -name:查找当前目录下名为name的文件(目录)
- grep:查找文本(可以找出指定文本,但不能找出同名的文件)
- -n:显示文本及其所在行
- -r:递归查找
其它命令
- echo:将内容显示到控制台
- -e:允许转义字符
- $:查看系统环境变量
- >:输出重定向(覆盖)
- >>:输出重定向(追加)
- ls > info:将ls输出在控制台的内容重定向到info文件中
- echo “hello world” >> info
- ln:链接
- -s [原文件或目录] [软连接名]:给原文件或目录创建软链接
时间日期命令
- date +“%Y- %m- %d”
用户权限命令
用户命令
- useradd:添加用户
- -d [用户文件夹] [用户名]:指定目录下创建用户
- -g:将用户添加到指定组
- passwd:给指定用户设置密码
- id:查看用户是否存在
- cat /etc/password:查看当前系统用户
- userdel:删除用户
- -r:同时删除用户文件夹
- usermod:修改用户
- -g:修改用户所属用户组
- su:切换用户
- 使用su切换用户属于嵌套操作,即从root切换至user1,最外层还是root,只是通过root创建了一个user1会话。通过exit退出该会话就可回到上一级用户。
- whoami:查看当前用户名字
- who am i:查看根用户名字
- sudo:设置普通用户具有 root权限
- 通过/etc/sudoers文件可配置sudoer用户
用户组命令
- groupadd/groupdel/groupmod
用户权限概述

- 权限解释
属主权限(user):文件所属用户的权限
属组权限(group):文件所属用户组成员的权限
其他用户权限(other):其他用户的权限
(-:没有权限) - rwx作用
(1) 作用到文件
[r] 代表可读(read):可以读取,查看
[w] 代表可写(write):可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件
[x] 代表可执行(execute):可以被系统执行
(2) 作用到目录
[r] 代表可读(read):可以读取,ls查看目录内容
[w] 代表可写(write):可以修改,目录内创建+删除+重命名目录
[x] 代表可执行(execute):可以进入该目录

用户权限修改
- chmod:修改用户权限
- chmod {ugoa} {±=} {rwx} 文件或目录
- u-用户,g-组,o-其他人,a-所用人
- +:增加权限,-:删除权限,=:赋予权限
chmod u+x test.txt
- chmod {421} 文件或目录(对应二进制)
chmod 644 = -rw-r--r--
- -R:递归赋予权限
- chmod {ugoa} {±=} {rwx} 文件或目录
- chown:修改文件(目录)所属用户(:用户组)
chown chen test.txtchown chen:chen test.txt
- chgrp:修改文件(目录)所属用户组
chgrp chen test.txt
搜索查找命令
- find:从指定目录下递归查找子目录
- find [搜索范围] [选项]
- find xiyou/ -name “*.txt”
- find xiyou/ -size +10M

- locate:快速定位文件路径
- 利用事先建立的locate数据库快速定位文件,无须遍历,查询速度快,但需要updatedb更新
updatedb
locate tmp
- grep:过滤查找及"|"管道符
- grep:用于查找文件中符合条件的字符串
- |:将两个命令分开,管道符左边命令的输出作为右边命令的输入
ls | grep .cfggrep -n boot initaill.cfg | wc常用的全局搜索grep “x” /y : 搜索/y(*即所有文件)文件的包含"x"的部分(-n:显示行号;-r:递归搜索)
压缩解压命令
- gzip:压缩文件(压缩为.gz,且只能压缩文件)
ungzip:解压 - zip:压缩文件或目录(压缩为.zip,可以压缩目录)
unzip:解压 - tar:打包目录并压缩,压缩为.tar.gz
tar -zcvf temp.tar.gz /root/test.txt baga.txt

磁盘管理命令
- du:查看目录下其子目录占用空间大小
du -sh查看当前目录占用磁盘空间大小
![在这里插入图片描述]()
- df -h:查看磁盘空间用量
- free -h:查看内存空间用量
- lsblk:查看硬盘分区挂载情况
- -f:查看各分区的文件系统信息
- mount [-t vfstype] device dir:挂载设备
- unmount:卸载设备
- fdisk:分区
- -l:查看磁盘分区详情
- device:对磁盘进行分区操作
进程管理命令
查看进程
- ps:查看当前系统进程状态
- aux:查看CPU占用率和内存占用率
- -ef:查看父进程PID
- kill:终止进程
- pstree:进程树,查看父子进程关系
- top:实时监控系统运行和状
- netstat:显示网络状态和端口占用信息
![在这里插入图片描述]()
- crontab:定时执行任务
进程详情

举例:查看sshd进程:
ps -ef | grep sshd
得到:
root 1367 1 0 Sep15 ? 00:00:03 /usr/sbin/sshd -D
root 11604 18964 0 11:40 pts/0 00:00:00 grep --color=auto sshd
root 18957 1367 0 07:55 ? 00:00:00 sshd: root@pts/0
分析sshd进程,可以发现它(1367)首先由1号进程创建(即开机启动初始化时创建的sshd服务),之后我们通过xshell进行ssh远程连接,1367进程创建18957子进程,用于虚拟终端实现远程交互。
软件包管理命令
- rpm:安装rpm软件包
- rpm包名称格式:
![在这里插入图片描述]()
- -qa:查询已安装的所有rpm包
- -e:卸载软件包
- -ivh rpm包全名:安装软件包(与卸载不同,安装需要提供全名)
- rpm包名称格式:
- yum:安装rpm软件包
- 与rpm不同点:可以自动处理依赖关系(类似于maven);不用提供全名
![在这里插入图片描述]()
- 与rpm不同点:可以自动处理依赖关系(类似于maven);不用提供全名
- apt和dpkg(ubuntu): apt和deb解析
Shell编程
解释型语言与编译型语言
链接: 解释型语言与编译型语言的区别
Shell脚本格式
- 内容以#!/bin/bash开头
- 文件名以.sh结尾
Shell执行
- bash或sh 脚本路径(不需赋予x权限)
bash ./hello.sh - 直接输入脚本路径(需赋予x权限)
chmod +x hello.sh./hello.sh
- . 或source 脚本路径
- 前两种方式都是在当前shell中打开一个子shell来执行脚本,当脚本结束后,子shell关闭,回到父shell;此方式不需要打开子shell,直接在当前shell执行
- 父子shell的最大区别,在于环境变量的继承关系
. hello.sh
Shell变量
普通变量
- 按定义分类
- 系统变量
- $ HOME,$ PWD…
- 自定义变量
- 变量名=变量值
- 撤销变量:unset 变量名
- 只读变量:readonly 变量名(不能unset)
- 系统变量
- 按作用范围分类
- 全局变量
- 作用于当前shell于其子shell,不能影响父shell
my_var=5
export my_var
bash
my_var=6
output:第一层bash的my_var不变
- 作用于当前shell于其子shell,不能影响父shell
- 局部变量
- 只作用于当前shell
- 全局变量
使用变量名=变量值定义的变量属于局部变量,升级为全局变量的方法是使用export 变量名
- env:查看全局变量
- set:查看全部变量(全局+局部)
特殊变量
- $n:n为数字,0代表脚本名称,1-9代表第一到第九个参数
- $#:获取输入参数个数
- $*:获取命令行所有参数(把所有参数看成一个整体)
- $@:获取命令行所有参数(把所有参数区别对待)
- $?:最后一次执行命令的返回状态。0:命令执行正确;非0:不正确
运算符
-
$((表达式)) 或 $[表达式]
-
注:$(命令)属于命令替换
s=$[2+3*4]
条件判断
- test 表达式
- [ 表达式 ] (注意两边有空格,表达式之间也要空格)

- -a:逻辑与
- -o:逻辑或
[ 2 -lt 8 ]
[ -r hello.sh ]
函数
shell中的函数和脚本类似,函数是轻量级的脚本。
使用$(命令)进行命令替换,达到把命令当成函数使用的目的。




浙公网安备 33010602011771号