文件系统和挂载点
Linux的文件系统是树形目录结构,与windows分为C,D,E盘,每个盘都是一个树不同,Linux只有一棵树,也只有一个根节点'/'
,其余目录都是该节点的子节点。
所以,Linux在分区的时候,会把分区对应到一个目录上,例如/home对应分区1,那么分区1的挂载点就是home目录,可以说一个文件夹就代表了一个分区。
vim操作
vim编辑器有三种模式:一般模式,编辑模式,命令模式。
默认进入一般模式,在该模式下可以进行复制,黏贴,删除操作;
编辑模式下可以对打开的文件进行编辑;
命令模式用于执行一些命令;
在一般模式下,按i可进入编辑模式,按下:可进入命令默认,从编辑和命令模式按esc可进入一般模式;
一般模式
单词:w
按下b,跳到当前光标所在单词的上一个单词;
按下w,可以从当前单词跳到下一个单词
yw:可以从光标当前位置一直复制到下一个不是字母的位置
dw:可以从光标当前位置一直删除到下一个不是字母的位置
复制:yy
连续按下两次y,可以复制光标所在的当前行;
在复制操作前按下数字,比如3,可以复制包括当前行在内的3行;
y$:可以复制从光标开始,到当前行结尾内容;
y^:可以复制从当前行开头开始,到光标前为结尾的内容;
黏贴:p
按下p会把复制的内容黏贴到当前光标所在的位置;
在按p前按下数字,表示重复几次黏贴操作;
删除:dd
按下dd,会删除当前光标所在行;
在dd前按下数字,会删除包括当前行在内的多行内容;
撤销:u
按下字母u,会撤销上一步操作;
单个字符操作:
x:会剪切当前光标的字符;
r:代表要求修改当前光标的字符;
其它
按下gg/H,返回文档的开始位置;
按下G,移动到文档的末尾;
跳转到指定行:数字+G
编辑模式/插入模式
按下i(a,o,I,A,O)进入,esc退出
命令模式
按下:
进入,按下esc退出;
:w
:保存:q
:退出:!
:强制执行可以组合使用:
:wq
,:q!
:set nu
:设置行号,:set nonu
字符串操作:
查找:
/tar
;替换:
s/old/new
s/old/new/g
%/old/new
%/old/new/g
取消高亮:
:noh
网络相关
连接模式
桥接模式
通过修改配置文件的方式:
1
2
3
4
5
6
7
8
9
10
11
12//打开配置文件
vim /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO="static"
//静态ip地址
IPADDR=192.168.204.100
//子网掩码
NETMASK=255.255.255.0
//网关
GATEWAY=192.168.204.2
//域名解析
DNS1=192.168.204.2
DNS2=8.8.8.8NAT模式
仅主机模式
配置服务器
配置静态域名
如上述;
设置主机名
1
2
3vim etc/hostname
liangxi100把域名和主机名对应起来
1
2
3vim etc/hosts
//映射
192.168.204.100 liangxi100在hosts文件中注册
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23Copyright (c) 1993-2009 Microsoft Corp.
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
# This file contains the mappings of IP addresses to host names. Each
entry should be kept on an individual line. The IP address should
be placed in the first column followed by the corresponding host name.
The IP address and the host name should be separated by at least one
space.
# Additionally, comments (such as these) may be inserted on individual
lines or following the machine name denoted by a '#' symbol.
# For example:
# 102.54.94.97 rhino.acme.com # source server
38.25.63.10 x.acme.com # x client host
localhost name resolution is handled within DNS itself.
127.0.0.1 localhost
::1 localhost
192.168.204.100 liangxi100
远程登录
1 | C:\Users\Administrator>ssh root@liangxi100 |
远程登录工具:
Xshell,SSH Secure Shell,FInalShell等;
系统服务
1 | //开启 关闭 状态 重启 服务 |
运行级别
在centos7下,运行级别由原来的7级简化为了两种:
- multi-user.target:等价于原级别3,多用户有网,无图形界面;
- graphical.target:等价于原级别5,多用户有网,有图形界面;
查看当前运行级别:
1 | systemctl get-default |
设置服务开机自启/关闭:
1 | chkconfig 服务名 on/off |
关机
1 | shutdown #在1分钟后关机 |
常用命令
帮助命令
1 | man 命令:# 命令有两种,一种是外部命令,ls;一种是内置命令(放在bash中),cd,这两种有不同 |
1 | ctrl + c 结束当前进程 |
文件目录
1 | cd / #绝对目录 |
1 | ls #列出当前目录的内容 |
1 | 目录操作 |
1 | 文件操作 |
1 | 软链接 相当于创建了一个链接文件,该链接文件存储了目标文件的地址 ln -s 源文件或者目录 链接名 |
1 | 查看历史命令 |
时间日期
1 | date 显示当前时间 2022年 11月 30日 星期三 14:35:37 CST |
用户及权限
用户
1 | 添加用户 |
权限
1 | sudo 让普通用户临时拥有root权限 |
1 | 删除用户操作 userdel 用户 此方式不会删除该用户的主目录 |
1 | 每个用户都属于一个组,如果在创建用户的时候没有指定其所属组的话,将自动创建与用户名同名的组,将属于改组 |
权限详解
使用 ls -l
可以查看一个文件的全部属性
1 | ls -l |
drwxr-xr-x
解释
- 从左到右树,第一位 d,表示了该文件的属性,目录,此外,还有(-)普通文件,(b)块文件,(c)设备文件,(l)链接文件;
- 2-4表示了属主(user)对该文件的权限,读,写,执行;
- 5-7表示了user所属的组(group)对该文件的权限,读,写,执行;
- 8-10表示了其它用户对该文件的权限,读,写,执行;
1
- 硬链接的数量,当为0时,可以说被彻底删除
root root
- 所属用户和组
权限修改
主要使用
chmod
命令 r = 4 w = 2 x = 1
chmod [xxx] [文件或目录]
chmod [ugoa][+-=] [rwx] [文件或目录]
u = user g = group o = other a = all
1 | ls -l info |
1 | 修改所属用户 |
查找命令
1 | find [范围] [选项] |
压缩和解压
zip/unzip
zip 压缩名 文件
zip -r 压缩目录
unzip -d 目录 文件
tar
-c
:-v
:-x
:-C
:解包-z
:打包同时压缩tar -zcvf 压缩文件名 文件 [文件 ] [文件 ] [文件 ]
磁盘
1 | tree 查看目录结构 |
1 | 查看磁盘占用情况 指定深度 选项参数 |
1 | 查看挂载信息 |
1 | 挂载 挂载点就是一个文件夹 |
1 | 添加新硬盘 fdisk 设备名 |
进程管理
1 | 查看所有进程信息 pid ppid |
1 | 终止进程 |
1 | 实时监控 |
1 | 网络相关 netstat -a(所有套接字)n(尽量显示数字)l(被监听的服务状态)p(调用进程) |
Shell编程
shell是一个命令行解释器,那么也可以基于此解释器进行编程;
hello,world
编写一个shell脚本,用于输出
Hello,World!
创建一个hello.sh文件;
编辑该脚本文件
1
2!/bin/bash //指定编译器,所有.sh文件的第一行都要指定编译器
echo "Hello,World!" //命令控制行,输出Hello,World!
执行脚本
执行脚本文件的方法主要有:
bash
文件名(可通过相对路径或者绝对路径找到)文件名(可通过相对路径或者绝对路径找到,注意此方法必须有可执行权限,rwx)
这两种方法是通过创建当前shell线程的子shell线程完成的;
source
或者.
文件名(可通过相对路径或者绝对路径找到)此方法,是在当前shell线程中执行脚本文件;
变量
变量有两种:
全局变量
当前bash及其子bash都可见;
1
2 b=3
export b # b现在是全局变量,注意,更改全局变量的值,只对当前bash有效局部变量
只有当前bash线程可见;
1
2
3
4
5
6 a=2
echo $a #2
a=3
echo $a #3
mystring="hello,world"
echo $mystring # hello,world注意:用=复制,默认都是字符串;
只读变量
1
2
3readonly c=5
c=10
-bash: c: 只读变量撤销变量:
unset
1
2
3
4
5unset a
unset b
注意,只读变量不可以撤销
unset c
-bash: unset: c: 无法反设定: 只读 variable
特殊变量
可能希望自己的脚本可以根据外部参数,得到不同的结果
$n
:n是数字,$0
代表执行脚本的绝对路径,$1
至$9
代表第一到第九个参数,十以上的参数用大括号包含,如${10}
新建一个脚本文件并编辑
1
2
3
4
5!/bin/bash
echo '=========$n========'
echo scripts name:$0
echo 1st param:$1
echo 2nd parm:$2执行,并赋予参数
1
2
3
4
5./parameter.sh a b
=========$n========
scripts name:./parameter.sh
1st param:a
2nd parm:b
$#:返回输入参数的个数
$*:获取所有输入参数,并将其作为一个参数
$@:获取所有输入参数,不过把每个参数区分对待
$?:返回最后一次执行命令的状态,正常返回则输出0,否则输出其它数值
运算符
基本语法:
$((运算式))
或者$[运算式]
(expr)
1 | a=$[5*2] |
流程控制
if判断
基本语法:
单分支:
1
2
3
4
5
6
7
8 if [ condition ]; then 多条语句; fi #这里的then fi相当于{}
或者:
if[ condition ]
condition如果 想要包含多个条件 如:$1 = 1 && $2 = 2 应该写为$1 = 1 -a $2 = 2
-a and -o or 分别是逻辑与和逻辑或
then
语句
fi多分支
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 if [ condition ]
then
程序
elif [ condition ]
then
程序
else
程序
fi
比如
!/bin/bash
if [ $1 -lt 18 ]
then
echo "未成年人"
elif [ $1 -lt 30 ]
then
echo "青年人"
else
echo "老年人"
ficase
1
2
3
4
5
6
7
8
9
10
11
12 case 变量名 in # in 和 )是必须的
值1) # ;; 表示命令结束,相当于java的break;
... # *) 默认分支,default
;;
值2)
...
;;
...
值*)
...
;;
esac # 表示此case结束
循环
for循环
1 | 方法1 |
while循环
1 | while [ 条件 ] |
条件判断
基本语法:
test condition
[ condition ]
(前后要有空格)
1
2
3
4
5 a=Hello
test $a = Hello # 等号两边的空格是必须的
查看执行结果
echo $?
0 # 0代表返回为true
常用判断语句
逻辑运算
&&
,||
1
2[ liangxi ] && echo ok ||echo notOk # []为真,执行ok,否则执行notOk
ok整数间的比较
-eq
等于-ne
不等于-lt
小于-le
小于等于-gt
大于-ge
大于等于检测某一个文件的权限
-r
,-w
,-x
1
[ -r 文件名 ]
判断文件类型
-e
:文件是否存在-f
:文件存在并且是一个常规文件-d
:文件存在并且是一个目录
读取控制台输入
`read -t 7 -p “Enter your name in 7 seconds :”NAME
-p
:设置提示字符-t
:指定等待输入的时间,如果不加此选项,表示一直等待
函数
系统函数
$()
:命令替换,调用系统函数
basename [path] [后缀]
:这个命令会得到path
最后一个’/‘后的内容,如果有后缀,会去掉后缀的内容
1
2
3
4 basename /root/scrips/parameter.sh
parameter.sh
basename /root/scrips/parameter.sh .sh
parameter在脚本中使用系统函数:
1
2
3
4
5 !/bin/bash
echo '=========$n========'
echo scripts name: $(basename $0 .sh) # $()命令替换 可以取出()内所代表的具体的值
echo 1st param:$1
echo 2nd parm:$2
dirname path:
这个命令会得到path
最后一个’/‘前的内容;
1
2 cd $(dirname $0)
echo dir parh: $(pwd) #输出被执行脚本的路径
自定义函数
基本语法
1
2
3
4
5[function] funname[()]
{
action;
[return int;]
} 注意:1.函数必须先声明,再使用,shell是逐行运行,没有预编译的过程;
2.函数返回值,只能通过
$?
获得,如果无return
,将返回最后一条命令的运行状态作为返回值(0-255)。声明及使用
还是在一个脚本文件中写:
1
2
3
4
5
6
7
8
9
10
11
12
13!/bin/bash
function add()
{
s=$[ $1 + $2 ]
echo $s
}
read -p "请输入加数a:" a
read -p "请输入加数b:" b
sum=$(add $a $b)
echo "和为" $sum
正则表达式
常规匹配
不包含特殊字符的正则表达式匹配它自己:
1 | grep liangxi # 匹配所有包含 liangxi 的行 |
常用特殊字符
^string
匹配以string
为开头的行;
string$
匹配以string
为结尾的行;
^$
匹配空行
.
.
代表一个任意字符
r..t:r{x}{x}t
S*
表示S
所代表的字符可以出现0次或多次,且时连续出现
.*
:任意字符可以出现任意次
文本处理工具
cut
基本用法
cut [选项参数] filename
选项参数
-f
:列号,提取第几列;-d
:分隔符,按指定分隔符分割列,默认是制表符”\t”;-c
:按字符分割后,加n,表示取第几列
cut -d " " -f 10
:把文本按” “进行切割,并取出第10列
awk
基本用法
awk [选项参数] '/p1/{action1} /p2/{action2} ... ' filename
p表示在数据中查找的内容,即匹配模式
action:找到匹配内容时,进行的一系列命令
选项参数
-F
:指定分隔符-v
:赋值一个用户自定义变量begin ,end
BEGIN{code}:此代码块会在所有数据行之前执行
END{code}:此代码块会在所有数据行之后执行