目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、ArchLinux、SolusOS等。
总结:
用户界面是操作系统的外在表象,内核是操作系统的内在核心。
内核负责管理系统的硬件设备。
内核拥有直接访问硬件设备的所有权限,用户程序不能直接访问硬件设备,因此用户程序通过系统调用和内核通信来运行。
1、进程管理
内核负责创建和销毁进程,并处理它们与外部世界的联系(输入和输出)。不同进程间通讯(通过信号,管道,或者进程间通讯原语)对整个系统功能来说是基本的,也由内核处理。另外,调度器,控制进程如何共享CPU,是进程管理的一部分。更通常地,内核的进程管理活动实现了多个进程在一个单个或者几个CPU之上的抽象。
2、内存管理
计算机的内存是主要的资源,处理它所用的策略对系统性能是至关重要的。内核为所有进程的每一个都在有限的可用资源上建立了一个虚拟地址空间。内核的不同部分与内存管理子系统通过一套函数调用交互,从简单的malloc/free对到更多更复杂的功能。
3、文件系统
Unix在很大程度上基于文件系统的概念;几乎Unix中的任何东西都可看作一个文件。内核在非结构化的硬件之上建立了一个结构化的文件系统,结果是文件的抽象非常多地在整个系统中应用。另外,Linux支持多个文件系统类型,就是说,物理介质上不同的数据组织方式。例如,磁盘可被格式化成标准Linux的ext3文件系统,普遍使用的FAT文件系统,或者其他几个文件系统。
4、设备控制
5、网络
网络必须由操作系统来管理,因为大部分网络操作不是特定于某一个进程:进入系统的报文是异步事件。报文在某一个进程接手之前必须被收集,识别,分发。系统负责在程序和网络接口之间递送数据报文,它必须根据程序的网络活动来控制程序的执行。另外,所有的路由和地址解析问题都在内核中实现。
shell是系统的用户界面,提供了用户与内核进行交互的一种接口。它接收用户输入的命令并把它送到内核中去执行。实际上Shell是一个命令解释器,它解释用户输入的命令并把用户的意图传达给内核。(可以理解为用户和内核之间的翻译官角色)
常见的Shell类型有sh,bash,csh,tcsh,ash,bashshell是Linux默认的shell,
命令:整条shell命令的主体部分
选项:会影响会微调命令的行为,通常以-或者--开头
参数:命令作用的对象(长参数,短参数)
[root@localhost~]#yuminstall-ybash-completion.noarch快捷键历史命令[root@localhost~]#history选项#history[n]n为数字,列出最近的n条命令[root@localhost~]#history-whistfiles.txt1[root@localhost~]#history-c!number执行第几条命令!command从最近的命令查到以command开头的命令执行!!执行上一条命令别名(alias)[root@localhost~]#aliasaliascp='cp-i'aliasegrep='egrep--color=auto'aliasfgrep='fgrep--color=auto'aliasgrep='grep--color=auto'aliasl.='ls-d.*--color=auto'aliasll='ls-l--color=auto'aliasls='ls--color=auto'aliasmv='mv-i'aliasrm='rm-i'aliaswhich='alias|/usr/bin/which--tty-only--read-alias--show-dot--show-tilde'设置别名
[root@localhost~]#aliascathis='cat/root/.bash_history'[root@localhost~]#cathis取消别名
[root@localhost~]#unaliascathis='cat/root/.bash_history'man手册查看某个命令的man手册
[root@localhost~]#manls下载安装中文版的man手册
[root@localhost~]#yum-yinstallman-pages-zh-CN.noarch[root@localhost~]#echoaliascman='man-M/usr/share/man/zh_CN'>>/root/.bashrc [root@localhost~]#source.bashrc[root@localhost~]#cmanls打通身体经脉——文件管理文件系统目录结构在Linux中,文件以树状图的形式表现出来。其中/为根目录只有一个根目录。所以也称之为单根文件系统
路径的作用:定位文件
绝对路径:从根目录下出发的路径称为绝对路径
相对路径:相对于当前目录下出发的路径称为相对路径
cat:从上往下(正常顺序)打开
tac:从下网上打开
less:打开较大的文件时,不会一次性加载所有的文件,只会加载一部分,通过空格键向后继续查询
more:跟less类似,只不过more查看完就退出了显示进度(空格翻页、q退出)
head:默认从前面查看10行
tail:从后面查看
tailf:实时追踪
[root@localhost~]#cat>output<
[root@localhost~]#命令1|命令2|命令3[root@localhost~]#grep"/sbin/nologin"/etc/passwd|wc-l15通过管道符重置用户密码
[root@localhost~]#echoredhat|passwd--stdinrootChangingpasswordforuserroot.passwd:allauthenticationtokensupdatedsuccessfully.命令行的通配符[root@localhost~]#ls-l/dev/sda*brw-rw----.1rootdisk8,0Oct1807:32/dev/sdabrw-rw----.1rootdisk8,1Oct1807:32/dev/sda1brw-rw----.1rootdisk8,2Oct1807:32/dev/sda2[root@localhost~]#ls-l/dev/sdabrw-rw----.1rootdisk8,1Oct1807:32/dev/sda1brw-rw----.1rootdisk8,2Oct1807:32/dev/sda2[root@localhost~]#ls-l/dev/sda[0-9]brw-rw----.1rootdisk8,1Oct1807:32/dev/sda1brw-rw----.1rootdisk8,2Oct1807:32/dev/sda2[root@localhost~]#ls-l/dev/sda[135]brw-rw----.1rootdisk8,1Oct1807:32/dev/sda1重要的环境变量变量是计算机系统用于保存可变值的数据类型。在Linux系统中,变量名称一般都是大写的,这是一种约定俗成的规范。我们可以直接通过变量名称来提取到对应的变量值。Linux系统中的环境变量是用来定义系统运行环境的一些参数,比如每个用户不同的家目录、邮件存放位置等。
我们可以自己定义变量,例如定义一个变量WORKDIR,方便直接到达用户工作的目录,如下:
[root@localhost~]#useradduser1[root@localhost~]#echo123|passwd--stdinuser1Changingpasswordforuseruser1.passwd:allauthenticationtokensupdatedsuccessfully.[root@localhost~]#mkdir/home/user1/test[root@localhost~]#WORKDIR=/home/user1/test/[root@localhost~]#cd$WORKDIR[root@localhosttest]#pwd/home/user1/test但是,这样的变量不具有全局性,作用范围也有限,默认情况下不能被其他用户所使用。可以使用export命令将其提升为全局变量。
目前常见的文本编辑器有:
目前vim是使用最多的,也是比较推荐的Linux文本编辑器
Vim是从vi发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
简单的来说,vi是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。vim则可以说是程序开发者的一项很好用的工具。
vim是一个纯命令行文本编辑器,很多文本编辑的功能都是通过键盘快捷键的方式完成,所以我们需要记住常用的键位,在vim官方网站上我们可以找到vim键盘图的完整版,不过对于初学者来说,我们只需要知道常用的就可以了。
基本上vi/vim共分为三种模式,分别是命令模式(Commandmode),输入模式(Insertmode)和末行模式(Lastlinemode)。这三种模式的作用分别是:
刚刚启动vim的时候就进入了命令模式
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
以下是常用的几个命令:
若想要编辑文本:启动Vim,进入了命令模式,按下i、a、o,切换到输入模式
命令模式只有一些最基本的命令,因此需要末行模式在输入更多的命令。
进入输入模式的命令上面讲到
在输入模式中,可以使用以下按键:
在命令模式下按下:(英文冒号)就可以进入末行模式,在末行模式下可用的命令非常多。基本命令有:
stat[选项]...文件...实例root@localhost~]#exportLANG="en_US.UTF-8"#改回中文是LANG="zh_CN.UTF-8"[root@localhost~]#statanaconda-ks.cfgFile:‘anaconda-ks.cfg’Size:1241Blocks:8IOBlock:4096regularfileDevice:fd00h/64768dInode:33574979Links:1Access:(0600/-rw-------)Uid:(0/root)Gid:(0/root)Context:system_u:object_r:admin_home_t:s0Access:2021-04-0417:54:09.700844151+0800Modify:2021-04-0416:53:30.524854041+0800Change:2021-04-0416:53:30.524854041+0800Birth:-文件类型Linux系统和Windows系统有很大的区别,Windows系统查看文件的后缀名就可以知道这个是什么类型的文件,比如:test.jpg这个是一个图片,如果你在windows上双击打开,就会使用支持查看图片的软件打开。
Linux系统就根本不看文件的后缀名,你认为这个是什么文件,你就使用什么工具打开这个文件,如果打开错误,就会报错,看下面的案例
root@localhost~]#catfilecat:file:Isadirectory当你以为file是个文件,使用cat命令查看的时候,cat会提示你这个是个文件夹,你才反应过来,应该使用cd命令打开。所以在Linux中,我们需要使用和windows不一样的方法来判断这个文件的类型。
使用ls可以查看当前目录下有哪些文件,我们会发现文件夹和文件的颜色并不一样,所以我们可以简单的通过颜色来进行判断,不过这种判断的方式并不准确,因为不同的Linux发行套件颜色的标准并不一样,不同的远程管理工具对颜色的理解也有偏差,比如可能把蓝色显示为淡蓝色,而淡蓝色又显示成其他颜色。所以最推荐的做法是通过ls-l查看第一个字母:
[root@localhost~]#typellll是`ls-l--color=auto'的别名[root@localhost~]#ll-d/etc/hosts/bin/ls/home/dev/sda/dev/tty1/etc/grub2.cfg/dev/log/run/dmeventd-client-rwxr-xr-x.1rootroot11768010月312018/bin/lssrw-rw-rw-.1rootroot04月416:54/dev/logbrw-rw----.1rootdisk8,04月416:54/dev/sdacrw--w----.1roottty4,14月416:56/dev/tty1lrwxrwxrwx.1rootroot224月416:49/etc/grub2.cfg->../boot/grub2/grub.cfg-rw-r--r--.1rootroot1586月72013/etc/hostsdrwxr-xr-x.2rootroot64月112018/homeprw-------.1rootroot04月416:54/run/dmeventd-client方法二:filefile是专门用来查看文件类型的命令
[root@localhost~]#file/etc/hosts/etc/hosts:ASCIItext[root@localhost~]#file/bin/ls/bin/ls:ELF64-bitLSBexecutable,x86-64,version1(SYSV),dynamicallylinked(usessharedlibs),forGNU/Linux2.6.32,BuildID[sha1]=ceaf496f3aec08afced234f4f36330d3d13a657b,stripped[root@localhost~]#file/dev/sda/dev/sda:blockspecial[root@localhost~]#file/dev/tty1/dev/tty1:characterspecial[root@localhost~]#file/etc/grub2.cfg/etc/grub2.cfg:symboliclinkto`../boot/grub2/grub.cfg'[root@localhost~]#file/home/home:directory[root@localhost~]#file/run/dmeventd-client/run/dmeventd-client:fifo(namedpipe)文件查找which用于查找文件
which命令会在环境变量$PATH设置的目录里查找符合条件的文件
[root@localhost~]#which[filename...]实例[root@localhost~]#whichlsliasls='ls--color=auto'/usr/bin/ls#which会先告诉你ls其实是一个别名#然后显示出来ls所在的具体位置小知识:我们在执行ls的时候,其实执行的是ls-color=auto这条命令,在显示文件的时候使用不同的颜色表示不同的文件类型,如果我们想执行ls本体,而不想执行别名,我们可以输入\ls就可以了,这样就不会就不同颜色的文件类型了。
[root@localhost~]#whichpoweroff/usr/sbin/powerofflocate用于查找符合条件的文件,他会去保存文件和目录名称的数据库内,查找合乎范本样式条件的文件或者目录
在centos7的最小安装中,并没有自带locate命令,需要输入如下命令进行安装
[root@localhost~]#yum-yinstallmlocatelocate命令的使用方式如下
[root@localhost~]#locate[选项]...[范本样式]...在使用locate之前,需要更新一下数据库,因为locate只会在数据库中查找文件所在的位置,所以locate查找速度极快,缺点就是数据库更新并不是实时的,更新数据库有两种方式:
root@localhost~]#updatedb#更新数据库并不是每次查找都需要,但是建议更新数据库来保证数据是最新的[root@localhost~]#locatepasswd[root@localhost~]#locate-rens33$/etc/sysconfig/network-scripts/ifcfg-ens33#$在正则表达式中表示以什么结尾,所以ens33$表示的是以ens33结尾的文件find实时查找工具,通过遍历指定路径下的文件系统来完成文件的查找
工作特点:
使用方法如下
[root@localhost~]#find/home-useratopos#属主是atopos的文件[root@localhost~]#find/home-groupatopos[root@localhost~]#find/home-useratopos-groupatopos[root@localhost~]#find/home-useratopos-a-grouproot[root@localhost~]#find/home-useratopos-o-grouproot[root@localhost~]#find/home-nouser#没有属主的文件[root@localhost~]#find/home-nogroup#没有属组的文件其中-a是和,-o是或
root@localhost~]#find/dev-typedroot@localhost~]#find/-perm644-ls[root@localhost~]#find/-perm-644-ls#权限小于644的[root@localhost~]#find/-perm4000-ls[root@localhost~]#find/-perm-4000-ls[root@localhost~]#find/etc-regex'.*ifcfg-ens[0-9][0-9]'#.*任意多个字符#[0-9]任意一个数字处理动作实例[root@localhost~]#find/var-userroot-a-groupmail[root@localhost~]#find/usr-not-userroot-not-userbin-not-userHadoop(centos)[root@localhost~]#find/usr-not\(-userroot-userbin-userHadoop\)[root@localhost~]#find/etc-mtime-7[root@localhost~]#find/\(-nouser-o-nogroup\)-a-atime-7[root@localhost~]#find/etc-size+1M-a-typef[root@localhost~]#find/etc-not-perm-222[root@localhost~]#find/etc-not-perm111[root@localhost~]#find/etc/init.d-perm-113功法管理——用户权限管理Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须向管理员申请一个账号,然后输入这个账号的身份进入系统。
实现用户账号的管理,主要完成的工作有以下的几个方面:
现实用户的ID,以及所属群组的ID
id会显示用户以及所属群组的实际与有效ID。若两个ID相同,则仅显示实际ID。若仅指定用户名称,则显示目前用户的ID
[root@localhost~]#id[OPTION]...[USER]uid的约定Linux系统会依赖用户的uid数值来判定这个用户的角色,分别如下:
关于root用户
用于保存用户信息,一般第一行是root用户,下面都是其他用户
[root@localhost~]#head-n1/etc/passwdroot:x:0:0:root:/root:/bin/bash#这个格式为用户名:密码:uid:gid:描述:家目录:登陆后执行的命令shadow文件格式中密码占位置太长了,所以用x来代替,Linux系统会到shadow文件中查找x部分的密码内容
用户和组的对应关系,会保存在group这个文件中
groupadd命令用于创建一个新的工作组,新工作组的信息将被添加到系统文件中
[root@localhost~]#groupadd[选项]组名选项实例[root@localhost~]#groupaddhr-g1000[root@localhost~]#groupaddsale-g2000[root@localhost~]#groupaddit-g3000[root@localhost~]#groupaddfd-g4000[root@localhost~]#tail-n4/etc/grouphr:x:1000:sale:x:2000:it:x:3000:fd:x:4000:groupmod修改用户组groupmod命令用于更改用户组识别码或者名称
[root@localhost~]#groupmod[选项]名称选项实例[root@localhost~]#groupmod-nfinancefd[root@localhost~]#tail-n1/etc/groupfinance:x:4000:groupdel:删除用户组groupdel命令用于删除群组
需要从系统上删除群组时,可用groupdel(groupdelete)指令来完成这项工作。倘若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。
[root@localhost~]#groupdel组名实例[root@localhost~]#groupaddtest[root@localhost~]#groupdeltestgpasswd:用户组成员管理gpasswd是Linux下工作组文件/etc/group和/etc/gshadow管理工具,用于将一个用户添加到组或者从组中删除
[root@localhost~]#gpasswd[选项]组名选项实例[root@localhost~]#useraddtest[root@localhost~]#gpasswd-atestit正在将用户“test”加入到“it”组中[root@localhost~]#cat/etc/group|grepit:it:x:3000:test#在组文件中,可以看到这个组的成员[root@localhost~]#idtestuid=6667(test)gid=6667(test)组=6667(test),3000(it)#在用户的信息中,可以看到这个用户的所属组用户管理useradd:添加用户uaeradd可以用来添加新的用户
[root@localhost~]#useradd[选项]用户名新建用户home目录下的bash开头的文件时从/etc/skel/中复制过去的
如果创建一个用户时,未指定任何选项,系统会创建一个和用户名相同的组作为用户的PrimaryGroup
[root@localhost~]#useraddtest1[root@localhost~]#useradd-groottest2[root@localhost~]#useradd-m/home/test3test3[root@localhost~]#useradd-s/sbin/nologintest4usermod:修改用户信息usermod用于修改用户的的各类设定
[root@localhost~]#usermod[选项]用户名选项实例[root@localhost~]#useradduser01[root@localhost~]#usermod-d/homeuser01[root@localhost~]#su-user01-bash-4.2$pwd/home[root@localhost~]#usermod-u6666user01userdel:删除用户userdel命令用于删除用户账号
cat一下/etc/passwd文件
[root@localhost~]#cat/etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologin新建一个用户,给他自定义命令
[root@localhost~]#useradd-s/bin/vitest[root@localhost~]#tail-n1/etc/passwdtest:x:1000:1000::/home/test:/bin/vi我们切换到test用户就会发现用户默认进入vi编辑页面
useradd参照文件
创建用户时对用户的一些限制,对root用户无效
文件权限时控制某个用户或者用户组访问某个文件的方式
U:属主
G:属组
O:其他人
r:读数字:4
w:写数字:2
x:执行数字:1
[root@localhost~]#chownuser01:user01file#更改属主和属组[root@localhost~]#chown:user01file#只更改属组[root@localhost~]#chownuser01file#只更爱属主chmod:更改文件权限对象:ugoa
赋值符号:+-=
权限类型:rwx也可以用数字
[root@localhost~]#chownu+xfile #属主增加执行全新啊[root@localhost~]#chowna=rwx file #所有用户赋予rwx权限[root@localhost~]#chownug=rw,o=r file #属主属组赋予读写,其他人只读#使用数字[root@localhost~]#chown644file #属主拥有读写权限,属组和其他用户只读chown:改变某个文件的属主属组
chmod:改变某个文件自身的权限
目录权限跟文件权限无关
UGO设置基本权限:只能一个用户或者一个组或者其他人
[root@localhost~]#setfacl[选项]文件/目录选项实例[root@atopos~]#llfile1-rw-r--r--.1centosit09月411:03file1[root@atopos~]#getfaclfile1#file:file1#owner:centos#group:ituser::rwgroup::r--other::r--[root@atopos~]#setfacl-mu:centos:rwfile1#增加用户权限[root@atopos~]#setfacl-mu:user05:-file1#增加用户权限[root@atopos~]#setfacl-mo::rwfile1#修改其他人权限[root@atopos~]#llfile1-rw-rw-rw-+1centosit09月411:03file1[root@xwz~]#getfaclfile1#file:file1#owner:centos#group:ituser::rwuser:centos:rwuser:user05:---group::r--mask::rwother::rw-[root@xwz~]#setfacl-mg:hr:rfile1#增加组权限[root@xwz~]#setfacl-xg:hrfile1#删除组权限[root@xwz~]#setfacl-bfile1#删除所有acl权限maskmask决定了用户对文件的的最高权限,说白了,mask和acl共同控制用户对文件的权限,如果mask权限为r--,acl权限为rwx,则最后的权限只能时r--
mask权限,指的是用户或群组能拥有的最大ACL权限,也就是说,给用户或群组设定的ACL权限不能超过mask规定的权限范围,超出部分做无效处理。
[root@atopos~]#setfacl-mm::---file1[root@atopos~]#getfaclfile1#file:file1#owner:centos#group:ituser::rwgroup::r-- #effective:---mask::---other::---default一般正对访问目录,默认权限独立与该目录本身的权限,规定了在该目录中创建文件的默认acl权限
default可以指定在目录中创建的新文件的初始acl权限
用户centos能够对/home以及以后再/home下创建的文件具有读写执行权限
[root@atopos~]#setfacl-mu:centos:rwx/home[root@atopos~]#setfacl-md:u:centos:rwx/home[root@atopos~]#getfacl/homegetfacl:Removingleading'/'fromabsolutepathnames#file:home#owner:root#group:rootuser::rwxuser:centos:rwxgroup::r-xmask::rwxother::r-xdefault:user::rwxdefault:user:centos:rwxdefault:group::r-xdefault:mask::rwxdefault:other::r-x特殊权限文件除了上述的r,w,x基本权限,还有三个特殊权限:suid,sgid,sbit(sticky)
suid属性只能运用在可执行文件上,含义是开放文件所有者的权限给其他用户,即当用户执行该执行文件时,会拥有该执行文件所有者的权限。如果给一个非二进制文件文件附加suid权限,则会显示大写S,属于无效。
普通用户能够执行passwd命令修改自己的密码,修改密码其实就是修改/etc/shadow这个文件,查看/etc/passwd这个文件的权限,发现除了root其他人没有写权限,但是普通用户能够成功执行passwd,其原因就在于passwd这个命令的权限是rwsrw----,其中s的作用就是让执行命令的人具有和该命令拥有者相同的权限。
[root@atopos~]#ll/usr/bin/passwd-rwsr-xr-x.1rootroot27832Jun102014/usr/bin/passwd实例[root@localhost~]#su-user1[user1@localhost~]$passwd更改用户user1的密码。为user1更改STRESS密码。(当前)UNIX密码:[root@localhost~]#ps-aux|greppasswdroot75210.00.11707602052pts/0S+10:240:00passwdchmodu+sfilechmod4765filesgidsgid属性可运用于文件或者目录,运用在文件的含义是开放文件所属组的权限给其他用户,即当用户执行该执行文件时,会拥有该执行文件所属组用户的权限。如果给一个非二进制文件文件附加sgid权限,则会显示大写S,属于无效。
运用在目录上的含义是,在该目录下所有用户创建的文件或者目录的所属组都和其一样。即如果/home/user1目录具有sgid权限,且所属组是user1,则任何用户在/home/user1下创建的子目录或者文件的所属组都是user1。
[root@atopos~]#mkdirworkdir[root@atopos~]#chmodg+sworkdir/[root@atopos~]#cdworkdir/[root@atoposworkdir]#touchfile2[root@atoposworkdir]#lltotal0-rw-r--r--.1rootroot0Jan1307:04file-rw-r--r--.1rootworker0Jan1307:05file2sbit(sticky)sticky权限只能运用于目录上,含义是该目录下所有的文件和子目录只能由所属者删除,即使其的权限是777或者其他。一个公共目录,每个人都可以创建文件,删除自己的文件,但不能删除别人的文件(仅对目录有效)
[root@localhost~]#chmod777/workdir/[root@localhost~]#chmodo+t/workdir/[root@localhost~]#su-user1[user1@localhost~]$cd/workdir/[user1@localhostworkdir]$touchuser1file[user1@localhostworkdir]$exit登出[root@localhost~]#su-user2[user2@localhost~]$cd/workdir/[user2@localhostworkdir]$touchuser2file[user2@localhostworkdir]$rm-rfuser1file#不给删除别人的文件rm:无法删除"user1file":不允许的操作[user2@localhostworkdir]$rm-rfuser2file#只能删除自己的文件[user2@localhostworkdir]$ll总用量0-rw-rw----+1user1worker04月1411:11user1filechattr文件属性chattr命令用来改变文件的属性
这项指令可以改变存放在文件或者目录属性,这些属性共有一下8种模式:
[root@localhost~]#chattr[-RV][+/-/=<属性>][文件或目录...选项实例[root@localhost~]#chattr+i/etc/resolv.conf[root@localhost~]#lsattr/etc/resolv.conf----i-----------/etc/resolv.conf[root@localhost~]#echotest>>/etc/resolv.conf-bash:/etc/resolv.conf:权限不够[root@localhost~]#chattr+a/var/log/messages[root@localhost~]#lsattr/var/log/messages-----a----------/var/log/messages[root@localhost~]#echo>/var/log/messages#不允许清空日志-bash:/var/log/messages:不允许的操作umaskumask命令指定在建立文件时预设的权限掩码,进程新建文件、目录的默认权限会收到umask的影响,umask表示要减掉得到权限。
umask可用来设定[权限掩码]。[权限掩码]是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限。
[root@localhost~]#umask[选项][权限掩码]选项实例[user01@atopos~]$umask0002[user01@atopos~]$umask-Su=rwx,g=rwx,o=rx[user01@atopos~]$umask0000[user01@atopos~]$mkdirdir1[user01@atopos~]$lltotal0drwxrwxrwx.2user01user016Jan1307:28dir1[root@localhost~]#vim/etc/profile--------------59if[$UID-gt199]&&["`/usr/bin/id-gn`"="`/usr/bin/id-un`"];then60umask00261else62umask02263fi---------------[root@localhost~]#source/etc/profile#立即在当前shell中生效[root@localhost~]#vim/etc/login.defs-----------------61#Thepermissionmaskisinitializedtothisvalue.Ifnotspecified,62#thepermissionmaskwillbeinitializedto022.63UMASK077------------------正在运行中的功法——进程process什么是进程进程是cpu进行资源分配的最小单位,是一个在系统中运行的程序
进程是已启动的可执行程序的运行实例,进程有一下部分组成:
进程:程序运行的过程,动态,有生命周期及运行状态
守护进程:在系统引导启动过程中启动的进程,跟终端无关
父进程复制自己的地址空间(fork)创建一个新的子进程结构,每个新进程分配一个唯一的进程ID(PID),满足跟踪安全之需。PID和父进程ID(PPID)是子进程环境的元素,任何进程都可以创建子进程,所有进程都是第一个系统进程的后代:
centos5/6:init
centos7:systemd
进程状态:
子进程继承父进程的安全性身份、过去和当前的文件描述符、端口和资源特权、环境变量,以及程序代码。随后,子进程可能exec自己的程序代码。通常,父进程在子进程运行期间处于睡眠(sleeping)状态。当子进程完成时发出(exit)信息请求,在退出时,子进程已经关闭或丢弃了其资源环境,剩余的部分称之为僵尸(zombie)。父进程在子进程退出时收到信号而被唤醒,清理剩余的结构,然后继续执行其自己的程序代码。
R:运行状态(runing):表明进程要么在运行中要么在运行队列里,并不意味着进程一定在运行中。
S:睡眠状态(sleeping):意味着进程在等待事件的完成(这里的睡眠有时候也叫做可中断睡眠)
D:磁盘睡眠状态(Disksleep):有时候也叫做不可中断睡眠,在这个状态的进程通常会等待IO的结束
T:停止状态(stopped):可以通过发送SIGSTOP信号给进程来停止(T)进程。这个被暂停的进程可以通过发送SIGCNT信号让进程继续运行。
Z:僵尸状态(zombie):通知父进程回收所有的资源
X:死亡状态(dead):这个状态只是一个返回状态,你不会在任务列表里看到这个状态。
静态查看进程ps注:ps-aux不同于psaux
PID:进程ID
%CPU:CPU占用率
%MEM:内存占用率
VSZ:占用虚拟内存
RSS:占用实际内存驻留内存
TTY:程序运行的终端
STAT:进程状态manps(/STATE)
COMMAND:进程文件,进程名
[root@atopos~]#cat/run/sshd.pid[root@atopos~]#psaux|grepsshd[root@atopos~]#pgrep-lsshd[root@atopos~]#pidofsshd查看进程树(需要安装pstree)
第2行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。
第3行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。
第4行:物理内存总量、内存使用量、内存空闲量、作为内核缓存的内存量。(buffer和cache之间的区别,cache是提高cpu和内存之间的数据交换速度,buffer是io设备和存储设备之间的缓冲区)
第5行:虚拟内存总量、虚拟内存使用量、虚拟内存空闲量、已被提前加载的内存量。
[root@atopos~]#touchfile1file2[root@atopos~]#tty/dev/pts/1[root@atopos~]#vimfile1[root@atopos~]#tty/dev/pts/2[root@atopos~]#vimfile2[root@atopos~]#psaux|grepvimroot320720.20.21515325064pts/1S+19:090:00vimfile1root321270.10.21515325080pts/2S+19:090:00vimfile2root321760.00.0112728988pts/3S+19:090:00grep--color=autovim[root@atopos~]#kill32072[root@atopos~]#kill-932127[root@atopos~]#killallvim#杀死所有vim进程测试信号18和信号19
由于不是每个进程都与其他进程同样重要,可告知进程调度程序为不同的进程使用不同的调度策略。常规系统上运行的大多数进程所使用的的调度策略为SCHED_OTHER(也称为SCHED_NORMAL),但还有其他一些调度策略用于不同的目的。SCHED_OTHER调度策略运行的进程的相对优先级称为进程的nice值,可以有40种不同级别的nice值。
进程优先级0-99:实时优先级,数字越小,优先级越低
00-139:静态优先级,数字越小,优先级越高
进程默认启动时nice为0,优先级为120
nice值越高表示优先级越低,例如+19,该进程容易将CPU使用量让给其他进程
nice值越低表示优先级越高,例如-20,该进程更倾向于不让出CPU
[root@atopos~]#psaxopid,command,nice--sort=nice[root@atopos~]#psaxopid,command,nice,cls--sort=-niceTS表示该进程使用的调度策略为SCHED_OTHER
NI:实际nice级别
PR:将nice级别显示为映射到更大优先级队列,-20映射到0,+19映射到39
启动进程的时候为进程指定nice值
启动进程时,通常会继承父进程的nice级别,默认为0
[root@atopos~]#sleep7000&[2]10267[root@atopos~]#renice-201026710267(进程ID)旧优先级为0,新优先级为-20丹田控制——存储管理磁盘管理认识Linux上的磁盘从工作原理区分机械硬盘HDD
固态硬盘SSD
SATA
HDD
SATA(SerialATA)
SAS(SerialAttachedSCSI)
物理磁盘:/dev/sd[a-z]
KVM虚拟化:/dev/vd[a-z],/dev/sd[a-z]
设备命名:
IDE:/dev/hd
SCSI,SATA,SAS,USB:/dev/sb
不同设备上:[a-z]
同一设备上:[1,2,3,,]
MBR<2TBfdisk4个主分区,扩展分区,逻辑分区
GPT>2TBgdisk128个分区
MBR:使用32位表示扇区数,分区不超过2T,按柱面进行分区,4个主分区;3主分区+1扩展(N个逻辑分区)。
GPT:支持128个分区,使用64位,使用128位UUID(UniversallyUniqueIdentifier)表示磁盘和分区GPT分区表自动备份在头和尾两份
注意:从MBR转到GPT,或从GPT转换到MBR会导致数据全部丢失
Linux上的目录结构前面有详细的结束,可以看前面的内容
常见的硬件设备及其文件名称
文件系统的作用是合理规划硬盘,以保证用户正常的使用需求。Linux系统支持数十种的文件系统,而最常见的文件系统如下所示。
格式化后发生的事情
计算机系统在发展过程中产生了众多的文件系统,为了使用户在读取或写入文件时不用关心底层的硬盘结构,Linux内核中的软件层为用户程序提供了一个VFS(VirtualFileSystem,虚拟文件系统)接口,这样用户实际上在操作文件时就是统一对这个虚拟文件系统进行操作了。
[root@atopos~]#mount设备名挂载点选项-a:挂载所有在/etc/fstab中定义的磁盘设备
-t:指定文件系统的类型
直接使用mount,只是临时挂载,必须将分区信息写入/etc/fstab中,在使用mount-a挂载信息文件中的设备
第一个字段:挂载的设备
第二个字段:挂载的目录
第三个字段:格式类型
第四个字段:权限选项
第五个字段:是否备份
第六个字段:是否自检
撤销已经挂载的设备文件umount[挂载点/设备文件]
[root@atopos~]#umount/dev/sdb1添加磁盘设备fdisk管理磁盘分区[root@atopos~]#fdisk[磁盘名称]选项挂载磁盘的步骤1.添加一块磁盘2.使用fdisk创建分区3.使用mkfs.ext4进行文件系统格式化4.使用mount挂载分区du查看文件数据的占用量[root@atopos~]#du[选项][文件][root@atopos~]#du-sh/*0 /app0 /bin113M /boot0 /dev35M /etc0 /home0 /lib0 /lib640 /media0 /mnt0 /optdu:cannotaccess‘/proc/20259/task/20259/fd/4’:Nosuchfileordirectorydu:cannotaccess‘/proc/20259/task/20259/fdinfo/4’:Nosuchfileordirectorydu:cannotaccess‘/proc/20259/fd/4’:Nosuchfileordirectorydu:cannotaccess‘/proc/20259/fdinfo/4’:Nosuchfileordirectory0 /proc44K /root9.6M /run0 /sbin0 /srv0 /sys0 /tmp1.4G /usr368M /var选项df查看文件系统占用情况pass
SWAP(交换)分区是一种通过在硬盘中预先划分一定的空间,然后将把内存中暂时不常用的数据临时存放到硬盘中,以便腾出物理内存空间让更活跃的程序服务来使用的技术
在生产环境中,交换分区的大小一般为真实物理内存的1.5~2倍
[root@atopos~]#mkswap/dev/sdb1Settingupswapspaceversion1,size=5242876KiBnolabel,UUID=494ce424-6f8e-4dc7-a1f7-7df45da24928[root@atopos~]#free-htotalusedfreesharedbuff/cacheavailableMem:1.8G195M1.1G9.5M469M1.3GSwap:2.0G0B2.0G[root@atopos~]#swswaplabelswapoffswaponswitch_root[root@atopos~]#swapon/dev/sdb1[root@atopos~]#free-htotalusedfreesharedbuff/cacheavailableMem:1.8G200M1.1G9.5M469M1.3GSwap:7.0G0B7.0G命令mkswap[磁盘路径] #格式化swapswapon[磁盘路径] #挂载swap分区swapoff[磁盘路径] #卸载swap分区参数:-a:全部磁盘容量配额实例描述:
[root@atopos~]#edquota-puser1-uuser2[root@atopos~]#repquota-as***Reportforuserquotasondevice/dev/sdb1Blockgracetime:7days;Inodegracetime:7daysSpacelimitsFilelimitsUserusedsofthardgraceusedsofthardgrace----------------------------------------------------------------------root--20K0K0K200user1--16K245M293M400user2--16K245M293M400user3--16K0K0K400user4--16K0K0K400user5--16K0K0K400测试[user1@atopos~]$ddif=/dev/zeroof=bigfilebs=10Mcount=50sdb1:warning,userblockquotaexceeded.sdb1:writefailed,userblocklimitreached.dd:写入"bigfile"出错:超出磁盘限额记录了30+0的读入记录了29+0的写出307183616字节(307MB)已复制,1.96853秒,156MB/秒[user1@atopos~]$du-sh*293Mbigfile[user1@atopos~]$quota命令Linuxquota命令用于显示磁盘已使用的空间与限制。
执行quota指令,可查询磁盘空间的限制,并得知已使用多少空间
选项:
[root@atopos~]#ln[选项]源文件目标文件选项链接方式在Linux系统中存在硬链接和软连接两种文件
查询:
卸载:
升级:
[root@atopos~]#cat/etc/sysconfig/network-scripts/ifcfg-ens33TYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=noBOOTPROTO=noneDEFROUTE=yesIPV4_FAILURE_FATAL=noIPV6INIT=yesIPV6_AUTOCONF=yesIPV6_DEFROUTE=yesIPV6_FAILURE_FATAL=noIPV6_ADDR_GEN_MODE=stable-privacyNAME=ens33UUID=7cb2fd3e-61dd-4856-87fa-c6db7ec0169bDEVICE=ens33ONBOOT=yesIPADDR=192.168.91.128PREFIX=24GATEWAY=192.168.91.2DNS1=114.114.114.114DNS2=114.114.115.115解释参数设备类型TYPE=Ethernet地址分配模式BOOTPROTO=static(静态)/dhcp网卡名称NAME=ens33是否开机自动启动ONBOOT=yesIP地址IPADDR=192.168.91.128子网掩码NETMASK=255.255.255.0前缀长度PREFIX=24网关地址GATEWAY=192.168.91.2DNS地址DNS1=114.114.114.114[root@atopos~]#systemctlrestartnetworknmcli工具详解nmcli命令是redhat7或者centos7之后的命令,该命令可以完成网卡上所有的配置工作,并且可以写入配置文件,永久生效
[root@atopos~]#nmclidevicestatusDEVICETYPESTATECONNECTIONens33ethernetconnectedens33ens37ethernetconnectedWiredconnection1docker0bridgeconnecteddocker0loloopbackunmanaged--[root@atopos~]#nmcliconnectionshowNAMEUUIDTYPEDEVICEdocker0ca6db5d5-a1a1-478d-8592-112d5283069dbridgedocker0ens33122f2554-8762-40c0-8fb7-f92275a6b358ethernetens33Wiredconnection11099d5fd-29be-3f24-92d3-5f47c981fbaeethernetens37[root@atopos~]#nmcliconnectionupens33[root@atopos~]#nmcliconnectiondownens33[root@atopos~]#nmcliconnectionaddtypeethernetcon-namedhcp_ens33ifnameens33[root@atopos~]#nmcliconnectiondeletedhcp_ens33成功删除连接'dhcp_ens33'(37adadf4-419d-47f0-a0f6-af849160a4f7)。net-tools默认路由:routeadd-net0.0.0.0netmask0.0.0.0gw192.168.1.2防火墙计划任务及日志管理计划任务计划任务主要是做一些周期性的任务,目前主要用途是定期备份数据
[root@atopos~]#vim/etc/rsyslog.conf*.info;mail.none;authpriv.none;cron.none/var/log/messages#Theauthprivfilehasrestrictedaccess.authpriv.*/var/log/secure#Logallthemailmessagesinoneplace.mail.*-/var/log/maillog#Logcronstuffcron.*/var/log/cron#Everybodygetsemergencymessages*.emerg:omusrmsg:*#Savenewserrorsoflevelcritandhigherinaspecialfile.uucp,news.crit/var/log/spooler#Savebootmessagesalsotoboot.loglocal7.*/var/log/boot.log实例rsyslog远程管理日志
针对任何日志文件(rsyslog日志、Nginx访问或错误日志)
[root@atopos~]#cat/etc/cron.daily/logrotate#!/bin/sh/usr/sbin/logrotate-s/var/lib/logrotate/logrotate.status/etc/logrotate.confEXITVALUE=$if[$EXITVALUE!=0];then/usr/bin/logger-tlogrotate"ALERTexitedabnormallywith[$EXITVALUE]"fiexit0[root@localhost~]#ls/etc/logrotate.conf/etc/logrotate.d//etc/logrotate.conf/etc/logrotate.d/:bootlogchronysyslogwpa_supplicantyum主配置文件[root@atopos~]#vim/etc/logrotate.confweekly #一周轮转一次rotate4 #保留四份日志create #主动创建新的日志文件dateext #使用日期来作为文件名的后缀include/etc/logrotate.d#导入其他应用的日志轮转规则/var/log/wtmp{ #对该日志文件设置轮转方法monthly #一个月轮转一次create0664rootutmp #轮转后创建新文件,并设置权限minsize1M #最小达到1M才会轮转rotate1}/var/log/btmp{missingok #丢失不提醒monthlycreate0600rootutmprotate1}远程控制服务配置sshd服务sshd是基于SSH协议开发的一款远程管理服务程序,不仅使用起来方便快捷,而且能够提供两种安全验证的方法:
sshd服务的配置信息保存在/etc/ssh/sshd_config文件中。运维人员一般会把保存着最主要配置信息的文件称为主配置文件,而配置文件中有许多以井号开头的注释行,要想让这些配置参数生效,需要在修改参数后再去掉前面的#号。
screen是一款能够实现多窗口远程控制的开源服务程序,简单来说就是为了解决网络异常中断或为了同时控制多个远程终端窗口而设计的程序。用户还可以使用screen服务程序同时在多个远程会话中自由切换,能够做到实现如下功能。
[root@atopos~]#yuminstall-yscreen管理远程会话screen的命令:
#创建新的窗口[root@atopos~]#screen-Swindow[root@atopos~]#screen-lsThereisascreenon:17126.window(Attached)1Socketin/var/run/screen/S-root.在日常的生产环境中,其实并不是必须先创建会话,然后再开始工作。可以直接使用screen命令执行要运行的命令,这样在命令中的一切操作也都会被记录下来,当命令执行结束后screen会话也会自动结束
[root@atopos~]#screenping-c4baidu.com[screenisterminating]了解堡垒机概述当今的时代是一个信息化社会,信息系统已成为各企事业单位业务运营的基础,由于信息系统运维人员掌握着信息系统的最高权限,一旦运维操作出现安全问题将会给[企业]或单位带来巨大的损失。因此,加强对运维人员操作行为的监管与审计是[信息安全]发展的必然趋势。在此背景之下,针对运维操作管理与审计的堡垒机应运而生。堡垒机提供了一套多维度的运维操作控管控与审计解决方案,使得管理人员可以全面对各种资源(如[网络]设备、[服务器]、安全设备和[数据库]等)进行集中账号管理、细粒度的权限管理和访问审计,帮助企业提升内部风险控制水平。
堡垒机,即在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的入侵和破坏,而运用各种技术手段监控和记录运维人员对网络内的服务器、网络设备、安全设备、数据库等设备的操作行为,以便集中报警、及时处理及审计定责。
目前国内外有很多厂商生产堡垒机,堡垒机目前有两种最主流的形式。硬件堡垒机:厂商定制硬件设备,并且将软件系统封装在其中,比较封闭,安全系数较高
软件堡垒机:厂商仅仅维护软件堡垒机系统,需要客户自己部署堡垒机,可以虚拟化形式,部署自由程度高
FTP协议:文件传输协议(FileTransferProtocol)
FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。
在主动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,然后开放N+1号端口进行监听,并向服务器发出PORTN+1命令。服务器接收到命令后,会用其本地的FTP数据端口(通常是20)来连接客户端指定的端口N+1,进行数据传输。
在被动模式下,FTP库户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,同时会开启N+1号端口。然后向服务器发送PASV命令,通知服务器自己处于被动模式。服务器收到命令后,会开放一个大于1024的端口P进行监听,然后用PORTP命令通知客户端,自己的数据端口是P。客户端收到命令后,会通过N+1号端口连接服务器的端口P,然后在两个端口之间进行数据传输。
NFS包括两部分:服务端(servlet)及客户端(client)
由于NFS服务功能很多,会有很多端口,这些端口还有可能不固定,(pc-ef|egrepnfs我们可以看到nfs不同的端口号)那么客户端就无法与服务器进行通信,因为程序间通信必须通过端口(tcp/udp都是端到端通信),那么就需要一个中间的桥接机制,RPC进程即充当这样一个角色,RPC的端口是一定的(111),当NFS启动时,会向RPC进行注册,(rpc一定是在nfs启动前,就已经启动了,)那么客户端PRC就能与服务器RPC进行通信,从而进行文件的传输。
/etc/exports:NFS服务主配置文件,配置NFS具体共享服务的地点,默认内容是空的
[root@atopos~]#cat/etc/exports/data192.168.2.0/24(rw,insecure,sync,all_squash,anonuid=65534,anongid=65534)/usr/sbin/exports:
(2)所有的客户端和服务器端都需要有一个相同的UID和GID的用户,nfsnodoby(UID必须相同)
sync是synchronized的缩写,意为同步,async是asynchonous的缩写意为异步,怎么理解同步和异步:
比如:你女朋买了一张票等你下班一起看电影,她会亲自给你电影票然后一起看电影,在比如生产者跟消费者,我们常常加同步锁synchronized,这样就是生产一个,消费一个(Linux分为实时同步和定时同步)。异步,在比如生产者跟消费者,生产100个产品,消费者只能消费50个,那么就会把生产者的产品放在超市,消费者就会去超市买东西,
[root@atopos~]#yuminstall-ynfs-utils常用命令pass
可使用autofs服务按需要挂载外围设备,NFS共享等,并在空闲5分钟后后自动卸载
[root@atopos~]#yuminstall-yautofs配置文件:/etc/auto.master
服务文件:/usr/lib/systemd/system/autofs.service
查看帮助:man5autofs
所有导出到网络中的NFS启用特殊匹配-host至"browse"
实例:
cat/etc/auto.master/net-hostscd/net/192.168.175.147实例二将NFS的共享目录,通过autofs发布出来,做为远程主机用户的家目录
将server中的用户家目录共享出来,node1在登陆这个用户的到时候,看到家目录下的文件是一致的
访问网址的流程:
URI:是uniformresourceidentifier,统一资源标识符,用来唯一的标识一个资源。
Web上可用的每种资源如HTML文档、图像、视频片段、程序等都是一个来URI来定位的URI一般由三部组成:①访问资源的命名机制②存放资源的主机名③资源自身的名称,由路径表示,着重强调于资源。
URL:是uniformresourcelocator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。
URL:是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,特别是著名的Mosaic。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。URL一般由三部组成:①协议(或称为服务方式)②存有该资源的主机IP地址(有时也包括端口号)③主机资源的具体地址。如目录和文件名等