Linux
Linux基础命令
Linux的目录结构

/,根目录是最顶级的目录了- Linux只有一个顶级目录:
/ - 路径描述的层次关系同样适用
/来表示 - /home/itheima/a.txt,表示根目录下的home文件夹内有itheima文件夹,内有a.txt
ls命令
功能:列出文件夹信息
语法:ls [-l -h -a] [参数]
- 参数:被查看的文件夹,不提供参数,表示查看当前工作目录
- -l,以列表形式查看
- -h,配合-l,以更加人性化的方式显示文件大小
- -a,显示隐藏文件
隐藏文件、文件夹
在Linux中以.开头的,均是隐藏的。
默认不显示出来,需要-a选项才可查看到。
pwd命令
功能:展示当前工作目录
语法:pwd
作用是:输出当前所在的工作目录
cd命令
功能:切换工作目录
语法:cd [目标目录]
参数:目标目录,要切换去的地方,不提供默认切换到当前登录用户HOME目录
HOME目录
每一个用户在Linux系统中都有自己的专属工作目录,称之为HOME目录。
普通用户的HOME目录,默认在:
/home/用户名root用户的HOME目录,在:
/root
FinalShell登陆终端后,默认的工作目录就是用户的HOME目录
相对路径、绝对路径
相对路径,==非==
/开头的称之为相对路径相对路径表示以
当前目录作为起点,去描述路径,如test/a.txt,表示当前工作目录内的test文件夹内的a.txt文件绝对路径,==以==
/开头的称之为绝对路径绝对路径从
根开始描述路径
特殊路径符
.,表示当前,比如./a.txt,表示当前文件夹内的a.txt文件..,表示上级目录,比如../表示上级目录,../../表示上级的上级目录~,表示用户的HOME目录,比如cd ~,即可切回用户HOME目录
mkdir命令
功能:创建文件夹
语法:mkdir [-p] 参数
- 参数:被创建文件夹的路径
- 选项:-p,可选,表示创建前置路径
- 自动创建不存在的父目录,适用于创建连续多层级的目录
touch命令
功能:创建文件
语法:touch 参数
- 参数:参数必填,表示要创建的文件路径
cat命令
功能:查看文件内容
语法:cat 参数
- 参数:被查看的文件路径
more命令
功能:查看文件,可以支持翻页查看
语法:more 参数
- 参数:被查看的文件路径
- 在查看过程中:
空格键翻页q退出查看
cp命令
功能:复制文件、文件夹
语法:cp [-r] 参数1 参数2
- 参数1,被复制的
- 参数2,要复制去的地方
- 选项:-r,可选,复制文件夹使用
示例:
- cp a.txt b.txt,复制当前目录下a.txt为b.txt
- cp a.txt test/,复制当前目录a.txt到test文件夹内
- cp -r test test2,复制文件夹test到当前文件夹内为test2存在
mv命令
功能:移动文件、文件夹
语法:mv 参数1 参数2
- 参数1:被移动的
- 参数2:要移动去的地方,参数2如果不存在,则会进行改名
rm命令
功能:删除文件、文件夹
语法:rm [-r -f] 参数...参数
参数:支持多个,每一个表示被删除的,空格进行分隔
选项:-r,删除文件夹使用
选项:-f,强制删除,不会给出确认提示,一般root用户会用到
参数也支持通配符*,用以做模糊匹配
- text* 匹配以text开头的文件或文件夹
- *text 匹配text结尾的文件或文件夹
- *text * 匹配包含text的文件或文件夹
rm命令很危险,一定要注意,特别是切换到root用户的时候。
which命令
功能:查看命令的程序本体文件路径
语法:which 参数
- 参数:被查看的命令
find命令
功能:搜索文件
语法1按文件名搜索:find 路径 -name 参数
路径,搜索的起始路径
参数,搜索的关键字,支持通配符*, 比如:
*test表示搜索任意以test结尾的文件按文件大小查找:
find 起始路径 -size +|-n [KMG]查找小于10KB的文件:find / -size -10k 查找小于100MB的文件:find / -size -100mb 查找大于1GB的文件:find / -size +1GB 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 ## grep命令功能:过滤关键字语法:`grep [-n] 关键字 文件路径`- 选项-n,可选,表示在结果中显示匹配的行的行号。- 参数,关键字,必填,表示过滤的关键字,带有空格或其它特殊符号,建议使用””将关键字包围起来- 参数,文件路径,必填,表示要过滤内容的文件路径,可作为内容输入端口> 参数文件路径,可以作为管道符的输入## wc命令功能:统计语法:`wc [-c -m -l -w] 文件路径`- 选项,-c,统计bytes数量- 选项,-m,统计字符数量- 选项,-l,统计行数- 选项,-w,统计单词数量- 参数,文件路径,被统计的文件,可作为内容输入端口> 参数文件路径,可作为管道符的输入## 管道符|写法:`|`功能:将符号左边的结果,作为符号右边的输入示例:`cat a.txt | grep itheima`,将cat a.txt的结果,作为grep命令的输入,用来过滤`itheima`关键字可以支持嵌套:`cat a.txt | grep itheima | grep itcast`## echo命令功能:输出内容语法:`echo 参数`- 参数:被输出的内容- 无需选择,只有一个参数,表示要输出的内容,复杂内容可以用“ "包围 演示: - 在终端上显示:Hello Linux echo Hello Linux 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301- 带有空格或\等特殊符号,建议使用双引号包围 - 因为不包围的话,空格很容易被识别为参数2,尽管echo不受影响## `反引号功能:被两个反引号包围的内容,会作为命令执行示例:- echo \`pwd\`,会输出当前工作目录## tail命令功能:查看文件尾部内容语法:`tail [-f] 参数`- 参数:被查看的文件- 选项:-f,持续跟踪文件修改## head命令功能:查看文件头部内容语法:`head [-n] 参数`- 参数:被查看的文件- 选项:-n,查看的行数## 重定向符功能:将符号左边的结果,输出到右边指定的文件中去- `>`,表示覆盖输出 将左侧命令的结果,覆盖写入到符号右侧指定的文件中- `>>`,表示追加输出 将左侧命令的结果,追加写入到符号右侧指定的文件中## vi编辑器### 命令模式快捷键| 模式 | 命令 | 描述 || ------------ | ----- | --------------------------------- || **命令模式** | `i` | 在当前光标位置进入 `输入模式` || **命令模式** | `a` | 在当前光标位置之后进入 `输入模式` || **命令模式** | `I` | 在当前行的开头进入 `输入模式` || **命令模式** | `A` | 在当前行的结尾进入 `输入模式` || **命令模式** | `o` | 在当前光标下一行进入 `输入模式` || **命令模式** | `O` | 在当前光标上一行进入 `输入模式` || **输入模式** | `esc` | 任何情况下`esc` 都能回到命令模式 |****| 模式 | 命令 | 描述 || ------------ | ---------------- | ---------------------- || **命令模式** | `键盘上、键盘k` | 向上移动光标 || **命令模式** | `键盘下、键盘j` | 向下移动光标 || **命令模式** | `键盘左、键盘h` | 向左移动光标 || **命令模式** | `键盘右、键盘l` | 向右移动光标 || **命令模式** | `0` | 移动光标到当前行的开头 || **命令模式** | `$` | 移动光标到当前行的结尾 || **命令模式** | `pageup(Pgup)` | 向上翻页 || **命令模式** | `pagedown(PgDn)` | 向下翻页 || **命令模式** | `/` | 进入搜索模式 || **命令模式** | `n` | 向下继续搜索 || **命令模式** | `N` | 向上继续搜索 || **模式** | 命令 | 描述 || ------------ | ---------- | -------------------------------- || **命令模式** | `dd` | 删除光标所在行的内容 || **命令模式** | `ndd` | n是数字,表示删除当前光标向下n行 || **命令模式** | `yy` | 复制当前行 || **命令模式** | `nyy` | n是数字,复制当前行和下面的n行 || **命令模式** | `p` | 粘贴复制的内容 || **命令模式** | `u` | 撤销修改 || **命令模式** | `ctrl + r` | 反向撤销修改 || **命令模式** | `gg` | 跳到首行 || **命令模式** | `G` | 跳到行尾 || **命令模式** | `dG` | 从当前行开始,向下全部删除 || **命令模式** | `dgg` | 从当前行开始,向上全部删除 || **命令模式** | `d$` | 从当前光标开始,删除到本行的结尾 || **命令模式** | `d0` | 从当前光标开始,删除到本行的开头 |### 底线命令快捷键## 命令的选项我们学习的一系列Linux命令,它们所拥有的选项都是非常多的。比如,简单的ls命令就有:-a -A -b -c -C -d -D -f -F -g -G -h -H -i -I -k -l -L -m -n -N -o -p -q -Q -r-R -s -S -t -T -u -U -v -w -x -X -1等选项,可以发现选项是极其多的。课程中, 并不会将全部的选项都进行讲解,否则,一个ls命令就可能讲解2小时之久。课程中,会对常见的选项进行讲解, 足够满足绝大多数的学习、工作场景。### 查看命令的帮助可以通过:`命令 --help`查看命令的帮助手册### 查看命令的详细手册可以通过:`man 命令`查看某命令的详细手册# Linux常用操作## 软件安装- CentOS系统使用: - yum [install remove search] [-y] 软件名称 - install 安装 - remove 卸载 - search 搜索 - -y,自动确认- Ubuntu系统使用 - apt [install remove search] [-y] 软件名称 - install 安装 - remove 卸载 - search 搜索 - -y,自动确认> yum 和 apt 均需要root权限## systemctl功能:控制系统服务的启动关闭等语法:`systemctl start | stop | restart | disable | enable | status 服务名`- start,启动- stop,停止- status,查看状态- disable,关闭开机自启- enable,开启开机自启- restart,重启## 软链接功能:创建文件、文件夹软链接(快捷方式)语法:`ln -s 参数1 参数2`- 参数1:被链接的- 参数2:要链接去的地方(快捷方式的名称和存放位置)## 日期语法:`date [-d] [+格式化字符串]`- -d 按照给定的字符串显示日期,一般用于日期计算- 格式化字符串:通过特定的字符串标记,来控制显示的日期格式 - %Y 年%y 年份后两位数字 (00..99) - %m 月份 (01..12) - %d 日 (01..31) - %H 小时 (00..23) - %M 分钟 (00..59) - %S 秒 (00..60) - %s 自 1970-01-01 00:00:00 UTC 到现在的秒数示例:- 按照2022-01-01的格式显示日期 - 按照2022-01-01 10:00:00的格式显示日期 - -d选项日期计算  - 支持的时间标记为: ## 时区修改时区为中国时区## ntp功能:同步时间安装:`yum install -y ntp`启动管理:`systemctl start | stop | restart | status | disable | enable ntpd`手动校准时间:`ntpdate -u ntp.aliyun.com`## ip地址格式:a.b.c.d- abcd为0~255的数字特殊IP:- 127.0.0.1,表示本机- 0.0.0.0 - 可以表示本机 - 也可以表示任意IP(看使用场景)查看ip:`ifconfig`## 主机名功能:Linux系统的名称查看:`hostname`设置:`hostnamectl set-hostname 主机名`## 配置VMware固定IP1. 修改VMware网络,参阅PPT,图太多2. 设置Linux内部固定IP 修改文件:`/etc/sysconfig/network-scripts/ifcfg-ens33` 示例文件内容: ```shell TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="static" # 改为static,固定IP DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="ens33" UUID="1b0011cb-0d2e-4eaa-8a11-af7d50ebc876" DEVICE="ens33" ONBOOT="yes" IPADDR="192.168.88.131" # IP地址,自己设置,要匹配网络范围 NETMASK="255.255.255.0" # 子网掩码,固定写法255.255.255.0 GATEWAY="192.168.88.2" # 网关,要和VMware中配置的一致 DNS1="192.168.88.2" # DNS1服务器,和网关一致即可
ps命令
功能:查看进程信息
语法:ps -ef,查看全部进程信息,可以搭配grep做过滤:ps -ef | grep xxx
kill命令

nmap命令

netstat命令
功能:查看端口占用
用法:netstat -anp | grep xxx
ping命令
测试网络是否联通
语法:ping [-c num] 参数

wget命令

curl命令


top命令
功能:查看主机运行状态
语法:top,查看基础信息
可用选项:

交互式模式中,可用快捷键:

df命令
查看磁盘占用

iostat命令
查看CPU、磁盘的相关信息


sar命令
查看网络统计

环境变量
- 临时设置:export 变量名=变量值
- 永久设置:
- 针对用户,设置用户HOME目录内:
.bashrc文件 - 针对全局,设置
/etc/profile
- 针对用户,设置用户HOME目录内:
PATH变量
记录了执行程序的搜索路径
可以将自定义路径加入PATH内,实现自定义命令在任意地方均可执行的效果
$符号
可以取出指定的环境变量的值
语法:$变量名
示例:
echo $PATH,输出PATH环境变量的值
echo ${PATH}ABC,输出PATH环境变量的值以及ABC
如果变量名和其它内容混淆在一起,可以使用${}
压缩解压
压缩
tar -zcvf 压缩包 被压缩1...被压缩2...被压缩N
- -z表示使用gzip,可以不写
zip [-r] 参数1 参数2 参数N

解压
tar -zxvf 被解压的文件 -C 要解压去的地方
- -z表示使用gzip,可以省略
- -C,可以省略,指定要解压去的地方,不写解压到当前目录
unzip [-d] 参数

su命令
切换用户
语法:su [-] [用户]

sudo命令

比如:
1 | itheima ALL=(ALL) NOPASSWD: ALL |
在visudo内配置如上内容,可以让itheima用户,无需密码直接使用sudo
chmod命令
修改文件、文件夹权限
语法:chmod [-R] 权限 参数
权限,要设置的权限,比如755,表示:
rwxr-xr-x
参数,被修改的文件、文件夹
选项-R,设置文件夹和其内部全部内容一样生效
chown命令
修改文件、文件夹所属用户、组
语法:chown [-R] [用户][:][用户组] 文件或文件夹

用户组管理

用户管理

genenv命令
getenv group,查看系统全部的用户组
getenv passwd,查看系统全部的用户
env命令
查看系统全部的环境变量
语法:env
Shell脚本编程
概念
Shell是什么?
- Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动,挂起,停止甚至是编写一些程序。看一个示意图
入门案例
- 脚本要求格式
- 脚本以
#!bin/bash开头 - 脚本执行需要权限
- 脚本以
- 编写第一个Shell脚本
- 需求说明,新建一个Shell脚本,输出Hello world
1 | 创建shell脚本,注意以sh结尾 |
基本语法
- Shell变量介绍
- Linux Shell中的变量分为,系统变量和用户自定义变量
- 系统变量:$HOME、$PWD、$SHELL、$USER等,比如:echo $HOME 等等
- 显示当前shell中所有变量:set
- shell变量的定义
- 定义变量:变量名=值
- 撤销变量:unset 变量
- 声明静态变量:readonly变量,注意:不能unset
1 | 案例 |
注意:

设置环境变量
- 基本语法
export 变量名=变量值:将shell变量输出为环境变量/全局变量source 配置文件:让修改后的配置信息立即生效echo $变量名:查询环境变量的值
案例:
1 | 1. 在/etc/profile文件中定义TOMCAT_HOME环境变量 |
shell脚本多行注释: :<<! 内容 !
位置参数变量
介绍
- 当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量,比如:
./myshell.sh 100 200,这个就是一个执行shell的命令行,可以在myshell 脚本中获取到参数信息
- 当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量,比如:
基本语法
$n:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10}$*:这个变量代表命令行中所有的参数,$* 把所有的参数堪称一个整体$@:这个变量代表命令行中所有的参数,不过$@ 把每个参数区分对待$#:这个变量代表命令行中所有参数的个数
案例:
1 | 编写一个shell脚本position.sh 在脚本中获取到命令行的各个参数信息 |
预定义变量
基本介绍
- 就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
基本语法
$$:当前进程的进程号(PID)$!:后台运行的最后一个进程的进程号(PID)$?:最后一次执行的命令的返回状态,如果这个变量的职位0,证明上一个命令正确执行,如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了
案例:
1 | 在一个shell脚本中简单使用一下预定义变量preVar.sh |
运算符
基本介绍
- 学习如何在shell中进行各种运算操作
基本语法
- “$((运算式))” 或 “$[运算式]” 或者 expr m + n
- 注意expr 运算符间要有空格,如果希望将expr 的结果赋给某个变量,使用``
- expr m - n
- expr
\*,/,%乘、除、取余
案例:
1 | 计算(2+3)*4 |
条件判断


案例:
1 | 案例1. "ok" 是否等于 "ok" |
流程控制
if分支

注意:[条件判断式] 中括号和条件判断式之间必须有空格
案例:
1 | 请编写一个shell程序,如果输入的参数,大于等于60 则输出"及格了" 如果小于60,则输出 "不及格" |
case语句

案例:
1 | 当命令行参数是1时,输出"周一",是2时,就输出"周二",其他情况输出 "other" |
for循环

案例:
1 | 打印命令行输入的参数[这里可以看出$* 和 $@ 的区别] |
while循环

案例:
1 | 从命令中输入一个数n,求1+...+n的值是多少 |
read读取控制台输入

案例:
1 | 案例1:读取控制台输入一个num值 |
函数
basename
- 函数介绍
- shell编程和其他语言一样,有系统函数,也可以自定义函数,系统函数中,我们这里就介绍两个

案例:
1 | 案例1:请返回/home/aaa/test.txt的 "test.txt" 的部分 |
dirname

案例:
1 | 案例1:请返回/home/aaa/test.txt 的 /home/aaa |
自定义函数

案例:
1 | 案例1:计算输入两个参数的和(动态的获取),getSum |
Shell脚本案例

1 | BACKUP=/data/backup/db |




