前端linux基础
Linux架构体系
Unix/Linux的体系架构
Linux系统体系结构
windows架构体系
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 | . | 1 | root | root | 800 | Sep 16 00:19 | logs |
|---|---|---|---|---|---|---|---|
| 文件类型和权限 | 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 | 修改文件内容 |
| 参数 | 含义 |
|---|---|
| -5 | 5天内修改的文件 |
| 5 | 5天前当前修改的文件 |
| +5 | 5天前修改的文件 |
按大小搜索
- 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
| 命令 | 示例 | 含义 |
|---|---|---|
| gzip | gzip 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
别名
- 命令别名===小名
- 临时生效
aliasalias 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条历史命令
- 使用!!重复执行上一条命令
- 使用!字符重复执行最后一条以该字符串开头的命令
管道符号
多条命令顺序执行
;分号,没有任何逻辑关系的连接符,使用多个命令用分号连接时,各命令之间的执行成功与否彼此有没有任何影响,都会一条一条执行下去。
||逻辑或,当用此连接符连接多个命令时,前面的命令执行成功,则后面的命令不会执行。前面的命令执行失败,后面的命令才会执行。
&&逻辑与,当用此连接符连接多个命令时,前面的命令执行成功,才会执行后面的命令,前面的命令执行失败,后面的命令不会执行,与||正好相反。
|管道符,当用此连接符连接多个命令时,前面命执行的正确输出,会交给后面的命令继续处理。若前面的命令执行失败,则会报错,若后面的命令无法处理前面的命令的输出,也会报错。
- 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 程序, 跳出登录界⾯,等待⽤户输⼊⽤户名和密码。