Linux
目录结构和特点
-
一切皆是文件
-
根目录/,所有的文件都挂在在这个节点下
-
Linux文件或者目录名称最长可以有256个字符
-
以.开口开头的文件为隐藏文件,需要-a参数才能显示
-
. 代表当前目录
-
… 代表上一级目录
一 目录管理命令
1.1 目录切换命令
相对路径:在输入路径时,最前面不是/或者~,表示相对当前目录所在的目录位置
绝对路径:在输入路径时,最前面是/或者~,表示从根目录/家目录开始的具体位置位置
cd usr
: 切换到该目录下 usr 目录cd ..(或cd../)
: 切换到上一层目录cd /
: 切换到系统根目录cd ~
: 切换到用户主目录cd -
: 切换到上一个操作所在目录
1.2 目录操作命令
-
mkdir 目录名称
: 增加目录- -p:可以递归创建目录 例如:mldir -p a/b/c/d/e
-
rm [-rf] 目录/文件
:删除文件/目录注意:
使用rm命令要格外小心,因为数据删除后不能恢复!rm 不仅可以删除目录,也可以删除其他文件或压缩包,为了增强大家的记忆, 无论删除任何目录或文件,都直接使用
rm -rf
目录/文件/压缩包。- -f:强制删除,忽略不存在的文件,无需提示
- -r:递归地删除目录下的内容,删除文件夹时必须加此参数
-
mv 要剪切的文件的路径 /新位置
:剪切 -
mv 要修改的文件 /新文件名
:重命名mv 语法不仅可以对目录进行剪切操作,对文件和压缩包等都可执行剪切操作。并且可以剪切的同时重命名
- -I:覆盖文件前提示
- -u:只替换已经更新过的文件
-
cp -rl 目录名称 目录拷贝的目标位置
:拷贝目录注意:cp 命令不仅可以拷贝目录还可以拷贝文件,压缩包等,拷贝文件和压缩包时不用写-r 递归。
- -r:若给出的源文件是目录文件,则cp将递归复制该目录下的所有子目录和文件,目标文件必须为一个目录名
-
\cp -r 目录名称 目录拷贝的目标位置
:如果文件重复了 linux 默认会提示是否覆盖,但是这个提示覆盖是每一个文件都会提示!当文件不多时还好,可是文件一多就很烦了,用此命令就可以无需提示直接覆盖 -
ls
:查看目录信息- -a:显示指定目录下所有子目录与文件,包括隐藏文件
- -l:含义以列表方式显示文件的详细信息
- -h:配合-l以人性化的方式显示文件大小
ls通配符的联合使用
通配符 | 作用 |
---|---|
* | 代表任意个数个字符 |
? | 代表任意一个字符,至少1个 |
[] | 表示可以匹配字符组中的任意一个 |
[abc] | 匹配a、b、c中的任意一个 |
[a-f] | 匹配从a到f范围内的任意一个字符 |
二 文件管理命令
2.1 文件操作命令
-
touch 文件名称
: 文件的创建(增)创建文件或修改文件时间,如果文件不存在,可以创建一个空白文件如果文件已经存在,就会修改文件的末次修改日期
-
vim 文件
: 修改文件的内容(改)-
底线模式选项:
- :wq :(w)表示保存(q)表示退出;一般情况会直接使用 :wq 保存退出
- q! :代表强制退出不保存
- :set nu:让文件显示行号,便于观看
-
编辑模式:
- home/end:一行的首尾
- PgUp/PgDn:分页
- ctrl+ ->/<- : 此行可以调到空格
使用 vim 编辑器主要作用就是修改配置文件,下面是一般步骤:
vim 文件------>进入文件----->命令模式------>按i进入编辑模式----->编辑文件 ------->按Esc进入底行模式----->输入:wq/q!
(输入 wq 代表写入内容并退出,即保存;输入 q!代表强制退出不保存) -
-
cat/tac/more/less/tail 文件名称
:文件查看命令(查)- cat:查看文件所有内容,适合用于内容少的文本文件
- tac:从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
- more: 一页一页的显示文件内容,适合用于查看内容比较多的文本内容
- less:more 类似,但是必more更强大,按需加载文件,当文件大小比较大的时候就使用less
- tail: 只看尾巴几行
- -n :不加-n 默认10行
- -f :可以对文件动态监控,例如像 tomcat 这种日志会动态变化的
- head:查看文件的前几行
- -n :不加-n 默认10行
在 less/more 这个程序的运行过程中,有几个操作键可以按
操作键 | 功能 |
---|---|
pagedown | 下一页 |
pageup | 一次滚动手册页的一行 |
/string | n/N 上一个/下一个 |
q | 退出 |
2.2 压缩文件操作命令
-
tar -zcvf/-jcvf 打包后文件名.tar 被打包的文件/路径
:压缩文件 -
tar -zxvf/-jxvf 压缩文件路径.tar
:解压文件
- 将 /test 下的 test.tar.gz 解压到当前目录下可以使用命令:
tar -xvf test.tar.gz
- 将 /test 下的 test.tar.gz 解压到根目录/usr 下:
tar -xvf test.tar.gz -C /usr
(- C 代表指定解压的位置)
- -C:解压缩到指定路径目录,注意:要解压缩的目录必须存在
- -j:压缩/解压为bz2格式
- -z:压缩/解压为gz格式
注意:f选项必须放在最后
2.3 文件所搜命令
Linux 文件是树状的,所以搜索范围越精确越搜索速度就越快
find / -name fileName
- -name:按照文件名查找,可以使用通配符
- -user:按照用户查找
- -size:按照文件大小查找;+ 大于 - 小于 n 等于
省略路径,表示当前文件夹下查找。
三、管理命令
3.1 用户管理命令
-
whoami
:查看当前登录用户的账户名 -
who
: 查看当前所有登录用户列表 -
id[user]
:查看用户UID和GID信息 -
su -user
:切换用户;权限高的用户切换到权限低的用户时,不需要密码。低用户到高用户时需要密码 -
exit、logout
:退出当前账号 -
useradd -mg 用户名
:添加用户账号- -m: 自动建立用户家目录
- -g: 指定用户所在的组,否则会建立一个和同名的组
-
passwd 用户名
:更改或创建用户的密码,只有管理者可以指定用户名称,一般用户只能变更自己的密码。 -
userdel 选项 用户名
:删除用户帐号- r:选项会自动删除用户家目录,不加只会删除用户。一般情况下建议保留用户目录!
-
usermod -g groupName username
:修改用户的组,修改后需要重新登录才能生效 -
cat /etc/passwd|grep 用户名
:使用useradd
指令所建立的帐号,实际上是保存在/etc/passwd
文本文件中。所以可以使用该命令查看
3.2 用户组管理命令
什么是用户组!?用户组类似于角色一样。root 创建一个组并且给这个组赋予权限,然后将用户放入组中,这样就实现了用户权限的统一管理了。
groupadd 用户组
:增加一个新的用户组groupdel 用户组
:要删除一个已有的用户组groupmod 选项 用户组
: 修改用户组的属性cat /etc/group
:用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group
文件的更新。所以可以使用该命令查看
四 权限命令
4.1 Linux中用户分类
- 所有者(u):一般为文件的创建者,谁创建了该文件,就天然的成为该文件的所有者
- 所在组(g):哪一个用户创建了这个文件,那个用户所在的组就是文件所在组
- 其他组(o):除开文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组。
4.2 Linux 中权限分类
Linux 所有数据都拥有权限
权限一般分为:读 r (readable)、写 w (writable)、执行 e (executable)
-
r:代表权限是可读,r 也可以用数字 4 表示
-
w:代表权限是可写,w 也可以用数字 2 表示
-
x:代表权限是可执行,x 也可以用数字 1 表示
-
chmod u=rwx,g=rw,o=r aaa.txt
或者chmod 764 aaa.txt
:两种格式, aaa.txt 的权限为文件所有者有全部权限,文件所有者所在的组有读写权限,其他用户只有读的权限。
chown这个命令也可以更改,但是基本不用,过个眼熟
五 其他命令
-
pwd
:显示当前所在位置 -
clear
:清理屏幕 -
history 10
:查看已经执行过的10条命令,参数可以按照自己的需求,也可以不写- !编号 :执行该条命令
-
echo string
:将字符串打印在控制台上 -
echo string > fileName
:重定向(会覆盖原来的内容),将>前面的结果写入文件中 -
echo string >> fileName
:追加(不会覆盖)
细节:如果文件不存在,会自动创建
六 链接
Linux 链接分两种:一种被称为硬链接(Hard Link),另一种被称为符号链接/软链接(Symbolic Link)
硬链接:相当于复制了一份后再双向绑定,当修改了其中一份,另一份也会被修改。
软链接:软链接文件有类似于 Windows 的快捷方式。主文件被删除后,软链接就无法使用
ln -s 被链接的源文件 链接文件
:源文件要使用绝对路径!- -s:没有-s选项建立的是一个硬链接文件
七、Linux系统信息命令
7.1 时间日期命令
-
date
:显示当前时间(有中文)- date “+%Y-%m-%d %H:%M:%S” :格式化,- 可以换为自己想要的格式
- +%Y:显示当前年份
- +%m:显示当前月份
- +%d:显示现在是哪一天
-
cal
:显示当前月份日历- 2022:显示当前一整年的日历,年份可以自行更改
-
date -s "2020-11-03 20:12:10"
: 修改时间
7.1 磁盘命令
暂无
7.2 关机/重启
-
shutdown 选项 参数(now、+10、20:20)
:不加-r就是关机,参数可以指定关机/重启的时间-
-r now:重新启动
-
-c :取消重启/关机计划
-
不指定选项和参数,默认表示1分钟之后关闭电脑
远程维护服务器时,最好不要关闭系统,而应该重新启动系统
八、管道符与 grep 的使用
grep 普遍上有两种用法:一种是单独使用,第二种是和管道符一起使用
grep "要搜索的字符串" 要搜索的文件
:单独使用,查找路径中的文件包含 “yes” 字符串的文件,并打印出该字符串的行。- n 显示匹配行和行号
- i 忽略大小写
什么是管道符?就是将前面指令执行后的结果交给后面的指令再执行,不只是grep可以跟管道符组合使用其他很多命令也都可以
cat /home/hello.txt | grep "yes"
:grep后面没有跟路径,那么就是查找打印台上的文本内容
九、进程命令
ps -ef
:查看进程,UID(用户id)、PID(进程id)、PPID(父进程id)、C(进程占用CPU的百分比)、等等ps -aux
:查看进程,USER(用户名)、%CPU(进程占用的CPU百分比 )、STAT (进程的状态 )- a:显示终端上的所有进程,包括其他用户的进程
- u: 显示进程的详细状态
- x: 显示没有控制终端的进程
pstree
:查看进程树- p:显示pid
- u:显示进程的所属用户
kill -9 进程的pid
:终止指定代号的进程,-9表示强行终止top
:动态查看进程-
选项:
- -d :秒数
- -i:不显示任何闲置或僵死进程
-
互动:进入top命令时可以让top按指定模式排序
- u:输入u后,再输入用户名,就可以监视登入的用户
- k:输入k后,再输入端口号,杀死进程(例如就可以杀死用户)
-
十、软件安装
10.1 rpm
rpm -qa | grep firefox
:查看系统中是否安装了火狐rpm -qi 软件包名
:查看软件包详细信息rpm -ivh rpm包全路径
:安装rpm包rpm -e 软件包名
:卸载软件包,卸载的时候如果存在依赖建议不删除- –nodeps :强行卸载
10.2 yum
yum 下载机制类似于maven 在远程有一个yum服务器,服务器中有很多软件包。linux 能够从指定的服务器自动下载RPM包并且安装,并且可以自动处理依赖关系一次下载所安装包的依赖包
yum list | grep 软件包
:查看 yum 服务器上是否有想要的安装包yum install 软件包
:安装软件包
wget url
:
十一、服务管理命令
-
systemctl [start|stop|restart|status] 服务名
-
start:将服务开启开启
-
stop:将服务关闭
-
restart:将服务重启
-
status:查看服务当前状态
-
-
systemctl list-unit-files | grep 服务名
:查看该服务是否是开机自动启动状态 -
systemctl is-enabled 服务名
:查看该服务是否是开机自动启动状态 -
systemctl enable 服务名
: 设置该服务为开机自动启动状态 -
systemctl disable 服务名
:设置该服务为开机不启动状态
十二、防火墙命令
firewall-cmd --permanent --add-port=端口号/协议
:开启此端口号的防火墙firewalls-cmd --permanent --remove-port=端口号/协议
:关闭此端口号的防火墙firewall-cmd --reload
:重启防火墙,每当关闭或开启某一个端口的防火墙时,需要就需要重启firewall-cmd --query-port=端口号/协议
:查询某一端口防火墙的开启或关闭状态firewall-cmd --list-all
:查看所有开启的端口
十三、网络通信命令
ifconfig
:查看当前系统的网卡信息ping ip/域名
:查看与某台机器的连接情况netstat -tunlp
:查看当前系统的所有端口使用lsof -i:端口号
:查看某一个端口的使用情况
十四、shell 命令
14.1 什么是shell?
Linux 内核是不可以直接识别我们的命令的,中间是有一层shell解析器在解析我们的指令。shell有很多种其中我们国内大部分都是用bash shell
14.2 shell 脚本入门
14.2.1 shell’s helloword
- shell 脚本文件的后缀名是 .sh
- 编写玩的 shell 脚本是没有执行权的,需要用命令chmod 添加执行权 或 sh 脚本文件
14.2.2 shell 变量
14.2.2.1 shell 变量定义
变量名=值
:声明变量unset 变量
:撤销变量readonly 变量名=值
:定义静态变量
shell 变量使用
$变量名
:使用用户自定义变量$(命令)
:调用系统命令的返回结果
定义变量的规则
- 变量名称可以由字母、数字和下划线组成,但是不能以数字开头
- 等号两侧不能有空格
- 变量名一般为大写,这个是规范
echo "hello word~"
A=100
echo A=$A
unset $A
echo A2=$A
readonly B=100
echo B=$B
C=$(cal)
C2=`cal`
#hello word~
#A=100
#./hello,word.sh: line 8: unset: `100': not a valid identifier
#A2=100
#B=100
#C= March 2022 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
#C2= March 2022 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
14.2.2.1 shell 位置参数变量
什么是位置变量?就是类似于形参,在执行脚本文件时时传入
-
$数字
:$0代表文件本身,$1-9 代表形参 -
$*
:显示该脚本文件中的所有形参值 -
$@
:显示该脚本文件中的所有形参值 -
$*
:显示脚本中有几个位置变量参数
# shell 脚本
echo "0=$0 1=$1 2=$2"
echo all params=$*
echo all params=$@
echo num of param=$#
[root@iZwz9834shcoibb59kv53wZ opt]# ./hello,word.sh 1 2
0=./hello,word.sh 1=1 2=2
all params=1 2
all params=1 2
num of param=2
14.2.3 运算符
shell 运算符3种写法
$(())
:基本不用$[]
:常用expr m + n
:难用!m 和 n 中间必须有空格,并且乘法是这样的 /*
14.3 shell流程控制
14.3.1 if条件判断
#单分支
if [条件判断]
then [业务代码]
fi
#多分支
if [条件判断]
then [业务代码]
elif[条件判断]
then [业务代码]
fi
- 字符串比较
- =
- 两个整数比较
- -lt :小于
- -le:小于等于
- -eq:等于
- -gt:大于
- -ge:大于等于
- -ne:不等于
- 按照文件权限判断
- -r:是否有读权限
- -w:有写权限
- -x:有执行权限
- 安装文件类型判断
- -f:文件是否存在是常规文件
- -e:文件存在
- -d:是否是目录
if [ ok = ok ]
then echo string true
fi
if [ 1 -eq 1 ]
then echo num true
fi
if [ -d /root ]
then echo file is exist
fi
if [ -w /root ]
then echo you have power
fi
[root@iZwz9834shcoibb59kv53wZ opt]# ./hello,word2.sh
string true
num true
file is exist
you have power
切记[]中前后一定要空格!要不然就会报错
14.3.2 case 条件判断
case $1 in
1)
echo "今天周一"
;;
2)
echo "今天周二"
;;
*)
echo "other....."
;;
esac
[root@iZwz9834shcoibb59kv53wZ opt]# ./hello,word3.sh 1
今天周一
[root@iZwz9834shcoibb59kv53wZ opt]# ./hello,word3.sh 2
今天周二
[root@iZwz9834shcoibb59kv53wZ opt]# ./hello,word3.sh 3
other.....
14.3.3 for循环
for ((初始值;循环控制条件;变量变化))
do 业务代码
done
SUM=0
for(( i=1;i<=$1;i++))
do SUM=$[$SUM+$i]
done
echo $SUM
[root@iZwz9834shcoibb59kv53wZ opt]# ./hello,word4.sh 100
5050
[root@iZwz9834shcoibb59kv53wZ opt]# ./hello,word4.sh 10
55
14.3.4 while循环
while [条件判断]
do
业务代码
done
while 和 条件判断中间必须要有空格
SUN=0
I=0
while [ $I -le $1 ]
do
SUN=$[ $SUN+$I ]
I=$[ $I + 1 ]
done
[root@iZwz9834shcoibb59kv53wZ opt]# ./hello,word5.sh 100
5050
14.4 shell 函数
14.4.1 read
-
read (选项) (参数) (选项) (参数)
-
-p:指定读取时的提示符
-
-t:指定读取的等待时间,如果没有在指定时间内输入,就将不等待;如果不加此参数将一直等待
-
read -p 请输入一个数字 NUM1
echo 您输入的数字为 $NUM1
read -t 10 -p 请再输入一个数组 NUM2
echo 您再次输入的数字为 $NUM2
[root@iZwz9834shcoibb59kv53wZ opt]# ./hello,word6.sh
请输入一个数字100
您输入的数字为 100
请再输入一个数组2000
您再次输入的数字为 2000
14.4.2 自定义函数
function functionname(){
#业务代码
}
funname 参数
调用函数不用加括号,参数直接写在后面即可
函数定义时不用定义参数,函数体中直接用即可
function getSum(){
SUM=$[ $A + $B ]
echo 求和结果为: $SUM
}
read -p 第一个数: A
read -p 第二个数: B
getSum $A $B
[root@iZwz9834shcoibb59kv53wZ opt]# ./hello,word7.sh
第一个数:10
第二个数:48
求和结果为: 58