Skip to main content

前端linux基础

Linux架构体系

Unix/Linux的体系架构

Local Dropdown

Local Dropdown

Linux系统体系结构

Local Dropdown

windows架构体系

Local Dropdown

Local Dropdown

linux常用命令

常见目录

路径描述
/bin存放二进制可执行文件(ls. cat.mkdir等),常用命令一般都在这里
/home存放所有⽤户⽂件的根⽬录,是⽤户主⽬录的基点,⽐如⽤户user的主⽬录就是/home/user,可以⽤~user表示
/usr⽤于存放系统应⽤程序,⽐较重要的⽬录/usr/local 本地系统管理员软件安装⽬录(安装系统级的应⽤)。这是最庞⼤的⽬录,要⽤到的应⽤程序和⽂件⼏乎都在这个⽬录。 /usr/x11r6 存放x window的⽬录/usr/bin 众多的应⽤程序/usr/sbin超级⽤户的⼀些管理程序/usr/doc linux⽂档/usr/include linux下开发和编译应⽤程序所需要的头⽂件/usr/lib 常⽤的动态链接库和软件包的配置⽂件/usr/man 帮助⽂档/usr/src 源代码, linux内核的源代码就放在/usr/src/linux⾥/usr/local/bin本地增加的命令/usr/local/lib 本地增加的库
/opt额外安装的可选应⽤程序包所放置的位置。⼀般情况下,我们可以把tomcat等都安装到这⾥。
/proc虚拟⽂件系统⽬录,是系统内存的映射。可直接访问这个⽬录来获取系统信息。
/root超级⽤户(系统管理员)的主⽬录(特权阶级^o^)
/sbin存放⼆进制可执⾏⽂件,只有root才能访问。这⾥存放的是系统管理员使⽤的系统级别的管理命令和程序。如ifconfig等。
/dev⽤于存放设备⽂件。
/mnt系统管理员安装临时⽂件系统的安装点,系统提供这个⽬录是让⽤户临时挂载其他的⽂件系统。
/boot存放⽤于系统引导时使⽤的各种⽂件
/lib存放跟⽂件系统中的程序运⾏所需要的共享库及内核模块。共享库⼜叫动态链接共享库,作⽤类似windows⾥的.dll⽂件,存放了根⽂件系统程序运⾏所需的共享⽂件。
/tmp⽤于存放各种临时⽂件,是公⽤的临时⽂件存储点
var⽤于存放运⾏时需要改变数据的⽂件,也是某些⼤⽂件的溢出区,⽐⽅说各种服务的⽇志⽂件(系统启动⽇志等。)等。
/lost+found这个⽬录平时是空的,系统⾮正常关机⽽留下“⽆家可归”的⽂件(windows下叫什么.chk)就在这⾥

命令基本格式

命令提示符

[root@xiaoming ~]#

  • root当前登录用户
  • localhost 主机名
  • ~ 当前工作目录,默认是当前用户的家目录,root就是/root,普通用户是/home/用户名
  • 提示符 超级用户是#,普通用户是$

命令格式

  • 命令 [选项][参数]
  • 当有多个选项时,可以写在一起
  • 一般参数有简化和完成两种写法-a--all等效

ls

  • 查询目录中的内容
  • ls [选项][文件或者目录]
  • 选项
    • -a显示所有文件,包括隐藏文件
    • -l 显示详细信息
    • -d查看目录本身的属性而非子文件ls /etc/
    • -h人性化的显示文件大小
    • -i显示inode,也就是i节点,每个节点都有ID号
  • 默认当前目录下的文件列表
-l

显示详细信息

drwxr-xr-x . 1 root root 800 Sep 16 00:19 logs

drwxr-xr-x.1rootroot800Sep 16 00:19logs
文件类型和权限ACL权限硬连接引用计数所有者所属组文件大小最后修改时间文件名
文件类型权限

-rw-r--r--

  • 文件类型-文件、d目录、|软连接文件
  • u(所有者)、g(所属组)、o(其他人)
  • r(read)读取、w(write)写入x(execute)执行

文件处理命令

mkdir

  • 建立目录 make directory
  • mkdir -p [目录名称]
    • -p递归创建

cd

  • 切换所在目录change directory
  • cd [目录]
    • ~家目录
    • 家目录
    • -上次目录
    • .当前目录
    • ..上级目录
  • 相对路径是参照当前所在目录
  • 绝对路进是从根目录开始
  • 按TAB键可以不全命令和目录

pwd

  • 显示当前目录pwd

rmdir

  • 删除目录 remove empty directory
  • rmdir [目录名]

rm

  • 删除文件或者目录remove
  • rm [文件或者目录]
    • -r删除目录
    • -f强制删除
  • rm -rf [文件或者目录] 递归强制删除所有目录

cp

  • copy 复制命令
  • copy [源文件或者目录][目标文件]
    • -r复制目录,默认是复制文件
    • -p连带文件属性复制
    • -d若源文件是链接文件,则复制连接属性
    • -a 相当于-rpd

mv

  • 移动文件或者改名move
  • mv [源文件或者目录][目标文件]

ln

  • 链接命令,生成链接文件link
硬连接特征
  • 拥有相同的i节点和存储block块,可以看作是同一个文件
  • 可以通过i节点访问
  • 不能跨分区
  • 不能针对目录使用
  • 一般不使用
软链接特征
  • ln- s [源文件][目标文件]
    • -s创建软连接
  • 类似Windows快捷方式
  • 软链接拥有自己的i节点和block块,但是数据块中保存源文件的文件名和i节点号,并没有实际的文件数据
  • lrwxrwxrwx | 软链接 软链接的文件权限是777
  • 修改任意一个文件,另一个文件都会改变
  • 删除源文件,软链接不能使用
  • 软链接源文件必须写绝对路径

文件搜索命令

locate

  • 在后台数据库中按照文件名搜索,速度比较快
  • 数据库存在/var/lib/mlocate后台数据库,每天更新一次
  • 可以updatedb命令立即更新数据库
  • 只能搜索文件名

    /etc/updatedb.conof

建立索引的配置文件

  • PRUNE_BIND_MOUNTS='yes'全部生效,开启搜索限制
  • PRUNEFS不搜索的文件系统
  • PRUNENAMES忽略的文件类型
  • PRUNEPATHS忽略的路径/tmp

whereis

  • 搜索命令所在路径以及帮助文档所在位置
  • whereis 命令

whereis ls

  • -b 只查找可执行文件
  • -m只查找帮助文件

which

  • 可以看到别名which ls
  • 能看到的都是外部安装的命令
  • 无法查看Shell自带的命令,入which cd

环境变量

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

  • 定义的是系统搜索命令的路径
  • echo $PATH

find

  • 文件搜索命令
  • find [搜索范围][搜索条件]
按名称搜索
  • 避免大范围的搜索,会非常消耗系统资源

    find / -name aaa.log

通配符
  • find是在系统当中搜索符合条件的文件名,如果需要匹配,使用通配符匹配,通配符是完全匹配
  • 通配符
    • *匹配任意内容
    • ?匹配任意一个字符
    • []匹配任意一个中括号内的字符

      find . -name 'ab[cdef]'

-i

不区分大小写

find / -iname A.log

-user

按照所有者进行搜索

find /root -user root find /root -nouser

按照时间搜索

find /nginx/access.log -mtime +5

参数含义
atime文件访问时间
ctime改变文件属性
mtime修改文件内容
参数含义
-55天内修改的文件
55天前当前修改的文件
+55天前修改的文件
按大小搜索
  • k小写,M大写

    find . -size 100k

参数含义
-8k小于8k
8k等于8k
+8k大于8k
+8M小于8M
按i节点搜索

find . -inum 123456

综合应用

find /tmp -size +10k -a -size -20k

  • 查找/etc目录下,大于10kb并且小于20kb的文件
  • -a and逻辑与, 两个条件都满足
  • -o or逻辑或, 两个调教满足一个就可以

find /tmp -size +10k -a size -20k -exec ls -1h {} \

  • exec 对上个命令的结果进行操作
grep
  • 在文件当中匹配符合条件的字符串
  • grep "10" access.log
    • -i忽略大小写
    • -v排除指定字符串
  • find命令,在当前系统中搜索符合条件的文件名,如果需要匹配,使用通配符匹配,通配符是完全匹配
  • grep命令在文件当中搜索符合条件的字符串,如果需要匹配,使用正则表达式进行匹配,正则表达式包含匹配

帮助命令

基本用法

  • man 命令获取指定命令的帮助
  • man ls查看ls的帮助

    man -f ls whatis ls man 1 ls man 1p ls

关键字搜索

  • man -k passwd

shell内部帮助

whereis 找到就是外部,找不到就是内部 help cd

压缩与减压命令

.zip .gz .baz2 .tar.gz .gar.bz2

zip格式
  • 压缩文件zip压缩文件名源文件
  • 压缩目录 zip -r压缩文件名源目录
  • 解压 unzip压缩文件名

    mkdir book touch book/1.txt touch book/2.txt zip -r book.zip book unzip book.zip

gzip
命令示例含义
gzipgzip a.txt压缩为.gz格式的压缩文件,源文件会消失
gzip -c 源文件 > 压缩文件gzip -c yum.txt > yum.txt.gz压缩为.gz格式的压缩文件,源文件不会消失
gzip -r 目录gzip -r xx压缩目录下的所有子文件,但是不压缩目录
gzip -d 压缩文件名gzip -d yum.ext.gz解压缩文件,不保留压缩包
gunzip 压缩文件gunzip yum.txt.gz解压缩文件,不保留压缩包

压缩是压缩目录下的文件

.bz2格式压缩
命令示例含义
bzip2 源⽂件bzip2 1.txt压缩为.bz2格式的⽂件,不保留源⽂件
bzip2 -k 源⽂件zip2 -k 1.txt压缩为.bz2格式的⽂件,保留源⽂件
bzip2 -d 压缩⽂件名bzip2 -d 1.txt.bz2解压压缩包
bunzip2 压缩⽂件名bunzip2 1.txt.bz2解压压缩包
  • bzip 不能压缩目录
tar
  • 打包命令
  • tar -cvf打包文件名 源文件
    • -c 打包
    • -v显示过程
    • -f指定打包后的文件名

      tar -cvf book.tar book gzip book.tar bzip book.tar

  • x解打包

    tar -xvf book.tar

压缩格式
压缩

tar –cvf jpg.tar .jpg //将⽬录⾥所有jpg⽂件打包成tar.jpg tar –czf jpg.tar.gz .jpg //将⽬录⾥所 有jpg⽂件打包成jpg.tar后,并且将其⽤gzip压缩,⽣成⼀个gzip压缩过的包,命名为jpg.tar.gz tar –cjf jpg.tar.bz2 .jpg //将⽬录⾥所有jpg⽂件打包成jpg.tar后,并且将其⽤bzip2压缩,⽣成⼀ 个bzip2压缩过的包,命名为jpg.tar.bz2 tar –cZf jpg.tar.Z .jpg //将⽬录⾥所有jpg⽂件打包成 jpg.tar后,并且将其⽤compress压缩,⽣成⼀个umcompress压缩过的包,命名为jpg.tar.Z rar a jpg.rar .jpg //rar格式的压缩,需要先下载rar for linux zip jpg.zip .jpg //zip格式的压缩,需 要先下载zip for linux

解压

tar –xvf file.tar //解压 tar包 tar -xzvf file.tar.gz //解压tar.gz tar -xjvf file.tar.bz2 //解压 tar.bz2 tar –xZvf file.tar.Z //解压tar.Z unrar e file.rar //解压rar unzip file.zip //解压zip

关机和重启命令

shutdown

shutdown 关机命令

  • -c 取消前一个关机命令
  • -h 关机
  • -r 重启

shutdown -r 06:00 shutdown -c

init

关机

init 0 重启 init 6

系统的运行级别

  • 0关机
  • 1单用户
  • 2 不完全多用户,不包含NFS服务
  • 3完全多用户
  • 4 未分配
  • 5 图形界面
  • 6重启

logout

退出登陆

logout

查看登陆用户信息

w

查看登陆用户信息

  • USER 登陆的用户名
  • TTY 登陆的终端tty1 本地终端pts/0远程终端
  • FROM 登陆的IP
  • LOGIN登陆时间
  • IDLE用户闲置时间
  • JCPU该终端所有进程占用的时间
  • PCPU当前紧缩所占用的时间
  • WHAT正在执行的命令

who

查看登陆用户信息

  • USEDR 登陆的用户名
  • TTY登陆的终端tty1 本地终端pts/0远程终端
  • LOGIN登陆时间(登陆ip)

last

查看当前登陆和过去登陆的用户信息 默认读取 var/log/wtmp

  • 用户名
  • 登陆终端
  • 登陆IP
  • 登陆时间
  • 退出时间(在线时间)

lastlog

查看所有用户的最后一次登陆时间

  • 用户名
  • 登陆终端
  • 登陆IP
  • 最后一次登陆时间

shell

  • shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序
  • 用户可以用Shell来启动、挂起、停止或者编写一些程序
  • Shell还有一个功能相当强大的编程语言,易编写、易调试、灵活性强
  • Shell是解释执行的脚本语言,在shell中可以直接调成Linux系统命令

查看支持的shell

  • /etc/shells

echo

  • 输出命令
  • --e支持反斜线控制的字符串
控制字符作用
\a输出警告音
\b退格键,也就是向左删除键
\n换行符
\r回车键
\t制表符,也就是Tab键
\v垂直制表符
\onnn按照八进制ASCII码表输出字符,其中0为数字0,nnn是三位八进制数
\xhh按照十六进制ASCII码表输出字符,其中是两位十六进制数

编写执行shell

#!/bin/bash
echo -e "hello word"

通过Bash调用执行脚本

bash hello.sh

别名

  • 命令别名===小名
  • 临时生效
  • alias
  • alias rm 'rm -i'
  • 写入环境变量配置文件vi ~./bashrc
  • source ~/.bashrc
  • unalias 别名删除别名

命令的生效顺序

  • 绝对路径或者相对路径
  • 别名
  • bash内部命令
  • 按照$PATH环境变量定义的目录查找顺序找到的第一个命令

命令

命令含义
ctrl+c强制终止当前命令
ctrl+l清屏
ctrl+a光标移动到命令行首
ctrl+e光标移动到命令行尾
ctrl+u从光标所在的位置删除到行首
ctrl+z把命令放入后台
ctrl+r在历史命令中搜索

历史命令

  • history [选项][历史命令保存文件]
  • 选项
    • -c 清空历史命令
    • -w 把缓存中的历史命令写入历史命令保存文件 ~/.bash_history
  • 默认保存1000条/etc/profile HISSIZE=10000

调用

  • 使用上下箭头调用以前的历史命令
  • 使用!n重复执行第n条历史命令
  • 使用!!重复执行上一条命令
  • 使用!字符重复执行最后一条以该字符串开头的命令

管道符号

多条命令顺序执行

  1. ;分号,没有任何逻辑关系的连接符,使用多个命令用分号连接时,各命令之间的执行成功与否彼此有没有任何影响,都会一条一条执行下去。

  2. ||逻辑或,当用此连接符连接多个命令时,前面的命令执行成功,则后面的命令不会执行。前面的命令执行失败,后面的命令才会执行。

  3. &&逻辑与,当用此连接符连接多个命令时,前面的命令执行成功,才会执行后面的命令,前面的命令执行失败,后面的命令不会执行,与||正好相反。

  4. |管道符,当用此连接符连接多个命令时,前面命执行的正确输出,会交给后面的命令继续处理。若前面的命令执行失败,则会报错,若后面的命令无法处理前面的命令的输出,也会报错。


  • data;ls;date;ls
  • ls && echo yes || echo no

管道符号

  • 命令1的正确输出会作为命令2的操作对象
  • 命令1|命令2
ls /etc/ | more
netstat -an | grep ESTABLISHED | wc -1

通配符

匹配⽂件名和⽬录名 |通配符|作⽤| |:----|:----| |?|匹配⼀个任意字符| |*|匹配0个或任意字符,也就 是可以匹配任意内容| |[]|匹配中括号中任意⼀个字符| |[-]|匹配中括号中任意⼀个字符,-代表范围| | [^]|匹配不是中括号中的⼀个字符|

其他符号

符号作用
''单引号。在单引号中所有的特殊符号,如$和`都没有特殊含义
""双引号,在双引号李特殊符号都没有特殊含义,但是$`\例外,拥有调用变量值,应用命令和转义的含义
``反引号,括起来的是系统命令
$()和反引号一样
#在shell脚本中,#开头的行代表注释
$用于调用变量的值
\ 转义符号
- a = `ls`
- b=$(ls)

vi编辑器

  • VI visual interface
  • 可视化接口
  • 类似与windows中的记事本
  • vim支持多级撤销
  • 跨平台
  • 语法高亮
  • 支持图形界面

操作模式

  • :w 保存
  • :q 退出
  • :!强制保存
  • :ls列出所有的文件
  • :n下一个
  • :N上一个
  • :15跳转到指定的行
  • /xxx从光标位置开始向后搜索xxx字符串
  • ?xxx从光标位置开始向前搜索

用户和用户组

  • 使用操作系统的 人都是用户
  • 用户组是具有相同系统权限的一组用户

用户组

/etc/group

  • /etc/group存储当前系统中的所有组信息
  • group:x123:abc,def
  • 组名称:组密码占位符:组编号:组中用户名列表
  • root组编号为0
  • 1-499系统预留的编号 预留给安装的软件和服务的
  • 用户手动创建的用户组从500开始
  • 组密码占位符都是x

/etc/gshadow

  • 存储当前系统中所有用户的信息
  • user:x:123:345:xxxxx:/home/user:/bin/bash
  • 用户名:密码占位符:用户编号:用户注释信息:用户主目录:shell类型

/etc/shadow

  • 存放当前系统中所有用户的密码信息
  • user:xx:::::::
  • 用户名:密码:

用户操作

添加组

groupadd student

修改组名称

groupmod -n stu student

修改组编号

groupmod -g 111 stu

添加分组并指定编号

groupadd -g 222 teacher

删除分组

groupdel 222

添加分组

groupadd teacher

为用户指定所属组

useradd -g teacher zhangsan

为用户指定所属组

useradd -g teacher lisi

为用户指定工作目录

useradd -d /home/zhangsan zhangsan

指定注释

usermod -c iamatecher zhangsan

修改用户名

user mod -l zhangsan zhangsan2

指定文件夹

usermod -d /home/zhangsan2 zhangsan2

修改用户所属组

usermod -g stu zhangsan2

删除用户

userdel zhangsan2

删除所属文件夹

userdel -r lisi

用户命令

显示登陆的用户名

whoami

显示指定用户信息,包括用户编号,用户名主要组的编号及名称,附属组列表

id zhangsan

显示zhangsan用户所在的用户组

groups zhangsan 

显示用户详细资料

finger zhangsan

附录

系统启动

BIOS

  • 计算机通电后,第一件事就是读取刷入ROM芯片的开机程序,这个程序叫做(Basic Input/Output System)

硬件自检

  • BIOS程序首先检查,计算机硬件能否满足运行的基本条件,这叫做“硬件自检”(Power-On Self-Test)
  • 如果硬件出现问题,主板会发出不同含义的蜂鸣,启动终止,如果没有问题,屏幕会显示CPU、内存、硬盘等信息。

启动顺序

  • 硬件自检完成后,BIOS把控制权转交给下一阶段的启动程序
  • 这时,BIOS需要知道“下一阶段的启动程序“具体放到哪一个设备。
  • BIOS需要有一个外部存储设备的排序,排在前面的设备就是优先转交控制权的设备,这种排序叫做“启动顺序”(Boot Sequence)
  • BIOS按照“启动顺序”,把控制权转交给排在第一位的存储设备
  • 这时,计算机读取该设备的第一个扇区,也就是读取最前面的512个字节,如果这512个字节的最后两个字节是0x55和0x44,表明这个设备可以用于启动,如果不是,表明设备不能用于启动,控制权于是被转交给“启动顺序”中的下一个设备
  • 最前面的512个字节,就叫做“主引导记录”(Master boot record,缩写为MBR)

主引导记录的结构

  • 主引导记录只有512个字节,放不了太多东西。它的主要作用是,告诉计算机到硬盘的哪一个位置去操作系统。
    • 第1-446字节:用来记录系统的启动信息,调用操作系统的机器码
    • 第447-510字节(64个字节)分区表(Partition table),分区表的作用,是将硬盘分成若干个区
    • 第511-512:主引导记录签名(0x55和0xAA)

分区表

  • 硬盘分区是使用分区编辑器在磁盘上划分几个逻辑部分
  • 磁盘一旦划分成多个分区,不同类的目录与文件可以存储进不同的分区表
  • “主引导记录”因此必须知道将控制权转交给那个区
  • 分区表的长度只有64个字节,里面又分成四项,每项16个字节。所以一个硬盘最多只能分成四个一级分区,又叫做“主分区”
    • 第1个字节:如果未0x80,就表示该主分区是激活分区,控制权要转交给这个分区,四个主分区里面只能有一个是激活的。
    • 第2-4个字节:主分区第一个扇区的物理位置(柱面、磁头、扇区号等等)。
    • 第5个字节:主分区类型,比如FAT32、NTFS等
    • 第6-8个字节:主分区最后一个扇区的物理位置
    • 第9-12字节:该主分区第一个扇区的逻辑地址
    • 第13-16字节:主分区的扇区总数。

硬盘启动

  • 计算机的控制权就要转交给硬盘的某个分区了
  • 四个主分区⾥⾯,只有⼀个是激活的。计算机会读取激活分区的第⼀个扇区,叫做"卷引导记 录"(Volume boot record,缩写为VBR)

操作系统

  • 控制权转交给操作系统后,操作系统的内核⾸先被载⼊内存。
  • 以Linux系统为例,先载⼊ /boot ⽬录下⾯的 kernel 。内核加载成功后,第⼀个运⾏的程序 是 /sbin/init 。它根据配置⽂件(Debian系统是/etc/initab)产⽣init进程。这是Linux启动后 的第⼀个进程, pid进程编号为1,其他进程都是它的后代
  • 然后, init 线程加载系统的各个模块,⽐如窗⼝程序和⽹络程序,直⾄执⾏ /bin/login 程序, 跳出登录界⾯,等待⽤户输⼊⽤户名和密码。