Linux简介和基础命令
1:Linux 操作系统简介
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、
应用程序和网络协议。它支持32位和64位硬件。Linux 继承了Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
1991年的10月5日,Linux 创始人林纳斯.托瓦兹(Linus Torvalds) 在comp.os.minix新闻组上发布消息,正式向外宣布Linux内核的诞生,
1994年3月,Linux1.0发布,代码量17万行,当时是按照完全自由免费的协议发布,随后正式采用GPL ( General Public License的缩写,
是一份GNU通用公共授权)协议。
2:Linux具有如下优点
1:稳定、免费或者花费少(免费开源,) 2:安全性高(比windows安全性高很多,linu设计的时候严谨性很高,linux全是英文界面,) 3:多任务,多用户(一台linux系统上面可以运行多个任务,几十个上百人同时登录系统使用) 4:资源消耗少 5:由于内核小,所以它可以支持多种电子产品 如:androd手机和pda等,(安卓手机很多都是基于linux内核版本来研发的)
3:linux的使用范畴
Linux:
主要使用在网站,大数据和虚拟化和企业其他这方面。开源免费的系统,基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统,
windws:pc机器
4: Linux 发展趋势
随着IT产业的不断发展,用户对网站体验要求也越来越高,而目前主流网站后端承载系统都是Linux系统, 目前Android手机全部基于Linux内核研发。企业大数据、云存储、虚拟化等先进技术都是基于Linux系统。 2010年据有关权威部门统计:将来几年内我国软件行业的从业机会十分庞大,中国每年对软件人才的需求将达到50万人左右。 而对于Linux专业人才的就业前景,更是广阔:据悉在未来5-10年内Linux专业人才的需求将达到120万+!尤其是有经验的资深的Linux工程师目前非常的缺乏, 薪资也是非常诱人,平均月薪都是15-20K,能力强的薪资更高。
5: Linux 系统安装
在安装Linux系统之前,先来了解windows系统结构,windows 系统一般是安装在 C盘系统盘, 同样Linux也有类似的系统盘(/根分区),Linux通常分区为(根分区、swap 分区),
Linux系统以文件的存储方式,所有的文件都是存储在某个目录下的,类似于windows的文件夹。
对于文件系统的属性来说,windows 文件系统类型一般是ntfs、fat32 等, 而Linux文件系统类型则为ext2、ext3、 ext4等(文件系统:是操作系统用于明确磁盘或分区上的文件的方法和数据结构, 文件系统由三部分组成:与文件管理有关软件、被管理文件以及实施文件管理所需数据结构。) 安装Linux 系统是每一个初学者的第一个门槛。在这个过程中间,最大的困惑莫过于给硬盘进行分区。
虽然现在各种发行版本的Linux 已经提供了友好的图形交互界面, 但是很多人还是感觉无从下手。这其中的原因主要是不清楚Linux 的分区规定。
就好比如果我们了解linux分区原则,系统盘c,数据盘d,就很好分区了 在Linux中规定,每一个硬盘设备最多只能有4个主分区(其中包含扩展分区)构成, 任何一个扩展分区都要占用一个主分区号码,也就是在一个硬盘中,主分区和扩展分区一共最多是4个。 下面正式来安装Linux系统,安装系统前需要准备如下软件: VMware workstation 10.0 虚拟机 CentOS 6.5 x86_ i386.iso CentOS是redhat的一个开放版本,CentOS是子版本
6:Linux目录结构
目录文件大体功能:进入任何一个目录执行命令,目录的命名也是标准和规范,自己也可也新建一个临时的目录,也是可以的, / 根目录 /bin 存放必要的命令 /boot 存放内核以及启动所需的文件
/dev 存放设备文件 /etc 存放系统配置文件 /home 普通用户的宿主目录,用户数据存放在其主目录中 /lib 存放必要的运行库 /mnt 存放临时的映射文件系统,通常用来挂载使用。 /proc 存放存储进程和系统信息 /root 超级用户的主目录 /sbin 存放系统管理程序 /tmp 存放临时文件 /usr 存放应用程序,命令程序文件、程序库、手册和其它文档。 /var 系统默认日志存放目录
7:root用户和普通用户
进入系统,我们会看到这样的字符: [root@localhost ~]# , 其中#代表当前是root用户登录, 如果是$表示当前为普通用户。root用户能执行系统的任何东西,普通用户只能在自己的宿主目录,自己家目录操作文件
8:Linux用户权限
在Linux操作系统中,root 的权限是最高的,相当于windows 的administrator,拥有最高权限,能执行任何命令和操作。 在系统中,通过UID来区分用户的权限级别,UID等于0,表示此用户具有最高权限,也就是管理员。其他的用户UID依次增加, 通过/etc/passwd 用户密码文件可以查看到每个用户的独立的UID
root:x:0:0:root:/root:/bin/bash uid为0,超级用户 每一个文件或者目录的权限,都包含一个用户权限、一个组的权限、其他人权限,例如下:(三种角色对自己文件都有特定的权限) 标红第一个root表示该文件所有者是root用户,第二个root代表该文件的所属的组为root组,其他用户这里默认不标出。 [root@node1 ~]# ls -l monitor log.sh -rw-r--r-- 1 root root 91 May 7 20:21 monitor log.sh 如果我们想改变某个文件的所有者或者所属的组,可以使用命令chown(继承的意思) chown -R test:test monitor_ log.sh 即可
文件权限设置 每个Linux文件具有四种访问权限:可读(小)、 可写(w)、 可执行(x)和无权限(-). 利用ls-1命令可以看到某个文件或目录的权限,它以显示数据的第一个字段为准 第一个字段由10个字符组成,如下: -rw-r--r-- 1 rootroot 91 May 720:21 monitor _log-.sh 第一位表示文件类型,-表示文件,d表示目录;后面每三位为一组。 第一组: 2-4位表示文件所有者的权限,即用户user权限,简称u 第二组: 5-7 位表示文件所有者所属组成员的权限,group 权限,简称g 第三组: 8-10 位表示所有者所属组之外的用户的权限,other权限, 简称o 从上面这个文件,我们可以看出,monito log.sh 文件对应的权限为: root用户具有rw读和写的权限,root组具有r读的权限,其他人具有r读的权限。 Monitor log.sh 权限可以表示为: 644 chmod o+w test.txt 给o(other其他用户)增加test.txt的w(写)的权限 chmod u+x test.txt 给u(用户增加x(执行权限)) chmod u=rwx,g=rwx,o=rwx test.txt 设置u-所有者是root用户,g-该文件的所属的组为root组,o-其他用户 三个一起设置权限 为了能更简单快捷的使用和熟悉权限,rwx权限可以用数字来表示,分别表示为r(4)、w(2)、x (1) u的权限rw,r=4,w=2,所以用户三种权限加起来设置为6,----644,用户6的权限rw,组4的权限r,其他人4的权限r chmod 777 test.txt 可以把test.txt文件的三个权限全部设置成rwx 第一个数字代表用户,第二个数字代表组,第三个数字代表其他人的权限
9:Linux网络配置
ifconfig linux查看ip,windows:ipconfig ifup eth0 启动eth0网卡,linux ip网卡命名是eth0 linux所有的东西都是以文件方式存储的,设置网络的文件,修改内容文件 cd /etc/sysconfig/netwodk-scripts/ 在这个文件夹下的 ifcfg-eth0 默认是dhcp获取的,可以改成静态的,BOOTPROTO属性改成static静态 ONBOOT 系统开启或者服务重启,这个网卡是启动还是关闭,我们设置成功yes打开 IPADDR=192.168.10.129 NETMASK=255.255.255.0 GETWAY=192.168.10.1 上面设置网络信息 谨记,上面设置网络参数不能有空格, 然后重启network网卡服务:/etc/init.d/network restart linux都是在操作系统里面的东西,权限,创建删除,
10:操作系统的作用
管理硬件和程序的一套系统软件
处理器管理
内存管理
文件系统管理
进程管理
外设管理
用户管理
等等
11:计算机软件
计算机软件:
系统软件+应用软件+操作系统(操作系统也是软件,对下对接硬件,对上提供接口给应用软件调用,系统调用) 操作系统:
调度管理,管理底下的硬件,给应用软件提供服务
12:Linux内核
操作系统的内核:
负责cpu的调度,内存的管理非常重要最核心的功能,内核还不是完整的操作系统,GUN项目
13:终端的概念
远古时期:硬件设备 个人电脑时代:虚拟终端设备 网络时代:远程终端:软件模拟出一个终端设备来,软件模拟窗口,显示器一样显示东西,通过键盘输入命令,鼠标也可也操作,
linux主机在机房,云服务器,我们一般就是通过远程终端软件模拟器连接---直接通过pytty连接服务器(pytty) ssh协议登录上去的,linux主机ip地址,端口号默认ssh的22端口,服务端的ssh需要起来,用户名+密码太短时是否有提示 netstat -an|grep 22 linux查看sshd的服务器,绑定在22端口这个端口上,正在监听在这个端口上
必须要有这个ssh这个服务xshll等终端(客户端)才能连接进去。网络协议ssh协议
14:交互式的命令提示行
[root@worker1 ~]# root用户名 worker主机名 #代表root权限用户 ~当前用户的home目录
15:shell与命令
用户通过命令和Linux系统进行交互 Linux是通过Shell来解释执行命令
Shell是一个程序 Shell的种类 标准shell (sh), Bourne Again SHell (bash) 主流的linux,主要围绕这个讲解 Korn shell (ksh) C shell (csh) unix环境用的多 远程登录:通过字符终端命令方式和linux进行交互,命令输入过去,linux接收到命令作出反应后返回结果, 人机交互,通过命令的方式和linux操作系统进行交互操作系统接收用户命令,是通过Shell来解释执行命令, 交互式窗口:远程终端输入命令,shell接管了,远程终端输入的命令都被shell程序接收了, 人通过终端设备输入命令,敲给shell,shell接收到终端命令之后首先判断这个命令需要什么样的程序去执行, 然后再把这些程序调用起来执行用户的命令,返回执行结果----大概的过程 命令通常也是一个个的可执行程序(ls,psw等) 每个命令执行具体任务完成一个功能,
16:命令的格式
command 参数1 参数2.....参数n conmand命令名字 +一个个参数,参数个数可变 linux命令由一个命令和零到多个参数构成,命令和参数之间,以及参数与参数之间空格隔开 命令和参数都是区分大小写的 PS和ls/Home 选项参数可以合并:如下 ps -e-f = ps-ef
17:VI/VIM文本编辑器
vi编辑器 VI/VIM概述 Vi是所有Linux系统都提供的文本编辑器,它提供了一个窗口,通过它可以编辑文本文件 vim是vi的增强版本支持vi全部的功能 增加命令 增强功能包括颜色标记功能 远程登录方式基本只能用vi编辑器了,vim是vi增强版本,码农基本都是vim编辑。不需要使用键盘,
vi的全部功能vim都是有的,还增强了一些功能,分屏。增加了一些命令
常用的代码文件python,shell,java都增加了高亮显示,识别了文本文件所属的语言,加颜色标记 使用文件看起来清晰明了 centos安装的vi都是vim,敲的vi的命令实际上显示的是vim vi 输出:VIM - Vi IMproved,增强版vi
18:VI编辑创建文件
在Linux终端中,直接输入vi就可以打开vi工具,这个时候默认的是命令模式 如果vi后面接具体的文件名,表示打开该文件进行查看和编辑 编辑一个已经存在的文件(看底部提示 编辑一个不存在的文件(看底部提示) vi+文件名 vi编辑文件,如果文件不存在,新建这个文件编辑,如果文件存在,打开已经存在的文件进行编辑保存 没有鼠标,纯键盘操作(和Windows记事本比较) 远程登录linux主机,shell里面敲vi命令就可以打开了,
19:VI操作模式
1:vi可分为三种操作模式,分别是 1.命令模式(command mode) 2.插入模式(Insert mode) 3.底线模式(Last line mode) 三种工作状态,完成不同的任务,各个状态下完成不同的任务,
一:命令(COMMAND)模式(刚进入vi编辑器就是命令模式) 刚进入时的缺省状态 此时不可以直接去添加文字 不能用退格删除文字 控制屏幕光标的移动,定位要编辑的区域,输入字符 字符的删除、复制、粘贴 进入插入模式 进入底线模式 刚进入vi编辑器就是命令模式,不能输入字符,主要功能: 1:控制屏幕光标的移动,字符的删除、复制、粘贴 2:进入插入模式 3:进入底线模式 (文本导航,删除复制黏贴)
二:插入模式insert模式(可以输入了) 在插入模式下面可以对文件内容进行编辑 插入模式下底部有个 INSERT 标记 在命令模式下,可以输入下面的字符进入插入模式(命令模式进入插入模式一般按i底部出现insert--进入插入模式) i:插入,从目前光标所在之前插入所输入的字符 (光标前面插入insert) a:增加,目前光标所在的下一个字符处开始插入字符 (光标后面插入,往后添加) o:插入新的一行,从行首开始输入文字 (o-open new line 插入新行,光标跳入下一行) 插入模式下,按Esc键,插入模式切换到命令模式,这时候本身没有保存,esc不会退出vi,只是切换回命令模式
三:底线模式(底行模式) 只有命令模式才能进入底线模式 先按Esc键进入命令模式后,再输入shift+冒号: 进入底线模式 命令模式按冒号,(底下出现冒号和光标,底行模式) 在底线模式下,可以完成对文件的保存、内容替换、显示格式的设置等工作,输入命令后点击回车就是执行了命令, 再按Esc键又退回到命令模式 set nu :底线模式显示行号命令 set nonu:底线模式取消行号
进入vi首先进入命令模式 ——>输入i,a,o进入插入模式,编辑和输入字符 ——>按下esc又退回到命令模式——>shift+冒号,命令模式进入底线模式 >——>esc又能退回命令模式 插入模式不能和底线模式互相切换的,需要命令模式中转站 底线模式下:q 退出vi,文本不保存退出 vi编辑是纯键盘操作,不需要使用鼠标,命令快捷键进行光标移动
命令模式功能-光标移动功能: 按G: 移动到文件的最后一行 shitf+g就是大g-退到最后一行 按gg : 移动到文件的开头 第一行 按0或^: 光标移动到所在行的行首 按$: 光标移动到所在行的行尾 光标的上下左右移动: 使用键盘上的方向键 或者kjhl对应上下左右 按ctrl+f往下翻一页 文件很大才需要翻页。系统log文件查找问题,forward前 按ctrl+b往上翻一页 backward后 vim pageup pagedown也能翻页
命令模式功能-删除、复制: x:删除
vi编辑大小写敏感,大x往前删,小x往后删 小x删除当前光标所在的字符,相当于delete键删除 大X相当于backspace退格键,命令模式下退格键相当于左移 只有插入模式下退格键才可以删除,按大x往前删,小x往后删 x与X(del与backspace ) 3x表示删除光标所在位置后的3个字符,包括光标所在的位置 如果不小心先按了数字键,按ECS取消 dw:删除光标所在处到词尾的内容 dd:删除光标所在的行,3dd表示删除光标所在位置往下的3行,包括光标所在的行(删除三行) yw:复制光标所在处到词尾的内容(空白和(括号都认为是单词的间隔) yw:word复制一个单词 p:黏贴(包括前面复制操作或者删除操作的内容) paste黏贴,复制到光标所在的下一行 vi里面假如一行很长,会换行显示,虽然显示多行其实还是一行, 复制多行,数字的操作, vi命令模式下数字键要特别小心:vi里面数字键代表几次操作,比如 3+x会执行删除三个字符,这样的情况 命令模式下按 u 键就是撤销上一步操作,恢复(undo) 不小心按了数字键,按esc撤销刚才数字按底的操作,再输入操作
命令模式功能一替换、撤销: r:取代光标所在处的字符 repalce,输入r后输入1 R:连续取代字符直到按Esc为止 R后不停输入1,替换多个字符 u:假如误操作一个指令可以马上按u,进行撤销,可以连续按u,散销多个之前做过的操作(等于windows下面ctrl+z) Ctrl+r: 重做被撤销的操作(等于windows下面ctrl+y) redo--再做一次
插入模式:
也可以上下左右。插入模式的退格键才是删除,命令模式的退格键不会删除
插入模式功能:
注意:
上下左右键也可以导航
退格键可以删除字符
终端模拟器,比如PuTTY,xhell。中的复制粘贴 使用终端模拟器复制再插入模式里面黏贴进去
底线模式功能:查找、定位(控制功能),在命令模式下面输入shift+冒号进入底线模式 set nu:会在文件的每一行前面列出行号 ,log文件看日志显示行号 set nu是set number的缩写,set number也是可以的 set nonu:取消行号,
#是你要输入的数字,再按回车,将跳到数字指定的行,比如找到log日志的1000行, 输入冒号进入底线模式, 直接输入20跳到20行,输入的数字比文件还多,跳最后一行 #表示一个数字,直接数字就行,跳转100输入100行,跳转1000输入1000
/关键字 : 先按/,再输入你要寻找的字,vi关键字查找,/下划线,正斜杠,比如查询查询bit / bit 输入inter bit高亮显示, 也可也不按冒号进入底线模式,命令模式下直接/bit也可也查找 查找到很多bit可以按键盘的n(next) 跳转到下一个bit,往回找(shift+n也就是大N往回找) 可以输入n,进行向下连续查找, N是往上查找 set ic:忽略大小写 不管大小写都要找,冒号进入底线模式,敲set ic (ic-ignorecase缩写)忽略大小写,大写的也能找到 set noic:不忽略大小写
底线模式功能-字符替换: 在底线模式下输入1, $s/string/replace/g 会将全文的string字符串取代为replace字符串 1, $s/string/replace/g string准备替换的字符, replace要用来替换的字符 命令中所有的str替换成replace 文档中所有的str替换成replace 1,$表示从第一行到最后一行
$ vi里面表示最后的意思 s表示替换 g表示每行全部替换 str一行出现多次,不带g这个参数就只替换每一行第一次出现的这个字符,后面出现的str不会替换了 或者%s/string/replace/g 也能替换文档中的内容 1, 20s/string/replace/g: 将1至20行间的string替relpace字符串 5s/gog/pig/g 现在只替换第五行的,不是每行都被替换 # w filename 如果您想摘取文章的某一段,存成另一个文件,可用这个指令 #代表行号,
例如30,50 w nice 使用vi看日志,使用vi编辑配置文件---大部分都是这种使用,不会编辑大型文件
底线模式功能-保存、退出: w write, 写入磁盘。 1,3 w bbb 把当前文件的1-3行写入另外一个文件bbb q 退出 q! 强制退出 w a1 当前文件保存后需要另外文件另存一份,w+文件名 写到a1文件,当前正在编辑的文件还是for——vi file 查看当前编辑文件的属性(当前编辑的哪个文件) w filename (将文件保存为filename) wq (保存文件并且退出vi) q! (强制退出vi并不保存当前更改的内容) w! (强制写文件,如果该文件属性为只读,那么也强制更改该文件,并退出) f 查看当前文件信息 edit 在vi里面打开另一个文件 edit bbb 当前文件跳转到bbb文件 ! 强制的意思,
文件只读,不一定能写进去,加 !,强制写进去,当前用户必须对文件有操作权限,但是文件只是只读 打开vi查看查看编辑另外一个文件, 模式之间的切换,删除,光标的导航,保存----重点了解
20:Linux文件系统
1:分区和文件系统的概念 2:linux目录结构,文件系统挂接 3:绝对路径和相对路径
一:分区和文件系统的概念: Windows.上的分区和文件系统: 新机器分区、格式化(选择文件系统NTFS) ,隐藏文件系统结构数据文件系统的理解类比国家划分、选择管理制度 如果只分配了一个c盘,其他的都没利用起来,空白磁盘不能不用 磁盘分区,windows基本都是文件系统ntfs格式, 如果把磁盘比作地球空间,分区把各个区域按照国家划分下来 大分区,小分区 有了区域需要管理好,管理制度,不同的区域可能管理制度不一样,管理制度对应我们分区上创建文件系统的操作,文件系统是管理文件的系统 它除了文件数据存放在文件系统,还有一些需要的管理数据,这个数据看不见,摸不着,操作系统划分完分区会有隐藏的数据存在磁盘 那是操作系统用来管理的管理型数据 档案管,隐藏的数据文件结构
WINDOWS文件系统特点:
linux上的分区和文件系统:
Linux文件系统目录结构: / 根(底下把子目录给创建出来如下,有的子目录对应磁盘上的文件,有的是不对应的) 对应磁盘上的根目录,挂接到根节点,根节点对应磁盘上的一个分区 除了磁盘分区文件,还有其他一些文件也挂接到根节点下面,不是这个磁盘上对应的文件系统,比如:proc 目录,不对应磁盘上的文件, dev 设备,不对应磁盘上的,指的设备文件 ,这就是和windows不同的地方 不是每个分区分配一个盘幅,都是从 /根节点开始。 至于这个分区上的文件怎么访问,看磁盘挂在哪个地方,
比如磁盘分区 sda1 分区,挂接到根目录下的 opt 目录下面,挂接好了之后 这个分区下面有a1 a2 a3三个文件,挂接上opt好了之后,就在这个 opt 目录下面了,可以 /opt/a1 这样访问文件路径 分区没有挂接之前没法访问的,必须挂接到文件目录结构中去才能访问 挂接,挂上去
挂接操作怎么完成:
装机装好了之后在分区的过程中会让选择,比如分了个区,让挂到根目录下,至少挂到根目录下 也可能还一些分区挂到opt 或者其他目录,挂上去后,安装过程软件会记录到一张表文件上面:mount /etc/fstab,记录下来。 哪个分区挂在哪个地方了 启动过程中读取这个文件:执行挂接操作,也就是mount操作 初始化程序干这个事情,已经挂好之后,挂载是程序的一些操作,程序可以调用系统文件挂载上去 手工也可也执行mount命令进行挂载 比如新插了个磁盘上去,不自动挂载的话需要mount命令手动挂载(底层系统调用) 文件系统连接到某个目录 现在的虚拟机接个光盘:centsos会自动检测光盘mount上去,操作系统管理程序发现一个光盘被插入了,然后它调用mount操作,mount到文件系统上去 通过mount命令也可也执行挂接:nt 命令查看挂接的操作, /dev/sr0 on /media/CentOS_6.5_Final type iso9660 (ro,nosuid,nodev,uhelper=udisks,uid=0,gid=0,iocharset=utf8,mode=0400,dmode=0500) dev/sr0 光盘设备
/media/CentOS_6.5_Final 挂接的目录,创建了这么一个目录挂接上去了 type iso9660 光盘的文件系统 格式iso9660, df 查看光盘挂载的目录,可以通过挂机点访问文件系统 linux命令执行挂接操作: 1:umount 反挂接,弄下来,不让他挂接目录,现在没法访问: umount /media/CentOS_6.5_Final/ /media/CentOS_6.5_Final 2:mkdir 创建目录 mkdir dog 光盘可以是物理光盘,也可以是image文件,虚拟光盘文件,iso文件 3:man mount 查看mount挂接文件系统命令的用法 4:mount 设备名称(文件系统) 挂接地址名称 如下: mount /dev/sr0 /home/jcy/test/dog 只有root用户才能挂接 挂接文件系统的命令
Linux系统上的目录结构: /bin 存放必要的命令 /boot 存放内核以及启动所需的文件
/dev 存放设备文件 /etc 存放系统配置文件 /home 普通用户的宿主目录,用户数据存放在其主目录中 /lib 存放必要的运行库 /mnt 存放临时的映射文件系统,通常用来挂载使用。 /proc 存放存储进程和系统信息 /root 超级用户的主目录 /sbin 存放系统管理程序 /tmp 存放临时文件 /usr 存放应用程序,命令程序文件、程序库、手册和其它文档。 /var 系统默认日志存放目录
linux文件结构是单个的树状结构,没有C,D,E盘符,一切都是从 / 根目录开始,根目录下面有些东西是磁盘上的内容,没有挂接的话磁盘上的内容不能访问 挂接到哪个挂接点上,文件就从那挂接点的路径开始访问 linux操作系支持哪些文件系统的格式(靠操作系统的安装的文件系统驱动) :ext3(内置的,安装各种文件系统驱动模块识别挂接其他的格式,如ntfs,都是靠驱动) nfs proc vfat LINUX下磁盘分区特性:磁盘分区都必须挂载到目录树中的某个具体的目录上才 能进行读写操作 (否则就像Windows下面分区没有盘符) 可以挂接到任何文件系统的盘符,很长的文件结构都行/a/b/c/d 可以通过这个路径访问文件系统
df -ahT:
查看linux系统磁盘分区情况,ahT加这个参数查看得比较详细,可以查看文件系统的类型,
T=Type
h=可读性很好的情况展示结果 filesystem 对应的文件系统所在的设备是什么 分区 proc 虚拟文件系统,不是真正磁盘的文件系统 /dev/打头的一般对应磁盘分区文件
21:文件名与特殊文件
Linux文件名称:大小写敏感,无专用扩展名 /opt/al 和 /opt/A1 是两个文件
ls:命令查看文件和目录 xhsell里面蓝色是文件夹,其他颜色是文件),列出文件内容 ls
ls- a-1
a:all 查看更详细信息
l:list 列排序
/ 表示根目录 . 表示当前目录 .. 表示当前目录的父目录 .字符串 表示隐含文件,如".bash_ profile" 文件 ,linux .+文件,表示这个文件隐藏了,ls不加a参数查看不到
22:LINUX系统常用目录: 经常访问的目录
/ Linux系统的根目录 /etc 系统管理和配置文件 操作web服务器,大量配置文件都在etc这个目录下 /home 用户主目录,比如用户user的主目录就是,多用户系统,每个用户都有自己的主目录,刚登录的时候都是进入到自己主目录里面去的, 比如用户user,用户主目录一般都是home/user下,这个home/user给自己用的,自己创建文件,目录,给用户用的 /home/user /boot Linux系统的内核文件放在该目录下面,读取内核文件执行 /sbin 系统管理命令,这里存放的是系统管理员使用的管理程序,bin =binary 二进制代码文件,给cpu之间读取的,可执行程序 /root 系统管理员的主目录 /bin 常用可执行文件,主要有: cat,chmod,chown, date,ImV,mkdir, cp,bash等等(基本是单人维护模式下还能够被操作的指令) /dev 设备文件,如/dev/cd0 设备文件一般放这下面 /usr 用户级应用程序 和文件几乎都在这个目录下面 /proc 一个虚拟文件系统,放置的数据都是在内存当中。例如系统核心、进程信息(process)、设备的状态及网络状态等等(放系统信息,进程信息) /tmp 公用的临时文件存储点,存放一些临时文件,清除了也没关系 /mnt 系统提供这个目录是让用户临时挂载其他的文件系统,光盘一般挂这上去,临时挂载的东西 /lib 一些库文件。不可以删除,删了系统跑不起来了(库,可执行程序必须要加载一些库才能执行)
23:绝对路径与相对路径
当前目录(工作目录) 我们直接工作的目录(shell目录,shell本身在的目录就是当前目录)很多操作都是基于当前目录的 当用户刚登录系统时,当前目录是用户的家目录(home 目录) 用户家目录在创建用户的时候会产生,一般是 /home/用户名 :
比如你是用户limin,家目录一般是 /home/limin 一般用户只能在家目录写文件,其他目录不行 当前目录下面的所有文件都可以直接访问,假设当前目录下面有个文件,a. txt 要用vi编辑它,就可以直接执行vi a. txt
绝对路径(全路径): 开始于根目录,紧跟着目录树的一个个分支,一直到达所期望的目录或文件 /home/jcy/test 从/根目录开始的就是全路径 ls /home/jcy/test 绝对路径显示 相对路径 开始于当前目录,紧跟着目录树的一个个分支,一直到达所期望的目录或文件。 进入到想要显示的文件输入:ls 当前路径显示 这就是相对路径 . 代表当前目录 ls ./test/log 和 ls test/log 效果一样的,因为 . 代表当前路径,. 有的时候作为程序脚本运行需要的, ./hell.sh 表示告诉shell在当前路径下找程序hell.sh运行执行,不然shell程序找不到脚本 ..代表当前目录的父目录 python ../hello.py 代表执行当前目录下的上一层目录下的hello.py 的python文件 相对路径谨记:不能 cd /aaa/bbb/ 这样写,最前面不要加 /,最前面加/代表根目录开始找 需要 cd aaa/bbb 这样写 或者cd ./aaa/bbb 这样写
24:看文本文件内容
cat:
cat test.py
less:
less test.py
vi:
vi 编辑器
more:
more test.py
head:
head -n 3 test.py 查看前面3行
tail:
tail -n 3 test.py 查看后面3行
25:通配符 有的时候经常用的 * 或者 ? 匹配一系列文件
模式 匹配对象 * 所有文件,匹配任意字符 ls * 列出当前目录下的所有文件 g* 文件名以”g“开头的文件,可能是g文件,可能是g1
ls y* 列出当前目录下y开头的文件或者y开头的文件夹里面的内容 b*.txt 以"b"开头,中间有零个或任意多个字符,并以".txt"结尾的文件
rm -rf *.log 删除所有的.log结尾的日志文件 Data??? 以"Data"开头,其后紧接着3个字符的文件 ?匹配一个字符。三个?匹配三个字符
ls a? [abc]* 文件名以"a","b",或"c"开头的文件
26:文件链接 硬链接 软链接
链接:
类似windows快捷方式,把文件用一种类似快捷方式,在另外一个目录再创建一个名字,看起来和文件一样,其实是一个链接
为什么需要链接
巨大的文件、目录,复制占空间,
不能移动,那个位置也有用
和复制的区别:文件在磁盘中只有一个拷贝,节省磁盘空间
硬链接、软链接 ln dog dog-hard; 硬链接、软链接dog要链接的文件的名字(链接源文件) dog-hard参数链接的名字,链接文件的名称 ln-s pig pig-soft 软链接,soft
硬链接与软链接:
硬链接:是给文件创建一个副本,原文件名和连接文件名都指向相同的物理地址。文件在磁盘中只有一个拷贝,节省磁盘空间
软链接(符号链接):软链接的数据是所连接的文件的路径名。类似windows下的快捷方式
对源文件的修改,软、硬链接文件内容也一样的修改,因为都是指向同一个文件内容的。
硬链接 和 软连接 原始文件在磁盘都是只有一个拷贝,软连接连接的文件名
文件本身数据存在磁盘上,本身文件文件名其实文件系统就是一个指针一样的东西指向磁盘地址,
硬连接 地位和文件名地位一模一样的,相当于又起了个名字,也是指向磁盘的数据
软连接 指向文件名的地址,文件存的磁盘的路径软链接是得不到的
区别:如果硬链接:把原来文件重命名了,硬链接不受影响,硬链接和文件名没关系,软链接一旦名字改了或者删了
那么软连接失效,没有指向真正的数据,只是指向文件名硬连接指向问了磁盘存储的地址
硬链接与软链接-举例:
创建两个文件:
echo dog > dog;echo pig > pig
分别创建软、硬链接:
ln dog dog_hard;ln -s pig pig_soft
如下图:
dog_hard是硬链接,pig_soft是软链接
软链接有个指向的信息 -> 指向pig
dog_hard 硬链接和原文件dog颜色一模一样的
pig_soft 软链接,蓝色标志
如果改变源文件,硬链接和软链接都会改变 链接指向到同一个东西
不同的是 dog 和 pig 修改名字就会不同,软连接只记得指向文件的名字,而不是直接指向源文件磁盘地址,修改了文件名就找不到了,硬连接可以
软连接就是记名字,修改了指向的文件名就gg
改变硬链接对应的之前的文件名:
mv dog dog_new 修改文件名
cat dog_hard
可以看到硬链接指向的文件的真实内容,所以改变以前的文件名并不影响
改变软链接对应的之前的文件名:
mv pig pig_new
cat pig_soft
提升:cat: pig_soft: No such file or directory
可以看到软链接指向的文件名,所以改变以前的文件名,导致软链接也不可访问了
删除操作也是一样的
pig文件修改成new_pig之后,可以看到pig_soft指向的软连接失效了,pig文件不存在了,pig_soft文件红色报错了,如下图:
总结:硬链垓与软链接的区别
对源文件删除(重命名),会导致软链接不可用,而硬链接不受影响。
硬链接不能跨越物理设备(不能跨越分区,只能在同一个分区的文件,同一个mount下面可以创建硬链接),软链接可以跨越物理设备
硬链接不能关联目录,只能是关联文件,软链接可以关联目录
27:Linux文件 目录的常用操作
find 命令全找文件 diff 命令比较文件 grep 命令在文件中查找 WC 命令统计 du 查看目录占用的磁盘空间
28:find命令
find命令会在指定目录及其子目录下查找符合条件的特定文件。 当我们忘了文件的位置,可以使用该命令。隐约记得在哪个目录层级 命令格式:
find 目录名 条件
目录名:查找的目录名称,有一个文件在什么目录
条件:指明文件名有什么特征的
常见条件: -name name 指定要被寻找的文件或目录名称,可用通配符, 记得文件名,不记得文件路径, -type x 以文件类型作为寻找条件。 文件类型x如下: 指明寻找目录还是文件 d:目录(directory),
f:文件(file), 例如: find /temp -name"abc” temp文件下找名字为abc的文件或者文件夹,确定名称abc find /temp -name"abc*" 找abc开头的文件或者文件夹,通配符 find /temp -name"abc*" - type f 找abc开头的文件
实例如下: 实例一:find python -name "pachong.py" 实例:寻找pythpn文件夹里面的pachong.py文件 实例二:find . -name "pachong.py" .代表当前路径,代表从当前路径开始找,找所有 pachong.py文件 实例三:find . -name "pa*" 加*通配符号的,只有是pa开头的文件都能匹配到 实例四:find . -name "pa*" -type f 加参数-type f只匹配file文件类型,不匹配目录 实例五:find . -name "pa*" -type d 加参数-type d只匹配目录类型,不匹配文件
实例一:
实例二:
实例三:
实例四:
实例五:
29:比较文本文件差异 diff
diff命令:用在文件大致相同的情况下 命令格式:
diff -y 文件名1 文件名2 输出解释: | 显示每个文件不同的行 < 显示左边文件比右边文件多出来的行 > 显示右边文件比左边文件多出来的行 源代码比较都是比较强大的比较工具了 :beyond compare 工具打的文本文件比较,上千上万行文件代码比较
diff比较文件实例
30:文本关键字搜索:grep命令 对前面结果进行过滤的场景,把指定的行中关键字搜索出来,指定行的搜索
grep命令: 一种强大的文本搜索工具,并把匹配的行打印出来。 啥时候用? 查看日志 查看命令输出 grep root /var/log/messages
root指关键字,root支持正则表达式,也可也写全,全字匹配,在 /var/log/messages 文本文件里面把所有包含root关键字的行数显示出来 大小写敏感 支持正则表达式搜索文本
实例:grep parrten pachong.py [root@worker1 python]# grep parrten pachong.py parrten=re.compile('<li class="piclist\d+">(.*?)</li>',re.S) titleList=parrten.findall(html) parrten1=re.compile('<a href="/article/\d+.html" rel="external nofollow" >(.*)</a>') ti1=parrten1.findall(title) parrten2=re.compile('<div class="f18 mb20">(.*?)</div>',re.S) til2=parrten2.findall(title) [root@worker1 python]#
grep命令一例子: grep ‘test 123' d* 通配符 显示所有以d开头的文件中包含test 123的行。 grep' test’ aa bb CC 多个文件 显示在aa, bb, cC文件中匹配test的行。 grep root- r / var/log 目录中递归搜索 在/var/log所有子目录子文件中搜索包含字符串“root”的行 grep '^test’ /var/ log/scp. log 正则表达式 在scp. log中以字符串‘test”开头的文件 grep ‘test 123' * 在当前目录下寻找文件 test 123
grep 搜索,关键字有的时候加了引号,有的时候没有加,如果他是单个字符中间没有空格可以不加引号,
如果中间有空格那就必须要加了,不加引号把后面的参数当成文件名了,所有需要引号 单引号双引号都行
grep '^test’ /var/log/scp. log ^表示一行的开始,在scp. log中查找以字符串‘test”开头的行
grep命令常用参数: -c:只输出匹配行的计数。不输出内容,只显示匹配到多少行 -i:不区分大小写。让大小写不敏感 -h:查询多文件时不显示文件名。 -n:显示匹配行及行号。 -V:显示不包含匹配文本的所有行 -F:指明pattern非正则表达式 查找的字符串里面如果包含了正则表达式的关键字符,用 -F 表明不使用正则,就是普通的字符串匹配 -A<n> #同时显示该行之后n行的内容 n是数字,显示查找的这一行和之后的n行都显示 -B<n> #同时显示该行之前n行的内容
grep:文本过滤器,如果仅仅是过滤文本,可使用grep,效率高;
sed与awk: 不止搜索,而且增加处理(增加、删除、改动)。搜到的行里面删除增加替换一些东西 例如 ps | sed '1d’ 不显示第一行 ps命令输出的内容,直接用后面这个命令的输入作为处理,sed通常处理文本文件,也可以处理输入输出 sed 命令本身,1d 第一行删除,删除显示的内容的第一行 ps | sed 's/bash/ mygod/" 替换 输出的内容的bash替换成mygod,替换 ps | awk '{print $1,$4}’ 只显示第1列,第4列的内容 awk 管道: seb 自学:百度 雅虎 谷歌 bing
31:文件内容统计(WC) 统计前面文件或者命令输出有多少行的
WC -l /etc/ passwd 统计/etc/passwd文件有多少行 WC -c /etc/ passwd 统计/etc/passwd文件有多少个字节 带着管道符 ps -ef | wc -1:
管道:前面命令的输出,打印在屏幕上的东西,作为后面命令的输入,
本来要从文件中读,加管道后再加命令就不从文件读了,从前面文件输出到屏幕上的内容读取 实例: wc -l pachong.py 统计pachong.py文件行数 wc -c pachong.py 统计pachong.py文件字符数
32:查看文件和目录的磁盘空间的使用空间(du)
du 命令是查看文件和目录的磁盘使用空间 df 命令是查看文件系统使用空间的 du - ah 显示指定目录以及其所有子目录和文件的磁盘占用率,a所有的 例如: du- sh #并显示指定目录整体磁盘占用率 [jcy@localhost ]$ du -sh / hone/jcy 1.1M/home/jcy df 查看文件系统的使用空间,不关心具体某个空间和某个目录,关心整个文件系统
df -ahT 显示的都是文件系统里面的信息,看整个磁盘
du -sh python 显示python文件夹的字节大小
du -ah python 显示python每个目录占有的空间和每个目录里面的文件占有的空间全部显示出来
33:Linux分割操作(SPLIT) SPLITE文件分隔
split [-bl] 文件 前缀 缺省按行分割,1000行 缺省前缀为x,切分成xaa、xab、 xac -b 设定分割完成后的文件大小,单位为b,k,m -l 以行数进行分割 -a 指明后缀长度
示例:
split -l 5 pachong.py 按照5行为一个文件切割,每个文件都是5行
split -l 5 pachong.py pachong. 切割文件指定前缀pachong
指定大小分割文件 例:split -b 300k /etc/abc.txt abc.txt abc. txtaa abc. txtab abc. txtac 分割成了三个小的档案 split -l 5 abc.txt 1og 把abc.txt分隔为多个文件,每个文件包含5行,生成的文件前缀为log
cat拼接和连接文件查看: cat abc.txta* >> abc.txt 把上面的三个小档案合成一个了,cat查看文件内容,cat拼接文件查看,生成一个abc.txt文件 cat hello1.py pachong.py 两个文件连起来显示,可以加多个
cat sever_linux.a* 这样就能拼接文件查看,加上>>表示生成文件
34:Linux用户管理
一:Linux用户、用户组
Linux系统是一个多用户的操作系统,
任何一个要使用系统资源的用户,必须登录进入系统。
Linux用户属于一个或多个特定的组,称为用户组,即group
为什么要分用户和用户组?
资源访问控制
文件 (泛义上的文件)
所有文件都从属于一个特定的用户,和一个特定的用户组
每个文件都有一定的访问权限,用于限制不同用户和用户组的访问行为
用户和用户组:
用户分开,资源控制权限的不同,linux主要就是文件,linux每个文件必然属于一个特定的用户,同时文件还属于哪个用户组,
每个文件都有一定的访问权限,用于限制不同用户和用户组的访问行为
Linux系统中的用户分为: 1:root用户 系统超级用户 2:普通用户 自己创建的普通用户 3:系统用户
查看/etc/passwd文件:如下
查看文件/etc/ passwd:如上图
用户都可以再linux一个文件找到,/etc/passwd文件,这个文件列出系统中所有用户的信息,这个文件也是我们工作中经常需要查看的 oracle: x: 1021: 1020: Oracle user: /data/network/oracle: /bin/bash 1 2 3 4 5 6 7 1-用户名:长度在1到32个字符之间. 用户名:oracle 2-密码: x表示加密密码存储在 /etc/shadow. 3-用户ID (UID): 0是给root用户用的. 1021:用户数字标志,id一般都是一个数字 , 4-用户组ID (GID):用户的主组ID 主要的组 5-用户ID说明 描述用户信息,可以人为输入 6-用户家目录 为用户分配。专门给用户用的目录,里面存储用户自己独有的信息和文件,用户一般在家目录上进行操作,存放磁盘文件等操作 7一用户的缺省shell /bin/bashd 用户缺省的shell,shell登录的时候就使用这个shell',bin/shell
LINUX ROOT用户:
root 用户
超级管理员用户,具有操作系统的最大权限
LINUX普通用户
普通用户
由超级用户创建及授权,并且可以登录到Linux系统执行某些任务
LINUX系统用户
系统用户
系统内建了若干用户,如mail. ftp、 bin等,默认情况下,系统用户都是无法登录的
/sbin/nologin
二:创建用户:useradd root用户使用useradd命令创建用户 比如: useradd jack 参数: -d:指明用户家目录 不加-d用户的加目录缺省的,在home/用户名 家目录下面 -s:指定用户登入后所使用的shell
Linux中的shell,是指一个面向用户的命令接口,表现形式就是一个可以由用户登录的界面,这个界面也可以反馈运行信息;
缺省的shell就是 bin/shell -g:指明用户所属组 -c:加上备注文字 useradd jack 该命令完成的事情 1:在/etc/passwd文件中新增一行数据,表示该用户的信息; 2:为该用户创建用户组,将该用户标识符加在/etc/group文件中;如果有- g选项,则不创建用户组,而是将该用户加入指定组中 3:为该用户创建一个家目录(home directory),将其家目录的拥有者改为该用户所有,组别也改为该用户的组别
三:修改用户密码:passwd
root用户使用下列命令为用户jack设置密码)
passwd jack
XXXXXX
创建了用户之后,其密码是随机的 root新创建用户的时候密码随机的,不知道什么密码,指定密码
用户可以修改自己的密码需要输入当前密码
只有root用户可以修改其他用户密码
新创建一般只有root用户了,root用户创建好了之后直接指定密码,新用户使用root用户指定的密码登录后再登录进去后自己修改密码
具体修改用户密码实例如下图:
![](https://img2022.cnblogs.com/blog/2070357/202204/2070357-20220424100255350-1124377560.png)
四:修改用户信息usermod: usermod 只有root用户能调用该命令 修改用户的备注信息 usermod -c ‘dev team leader’ jcy usermod -c "ywt is leader" ywt 修改用户的登录目录(家目录) usermod -d ’/tmp’ jcy 修改用户账号名 usermod -l newname oldname 修改用户所属的组 usermod -g root jcy 修改用户的主组 usermod -G g2,g3 jcy 修改用户的其他组
具体修改用户信息实例如下图:
五:用户查询用户可以使用下列指令查询用户相关信息 1:who #查询当前在线的用户 2:whoami #用户身份查询 3:groups #查询用户所属的组 4:id #显示当前用户信息 用户通过模拟终端登录进去,能够查看到,用户在线格式,登录时间,登录的ip
具体用户查询信息实例如下图:
六:用户间切换:su 例如: 切换到用户jcy:
su - jcy su jcy 切换到root用户: su - su 切换root有没有-的区别:
加了 - 和直接用终端登录上去基本差不多,相当于把这个用户登录的初始化都做了一遍
包括进入用户的家目录,执行用户初始化脚本的家目录脚本都会执行一遍 不加 -,只是以新用户登录,用户执行环境还是以以当前用户环境来做 前者重新初始化环境,比如:全新用户home目录,新的环境变量 每个用户可以切换到root用户,只需要直到密码,也可以切换到自己 最开始jcy用户登录。对应shell,然后进入jack用户,然后又进入jack这层,session的三层嵌套,
如果这时候输入exit退出,先退回到jack的执行环境 这一层jack又exit会退回到jcy登录的这一层了,jcy这层再敲exit,那么这时候终端退出了
具体用户间切换实例如下图:
七:删除用户:userdel
root用户才能执行删除命令,用户登录的状态下不能删除, userdel 如果加参数-r,表示在删除用户的同时,一并把用户的家目录及本地邮件存储的目录或文件也一同删除 例子: userdel supportA #删除用户supportA,但不删除其家目录及文件; userdel -r support2 #删除用户support2,其家目录及文件一并删除;
具体删除用户实例如下图:
八:用户组 groups Linux系统中,每个用户账号至少属于一个组,每个组可以包括多个用户。 用户可以属于多个组: 其中一个是主组( primary group ) - 用户创建文件的时候,文件也属于这个主组, 其余的叫附属组( supplementary groups ) 管理组的常用命令有以下几个: 1:groupadd 命令创建组 2:groupdel 命令删除组 3:usermod 命令修改用户所属组 这些命令都是只能root用户操作
groups xxx 查看xxx用户所属于哪些组
具体用户组的操作实例如下图:
九:创建、删除用户组
root用户创建用户组sales,
groupadd sales
root用户删除用户组sales
groupdel sales
如果有用户属于这个组呢?
primary组不能删除,组里对应用户的组是主组的话不能删除,组里面所有的用户用这个组来当从属组的话可以删除
查看分组的信息:cat /etc/group
十:创建用户的时候指定用户组 root用户创建sa1,sa2用户,并把他们添加到sales组里面 useradd -g sales sal useradd -g sales sa2 不加-g参数的话,那么useradd会为我们创建一个同名的组,创建sa1用户的同时创建sa1这个组,
加了-g不会创建新的组了,直接把用户添加到组里面去了
十一:groups 显示用户的主组 主组和附属组:
权限控制,对应不同的组,不同文件有不同的属性,所以用户属于多个组,用户就具有多个组的权限,归属这个组的权限都有了
十二:修改用户所属的组 usermod
只有root用户才能操作 usermod -g root jcy 修改用户的主组(primary group) 小g修改主组 usermod -G g2,g3 jcy 修改用户的附属组
35:文件权限管理 和用户组息息相关 chmod
LINUX的文件访问权限 还是从ls -1说起: 文件必有一个所属用户和一个所属的组不同类型的用户有不同的访问权限
ll查看一个文件的具体详情如下:参考上图
-rw-r--r--. 1 root root 12 Nov 19 12:30 a.txt
文件的访问权限 所有者个数 文件所属的用户名字(owner) 文件所属的用户组(Group) 文件大小字节为单位 文件最后修改时间 文件名,目录名
一:LINUX文件访问:r w x 三种访问权限:读、写、执行,用户能对文件能干的三种事情
先理解下面的表格,后面有操作演示 权限 (对文件来说)文件的存取权限 目录(文件夹)的存取权限 r 具有读文件的权限(vi,cat等读取文件) 能查看文件夹里面的内容(比如:用ls命令能查看文件夹里面的内容)(能不能查看文件夹里面的内容) W 具有写文件的权限(修改文件,touch修改时间,删除) 能创建和删除文件(比如:在文件夹下面,使用touch命令创建文件)(能不能目录下创建删除文件) X 具有执行文件的权限(脚本,可执行的二进制程序) 能使用该目录下的文件(如cd命令),能进入该目录(能不能cd进去,没有写权限cd不进去) 对一个文件来说访问它的用户还分为三种类型: 用户类型 说明 owner 文件的所有者(一般来说,谁创建了该文件,那么他就是所有者) 拥有者可以修改 group 文件所属工作组(一般来说,创建文件的用户,文件所属的主组就是当前创建文件的用户所属的主组) -- touch file举例说明 other 其他用户(非owner和非group) 一般都是在自己家目录,也可以是共享目录touch文件,tmp目录就可以普通用户写入 访问文件可能是用户拥有者,也可能不是拥有者,而是用户属于这个文件所属的工作组 组一样的
二:linux文件访问权限:(重点)
![](https://img2022.cnblogs.com/blog/2070357/202204/2070357-20220424101416522-173535372.png)
ll显示文件信息,最前面显示的权限信息如下:
r读 w写 x执行 - rw- r-- r-- 看文件属性的 对应拥有者的权限 针对和文件属于同一组的用户 对应其他的用户的(不是所有者也不是组里面的) d代表目录 (比如文件属于jcy这个组, -代表普通文件 对于jcy组这一组的用户来说可以r) l,link符号链接或者软链接文件 不能读也可也写的,echo命令追加:echo asdsada >> bbb asdsada字符追加到bbb文件
三:改变文件访问权限的操作: chmod命令 chmod命令:change mod 谁可以改变文件访问权限?
只有Root和Owner可以改变权限
chmod [who] [op] [permission] file... 例如:chmod u+x filel who项表示用户类型,它的内容为以下一项或多项 u,g,a,o u 拥有者user ower 改变谁的文件的权限 g 与拥有者同一组的用户(group)其他人(other) o 其他人 a 所有人(all) op项表示动作 +,- + 表示要加上permission指定的权利,加什么指定的权限,比如 u+r 对u所有者+上r读取文件的权限 - 表示要取消pernission指定的权利
permission项为存取权限,它的内容为以下一项或多项 r,w,x r 表示加可读 W 表示加可写 X 表示加可执行权限 加上了可执行的权限,会变成绿色,表示可执行的了 实例:chmod命令举例, chmod ug+w test 拥有者u和同组用户g对test文件加上“可写”w权限 chmod a-X abc.c 所有人对abc.c文件不可执行,a=all,全部,所有人 chmod u+rwx myfilel 拥有者对myfile“加上可读、可写、可执行权限
四:改变文件访问权限第二种写法:直接使用=,不用+,-写法全新写入权限 chmod u=rwx myfile chmod u=rwx, g=rx, o=r myfile
五:改变文件访问权限第三种写法 chmod 755 myf 等价于 chmod u=rwx, g=rx, o=rx myf r=4 w=2 x=1 可读可写可执行权限都用数字标志,数字是用的二进制三位的数字来标识的 二进制:0,1 二进制:
文件属性,三位, r w x,最右边第一位0,1来标识,有执行权限1标识,w有执行权限1,r有读的权限1
所以111标识可读,可写,可执行 111=十进制的1+2+4=7 没有执行权限0标识
36:Linux进程管理
一:什么是进程
程序:qq安装好了之后,到文件夹下面,.exe可执行文件,qq程序,双击运行,在windows任务管理器进程查看
可以查看到进程启动了 运行起来拉起进程
二:程序和进程的概念: 程序(软件)用代码决定程序的行为,存在存储介质里面,比如硬盘。 写了代码决定程序的行为,windows计算机,excel等都是程序,代码写了之后存储到存储介质上面 静态的 就好像,莱谱上的一道做莱方法,此如怎么娆土豆娆鸡 程序运行起来,就是操作系统把存储介质上的可执行文件,加载到内存里面运行,这个运行的程序叫做进程 就好像,厨师根据了菜谱,在做菜的过程 安装的类比?复来工作的打包,满汉全席,特珠工具打色子。
三:LINUX里的进程 Shell 就是一个进程,基本上我们用户和操作系统打交道就是一个进程,shell 看进程的命令: ps
如上图:
CMD:command 显示进程敲的时候对应的命令 bash:bash就是当前正在接收我们敲入命令的程序, TIME:显示的是进程所占的cpu时间 TTY:指的进程运行在哪个终端,哪个终端把它起起来的 PID:进程号PID才是重点 进程ID号PID,类似身份证号,计算机使用数字标志一个东西的 (PID ) 操作系统用数字来标识进程 ps命令显示进程的id
四:进程的创建 进程是由另一个进程创建的 第一个进程init,进程ID为1 比如shell (很多 进程的父进程) : ps -f 一下看看 创建者:父进程 对应PPID 被创建者:子进程 对PID 如果父进程死了?
init变成子进程的父进程,父进程id变成1了 进程的创建方法?
系统调用fork,exec 父进程调用了fork,exec来创建的 了解
五:系统的启动过程 系统的启动过程:
操作系统的引导,引导起来过程中,创建第一个进程init,进程ID为1,init负责启动其他进程,
其他进程又启动了他们各自需要启动的进程 登录到系统里面的时候。字符终端登录的,系统会创建一个shell进程,一般shell进程 远程登录的话就是sshd,sshd协议守护进程来创建shell进程 shell进程:我们直接打交道的进程,shell又负责创建很多子进程,shell里面输入命令的时候shell解释执行命令,比如输入ls 需要执行ls命令,就把ls进程创建起来了,所以shell是很多进程的父进程
比如shell (很多进程的父进程) : ps -f一下看看
ps -f 当前shell创建的,当前终端的,参数只有 -f 一个就是指在当前终端上这些进程
pid 进程自己id
ppid 父进程的id
六:ps命令查看进程,常用的查看进程的信息的 不带任何参数:显示当前这次登录所创建出来的一些进程,再打开一个终端创建了一些进程不在这个ps命令里面显示,只显示当前这次终端登录的创建的信息 同一个用户同一个终端 -ef 参数:
e:表示所有
f:表示full- format,尤其是PPID 和command 内客(-f 显示更全的信息,比如ppid父进程id -e表示所有的意思,加e参数--显示全部进程) -ef 显示所有进程的一些详细信息 axu 参数:ax表示所有,u表示user-oriented
ps aux 和上面一样,没有打印出父进程的id 经常和管道符连用:ps - ef|grep java
| 管道符号,把前面命令输出的结果给后面命令当作输入的文件用,grep本身是一个文件中的关键字
七:后台运行进程 & 前台进程和后台进程 Shell里正在执行的和用户进行交互的进程叫前台进程 举例ps,ls分别为前台进程,时间短 有的命令执行时间长,比如备份程序,可以在后台执行 加 & 示例runfor.py 后台运行意味着不从标准输入读入字符 后台运行的进程我们叫后台进程,或者后台任务 前台进程:占据着系统的标准输入,现在我们敲的东西被它所接收过来的去执行 后台进程:后台运行的进程,不占据标准输入读入字符
输入ps命令,由于命令执行快,前台执行。很快就执行完了,没有看到占用的系统的标准输入 输入python,执行python解释器,现在不是shell里面,shell退居二线了,由python解释器来占据终端,读取标准输入的东西 现在输入shell的命令就不行了,不认识,现在和python解释器打交道了,python解释器就是前台的进程
前台的进程:
占据着当前终端的标准输入 我们现在和它打交道,我们输入的命令都被它拦截下来了 这就是前台进程 如果前台进程执行完了,输入quit,我们又回到了shell,现在输入ls就能识别了,现在shell和我们打交道了 为什么需要让一个进程后台运行:
因为有的进程如ps,ls执行完就退出了,历史使命很简单,前台运行一下没关系,python进程也是 但是有的进程比如备份系统东西的程序可能执行时间很长,而且它干的事情不需要和用户打交道,它就是默默后台备份,备份完了后台打印信息备份完成就结束了 这样的任务不需要前台运行,这种情况如果让他敲命令备份程序backup的话,这时候可能占据前台的空间,不需要看到任何事情 这时候希望不要在前台运行,后台默默运行就行了, 实例操作:
runfor.py 脚本,演示后台运行,其实它什么事情都不干,就是运行一段时间 如下: python runfor.py 60 就是运行10s,退出,运行完了之后打印一句话,演示用的,
现在这60s不能输入其他命令,输入其他命令标准输入被脚本程序占据,shell退到后面去了 那么这时候,希望这种程序后台运行,运行同时还能干其他事情,多任务 ,它在后台运行干他的,我在前台干我的 linux里面,为了让进程在后台运行 加 & 符号 ,可以在后台运行了, 输入:python runfor.py 60 & 运行
现在输出:[1] 16913 意思是shell把这个程序放在后台去运行了,并且程序的pid是16913 ,现在可以ps命令查看 后台运行进程: nohup 与后台进程
nohup命令:打印shell终端,执行程序,有的程序需要执行很长的时间,比如备份程序,执行一整个晚上,电脑需要一直开着 xshell和后面的连接可能有时间限制,一段时间不操作连接就会断开,这时候运行的进程如果在前台哪怕在后台运行一旦起起来了 的终端xshell断开了,很可能进程也死掉了-----窗口关了进程就死了 命令前面+ nohup这个关键字,这时候终端关了,程序不会退出的, nohup ◆示例:没有nohup直接点X,关闭putty, 进程会退出 ◆原因有的shell会发送SIGHUP信号给子进程 nohup python runfor. py & nohup python runfor.py > /dev/null 2 > &1 & 为什么nohup能让程序不退出, 为什么没有nohup,运行程序关了终端会退出,-一个程序运行的时候是个进程,父进程是shell,shell起的子进程,如果终端关了的话,起起来的终端 xshell的窗口关了,shell发现自己终端连接断开了,他会发送SIGHUP信号给子进程,告诉他终端以及挂了,接收到这个信号的子进程, 缺省干的事情就会把自己退出的----收到信息缺省就退出了,为什么关了终端为什么会退出 为什么+ nohup就不会退出呢,加了nohup之后shell让起起来的python程序不收到SIGHUP信号了,首先让他和标准输入设备断开了,只有这个执行 和终端设备没什么关心了,收到SIGHUP信号