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显示行号

    image

重定向符

  • >:将左侧命令的结果覆盖写入右侧指定的文件中

  • >>:将左侧命令的结果追加写入右侧指定的文件中

  • <:输入重定向符,将文件作为命令的输入

目录

  • /bin:存放最经常使用的命令

  • /boot:存放启动Linux时使用的一些核心文件

  • /dev:存放Linux的外部设备

  • /etc:存放系统管理所需的配置文件和子目录

    • /etc/passwd中一行记录对应一个用户
  • /home:用户的主目录

shell编程

  1. 创建XX.sh文件

    sh文件第一行: #!/bin/bash

  2. 写函数体

    单行注释:以#开头

    多行注释:

    :<<EOF

    ...

    EOF

    EOF可以用'或者代替

  3. 执行文件: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:显示当前工作目录


posted @ 2023-03-20 23:03  原语  阅读(51)  评论(0编辑  收藏  举报