Linux
Linux
计算机=硬件+软件
常见操作系统(软件):Linux、Windows、macOS、Android、iOS、HarmonyOS
Linux系统组成:
- Linux系统内核:开源免费
- 系统级应用程序
使用VMware虚拟机运行Linux(CentOS)操作系统
VMware虚拟机支持为虚拟机制作快照,通过快照将当前虚拟机的状态保存下来,在以后可以通过快照恢复到虚拟机到保存的状态
采用命令行形式(Xshell),效率更高、更加直观,并且资源占用低,程序运行更稳定
Linux目录结构是一个树型结构 ,Windows系统可以拥有多个盘符(一个盘符构成一棵树),如C盘、D盘...;而Linux没有盘符这个概念,只有一个根目录/,所有文件夹都在根目录下
Linux使用yum来安装软件
yum:rpm包软件管理器,用于自动化安装配置Linux软件,并可以自动解决依赖问题
Linux基础命令
Linux命令本体是一个个的二进制可执行程序(在bin目录下),与Windows中的.exe文件是一个意思
命令+选项+参数
个人账户的路径:/home/用户名
-
yum:需要root且联网
-
yum -y(自动确认,无需手动) install|remove|search
-
-
Ctrl+C:强制停止
-
Ctrl+D:退出账户,或退出某些特定程序的专属页面
-
history:查看历史输入过的命令
- !命令前缀,自动执行上一次匹配前缀的命令(适用于近期执行),如:python !p即可执行
- Ctrl+R 输入内容:去匹配历史命令
-
Ctrl+A:跳到命令开头
-
Ctrl+E:跳到命令结尾
-
Ctrl+键盘左键:向左跳一个单词
-
Ctrl+键盘右键:向右跳一个单词
-
Ctrl+L或clear:清空终端内容
-
ls:列出目录下的内容(默认在home目录)
-
ls -l:以列表(竖向排列)的形式呈现
-
ls -a:列出全部文件,包含隐藏的文件或文件夹(以.开头)
-
ls -h:需要和-l搭配使用,更加人性化显示文件大小单位
组合:ls -a -l -h或ls -al 或ls -la
-
-
systemctl:控制软件启动、停止、开机自启
-
systemctl start 服务名:开启软件
-
systemctl stop 服务名:关闭软件
-
systemctl status 服务名:查看软件状态
-
systemctl enable 服务名:软件开机自启
-
systemctl disable 服务名:关闭软件开机自启
-
-
date:查看时间
-
date -d :进行日期加减,如:date -d "+1 day",显示明天的日期
-
date +%Y:年
-
date +%y:年份后两位
-
date +%m:月份
-
date +%d:日
-
date +%H:小时
-
date +%M:分钟
-
date +%S:秒
-
date +%s:自1970-01-01 00:00:00 到现在的秒数
-
-
ifconfig:查看本机IP地址
-
hostname:查看主机名
-
ping IP地址/主机名:检查指定网络服务器是否可联通
-
wget url:文件下载器
- wget -b url:后台下载,会将日志写在wget-log中
-
curl:发送HTTP网络请求
-
curl -O url:下载文件
-
curl url:向url中发送请求
-
-
ps:查看Linux中进程信息
-
ps -ef:
- UID:进程所属用户ID
- PID:进程的进程号
- PPID:进程的父ID
- C:进程的CPU占用率
- STIME:进程启动时间
- TTY:启动此进程的终端序号,若显示?表示非终端启动
- TIME:进程占用CPU的时间
- CMD:进程对应的名称或进程的启动路径或启动命令
-
kill 进程ID:关闭进程
-
kill -9 进程ID:强制关闭进程
-
-
top:查看资源占用情况
-
df -h:查看磁盘使用情况
-
shutdown -h now|具体时间|+-,如shutdown -h now 立马关机;shutdown -h 20:25/+10指定时间关机
-
shutdown -r now|具体时间|+- 重启
-
reboot重启
-
halt 关机
-
文件
-
mkdir:创建新的目录
- mkdir -p:一次性创建多个层级的目录
-
touch:创建文件
-
cat:查看文件内容;直接将内容全部显示出来
-
more:查看文件内容,支持翻页
- 空格翻页
- q退出或Ctrl+C
-
cp:复制文件或文件夹;cp 参数1(源文件或文件夹) 参数2(目标文件或文件夹)
- cp -r:复制文件夹
-
mv:
- 移动文件或文件夹;mv 参数1(被移动的文件或文件夹) 参数2(移动的位置,必须保证目标存在)
- 当移动的位置不存在时具有改名效果,如mv sleep.txt sleep1.txt即将sleep.txt改名为sleep1.txt
-
rm:删除文件或文件夹;支持一次性删除多个(用空格隔开)
- rm -r:删除文件夹
- rm -f:强制删除(不会弹出提示信息)
- 支持通配符*,用来模糊匹配
-
which:找到命令的程序文件存放位置;which+命令
-
find:按文件名/文件大小查找文件
- find 起始路径 -name “文件名”(支持通配符做模糊匹配);如:find / -name "text"
- find 起始路径 -size +|- -n k|M|G;如:find / -size +1G从根目录开始查找大于1G的文件
-
grep:从文件中通过关键字过滤文件
- grep "关键字" 文件路径;如:grep "A" test.txt,在test.txt文件中查找含有“A”的行
- grep -n "关键字" 文件路径;如:grep -n "A" test.txt,在test.txt文件中查找含有“A”的行并显示行号
-
wc:统计文件的行数、单词数量等;wc 文件路径,如:wc test.txt 显示:4(行数)4(单词数) 70(字节数)
- wc -c:统计文件的字节数量(大小)
- wc -m:统计文件字符数量
- wc -l:统计文件的行数
- wc -w:统计文件的单词数量
-
管道符|:将左边命令的结果作为右边命令的输入
-
echo:在命令行输出指定内容
- echo “hello world”;输出:hello world
- echo `pwd`(将反引号中的内容作为命令输出其执行结果);输出:/home/drazil
-
tail:查看文件尾部(默认查看10行),跟踪文件的最新更改
-
tail -n 文件路径:查看文件尾部n行信息
-
tail -f:持续跟踪文件的最新更改
-
-
vi:是Linux中最经典的文本编辑器
-
vim:是vi的加强版本,兼容vi的所有指令,不仅能编辑文本,还具有shell程序编程的功能。可以根据不同颜色字体来辨别语法的正确性,极大方便了程序的设计和编辑
若文件不存在则会创建新文件
工作模式:
- 命令模式:此模式下,所按的都被理解为命令,以命令驱动执行不同功能
- i:在当前光标位置进入输入模式
- a:在当前光标位置之后进入输入模式
- I:在当前行的开头进入输入模式
- A:在当前行的结尾进入输入模式
- o:在当前光标下一行进入输入模式
- O:在当前光标上一行进入输入模式
- 0:移动光标到当前行的开头
- gg:跳到行首
- G:跳到行尾
- /:进入搜索模式
- n:向下继续搜索
- N:向上继续搜索
- esc:回到命令模式
- yy+p:复制某行
- dd:删除光标所在行
- u:撤销
- Ctrl+r:反向撤销
- 输入模式/编辑模式/插入模式:可以对文件内容进行自由编辑
- 底线模式:通常用于文件的保存、退出
- :wq保存并退出
- :q仅退出
- :q!强制退出
- :w仅保存
- :set nu显示行号
- 命令模式:此模式下,所按的都被理解为命令,以命令驱动执行不同功能
重定向符
-
>:将左侧命令的结果覆盖写入右侧指定的文件中
-
>>:将左侧命令的结果追加写入右侧指定的文件中
-
<:输入重定向符,将文件作为命令的输入
目录
-
/bin:存放最经常使用的命令
-
/boot:存放启动Linux时使用的一些核心文件
-
/dev:存放Linux的外部设备
-
/etc:存放系统管理所需的配置文件和子目录
- /etc/passwd中一行记录对应一个用户
-
/home:用户的主目录
shell编程
-
创建XX.sh文件
sh文件第一行: #!/bin/bash
-
写函数体
单行注释:以#开头
多行注释:
:<<EOF
...
EOF
EOF可以用'或者!代替
-
执行文件:bash XX.sh
-
read:读取键盘输入
- read -p:读取前输入
-
echo:输出
-
echo -e " " 不换行输出
echo " "
-
单引号、双引号:双引号里面可以出现变量,可以有转义字符;单引号里面的原样输出
your_name="runoob"
greeting="hello,"$your_name"!"
greeting1="hello,${your_name}!"
echo $greeting $greeting1
greeting2='hello,'$your_name'!'
greeting3='hello,${your_name}!'
echo $greeting2 $greeting3
输出:
hello,runoob! hello,runoob!
hello,runoob! hello,{your_name}!
字符串:
#获取字符串长度
string="abcd"
echo ${#string}
#提取子字符串:从第二个字符开始截取4个字符
string="runboot is a great site"
echo ${string:1:4}
输出:
4
unoo
数组:数组名=(值1 值2 值3...值n)
或array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen
value=${array_name[n]}读取数组中某个元素
value=${array_name[@]}读取数组中所有元素
length=${#array_name[@]}取得数组元素个数
length=${#array_name[n]}取得单个元素长度
参数传递:
echo "第一个参数为:$1"
echo "参数个数为:$#"
echo "传递的参数作为一个字符串显示:$*"
输入:
bash test.sh 1 2 3
输出:
1
3
1 2 3
$ 与 $@ 区别*:
" ***** " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)
echo "--\$*演示--"
for i in "$*"
do
echo $i
done
echo "--\$@演示--"
for i in "$@"
do
echo $i
done
输入:
bash test.sh 1 2 3
输出:
echo "--$*演示--"
1 2 3
echo "--$@演示--"
1
2
3
基本运算:expr 表达式求值
val=`expr 2+2`
echo "两数之和为:$val"
a=5
b=6
result=$[a+b]
echo "result:$result"
输出:
两数之和为:4
result:11
a=10
b=20
val=`expr $a + $b`
echo "a+b: $val"
val=`expr $a - $b`
echo "a-b: $val"
val=`expr $a \* $b`
echo "a*b: $val"
val=`expr $a / $b`
echo "a/b: $val"
val=`expr $a % $b`
echo "a%b: $val"
if[$a==$b]
then
echo "a等于b"
else
echo"a不等于b"
fi
关系运算符:
- -eq == 等于
- -ne != 不等于
- -gt左大于右
- -lt左小于右
布尔运算符:
- !非
- -o或
- -a与
逻辑运算符:
- &&
- ||
for循环:
for var in item1 item2...itemN
do
command1
command2
....
commandN
done
for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done
for str in This is a string
do
echo "$str"
done
输出:
The value is:1
The value is:2
The value is:3
The value is:4
The value is:5
This
is
a
string
while循环:
while condition
do
command
done
int=1
while[$int -lt 5]
do
echo "$int"
let "int++"
done
输出:
1
2
3
4
until循环:直至条件为 true 时停止
a=0
until[! $a -lt 10]
do
echo "$a"
a=`expr $a+1`
done
输出:
0
1
2
3
4
5
6
7
8
9
case:
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac
echo "请输入1-4之间的数字"
echo "你输入的数字是:"
read num
case $num in
1) echo "you choose 1"
;;
2) echo "you choose 2"
;;
3) echo "you choose 3"
;;
4) echo "you choose 4"
;;
*) echo "请输入1-4之间的数"
;;
esac
site="runoob"
case $site in
"runoob") echo "菜鸟教程"
;;
"google") echo "谷歌"
;;
"taobao") echo "淘宝"
;;
esac
软链接
可以将文件或文件夹链接到其他位置(一种指向),类似Windows系统中的快捷方式
ln -s 被连接的文件或文件夹 链接目的地:创建软链接
压缩与解压
-
.tar归档文件,简单的将文件组装到.tar文件中,并没有太多文件体积减少,仅仅是简单封装
-
.gz使用gzip压缩算法将文件压缩到一个文件内,极大压缩体积
-
tar -cvf:压缩,如:tar -cvf test.tar 1.txt 2.txt 3.txt 将1.txt 2.txt 3.txt压缩到test.tar中
f一定要在最后
-
tar -zcvf test.tar.gz 1.txt 2.txt 3.txt 将1.txt 2.txt 3.txt压缩到test.tar.gz中,使用gzip格式
-
zip test.zip a.txt b.txt c.txt 将a.txt b.txt c.txt压缩到test.zip文件中
zip -r test.zip a.txt test yuanyu 将文件夹和文件压缩至test.zip文件中
-
unzip test.zip 将test.zip解压到当前目录
-
unzip test.zip -d /home/yuan 将test.zip解压到指定目录
-
tar -xvf test.tar:解压到当前目录
tar -xvf test.tar -C /home/yuanyu:解压至指定目录
tar -zxvf test.tar.gz -C /home/yuanyu:以gzip模式解压至指定目录
变量
Linux中用$符号被用来取“变量”的值
如:echo ${PATH}
设置临时变量:export 变量名=变量值
针对当前用户生效,设置永久生效:vim ~/.bashrc 添加 export 变量名=变量值
针对所有用户生效,设置永久生效:vim /etc/profile 添加 export 变量名=变量值
用户与权限
在Linux系统中,拥有最大权限的账户名为root(超级管理员),如:普通用户无法在根目录下创建文件夹
普通用户的权限一般在其home目录内是不受限的
Linux的权限管控分为:
-
用户权限控制
-
用户组权限控制
ls -l:权限+用户名+用户组名
权限细节分为10个槽位
第一位:
- -表示文件
- d表示文件夹
- l表示软连接
第二、三、四位:所属用户权限
- r或-:4读或不可读;若针对文件夹则表示可以查看文件夹内容
- w或-:2写或不可写;若针对文件夹则表示可以在文件夹内创建、删除。改名等操作
- x或-:1执行或不可执行;若针对文件夹表示可以cd进入此目录
第五、六、七位:所属用户组权限
- r或-
- w或-
- x或-
第八、九、十位:其他用户权限
- r或-
- w或-
- x或-
-
su:不加用户名表示切换到超级管理员
- su - 用户名:切换用户
-
sudo+命令:为这一条命令临时赋予root身份执行(需要为普通用户配置sudo认证)
在root下修改/etc/sudoers,添加用户名 ALL=(ALL) NOPASSWD= ALL
-
exit:退回普通用户
-
groupadd 用户组名:创建用户组(root下)
-
groupdel 用户组名:删除用户组(root下)
-
useradd 用户名:创建用户(root下)
- useradd -g 用户名:指定用户组创建用户,若不指定则会创建同名组并自动加入
- useradd -d 用户名:指定用户home路径,若不知道则默认在/home/用户名
-
userdel 用户名:删除用户(root下)
- userdel -r 用户名:删除用户的home目录,若不使用 -r则会保存目录
-
id 用户名:查看用户所属的组
-
usermod -aG 用户组 用户名:修改用户所属的组(不会退出原来的组)
-
getent:
- getent passwd:查看所有用户
- getent group:查看所有用户组
-
chmod:修改文件或文件夹权限;只有文件、文件夹的所属用户或root用户可以修改权限
如:chmod u=rwx,h=rx,o=x hello.txt 或 chmod 751 hello.txt 将文件权限修改为:rwxr-x--x
- chmod -R:对文件夹内的全部内容应用同样操作
-
chown:修改文件、文件夹所属用户或用户组(root下)
chown [-R] 用户 : 用户组 文件名
-
chown root hello.txt 将hello.txt所属用户修改为root
-
chown :root hello.txt 将hello.txt所属用户组修改为root
-
chown root:yuanyu hello.txt 将hello.txt所属用户修改为root,所属用户组修改为yuanyu
-
chown -R root test 将test文件夹中所有内容的所属用户都修改为root
-
路径
绝对路径:以根目录为起点
相对路径:以当前目录为起点
特殊路径符:
-
. 表示当前目录
-
.. 表示上一级目录;cd ..返回上一级目录;cd ../..返回上两级目录
-
~ 表示home目录;cd home回家
-
cd:切换工作目录
- 有参数:切换到该目录下
- 无参数:回到用户的home目录下
-
pwd:显示当前工作目录