Linux
网络连接三种方式:
虚拟机网络方式选项:
方式一:桥接方式
方式二:NAT方式
方式三:主机模式
不和外部的网络发生联系。
一、Linux目录结构
目录名称 | 英文释义 | 说明 |
---|---|---|
/bin | binaries | 二进制文件的缩写,存放这最经常使用的命令 |
/boot | 计算机启动 | 存放启动Linux时使用的一些核心文件,包括一些连接文件和镜像文件 |
/dev | device | 存放的是Linux的外部设备,在Linux中访问设备和访问文件的方式是相同的 |
/etc | etcetera | 这个目录存放所有系统管理需要的配置文件和子目录 |
/home | 用户而主目录,每一个人都有一个自己的目录,是由用户名命名的 | |
/lib | library | 存放这系统最基本的动态链接共享库 |
/lost+found | 系统非法关机时会存放一些文件 | |
/media | 系统会自动识别一些设备,当识别到之后会把识别的设备挂载到此目录下 | |
/mnt | 为了临时挂载别的文件系统使用的 | |
/opt | optional | 可选的,给主机额外安装软件所放的目录 |
/proc | processes | 进程的缩写,是一种虚拟的文件系统,存储的是当前内核运行态的一系列特殊文件,这个目录是一个虚拟的目录,是系统内的映射。我们可以通过访问这个目录来获取系统信息。内容实际上是存放在内存里 |
/root | 系统管理员的目录 | |
/sbin | superUser Binaries | 是超级用户二进制文件的缩写,存放系统管理员使用的系统管理程序 |
/selinux | security linux | selinux是一个安全机制,类似于windows的防火墙,这个目录是存放相关文件的 |
/srv | serve | 存放一些服务启动后需要提取的数据 |
/sys | system | 安装了新的文件系统sysfs集成了3种文件系统的信息。针对进程信息的、针对设备的、针对伪终端的 |
/tmp | temporary | 是用来存放一些临时文件的 |
/usr | unix shared resources | unix共享资源的缩写,用户的很多应用程序和文件都放在这个目录下 |
/usr/bin | binaries | 系统用户使用的应用程序 |
/usr/sbin | superUser binaries | 超级用户使用的高级管理程序和系统守护程序 |
/usr/src | source code | 内核源代码存放的目录 |
/var | variable | 经常被修改的目录放在这个文件夹下,包括各种日志文件 |
/run | 存放系统启动以来的信息 |
二、Vi和Vim编辑器
常用快捷键使用练习:
- 拷贝当前行yy,拷贝当前行下的5行 5yy,并粘贴(输入p)。
- 删除当前行 dd ,删除行前行向下的5行 5dd。
- 在文件中查找某个单词[命令行下==/关键字,回车== 查找,输入 n就是查找下一个]
- 设置文件的行号,取消文件的行号。[命令行下==:set nu== 和 :set nonu]
- 编辑/etc/prifile 文件,在一般模式下,使用快捷键到该文档的最末行[G]和最首行[gg]
- 在一个文件中输入"hello",在一般模式下,然后又撤回这个动作 u
- 编辑/etc/profile文件,在一般模式下,并将光标移动到20行shift+g
- 更多看整理文档
- 快捷键的键盘对应图:
三、系统管理命令
关机&重启命令:
shutdown -h now #立马关机
shutdown -h 1 #1分钟后关机
shutdown -r now #立马重启
shutdown -r 1 #1分钟后重启
halt #关机,和上面作用一样。
reboot #重启
sync #把内存数据同步到磁盘
#注意:重启和关机前建议先进行sync,将数据同步到磁盘!
用户登录和注销
#一般使用普通用户,然后将普通用户切换为管理员用户:(su - 后面有个空格!!!)
su - root/su root
#退出:
logout/exit //logout 注销指令在图形运行级别无效,在 运行级别 3下有效。(Xshell下有效,直接在linux命令行使用logout是无效的)
服务管理命令:systemctl
systemctl start|stop|restart|status 服务名
#例如关闭防火墙服务
systemctl stop firewalld
四、文件目录相关命令
在Linux中,目录结构为树状结构,最顶级的目录为根目录 / 。对于文件目录分为绝对路径和相对路径
- 绝对路径有根目录写起
/
。 - 相对目录不是从根目录写起,
./
表示当前目录,../
表示上一级目录。
文件目录类相关命令我们把他分为四种,分别是:
- 浏览目录命令:ls pwd
- 操作目录命令:cd mkdir rmdir
- 浏览文件命令:cat more less head tail
- 操作文件命令:cp rm mv tar
1、浏览目录命令
1)ls
意为list,显示目录文件。
ls [-ald] [files | directories]
-
-a 显示所有文件包括隐藏文件
-
-l 详细信息展示
-
-d 查看目录的属性
2)pwd
which means print working directory,显示当前所在的文件目录。该命令没有附加选项。
2、操作目录命令
1)cd
change directory
cd [directory]
2)mkdir
make directory
mkdir [new_directory]
3)rmdir
remove directory
rmdir [directory]
3、浏览文件命令
1)cat
concatenate and display files to standard output device,连接文件并打印到标准的输出设备上
cat [-En] [file1 | file2 | file3 | etc...]
- -E 在每一行末尾显示$
- -n 为显示行添加行号
2)more
用于分页显示文件内容
more [fileName]
>>space | f 显示下一页
>>enter 显示下一行
>>q | Q 退出
3)less
与more命令类似,用来浏览超过一页的文件,该命令可以利用上下键卷动文件
4)head
显示文件前几行的内容
head [-n] [fileName]
- -n 显示前n行,不指定该参数默认显示前10行
5)tail
显示文件后几行的内容。
- -n 显示后n行,不指定默认显示后10行
- +n 从第n行显示到文件尾
- -F 用于跟踪显示不断增长的文件结尾
4、操作文件命令
1)cp
文件复制
cp [-piru] [source_file_path] [destination_file_path]
- -p 连同文件的属性一起复制,而不是使用默认的方式
- -i 若目标文件已经存在,覆盖之前会先询问
- -r 递归的持续复制,用于目录的复制
- -u 目标文件和源文件有差异时才会复制
2)mv
文件剪切
mv [-fiu] source destination
mv [-fiu] source1 source2 ... directory
- -f 源文件与要覆盖的文件重名,会直接覆盖旧文件而不会询问
- -i 源文件与要覆盖的文件重名,会先询问再覆盖
- -u 当源文件比要覆盖的文件新或者目标文件不存在时,才回执行移动操作
3)rm
文件删除
rm [-fir] [file_path]
- -f force 忽略不存在的的文件,不会出现警告信息
- -i interactive 交互式的,删除前会询问用户是否操作
- -r recursive 递归的删除,用于目录的删除
4)tar
打包文件,压缩解压缩文件。
#压缩多个文件和目录
#将 houge.txt、bailongma.txt 两个文件和 xiyou/ 目录 打包压缩到houma.tar.gz中。
tar -zcvf houma.tar.gz houge.txt bailongma.txt xiyou/
#解压到当前目录
tar -zxvf houma.tar.gz
#解压到指定目录 /opt
tar -zxvf houma.tar.gz -C /opt
- -c 新建打包文件
- -t 查看打包文件的内容
- -x 解压缩 c t x 不能同时出现在一条命令中
- -j bzip2 方式压缩和解压
- -z gzip 方式压缩和解压
- -v 显示处理的文件名
- -f filename 要处理的文件
- -C dir 指定压缩、解压缩文件到哪个目录
五、用户及权限管理类命令
1、用户管理命令
1)useradd
useradd [-degGsu] <username>
useradd zhangsan #添加用户
useradd -g mojiao lisi #添加用户并指定组
- -d 指定用户登录时的主目录
- -e 指定账号终止日期
- -g 指定账户所属的用户组
- -G 指定账户所属的附加组
- -s 指定账户登录后使用的shell
- -u 指定用户ID
2)userdel
userdel [-rf] <username>
- -f 删除用户目录和他的目录内的所有文件
- -r 不仅删除用户账号,而且删除用户目录、邮件
3)usermod
修改用户属性
usermod [-degGsul] <username>
usermod -g mojiao zhangsan #修改用户的组为mojiao
- -d 指定用户登录时的主目录
- -e 指定账号终止日期
- -g 指定用户所属用户组
- -G 指定用户所属附加组
- -s 指定账户登录时使用的shell
- -u 指定用户ID
- -l 修改用户名
4)passwd
设置或修改用户口令
passwd [-dlus] <username>
passwd zhangsan #修改用户密码
- -d 删除用户口令
- -l 暂时锁定指定用户账号
- -u 解除指定用户账号锁定
- -s 显示指定用户账号状态
2、用户组管理命令
1)groupadd
添加用户组
groupadd mojiao
2)groupdel
删除用户组
groupdel mojiao
3)groupmod
修改用户组
groupmod -n wudang mojiao #给mojiao组指定新的组名wudang
- -n 指定用户组的新组名
3、文件权限管理命令
1)chmod
修改文件的权限
#方式一
chmod [{ugoa}{+-=}{rwx}] [文件或目录]
chmod u+x add.sh #给add.sh文件的所属用户添加可执行的权限
#方式二
chmod [mode=421] [文件或目录]
chmod 777 add.sh #给add.sh的所有用户都设为rwx权限
- 对象:u (user)文件所有者 g (group)同组用户 o(others)其他用户
- 操作符:+ 增加 - 删除 = 赋予
- 权限:r 读 w 写 x 执行 s 设置用户ID
2)chown
改变文件所有者
chown [-R] [最终用户] [文件或目录]
chown zhangsan hello.txt #将hello.txt的文件所有者改为zhangsan
- -R 递归操作
3)chgrp
改变文件所属组
chgrp [最终用户组] [文件或目录]
chgrp mojiao hello.txt #将hello.txt文件的所属组改为mojiao
4、文件搜索查找类命令
1)find
find file or directory
find [搜索路径] [选项]
find xiyou/ -name "*.txt" #根据名称查找/目录下的filename.txt文件
find xiyou/ -user atguigu #查找/opt目录下,用户名称为atguigu的文件
find /home -size +204800 #在/home目录下查找大于200m的文件(+n 大于 -n小于 n等于)
- -name filename 加上name参数说明要找出文件名为filename的文件
- -size [±]SIZE 加上size参数说明要找比SIZE还要大或者小的文件
- -type TYPE 加上type参数说明要找指定类型的文件,TYPE的值主要有:一般文件、设备文件、目录、连接文件、socket、管道文件
- -perm number 加上permission参数说明查找文件权限刚好等于某一特定值的文件
2)grep
grep 过滤查找,“|” 管道符:将前一个命令的处理结果输出传递给后面的命令处理
ls | grep -n test #查找某文件在第几行
- -n 显示匹配行及行号
六、进程管理类命令
- 查看系统中的进程的命令:ps ptree top netstat
- 控制系统中的进程的命令:kill killall nice renice
1、查看进程命令
1)ps
ps aux | grep xxx (功能描述:查看系统中所有进程)
ps -ef | grep xxx (功能描述:可以查看子父进程之间的关系)
显示系统当前的进程信息,可以在后面附带参数。常用参数如下:
- a 列出带有终端的所有用户的进程
- x 列出当前用户的所有进程,包括没有终端的进程
- u 面向用户友好的显示风格
- -e 列出所有进程
- -u 列出某个用户关联的所有进程
- -f 显示完整格式的进程列表
2) pstree
查看进程树
pstree [选项]
ps -p
ps -u
- -p 显示进程的 PID
- -u 显示进程的所属用户
3)top
动态监视系统任务,可以在后面附带参数。常用参数略
4) netstat
显示网络 状态和 端口占用
netstat -anp | grep 进程号 (功能描述:查看该进程网络信息)
netstat -anp | grep sshd
netstat –nlp | grep 端口号 (功能描述:查看网络端口号占用情况)
netstat -nltp | grep 22
2、控制进程命令
1)kill
kill [选项] 进程号 #(功能描述:通过进程号杀死进程)
kill -9 5102 #杀死浏览器进程
- -9 表示强迫进程立即停止
2)killall
使用进程名称结束进程,可以结束一组同名的进程
killall 进程名称 #(功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)
killall firefox #通过进程名称杀死进程
3)nice
4)renice
七、yum命令
用于仓库配置,类似于java开发中的Maven工具
yum [选项] [参数]
yum -y install firefox #安装firefox
- install 安装 rpm软件包
- update 更新 rpm软件包
- remove 删除指定的 rpm 软件包
- check-update 检查是否有可用的更新 rpm软件包
- list 显示软件包信息
- clean 清理 yum 过期的缓存deplist 显示 yum 软件包的所有依赖关系
- -y 所有提问都回答yes
八、Shell
shell概述:
Shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核。Shell还是一个功能强大的编程语言,易编写,易调试,灵活性强。Centos默认的解析器是bash。
1、创建一个Shell脚本
1)脚本以#!/bin/bash 开头(指定解析器)
2)创建一个helloworld脚本
touch helloworld.sh
3)脚本的执行方式
第一种:采用 bash 或 sh+脚本的相对路径或绝对路径(不用赋予脚本+x 权限)
sh ./helloworld.sh #sh+相对路径
sh /home/atguigu/shells/helloworld.sh #sh+绝对路径
bash ./helloworld.sh #bash+相对路径
bash /home/atguigu/shells/helloworld.sh #bash+绝对路径
==第二种:==采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x)
chmod +x helloworld.sh #赋予x执行权限
./helloworld.sh #相对路径执行
/home/atguigu/shells/helloworld.sh #绝对路径执行
2、变量
变量分类:系统变量和自定义变量 /全局变量和局部变量、特殊变量
系统变量
H O M E 、 HOME、 HOME、PWD、 S H E L L 、 SHELL、 SHELL、USER 等
echo $HOME #查看系统变量值
set #显示当前Shell中所有变量
自定义变量
基本语法
(1)定义变量:变量名=变量值,注意,=号前后不能有空格
(2)撤销变量:unset 变量名
(3)声明静态变量:readonly 变量,注意:不能 unset
变量定义规则
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
(2)等号两侧不能有空格
(3)在 bash 中,变量默认类型都是字符串类型,无法直接进行数值运算。
(4)变量的值如果有空格,需要使用双引号或单引号括起来。
A=5 #定义A变量
echo $A
A=8 #重新赋值A
echo $A
unset A #撤销变量A
echo $A
readonly B=2 #定义静态变量B 不能重新赋值,也不能unset撤销!
echo $B
expoet $B #将B变量转化为全局变量
特殊变量
$n
n 为数字,$0 代表该脚本名称,$1- 9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如 9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如 9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如{10}
[atguigu@hadoop101 shells]$ touch parameter.sh
[atguigu@hadoop101 shells]$ vim parameter.sh
#!/bin/bash
echo '==========$n=========='
echo $0
echo $1
echo $2
[atguigu@hadoop101 shells]$ chmod 777 parameter.sh
[atguigu@hadoop101 shells]$ ./parameter.sh cls xz
==========$n==========
./parameter.sh
cls
xz
$#
获取所有输入参数个数
[atguigu@hadoop101 shells]$ vim parameter.sh
#!/bin/bash
echo '==========$n=========='
echo $0
echo $1
echo $2
echo '==========$#=========='
echo $#
[atguigu@hadoop101 shells]$ chmod 777 parameter.sh
[atguigu@hadoop101 shells]$ ./parameter.sh cls xz
==========$n==========
./parameter.sh
cls
xz
==========$#==========
2
∗ 和 * 和 ∗和@
∗
这个变量代表命令行中所有的参数,
* 这个变量代表命令行中所有的参数,
∗这个变量代表命令行中所有的参数,*把所有的参数看成一个整体
@
这个变量也代表命令行中所有的参数,不过
@ 这个变量也代表命令行中所有的参数,不过
@这个变量也代表命令行中所有的参数,不过@把每个参数区分对待
[atguigu@hadoop101 shells]$ vim parameter.sh
#!/bin/bash
echo '==========$n=========='
echo $0
echo $1
echo $2
echo '==========$#=========='
echo $#
echo '==========$*=========='
echo $*
echo '==========$@=========='
echo $@
[atguigu@hadoop101 shells]$ ./parameter.sh a b c d e f g
==========$n==========
./parameter.sh
a
b
==========$#==========
7
==========$*==========
a b c d e f g
==========$@==========
a b c d e f g
$?
最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行,否则执行失败
[atguigu@hadoop101 shells]$ ./helloworld.sh
hello world
[atguigu@hadoop101 shells]$ echo $?
0
3、流程控制
if else 语法格式
if condition
then
command
elif condition2
then
command2
else
command3
fi
#示例:
[atguigu@hadoop101 shells]$ touch if.sh
[atguigu@hadoop101 shells]$ vim if.sh
#!/bin/bash
if [ $1 -eq 1 ]
then
echo "banzhang zhen shuai"
elif [ $1 -eq 2 ]
then
echo "cls zhen mei"
fi
[atguigu@hadoop101 shells]$ chmod 777 if.sh
[atguigu@hadoop101 shells]$ ./if.sh 1
banzhang zhen shuai
case 语法格式
case $变量名 in
"值 1")
如果变量的值等于值 1,则执行程序 1
;;
"值 2")
如果变量的值等于值 2,则执行程序 2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
#示例:
[atguigu@hadoop101 shells]$ touch case.sh
[atguigu@hadoop101 shells]$ vim case.sh
!/bin/bash
case $1 in
"1")
echo "banzhang"
;;
"2")
echo "cls"
;;
*)
echo "renyao"
;;
esac
[atguigu@hadoop101 shells]$ chmod 777 case.sh
[atguigu@hadoop101 shells]$ ./case.sh 1
1
for 循环语法格式
#方式一:
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
#方式二:
for var in item1 item2 ..
do
command
done
#示例1 1..100求和
[atguigu@hadoop101 shells]$ touch for1.sh
[atguigu@hadoop101 shells]$ vim for1.sh
#!/bin/bash
sum=0
for((i=0;i<=100;i++))
do
sum=$[$sum+$i]
done
echo $sum
[atguigu@hadoop101 shells]$ chmod 777 for1.sh
[atguigu@hadoop101 shells]$ ./for1.sh
5050
#示例2
[atguigu@hadoop101 shells]$ touch for2.sh
[atguigu@hadoop101 shells]$ vim for2.sh
#!/bin/bash
#打印数字
for i in cls mly wls
do
echo "ban zhang love $i"
done
[atguigu@hadoop101 shells]$ chmod 777 for2.sh
[atguigu@hadoop101 shells]$ ./for2.sh
ban zhang love cls
ban zhang love mly
while 语法格式
while condition
do
condition
done
#示例 1..100求和
[atguigu@hadoop101 shells]$ touch while.sh
[atguigu@hadoop101 shells]$ vim while.sh
#!/bin/bash
sum=0
i=1
while [ $i -le 100 ]
do
sum=$[$sum+$i]
i=$[$i+1]
done
echo $sum
[atguigu@hadoop101 shells]$ chmod 777 while.sh
[atguigu@hadoop101 shells]$ ./while.sh
5050
until 循环——直到条件为真位置
until condition
do
command
done
4、输入输出
echo
echo命令用于字符串的输出,默认无转义字符,使用 -e 能开启转义。使用双引号或单引号能显示字符串,而使用反引号显示命令执行的结果。
read
[atguigu@hadoop101 shells]$ touch read.sh
[atguigu@hadoop101 shells]$ vim read.sh
#!/bin/bash
read -t 7 -p "Enter your name in 7 seconds :" NN
echo $NN
- -p:指定读取值时的提示符;
- -t:指定读取值时等待的时间(秒)如果-t 不加表示一直等待
5、文本处理工具
cut
- -f 列号,提取第几列
- -d 分隔符,按照指定分隔符分割列,默认是制表符“\t”
- -c 按字符进行切割 后加加 n 表示取第几列 比如 -c 1
#数据准备
[atguigu@hadoop101 shells]$ touch cut.txt
[atguigu@hadoop101 shells]$ vim cut.txt
dong shen
guan zhen
wo wo
lai lai
le le
#切割 cut.txt 第一列
[atguigu@hadoop101 shells]$ cut -d " " -f 1 cut.txt
dong
guan
wo
lai
le
#切割 cut.txt 第二、三列
[atguigu@hadoop101 shells]$ cut -d " " -f 2,3 cut.txt
shen
zhen
wo
lai
le
# cut.txt 文件中切割出 guan
[atguigu@hadoop101 shells]$ cat cut.txt |grep guan | cut -d " " -f 1
guan
#选取系统 PATH 变量值,第 2 个“:”开始后的所有路径:
[atguigu@hadoop101 shells]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/atguigu/.local/bin:/home/atguigu/bin
[atguigu@hadoop101 shells]$ echo $PATH | cut -d ":" -f 3-
/usr/local/sbin:/usr/sbin:/home/atguigu/.local/bin:/home/atguigu/bin
#切割 ifconfig 后打印的 IP 地址
[atguigu@hadoop101 shells]$ ifconfig ens33 | grep netmask | cut -d " " -f 10
192.168.111.101