linux基础知识大纲
https://blog.csdn.net/CSDN___LYY/article/details/80810403
1、Linux操作系统概述
Linux操作系统的发展过程、创始人、GNU计划等
源于UNIX;
得益于GNU计划;
借助internet得以壮大;
推动了*软件、开源软件的发展
1991年底,Limus Torvalds 公开了Linux 内核源码0.02 版
GNU,1984年由RMS(Richard Mathew Stallman)发起,目的是开发一整套与UNIX兼容的*免费软件。
Linux目前的应用:主要应用在服务器领域;在手机、家电等嵌入系统方面,Linux有很好的表现;在桌面领域的扩张也非常快
Linux操作系统的组成,内核的含义
组成
Linux内核
一些GNU程序库和工具
命令行Shell
图形界面的X windows系统和相应的桌面环境,如KDE或GNOME
办公套件、编译器、文本编辑器等工具和应用软件。
内核含义
只是基本的操作系统管理功能,不能直接当操作系统使用,还必须有Shell和各类系统软件和应用软件
了解Linux操作系统的特点,优缺点以及Linux操作系统的发行版本
Linux特点:
免费,良好的移植性(c语言写成,编译到不同硬件平台上相对方便)
支持多用户,多处理机
可完全定制
丰富的网络功能(TCP\IP起源自unix,所以linux天然就有网络上的优势)
出色的安全稳定性
强大的技术支持(开源社区和商业技术支持并存)
良好的兼容
发行版本:
Redhat企业版本
Fedora
CentOS
Debian
Ubuntu
Linux Mint
Mandriva
Suse
红旗Linux
2、shell的基本应用
1)字符界面、图像界面,以及各个终端界面之间的切换
Ctrl Alt Fn
2)超级用户、普通用户的理解
root用户:超级权限者,有且只有一个可以做任何操作。
普通用户:可以创建许多普通用户,并为其指定相应的权限,使其有限地使用Linux系统。
什么是shell,常见的shelll类型,默认的shell
shell是C语言编写的一个命令解释程序,解释执行用户命令或脚本程序。
类型:sh csh bash ksh dash rbash
默认shell:bash
Linux树形目录的含义
逻辑上只有一个*别的根目录“/”,物理上内容可分布在多个磁盘分区上。
Linux的目录结构中主要的目录有:
/:根目录,最特殊的目录,所有目录的起点;
/home:除root以外的用户主目录都在这里;
~:指代每个用户的主目录(/home/用户名);
/bin:存放Linux的常用命令;
/boot:内核和启动文件所在目录;
/etc:系统多部分配置文件所在之处;
/dev:所有设备文件保存在这;
/mnt: 这个目录是空的,系统提供这个目录是让用户临时挂载别的文件系统。
/media:一般用于自动挂载,系统自动挂载的光盘、u盘文件系统都在这下面。
/proc:在磁盘上实际不存在,里面的文件是动态生成的,根据执行的命令,采集系统进程运行状态等信息形成文件放在该目录下。
shell常用基本命令的使用,以及常见的基本参数
pwd命令
用途:查看工作目录(Print Working Directory)当前工作目录
cd 目录名(或指代符号)
进入到指定的目录中,常用指代符号有:
“..”当前目录的上一级目录,
“~”用户的主目录
“-”上一次变更当前目录前所在的目录。
设置普通用户的权限
在root用户下 vi /etc/sudoers
su切换到root用户权限
echo命令
用于在终端显示字符串或变量,格式为:“echo [字符串 | 变量]”
用echo命令查看SHELL变量的值(前面有$符号):
# echo $SHELL
看本机主机名:
# echo $HOSTNAME
date命令
date命令用于显示/设置系统的时间或日期,格式为:”date [选项] [+指定的格式]”。
reboot命令
用于重启系统(仅root用户可以使用)
wget命令
用于使用命令行下载网络文件
格式为:wget [参数] 下载地址
find命令
例:find /home -name “hello” -atime +5 -ok rm -f {} \;
参数:-atime:在指定时间内被存取过的文件,小时为单位
-amin: 在指定时间内被存取过的文件,分钟为单位
-ctime:指定时间内被更改的文件,小时为单位
-cmin:指定时间内被更改的文件,分钟为单位
ifconfig用于获取网卡配置与网络状态等信息
格式为 ifconfig [网络设备] [参数]”。
查看本机当前的网卡配置与网络状态等信息:
# ifconfig
uname命令用于查看系统内核版本等信息
格式为 uname [-a]
查看系统的内核名称、内核发行版、内核版本、节点名、硬件名称、硬件平台、处理器类型、操作系统等
# uname –a
who命令
用于查看当前登入主机的用户情况,
格式为:who [参数]
last命令
用于查看所有系统的登入记录,
格式为:last [参数]
看看当前登录的哪个shell?
echo $SHELL 显示系统变量SHELL的值
用type命令可以准确的告诉你一个可找到的命令的类型和位置
type ksh
exit命令
退出到控制台终端的login(登录)界面
退出虚拟终端,回到图形桌面
命令输入时的快捷键
tab自动补齐命令
输入命令的几个开始字符,按TAB可自动补齐命令
反斜杠“\”:强制换行
快捷键 Ctrl+U:清空至行首
快捷键 Ctrl+K:清空至行尾
快捷键 Ctrl+L:清屏
快捷键 Ctrl+C:取消本次命令编辑
快捷键 Ctrl+D 发送一exit信号,没有那么强烈
Home:跳到行首
End:跳到行尾
清除历史命令
执行:history -c
调用历史命令
!n:执行历史记录中的第n条命令
man open 显示的是open(1),即最前面section
man 2 open 查看open系统调用
top命令
动态监控linux系统状况,用于实时显示进程的状态。
ps命令
提供进程过去信息的一次性快照
磁盘挂载
1 fdisk –l 查看所有挂载硬盘
3.执行命令
mkdir /mnt/usb 自建一个空目录
mount -t vfat /dev/sdc1 /mnt/usb 执行挂载命令
mount 查看所有挂载情况
4.可以进入目录操作U盘了
在u盘上建文件
cd /mnt/usb
ls
vi my.txt
按i,进入编辑,写些内容。按冒号进入末行模式,输入wq保存退出。
ls 显示U盘文件,my文本文件已经存在了:)
复制文件到u盘
cd ~ 到用户目录下新建文件后复制到u盘
touch my2.txt
cp my2 /mnt/usb
5.**卸载**
保证所有的终端或窗口都不在usb目录下
umount /dev/sdc1
点掉虚拟机菜单中的可移动设备,u盘就会转回被windows识别
文件管理
目录操作:ls浏览目录;Mkdir 新建目录、rmdir删除目录;pwd显示当前目录、cd进入目录
cp复制文件、mv移动文件(重命名)、rm删除文件
touch 新建文件、ln 建文件链接
输出文件内容:cat、more可向后翻页、less前后翻页
部分输出文件内容: cut、head
查找文件:find、locate,
grep(按文件内容与指定的字符串匹配查找文件,涉及正则表达式)
chmod设置文件权限
其他:*sort、wc、comm、diff、clear清屏、tar 压缩包处理
进程管理
查看进程状态: ps 、top
进程控制:kill、bg、fg
用户管理
passwd设置密码、who查询当前登录用户
useradd、usermod、userdel
groupadd、groupmod、groupdel
su、sudo 换为root身份
磁盘管理
fdisk、mount 挂载磁盘
df、du,查看磁盘空间
网络管理
ifconfig
ping、 traceroute 、 netstat 、arp、ftp
帮助及其他
man,info
cal、history
管道、别名、重定向的使用
设置别名(alias)
alias [别名]=[需要定义别名的命令]
alias ll=‘ls –al’
注意事项:
等号两端不能空格,字符串最好加引号
浏览别名:$ alias
取消别名:$ unalias 命令
写入配置文件:为命令取的别名在该次登录期间始终有效。若要别名在每次登录时都有效,需将alias命令写到初始化脚本文件中。
输入输出流的重定向
输入
获得键盘输入后写入到testfile中,按ctrl+d结束输入。
cat >testfile
从test.sh获得输入数据,然后输出给catfile文件
cat >catfile <test.sh
输出
> 会覆盖文件原内容;>> 则是在原内容后追加
可利用重定向快速建立文件:
echo “hello” >testfile
0 代表stdin标准输入
1 代表stdout标准输出
2 代表stderr标准错误输出
命令 >file (默认为1)
输出重定向到文件file,终端上只会有标准错误输出。
命令 2>file
错误提示重定向到文件file,终端上只会有标准输出。
屏蔽命令的任何输出
cp /etc/my.conf >/dev/null 2>&1
这是一个没有实际意义的错误命令,只演示一个没有任何信息或错误提示输出的命令执行。
cp命令没有目标文件,应该输出错误。
2>&1表示错误重定向指向标准输出。
>/dev/null又使标准输出重定向到空设备,最后就是没有任何输出信息。
管道符“|”
前一个的结果作为后一个命令的输入
ls | head -5 (此为“横杠5”不是减号5) (head -n –(+)k的建议用法)
浏览当前目录下的文件信息,但只显示前五条
找不同:
准备工作:
echo “1hello” >>testfile
echo “2hello” >>testfile
echo “3hello” >>testfile
//
head –n +2 testfile 前面两条数据 等同(head –n 2 testfile)
head –n -2 testfile 除了最后两条数据的所有条数据
tail -n 3 testfile 最后三行数据 等同(tail -n -3 testfile)
tail -n +3 testfile 除了前三行数据的其他所有数据
压缩文件命令
tar –zxvf a.gz
该命令将压缩包a.gz解压
-z 说明是解压.GZ类型文件
-x 说明是解压操作
-v 显示详细信息
-f 必须,表示使用归档文件
帮助命令
[命令] ——help
man [命令]
man [选项] 命令名称
常用选项 说 明
-S 根据章节显示,一个命令可能会有很多类别,类别说明见下表
-f 只显示出命令的功能而不显示其中详细的说明文件
-w 不显示手册页,只显示将被格式化和显示的文件所在位置。
-a 显示所有的手册页,而不是只显示第一个。
-E 在每行的末尾显示$符号
举例
1)
man passwd
man –S 5 passwd
2)open,kill这种既有命令,又有系统调用,也可用章节限定查找的范围
man open 显示的是open(1),即最前面section
man 2 open 查看open系统调用
info [命令]
几个操作命令
q:退出man状态
enter: 逐行阅读man 文件
空格键:逐页阅读man 文件
b键:向前翻页
/string: 查找string 字符串
cal命令
语法:cal [参数]… [ [月份] 年份 ]
说明:显示指定月份的日历,默认为当前月份。
参数说明:
-3 显示指定月份的前一个月、指定月份、下一个月三个月的日历
-m 以“星期一”为星期的起始
-w 在每栏下面显示星期数
-y 显示指定年份所有月份的日历
history
语法:history [参数]
说明:显示输入过的所有命令。
搭配grep的正则表达式
∧表示开始位置,$表示结束位置,[a-z]表示字符的范围,
.表示任意字符出现一次或更多次
查看以英文字母开头,/结束的行
ls -F |grep “[a-z]./$”
file命令
语法:file [选项] … [-f] 文件 …
说明:显示指定文件的类型与编码格式。
参数说明:
-b 以简明方式显示信息
-f 指定该选项后面的字符串为文件列表
-z 查看压缩文件内部的文件信息
-d 显示调试信息
-s 按照普通文件处理特殊文件(如字符设备文件
wc命令
-c 字节
-w word
-l line
统计当前目录下的文件数和目录数
# ls -l |grep "^-"|wc –l
# ls -l |grep "^d"|wc -l
cat命令
将文件和标准输入设备的输入使用标准输出流输出。常被用来显示文件的内容。
cat /etc/passwd
参数说明:
-b 对所有的非空行进行编号输出
-n 对所有的行进行编号输出
-T 将所有的“Tab”显示成“^I”
-s 对于连续出现的多个空行,仅输出一个空行
-E 在每行的结束位置输出“$”
more命令
显示文件内容,每次显示一屏。常与其他命令结合使用:
ls -–help |more
注意: more命令中按“ENTER”是向后移动一行,按“SPACE”是向后移动一页,按“q”退出。
less命令
ls -–help |less
与more相似,但浏览文本时允许翻页来回看。Less并不在一开始就读入整个文件,因此在打开大型文件时比vi等文本编辑器快。
cut命令
截断显示文件中的内容,常用于对/etc/ passwd 类的文件进行处理:
显示每行从开头算起 n1 到 n2 的文字。
cut –c n1-n2 file
以空格为分隔符,显示第2个字段
cut –f 2 –d “ ” file
sort命令
对文件内容进行排序显示:
cat /etc/passwd 默认是按进程号排序
sort –t’:’–k3 -nr /etc/passwd
参数说明:
-t 分隔符:使用分隔符隔开不同区块,默认是tab
+start -end:由第start区块排序到end区块
-n:使用纯数字排序(默认是以字母方式排序)
-r:反向排序
-u:相同出现的一行,只列出一次
-k:按那个字段来进行排序
touch命令
创建新文件、修改文件时间
touch newfile1
touch –a –t 200012301111 newfile1
修改文件访问时间为2000.12.30,11:11。
参数选项:
-a:仅修改文件访问时间access tiem
-m:仅修改文件修改时间mtime
-c:仅修改时间,而不建立文件
-d:后面可以接日期,也可以使用 –date=“日期或时间”
-t:后面可以接时间,格式为【YYMMDDhhmm】
mv [选项] 源文件或目录 目标文件或目录
-f 若目标文件或目录名已存在则直接覆盖(缺省参数复制文件时也是覆盖)
-i 覆盖前先行询问用户。
-u 在移动或更改文件名时,若目标文件已存在,且其文件日期比源文件新,则不覆盖目标文件。
-v 执行时显示详细的信息。
-b 若需覆盖文件,则覆盖前先backup
-S<附加字尾>,与-b参数一并使用,可指定备份文件的所要附加的字尾。
-V=<方法> 与-b参数一并使用,可指定备份的方法。
cp [选项] 源文件 目标文件
- a 常在拷贝目录时使用。保留链接、文件属性,并递归地拷贝目录,作用等于dpr选项的组合。
- d 拷贝时保留链接。
- p 把修改时间和访问权限等属性也复制到新文件
- r 此时目标文件必须为一个目录名。将递归复制该目录下所有的子目录和文件。(-R,一般与-r等价,但递归复制特殊文件如FIFO文件或/dev/zero的时候,用-R)
- f 目标文件已存在的直接覆盖而不提示。
- i 覆盖目标文件之前给出提示需求用户确认。
- l 不作拷贝,给源文件建硬链接文件。
rm [–参数] 文件或目录
默认删文件或目录时不询问确定,
-i 删除前先询问用户。
-f 强制删除。
-r 递归处理,将指定目录下的所有文件及子目录一并处理(或-R) 。
-v 显示指令执行过程
tar -主选项 [辅选项] 包名 [文件或者源/目的目录]
主选项:必须要有
-c 建立新的备份文件
-x 从档案文件中释放文件
-t 列出备份文件的内容
-r 追加新文件到已存在的备份文件
-u 用新文件更新包里的文件,如果文件没有,则追加到包的最后
辅选项:
-f 使用档案文件或设备,这个选项通常是必选的,且写在选项的最后。
-v 详细报告tar处理的文件信息。
-C 释放包时指定释放的位置
-z 用gnzip压缩处理备份文件
-j 用bzip2压缩,压缩率大于 -z
3.Shell执行的命令分为:
内置命令
例:whereis cd 没有结果,可见cd是内置命令
外部命令(对应一个程序文件,执行该命令时,由shell根据路径环境变量查找到命令对应的文件,触发其执行)
例:whereis ls 可看到它是在/bin目录下
3、vi的使用
1)vi的三种工作模式以及之间的切换
Vi有三种基本的工作模式:指令行模式、文本输入模式、行末模式。他们的相互关系如所示。
指令模式(Command Mode) 下输入 a、i、o进入文本输入模式(Input Mode)
文本输入模式(Input Mode) 下按ESC进入指令模式(Command Mode)
指令模式(Command Mode)下输入:进入末行模式(Last line Mode)
末行模式(Last line Mode)下指令错误则返回指令模式(Command Mode)
2)常用的保存、删除、复制等常见指令
1.复制剪切粘贴撤销
复制:
复制一行则:yy
复制三行则:3yy,即从当前光标+下两行。
复制当前光标所在的位置到行尾:y$
复制当前光标所在的位置到行首:y^
剪切:
剪切一行:dd
前切三行:3dd,即从当前行+下两行被剪切了。
剪切当前行光标所在的位置到行尾:d$
剪切当前行光标所在的位置到行首:d^
粘贴:
用v选中文本之后可以按y进行复制,如果按d就表示剪切,之后按p进行粘贴。
撤销与恢复:
'u' : 撤销上一个编辑操作
'ctrl + r' : 恢复,即回退前一个命令
'U' : 行撤销,撤销所有在前一个编辑行上的操作
3.移动光标指令
移动光标普遍使用的是方向键,考虑兼容问题,vi定义太多的方向指令,下面只是一小小部分(常用的几个):
space: 光标右移一个字符
Backspace: 光标左移一个字符
Enter: 光标下移一行
nG: 光标移至第n行首
n+: 光标下移n行
n-: 光标上移n行
n:光标移至第n行尾0:光标移至当前行首
: 光标移至当前行尾
4.插入删除指令
常用插入、删除指令如下:
i:在当前光标前插入,光标后文本向后移
a:从当前光标后插入,光标后文本后移
I:在光标所在行首插入(第一个非空白字符前)
A:从光标所在行末插入
o: 在光标所在行下面新增一行(并进入输入模式)
O: 在光标所在行上方新增一行(并进入输入模式)
x: 删除光标所在字符,等同于[Delete]功能键
X: 删除光标前字符,相当与[Backspace]
dd: 删除光标所在的行
r: 修改光标所在字符
R: 替换当前字符及其后的字符,直到按 [ESC]
s: 从当前光标位置处开始,以输入的文本替代指定数目的字符
S: 删除指定数目的行,并以所输入文本代替之
do: 删至行首
d$: 删至行尾
3)vi常见的3、末行模式(Last line Mode)
末行模式主要进行一些文字编辑辅助功能,比如字串搜索、替代、保存文件等操作。主要命令如下
:q -----结束Vi程序,如果文件有过修改,先保存文件
:q! -----强制退出Vi程序
:wq -----保存修改并退出程序
:set nu -----设置行号查找、替换等
/word 向光标之下搜索word
?word 向光标之上搜索word
4、用户和组的管理
1)/etc/passwd /etc/shadow /etc/group /etc/gshadow四个文件,理解用户、组的概念,各个字段的含义等。
用户文件:/etc/passwd
用户密码文件:/etc/shadow
用户组文件:/etc/group
用户组加密信息文件:/etc/gshadow
查询系统中所有用户
alias alluser=‘cut –d‘:’ -f1 /etc/passwd’
查看普通用户
alias user=‘cut –d‘:’ -f1,6 /etc/passwd |grep /home’或‘grep /home /etc/passwd |cut –d‘:’ -f1,6 ’
2)如何创建删除用户(组)、设置密码等,掌握常见参数的使用
2.1用户管理
passwd [参数] [用户名] (修改用户密码)
-d 删除指定用户的密码
-l 锁定指定的用户
-u 解除指定用户的锁定
-wn 设定n为密码过期警告的天数
添加删除用户
只有超级用户才能新建\删除用户
adduser、deluser比useradd、userdel更方便些
交互性好
useradd 【选项】 用户名
-c 全名:指定用户的全称
-d 主目录:指定用户的主目录
…
userdel 【-r】用户名
-r选项,系统不仅将删除此用户帐号,并且还将用户的主目录也一并删除
修改用户属性——usermod
sudo usermod –g 有sudo权限的组 user
主要选项说明:
-c 全名:指定用户的全称
-d 主目录:指定用户的主目录
-e 有效期限:指定用户帐号的有效期限
-f 缓冲天数:指定口令过期后多久将关闭此帐号
-g 组群ID|组群名:指定用户所属的主要组群
-G 组群ID|组群名:指定用户所属的附加组群
usermod -G 附属组1,附属组2,...,附属组X 用户名
为防止覆盖原来为“附属组名”,可添加-a参数:
usermod -a -G 附属组名 用户名
-s 登录Shell:指定用户登录后启动的Shell类型
-u 用户ID:指定用户的UID
-l 用户名:指定用户的新名称
2.1组管理命令
添加组账号:
格式:groupadd [-g GID] 组帐号名
组成员管理:
格式:groupmod [选项]... 组帐号名
删除组帐号:
格式:groupdel 组帐号名
3)文件目录的权限和归属 数子法、字符法等
chmod [-参数][选项] 文件和目录列表
文字设定法
$chmod o+w my.txt
$chmod ug+w,o-w my.txt
$chmod +w my.txt
$chmod –R +w myfoder(-R子目录递归处理)
u:所有者;g:同组用户;o:其他用户;a:所有用户(默认)
r;w;x;(其他属性s, t, u, g, o)
数字设定法
用八进制数对应顺序rwx
如777:111 111 111 即rwxrwxrwx
664:110 110 100 即rw-rw-r—
权限掩码命令:umask
查看下新建的文件或目录一般是什么权限?
文件 664
目录 775
查看系统默认设置的权限掩码umask,发现普通用户和root不同,为了安全,root掩掉的权限位多
将当前目录下的所有的C语言程序文件拷贝至 Finished 子目录中
cp *.c Finished
删除所有自建的测试文件(命名风格要统一才方便批量处理)
rm test*
rm –r dir*
4)修改文件的权限、归属
5)特殊权限不考
5、shell编程
1)shell脚本的执行和基本组成
一般以.sh为文件后缀。
常见的两种执行方式
文件全路径名
要求文件必须有执行权限,如chmod 755 run.sh
./run.sh 执行当前目录下的run.sh文件
sh文件全路径名
sh 目录/run.sh
文件开头可指定一个或多个解释脚本程序的shell,如 #!/bin/bash,注意/bin不要漏了“/”
2)shell脚本中特殊符号的含义
注释符#
除了#!/bin/bash里的#特殊
美元符$
使其后的普通字符作为变量。
如:$a表示变量a的值。变量字符长度超过1个字符用{}括起来。
单引号’
强制取消转义符号作用,被引起的字符全部做普通字符,即全部原样。
echo ‘my $SHELL’
双引号”
引号内的内容,除$、转义符\、倒引号`这三个保留特殊功能,其他字符均强制做普通符。
倒引号`
引号内的字符串当做shell命令行解释执行,得到的结果取代整个倒引号括起来的部分。
转义字符
反斜线是转义字符,它能把特殊字符变成普通字符。在某个字符前面利用反斜杠(\)能够阻止shell把后面的字符解释为特殊字符。
例:
$ echo “Filename is N0\$\*”
Filename is N0$*
通配符
1. “*” 代表0个或者多个特殊字符
例子 yum.* 代表的可以使yum.也可以是yum.a、yum.ab、yum.abc 当然小数点后面可以有多个字母
2. “?”代表任意一个字符
例子 : yum.?
可以是yum.a ,yum.b ,yum.c,
小数点后面必须有任意一个字符
3.中括号[]
代表的是中括号中的任意一个,如[abcdef] 可以是a b c d e f 中的任意一个字母
[-]代表的是一个范围
[a-z] 表示可以是字母a到z之间的字母
ls [1-5]*
[^] ^是反向选择符号从字面意思可以知道也就是非的意思
[^abc] 表示只要不是a b c 这三个字符中的任意一个就选择
4.花括号{}
通过括号扩展可以生成需要的字串,括号中可以包含连续的序列或使用逗号分隔的多个项目,连续的序列包括一个起点和一个终点
#echo {a,b,c}
a b c
3)shell脚本中的位置参数 shell变量
常用于SHELL参数检测的有
$# 命令行参数个数
$* “参数1 参数2…”形式保存的所有参数
$@ “参数1”“参数2”…形式保存的所有参数
$n 第n个参数
$? 前一个命令或函数的返回码
$0 当前程序名
$$ 本程序的PID
$! 上一个命令的PID
export用于定义或修改环境变量。
普通变量可以不用声明就可使用。
$ export TEST=“Test...” #定义一个新环境变量。
$ export TEST=$TEST:“add1”#向环境变量TEST中加入新值。
$ unset TEST #删除变量
$ readonly TEST #将环境变量TEST设为只读,只读的变量不能被删除。
env命令显示所有已定义的环境变量
【修改环境变量】
两种方式:
在命令行用export命令修改,只在本次登录的shell内有效。设置好的环境变量可以在当前用户运行的所有程序中使用。
在配置文件中修改环境变量的默认值,新登陆仍可有效。
命令行修改环境变量
以下在用户user主目录下操作:
mkdir shdir && cd shdir
vi hello
chmod 755 hello
cd ~
export PATH=$PATH:$HOME/shdir
在任何目录下,输入hello即可执行该文件。
配置文件中修改环境变量
以下在用户user主目录下操作:
vi .profile
在文件末尾添加一行
export PATH=$PATH:$HOME/shdir
esc返回命令模式,:wq保存退出。
用source命令使配置文件立即有效
source .profile
现在,在任何目录下即可执行shdir目录下的所有可执行文件了。
直接赋值
a=78
将一个命令执行的输出赋给指定的变量
a=`date`
从标准输入设备读入用户输入的值
read a
4)能够理解简单脚本的含义,分析shell脚本程序
条件测试命令test
test -参数 n1 #一元判断
test n1 -参数 n2 #二元比较
注意参数与判断的变量间要空格;
条件测试式
[ -参数 n1 ] #一元判断
[ n1 -参数 n2 ] #二元比较
中括号与参数间要有空格
真返回0,假返回1
①整数比较
test 1 –lt 4 #判断1<4
echo $? #结果为0
整数判断相关参数:
-eq 等于
-ne 不等于
-lt less than
-le 小于等于
-gt greater than
-ge 大于等于
②字符串
注意加双引号
[ “$a”=“hello” ]
[ –z “$a” ] 字符串长度是否为0(是否空字符串)
= 等于
!= 不等于
> 按字符编码表排序,前面的是否在后面字符的前面
-z 字符串长=0,空字串
-n 字符串长>0,非空字串
判断字符串为空的三种方法:
if [ “$str” = “” ]
if [ x“$str” = x ]
if [ -z “$str” ] (-n 为非空)
注意:都要带双引号,否则有些命令会报错,养成好习惯
③逻辑操作
[ “$a”=“hello” –o –z “$a” ]
echo $? 显示上一步结果
-a 逻辑与
-o 逻辑或
! 逻辑非
逻辑判断举例
条件1 && 条件2
条件1 || 条件2
例子:
#!/bin/bash
x=5
y=10
if [ “$x” -eq 5 ] && [ “$y” -eq 10 ]
then
echo “Both conditions are true.”
else
echo “The conditions are not true.”
Fi
④ 判断文件
[ -d mydoc ]
判断mydoc是否是目录
-f 存在且是普通文件
-d 存在且是目录
1)分支结构
if
if [ $# -eq 0 ]
then
echo “输入了0个参数”
elif [ $# -lt 1 ]
then echo “输入了多个参数”
else echo “输入了1个参数”
fi
case
case $# in
0) echo “输入了0个参数”;;
1) echo “输入了1个参数”
echo “参数是$1”;;
*) echo “输入了多个参数”;;
Esac
2)循环结构
for
例子——输出100内10的倍数
for i in `seq 1 9`
do
echo `expr $i \* 10`
done
改为输出a到b序列数各数的10倍数:
read a b
for i in `seq $a $b`
5)能够编写简单的shell脚本
6、文件系统与磁盘管理
1)磁盘以及各个分区的表示含义
硬盘和分区的结构:
主分区,一个硬盘允许4个主分区
扩展分区:一个主分区可做扩展分区,只用于容纳逻辑分区,并不建立文件系统
逻辑分区:在扩展分区上创建, 使用5-63的识别号
2) 文件链接
硬链接(Hard Link)默认情况下,ln产生硬链接。原文件和连接文件的FCB记录了相同的inode地址。
建立硬链接时,链接文件和被链接文件必须位于同一个文件系统中,并且不能建立指向目录的硬链接
ln newfile oldfile
符号链接(Symbolic Link)。和win下的快捷方式差不多。包含所链接文件的路径。可链接任意文件或目录,可链接不同文件系统的文件,甚至可以链接不存在的文件,网络文件。
ln -s newfile oldfile
一个目录至少有2个硬链接:目录本身的相对目录“.”,以及作为其子目录的父目录“..”都指向它。所以,如果目录下新建一个子目录,硬链接数为3。
2)常见文件系统
文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构;即在磁盘上组织文件的方法。
Windows系统有fat32,ntfs
Linux中默认使用的文件系统类型
EXT4, 第4代扩展(Extended)文件系统
SWAP,交换文件系统
Linux支持的其它文件系统类型
FAT16、FAT32、NTFS
XFS(RHEL7)、JFS
3)理解文件分区、格式化、磁盘挂载
设备文件:
所有的设备都在/dev下有对应的设备文件,U盘作为磁盘设备,linux把它识别为一个设备文件。fdisk –l,可查看全部设备号。
挂载:
Linux中使用设备都需要将设备挂载到一个空目录,通过对目录的操作访问设备里的内容。mount 命令可将设备挂载到目录。
mount命令
用途:挂载文件系统、ISO镜像到指定文件夹
格式:mount [ -t 类型 ] 存储设备 挂载点目录
mount -t vfat /dev/sda1 /mnt/win
umount命令
用途:卸载已挂载的文件系统
格式:umount 存储设备位置
umount 挂载点目录
文件系统开机自动挂载 (永久挂载)
/etc/fstab配置文件
包含了需要开机后自动挂载的文件系统记录
分区工具fdisk
fdisk -l 列出硬盘分区信息
fdisk /dev/sda 交互模式操作sda设备
m显示所有可用命令
p显示硬盘分区信息
n、e、p创建新、扩展、主分区
t更改分区文件系统
d删除硬盘分区
w、q保存、不保存退出
格式化文件系统mkfs
mkfs 参数 –t 文件系统类型 设备名
mkfs–t ext3 /dev/sda5
(1)挂载光盘
光盘驱动器的设备名为cdrom挂载到/mnt/cdrom下
mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
(2)挂载硬盘
若Windows装在sda1分区,要把它挂载到/mnt/win下
mkdir /mnt/win
mount -t vfat /dev/sda1 /mnt/win
若将装在sda7上的Linux磁盘分区挂载到/mnt/linux1下
mkdir /mnt/linux1
mount -t ext4 /dev/sda7 /mnt/linux1
(3)挂载移动设备
USB接口的移动硬盘当作SCSI设备对待,先通过fdisk –l查看系统的硬盘和分区情况,再挂载到一个准备的空目录中
mkdir /mnt/usb
mount /dev/sdb1 /mnt/usb
4)理解一次性挂载和永久性挂载
5)了解逻辑卷,知道逻辑卷的创建和删除顺序
物理存储介质(Physical Media)
指系统的存储设备,硬盘或者分区
如/dev/sda5,/dev/hdb1等,是存储系统最底层的存储单元
PV(Physical Volume,物理卷)
整个硬盘,或使用fdisk等工具建立的普通分区
包括许多默认4MB大小的PE(Physical Extent,基本单元)
LVM的基本存储单元
VG(Volume Group,卷组)
一个或多个物理卷组合而成的整体
LV(Logical Volume,逻辑卷)
从卷组中分割出的一块空间,用于建立文件系统
(1)新建空分区
使用分区工具fdisk创建LVM分区,方法和创建其他一般分区的方式是一样的,需要注意通过t命令将LVM的分区类型改为8e
(2)初始化分区(创建PV)
pvcreate将空分区/dev/sdb5创建为物理卷
pvcreate /dev/sda5
(3)vgcreate创建卷组
vgcreate –s 块大小 卷组名 物理卷设备名
vgcreate –s 8m vg0 /dev/sdb5
卷组名唯一 不能与/dev中的文件名冲突
(4)创建逻辑卷
lvcreate -n 【逻辑卷名】 –L 【逻辑卷大小】 【已存在卷组名】
lvcreate –L 200MB –n lv0 vg0
卸载物理卷 pvremove PVDEVICE
卸载卷组 vgremove VGNAME
卸载逻辑卷 lvremove LVDEVICE
卸载卷时,需要注意两个事项
1)卸载逻辑卷前,先umount逻辑卷的目录挂载点
2)卸载卷组前,必须先卸载所有使用到该卷组的逻辑卷
7、软件管理和进程管理
1)理解红帽使用的软件包为rpm包
2)yum install 软件包 yum remove 软件包
3)rpm -ivh *.rpm
4)理解Linux的进程的概念,理解跟程序的区别
程序
静态保存的代码和数据
保存在硬盘、光盘等介质中
进程
在CPU及内存中动态执行的代码
父、子进程:每个进程可以创建一个或多个进程
5)理解Linux进程的状态
进程状态
R表示进行状态;S表示休眠状态;T表示暂停或终止状态机;Z表示僵死状态。
1)运行态 运行或准备运行
2)等待态
可中断(TASK_ITERRUPTIBLE)
不可中断(TASK_UNITERRUPTIBLE)
3)停止态(TASK_STOPPED)
4)僵死态(TASK_ZOMBIE)
6)前台进程、后台进程的启动、切换
CTRL+Z 挂起当前的前台作业
jobs命令可查看后台作业清单
作业号 状态 命令名
fg 作业号:将任务放回前台执行
bg 作业号:将任务放到后台执行
find / -name f*
7)进程的常见命令ps top kill 等的使用
进程查看
ps aux
a:显示当前终端下的所有进程信息
u:使用以用户为主的格式输出进程信息
x:显示当前用户在所有终端下的进程信息
top
和ps命令的基本作用是相同的,显示系统当前的进程及其状态,但是top是一个动态显示过程
显示结果排序的操作
缺省按照cpu使用情况排序
m键:按照内存排序
t键:运行时间进行排序
u键,键入用户名,查看某一用户的CPU使用情况
k键,输入PID,可终止某一进程
q键,退出top
kill
Kill命令
通过向进程发送信号控制进程,可用于结束后台进程。
–信号 或 -s 信号 :发送信号到指定的进程
-l 信号 :将信号数值翻译成信号名称
常用:kill -9 PID 无条件撤销进程
即 kill -KILL PID
执行kill时一定观察好PID号,以免误删系统进程。 kill执行是否成功,可用ps检查被结束进程号是否还存在即可。
8)了解简单的计划任务
at命令
在指定的日期、时间点自动执行预先设置的一些命令操作,属于一次性计划任务
服务脚本名称:/etc/init.d/atd
设置格式:at [HH:MM] [yyyy-mm-dd]
管理cron计划任务
编辑计划任务:crontab -e [-u 用户名]
查看计划任务:crontab -l [-u 用户名]
删除计划任务:crontab -r [-u 用户名]
8、简单的网络接口的命令 nmcli ip addr ifconfig ping 等的基本使用
【配置网络接口】——ifconfig
ifconfig [参数]… [接口] [操作]
ifconfig eth0 192.168.1.10 netmask 255.255.255.0
ifconfig eth0 192.168.1.10/24
Ifconfig eth0 up
参数说明:
-a 显示所有可用的接口信息,包括未连接的接口
-s 显示短列表
-v 在发生错误的情况下显示更多的错误信息
查看网卡信息
ip addr (可简写为 ip a )
ip addr show eno0
给网卡手动添加一个地址
ip addr add IP地址 设备名称
删除一个地址
ip addr del IP地址 设备名称
看网关
netstat –rn (route -n)
traceroute www.某某
ip route
看DNS
cat /etc/resolv.conf
nslookup 127.0.0.1
dig
配置网络接口】——nmcli
nmcli强大之处在于
使用一条命令实现ifconfig、route、ip 等其他的功能
②做的修改可以自动同步到配置文件之中长期有效,不需手工修改配置文件,
输入nmcli ,按Tab,系统会提示该命令后面作用于的对象名
【网络连通测试】——ping
ping [参数]… 目标地址
通过发送ICMP的ECHO_REQUEST报文,探测网络连通状态。默认情况将无限次的重复发送。
参数说明:
-b 目标地址允许是广播地址
-c N 设置发送的次数
-i 间隔 设置发送报文间的间隔,默认值为1秒
-n 仅适用数字输出
-q 不输出每次发送报文的结构,仅显示综合信息
-v 输出更多的信息
9、Linux下的C编程
1)gcc的使用,编译过程
编译执行
gcc hello.c 编译生成可执行文件,结果为a.out
或
gcc –o hey hello.c 编译生成可执行文件,指定结果文件名为hey
参数
-o
指定输出的文件名
-g
产生符号调试工具(GNU的GDB)所必要的符号信息,要想对源代码进行调试,
必须加入这个选项。
gcc是c语言程序编译器。一个C语言程序编译过程如下:
编辑:写源码
预处理:系统加载头文件和展开宏,仅对文本信息处理,是编译前的准备、整理。
编译:将C语言转换为对应的计算机机器码,生成二进制文件。但若有多个模块,此时的文件还不能执行,因为各模块还相对独立,相互使用的地方还是标记。
链接:将模块合成一个可执行的整体。
gcc通过分别调用预处理、编译、链接工具,自动完成C程序的编译工作。
2)理解四个系统调用的使用
Fork()-父亲克隆一个儿子。执行fork()之后,兵分两路,两个进程并发执行。
调用fork程序运行就发生分叉,变成两个控制流程,这也是“fork”(分叉)名字的由来。
子进程克隆父进程
父子进程内存空间代码相同,除非儿子用exec另启门户做其他工作。
一次调用,两个返回值
fork调用后,系统会在子进程中设置fork返回值是0,而父进程内存空间中fork的返回值则是子进程的pid。
Exec()-新进程脱胎换骨,离家独立,开始了独立工作的职业生涯。
Wait()-等待不仅仅是阻塞自己,还准备对僵死的子进程进行善后处理。
阻塞自己,等待第一个僵死子进程,进行下面操作,否则一直阻塞下去。
收集僵死子进程信息
释放子进程pcb,返回
调用成功,返回被收集子进程的PID;如果没有子进程,返回-1。
Exit()-终止进程,把进程的状态置为“僵死”,并把其所有的子进程都托付给init进程,最后调用schedule()函数,选择一个新的进程运行。
程序执行结束或调用exit后,进程生命就要终结,但进程不是马上消失,而是变为僵死状态——放弃了几乎所有内存空间,不再被调度,但保留有pcb信息供wait收集,包括:
正常结束还是被退出
占用总系统cpu时间和总用户cpu时间
缺页中断次数,收到信号数目等
利用参数status传递进程结束时的状态
3)能够分析四个系统调用的运行结果
关于并发顺序
父子进程并发,linux优先调度执行子进程比较好。
分析:如果先调父进程
因为fork将父进程资源设为只读,只要父进程进行修改,就要开始“写时复制”,把父进程要改的页面复制给子进程(写子空间)。
继续运行,一旦子进程被调度到,它往往要用exec载入另一个可执行文件的内容到自己的空间(又写子空间),可见上步的写入就多余了。
所以,fork后优先调度子进程可从父进程克隆到子进程后,尽量减少没必要的复制。
子进程调用exec使地址空间被填入可执行文件的内容,子进程的PID不变,但进程功能开始有别于父进程。
注意exec函数执行成功就会进入新进程执行不再返回。所以子进程代码中exec后的代码,只有exec调用失败返回-1才有机会得到执行。
4)理解孤儿进程、僵尸进程等概念
孤儿进程问题
父进程在子进程前退出,必须给子进程找个新父亲,否则子进程结束时会永远处于僵死状态,耗费内存。
在当前进程/线程组内找个新父亲
或者,让init做父亲
僵尸进程只能通过父进程wait回收它们,他们是不能用kill命令清除掉的,因为kill命令只是用来终止进程的,而僵尸进程已经终止了。
————————————————
版权声明:本文为CSDN博主「web洋仔」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/CSDN___LYY/article/details/80810403