linux简介:
生日:1991年10月5日
类unix操作系统
遵循posix标准
信仰:一切皆文件
linux与unix的关系:
ios与android都是基于unix开发出来的,linux是基于unix开发出来的。
linux是一个内核,最开始是没有图形化界面的。随着时代的发展在linux的基础上开发了debian,再到现在的ubuntu。
shell是什么?
shell是操作系统的用户界面,提供了用户和内核进行交互操作的一种接口。
shell实际就是一个命令解释器,它接受,解释用户输入的命令并它送到内核执行
shell作为命令语言,能交互地解释和执行用户输入的命令
作为程序设计语言,定义各种变量和参数,提供循环,分支等控制结构
对shell的使用熟练程度直观地反映出你对linux使用的熟练度
shell的工作模式:
交互式:一条一条地解释并执行用户的命令
批处理:一次性执行脚本里的命令
几种常见的shell:
-bash:linux默认使用的shell
-sh:steve bourne开发,最初的unix shell
-ash:由Kenneth almquist编写,只有24个命令
-csh:以william joy为代表47为作者编写
-ksh:korn shell 的缩写
常见的shell命令:
cd 切换目录
ls 显示文件
ls -a 显示隐藏文件(一般隐藏文件是系统文件以及一些配置文件,格式:".+文件名")
ls -l 以列表的形式显示文件
pwd 查看当前的目录
mkdir+文件名 创建一个目录
touch+文件名 创建一个文件
cat+文件名 查看文件的内容
gedit+文件名 编译文件(gedit相当于windows下的text文件编译工具)
more+文件名 分屏显示文件的内容
head +3 查看文件的头三行(看第几行就+几)
tail +3 查看文件的最后三行(看倒数第几行就+几)
cp 文件名a 文件名b 将a文件的内容复制给文件b
mv 文件名a 文件名b 将文件a重命名为文件b(mv还有一个作用就是移动文件)
rm 文件名a 将文件a删除
如果想连续执行两个命令,可以再命令之间使用;分割
软链接和硬链接:
软链接使用场景:当我们需要在不同的目录用到相同的文件,不需要在每个目录下都放一个相同的文件,只需要在某个固定目录放上该文件,然后在其他的目录下使用软链接链接该文件,不需要重复占用磁盘空间。
1.软链接文件有点类似于windows的快捷方式
2.在符号链接中,文件实际上是一个文本文件,其中包含的是所需文件的位置信息
软链接的使用方式:
ln -s 被链接的源文件 链接文件
硬链接:
硬链接会在选定的位置上生成一个和源文件大小相同的文件
硬链接的使用格式:
ln 被链接的源文件 链接文件
wc -lwc 文件名 查看文件的行数,字符数,单词数 (-lwc 分别是line word character)
whatis:命令的简单说明
whereis:命令的源程序或手册的位置
which:可执行程序的路径和它的别名
文件的压缩与解压命令:
1.当压缩文件为tar格式时:
tar xvf test.tar (解压test.tar文件)
tar cvf test.tar /dir1/dir2 file3 (将file3文件压缩为test.tar)
2.当压缩文件为tar.gz格式时:
tar xzvf linux.tar.gz (解压linux.tar.gz文件)
tar czvf test.tar.gz /dir1/dir2 file3 (将file3文件压缩为test.tar.gz)
3. 当压缩文件为 .gz/.z/.Z/.tgz格式时:
gzip file1 file2 (压缩文件file1 和file2)
gzip -d file1.gz (将file1.gz解压为file1.gz)
gzip -r /dir (将dir目录下的文件全部压缩)
gzip -rd /dir (将dir目录下的文件全部解压)
time+指令 查看该指令运行了多少的时间
date 查看系统的时间
uname 查看内核
du -sh 统计文件和目录所占磁盘空间
dmesg 显示内核状态信息
uptime 显示时间,系统运行时间,用户连接,负载
who/w 查看登录的用户
whoami/host name 查看登录的用户
cal 日历
bc 计算器
top 查看cpu使用率(查看进程)
free 查看内存和交换空间
ping 检测网络连接
ifconfig 配置网络
netstat
1.查找命令:
find -name hello.c(通过名字查找hello.c文件)
grep "hello world" (检索字符串hello wolrd)
grep "hello world" -r ./ (在当前目录下编译检索字符串hello world)
grep "usb" -c -r /drivers/usb (在drivers/usb目录下搜索字符串usb ,-c 表示只显示行号
cscope -Rk(相当于source insight里面的检索工具)
使用说明:使用cscope -Rk指令后会在当前的目录下生成一个cscope.out文件,里面存放着符号表,当我们需要查找的时候,就是到cscope.out文件里面检索的。不单单是cscope.out文件,其他类似的搜索软件也是一样的。
2.管道:
ps -aux 查看进程(该输出流会默认到stdout里面)
ps -aux |grep usb(该输出会经过管道,在管道的末端检索字符串usb,然后输出)
cat file |grep hello(将输出的内容通过管道,在管道末端检索字符串hello,然后输出)
3.重定向:
> 输出重定向到一个文件或设备
>! 输出重定向到一个文件或设备,强制覆盖原来的文件
>> 输出重定向到一个文件或设备,追加原来的文件
< 输出重定向到一个程序
示例:
新建一个test文件,在里面写入两条指令
使用echo $SHELL 查看shell环境变量
使用bash解释器去执行test文件里面的指令
一般脚本文件都是已.sh结尾,这样别人就能直观的看出来是脚本文件
可以在文件中设置一个命令,默认使用某个解释器,如下:
test文件是没有执行的权限,因此修改使用chmod修改权限
然后可以直接执行该文件
想让文本显示一行,可以使用$()符号
添加一个循环结构
shell下的环境变量:
----环境变量一般为大写字母,通过echo查看
----环境变量何时生成的?
linux启动时,初始化或启动脚本会创建大量环境变量并对其赋值
每次用户启动一个新程序,新程序会继承启动程序的环境变量
shell启动过程中,不同登录用户会启动不同的脚本,生成一些环境变量
环境变量根据用户不同会发生变量(eg:USER/HOME)
----提示符:
一般用户为 $
root用户为 #
shell启动过程1:
1--内核镜像(如/boot/vmlinux)加载内存启动
2--内核启动完毕后,开启第一个init进程
3--进程init扫描/etc/inittab,找到可用的终端及其属性,一旦找到活动的终端,mingettv将会启动login提示符和口令,提示用户输入用户名和口令
4--将用户和口令传递给login,验证是否匹配;
5--若匹配,login将会自动转到其$HOME
6--将控制权移交给所启动的任务,如在/etc/passwd文件中用户的shell为/bin/bash
shell启动过程2:
1--shell将会读取文件etc/profile和~/.profile中系统和用户定义的环境变量,给出提示符:“$”或“#”
2--其他一些用户登录时会启动一些额外脚本
3--有的系统会提供/etc/bashrc脚本(Fedora),系统中任何用户每次启动bash shell时都会执行:系统登录用户时也会执行
4--每个用户的home目录都包含一个.bashrc脚本,用户登录或者在当前用户下启动shell时都会执行
5--脚本启动大致流程:
/etc/profile-> ~/.profile -> /etc/bashrc -> ~/.bashrc
6--有些环境变量,你需要考虑是全局还是当前用户独享...
如何声明一个变量
修改/ect/bashrc或/etc/profile脚本
---对所有用户都有效
---注意修改profile脚本需要重新source
在~/.bashrc下用export声明全局变量
---linux可执行执行依靠配置文件去读取路径
---声明的全局变量对所有用户都有效
---linux下使用“:”来分割路径
示例:
新安装了一个hello程序,但在他只能在他所在的目录下运行。如果想要在其他目录下也能运行的话,需要将hello所在的目录添加到环境变量中
echo$PATH查看环境变量
pwd查看当前目录
修改.bashrc文件(修改的时候通过追加的方式,不能将原来的环境变量给覆盖)
使用指令source将.bashrc生效一下
同时可以注意到环境变量与环境变量之间使用“:”分割开来
文件系统的基本概念:
1.由文件和目录组成,用户通过路径操作文件
2.文件系统将分区划分为以块block为单位的分出空间,块大小跟文件系统版本有关
3.节点(inode):
-----是文件系统的基本单元,每个文件或目录都由一个节点来标识
-----所有节点都被自己记录在inode节点表中
4.目录:
-----是一个含有目录表的文件,目录表中有一个入口项
-----入口项中含有文件名和文件对应的节点号
文件类型分类:
linux目录介绍:
-----linux目录跟windows有很大的不同,不同的linux发行板,主要的目录主要包括:
/bin 二进制可执行命令
/sbin 超级管理命令,这里存放的是系统管理员使用的管理程序
/dev 设备特殊文件
/etc 启动的配置文件和脚本
/home 用户主目录的基点,比如用户user的主目录就是/home/user
/lib 标准程序设计库,又叫动态链接共享库
/tmp 公共的临时文件存储点
/mnt 系统提供这个目录是让用户临时挂载其他的文件系统
/lost+found 这个目录平时是空的,系统非正常关机的文件会存在这里
/proc 虚拟的目录,是系统内存的映射。可通过访问该目录获取系统信息(可以理解为用户和操作系统交互的接口)
/var 某些大文件的溢出区,比方说各种服务的日志文件
/usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录
-----一般而言,我们安装软件,都是默认安装在/usr目录下,该目下主要包括:
/usr/local/bin 本地新增加的命令
/usr/local/lib 本地新增加的库根文件系统
/usr/bin 众多的应用程序
/usr/sbin 超级用户的一些管理程序
/usr/include linux下开发和编译应用程序所需要的头文件
/usr/src 源代码,linux内核的源代码就放在/usr/src/linux里面
/usr/lib 常用的动态链接库和软件包的配置文件
用户和用户组:
用户:
-----管理员root:具有系统所有权限,uid为0
-----系统用户:保障系统运行的用户,uid为1-499
-----普通用户:部分权限受限,uid范围为500-60000
用户组:
-----普通用户组:可以加入多个用户
-----系统组:一般加入一些系统用户
-----私有组:创建用户时,若没有指明所属组,则会定义一个私有用户组,名称与用户名相同
当把其它用户加入到私有组,私有组就变成了普通用户组
用户常用的配置文件:
配置文件所在位置/etc/passwd
--格式:account:password: UID:GID:GECOS:directory:shell
--说明:
account:用户名或账号
password:用户密码占位符
UID:用户的ID号
GECOS:用户的详细信息(如姓名,年龄,电话等)
directory:用户所在的家目录
shell:用户所在的编程环境
密码存放的位置/etc/shadow
--格式:
account:password:最近更改密码的日期:密码不可更改的天数:密码需要重新更改的天数:
密码更改前的警告期限:密码过期的宽限时间:账号失效日期:保留
用户组配置文件:
用户组配置文件所在位置/etc/group
--格式:group name:password:GID:user_list
group name:组名
password:组密码
GID:组的ID号
user_list:以group_name为附加组的用户列表
--用户组密码存放处位置/etc/gshadow
常用操作:
-----用户操作:
添加用户
删除用户
-----用户组操作:
添加用户组
vi /etc/group进入用户组配置文件
移动用户到该组中
删除用户组(先要把组里面的组员删除)
文件权限:
文件访问权限:
--每个文件都有一个所有者
--每个文件或目录都有一个指派给它们的组
--linux根据文件的所有者和所属组来确定谁可以访问
文件的3钟权限:
读 -------r-------4
写--------w------2
执行-----x-------1
u------所有者
g-------同组用户
o-------其它用户
a-------所有用户
修改用户和用户组权限:
改变文件所属关系:
chown user:group 文件名
给其它用户添加写权限:
chmod a+x 文件名
chmod 666 文件名
进程是什么?
进程的基本概念:
----进程就是运行起来的程序,使用唯一的PID来标示
----操作系统基本的任务管理单元
----进程状态:运行态,睡眠态,停止态,僵死态
----进程的优先级
守护进程:
----在linux,系统服务通常是以后台运行的进程存在
----系统启动时会自动运行这种后台守护进程
----一旦前台有指令或请求,守护进程即可做出相应,提供相关服务
进程管理:
1.使用proc查看进行信息,proc作为一个用户和内核进行交互的接口,proc里面存放了进程使用的内容信息
2.使用top查看cpu使用率,然后按s键进入交互模式,输入cpu使用率刷新的秒数 (或者使用top -d 2)
3.如果想监视具体的某个进程cpu使用率,使用指令 top -p1 -p2
4.使用kill +PID杀死进程