Linux sed

[TOC] sed : Stream EDitor sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等 用法 sed [option]... 'script' inputfile... 常用选项: -n:不输出模式空间内容到屏幕,即不自动打印,默认在输出前会打印源内容 -e: 多点编辑 -f:/PATH/SCRIPT_FILE: 从指定文件中读取编辑脚本 -r: 支持使用扩展正则表达式 -i: 原处编辑 script: '地址命令'= [地址定界] + 编辑命令 + [替换标记] 地址定界: (1) 不给地址:对全文进行处理 (2) 单地址: #: 指定的行 /pattern/:被此处模式所能够匹配到的每一行 (3) 地址范围: #,# #,+# /pat1/,/pat2/ #,/pat1/ (4) ~:步进 1~2 奇数行 2~2 偶数行 编辑命令: d: 删除模式空间匹配的行 p: 显示模式空间中的内容 a [\]text:在指定行后面追加文本,支持使用\n实现多行追加 i[\]text:在行前面插入文本 c [\]text:替换行为单行或多行文本 w /path/somefile: 保存模式匹配的行至指定文件 r /path/somefile:读取指定文件的文本至模式空间中匹配到的行后 =: 为模式空间中的行打印行号 !:模式空间中匹配行取反处理 s///:查找替换,支持使用其它分隔符,s@@@,s### 替换标记: g: 行内全局替换 p: 显示替换成功的行 w /PATH/TO/SOMEFILE:将替换成功的行保存至文件中 实例 例子来啦!没有例子呢,的确是很难懂的.那么下面就尽量给多一点例子,来详细分析上面的意思. ...

September 13, 2015

CentOS系统yum的配置

[TOC] yum仓库使用起来特别方便,然而使用之前当然是要配置的啦。下面就介绍一下怎么从0 配置一个yum仓库。 首先要创建yum仓库,当然不能使只给一台服务器用,那要给多个服务器用的话,就需要网络服务。yum仓库支持的网络服务有两种,FTP和HTTP。用yum主要用到的是数据传输,因此FTP更适合创建yum仓库,下面就以FTP为例,说明一下yum仓库的配置。 第一步是要先在自己的服务器上提供FTP服务,而这个时候还没有yum仓库,所以只能使用rpm的方式安装vsftp,把FTP服务搭起来。这个包必须要提前有,或者从光盘中获取。 获取安装 FTP服务 并启用 mkdir /mnt/cdrom mount /dev/cdrom /mnt/cdrom rpm -ivh /mnt/cdrom Packages/vsftpd-3.0.2-10.el7.x86_64.rpm 注意,在CentOS 6 和CentOS 7 上开启FTP服务的命令式不一样的。 iptables -F(在CentOS 7 上 也可以使用systemctl stop firewalld 来关闭防火墙) CentOS-6 开启FTP服务 chkconfig vsftpd on === 立即打开FTP,但重启后失效 service vsftpd start === 开启FTP服务,但不会立即生效 CentOS-7 开启FTP服务 systemctl enable vsftpd === 立即打开FTP,但重启后失效 systemctl start vsftpd === 开启FTP服务,但不会立即生效 到此为止FTP服务就开启啦,在一个局域网内的电脑只需要在浏览器里面输入 ftp://ip 就可以访问这个服务器啦 但是里面说明内容的没有,顶多只有一个lost+found 和pub 的文件夹,这个目录就是本机的/var/ftp/ 共享文件要放到这个文件里面。 需要注意一点,共享的文件所有FTP客户端都可以访问,所以我们这里如果创建yum仓库的话是可以给众多使用yum的系统提供yum仓库的,只不过不同系统例如CentOS 5 、CentOS 6.7 CentOS6.8 CentOS 7 等不同版本的系统使用的程序安装包不同,所以只需要在这里分类创建文件夹,供各类系统使用即可。 实例: ...

August 25, 2015

Linux查找命令find和locate

[TOC] 有些时候我们是想要在系统中查找某个具体的文件,却不知道路径在哪里,只是知道其中的某些特性,比如大小或者名字什么的。这时候就要用到查找工具啦。 在文件系统上查找符合条件的文件命令有两个,locate和find,其中locate是非实时查找即数据库查找。而find是实时查找 locate: 用法:locate [OPTION]… [PATTERN]… [option] -i 不区分大小写 -n # 只列举前N个匹配项目 -r 使用扩展正则表达式 查询 locate foo 搜索名称或路径中带有foo的文件 locate -r ‘.foo$’ 使用扩展正则表达式来搜索以 “.foo” 结尾的文件 查询系统上的文件索引数据库 /var/lib/mlocate/mlocate.db 依赖于实现构建的索引, 索引的构建是在系统较为空闲时自动进行的(周期性任务),也可管理员手动更新数据库(updatedb) 索引构建过程需要遍历整个根文件系统,极消耗资源 工作特点: 查找速度快(只查找数据库中有的数据) 模糊查找 非实时查找(在索引构建之后创建的文件时不能找到的) 搜索的是文件的全路径,不仅仅是文件名 可能只搜索用户具备读取和执行权限的目录 find: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path…] [expression] 即:find [option] [查找路径] [查找条件] [处理动作] 查找路径:指定具体目标路径,【默认为当前目录】 查找条件:指定的查找标准,可以文件名、大小、类型、权限等。默认找出指定路径下的所有文件 处理动作:对符合条件的文件做操作,默认输出至屏幕 【查找条件】 根据文件名和inode查找: -name “文件名称”: 支持使用glob (文件名通配符) ,?,[],[^] -iname “文件名称” : 不区分字母大小写 inum n 按inode号查找 -samefile name 相同inode号的文件 -links n 链接数为n的文件 -regex “PATTERN”:以pattern匹配整个文件路径字符串,而不仅仅是文件名称 根据属主属组查找: -user username: -group groupname: -uid userid: -gid groupid: -nouser:查找没有属主的文件 -nogroup:查找没有属组的文件 根据文件类型查找: -type type: f,d,l,s,b,c,p 根据组合条件查找: -a -o -not=! 根据文件大小来查找: -size [+|-]#UNIT (k,M,G) #UNIT (#-1,#] –> 如6k 即(5k,6k] 5k到6k 但不包括5k -#UNIT:[0,#-1] –>如6k 即[0,5k] +#UNIT:(#,∞) 大于# 但不包括# 根据时间戳查找: 以 【天】为单位 -atime[+|-]# : [0,#) [#,#+1) [#+1,∞] -mtime[+|-]# : -ctime[+|-]# : 以【分钟】为单位 -amin[+|-]# : -mmin[+|-]# : -cmin[+|-]# : 根据权限查找: -perm [/|-] mode mode : 精确匹配,不能多不能少 /mode 或+mode : 或关系 ugo中 只要有一个匹配即可 -mode : ugo必须至少拥有或比mode更多权限 【处理动作】 -print:默认处理动作 -ls:类似于对查找到的文件执行 ls -l -delete:删除查找到的文件 -fls file:查找到的所有文件的长格式信息保存至指定文件中 -ok commond {} ; 对查找到的每个文件执行有commond指定的命令,每个文件执行前都要交互式确认 -exec commond {} ; 对查找到的每个文件执行有commond指定的命令 {}:用于引用查找到的文件名称自身 例: find -name “.conf” -exec cp {} {}.orig ; •备份配置文件,添加.orig这个扩展名 find /tmp -ctime +3 -user joe -ok rm {} ; •提示删除存在时间超过3天以上的joe的临时文件 find ~ -perm -002 -exec chmod o-w {} \ ; •在你的主目录中寻找可被其它用户写入的文件 find /data –type f -perm 644 -name “*.sh” –exec chmod 755 {} ; •在 /data 目录中 找出所有 以.sh 结尾没有执行全选的文件 增加执行权限 find /home -type d -ls 找出所有/home 目录下的 目录 列出详细信息 ...

August 24, 2015

Linux安装命令yum的使用

[TOC] YUM: yellowdog update modifier ,rpm的前端程序,用来解决软件包相关依赖性,可以在多个库之间定位软件包。 yum repository:yum repo,存储了众多RPM包,以及包相关的元数据文件,放置于特定目录repodata下。 yum 访问的文件服务器主要有三种,ftp,http,file。 yum客户端配置文件: 【/etc/yum.conf】:为所有仓库提供公共配置,man /etc/yum.conf 有英文详解 [main] cachedir=/var/cache/yum //yum 缓存的目录,yum 在此存储下载的rpm 包和数据库,默认设置为/var/cache/yum keepcache=0 //安装完成后是否保留软件包,0为不保留(默认为0),1为保留 debuglevel=2 //Debug 信息输出等级,范围为0-10,缺省为2 logfile=/var/log/yum.log //yum 日志文件位置。用户可以到/var/log/yum.log 文件去查询过去所做的更新。 pkgpolicy=newest //包的策略。一共有两个选项,newest 和last,这个作用是如果你设置了多个repository,而同一软件在不同的repository 中同时存在,yum 应该安装哪一个,如果是newest,则yum 会安装最新的那个版本。如果是last,则yum 会将服务器id 以字母表排序,并选择最后的那个服务器上的软件安装。一般都是选newest。 distroverpkg=centos-release //指定一个软件包,yum 会根据这个包判断你的发行版本,默认是 centos-release,也可以是安装的任何针对自己发行版的rpm 包。 tolerant=1 //有1和0两个选项,表示yum 是否容忍命令行发生与软件包有关的错误,比如你要安装1,2,3三个包,而其中3此前已经安装了,如果你设为1,则yum 不会出现错误信息。默认是0。 exactarch=1 //有1和0两个选项,设置为1,则yum 只会安装和系统架构匹配的软件包,例如,yum 不会将i686的软件包安装在适合i386的系统中。默认为1。 retries=6 //网络连接发生错误后的重试次数,如果设为0,则会无限重试。默认值为6. obsoletes=1 //这是一个update 的参数,具体请参阅yum(8),简单的说就是相当于upgrade,允许更新陈旧的RPM包。 plugins=1 //是否启用插件,默认1为允许,0表示不允许。我们一般会用yum-fastestmirror这个插件。官方yum源的速度实在让人不敢恭维,而非官方的yum源又五花八门,让人难以取舍。幸运的是,yum-fastestmirror插件弥补了这一缺陷:自动选择最快的yum源。安装之后,生成配置文件/etc/yum/pluginconf.d/fastestmirror.conf。配置文件中的hostfilepath字段,用于定义yum源的配置文件(通常是/var/cache/yum/x86/7/timedhosts.txt),然后我们就可以将所知道的yum源统统写入这个txt文件 bugtracker_url=http://bugs.centos.org/set_project.php?project_id=16&ref=http://bugs.centos.org/bug_report_page.php?category=yum metadata_expire=1h installonly_limit = 5 【/etc/yum.repo.d/*.repo】:为仓库的指向提供配置 主要配置 [repositoryID] baseurl gpgcheck 三个即可使用仓库 [repositoryID] //仓库ID name=Some name for this repository//仓库名称 baseurl=url://path/to/repository/ //仓库路径,路径必须给到 repodata文件夹所在的目录 URL可以有一下三种,file,ftp,http enabled={1|0} //使能 gpgcheck={1|0} //是否检查来源合法性 gpgkey=URL //gpg证书来源路径 enablegroups={1|0 failovermethod={roundrobin|priority} 默认为:roundrobin,意为随机挑选; cost= 默认为1000 yum的repo配置文件中可用的变量: $releasever: 当前OS的发行版的主版本号 $arch: 平台,i386,i486,i586,x86_64等 $basearch:基础平台;i386 $YUM0-$YUM9:自定义变量 实例: baseurl=http://server/centos/$releasever/$basearch/ yum命令的用法:yum [options] [command] [package …] yum-config-manager –add-repo= http://172.16.0.1/cobbler/ks_mirror/CentOS-X-x86_64/ 快速非交互式创建yum仓库 yum-config-manager –disable “仓库名" 禁用仓库 yum-config-manager –enable “仓库名” 启用仓库 yum repolist [all|enabled|disabled] 显示仓库 所有的|可用的|禁用的 yum list [all | glob_exp1] [glob_exp2] […] 根据需求筛选需要的RPM包 yum list {available|installed|updates} [glob_exp1] yum install package1 [package2] […] yum reinstall package1 [package2] […] 重新安装 yum remove | erase package1 [package2] […] 卸载 yum provides | whatprovidesfeature1 [feature2] […]查看指定的特性(可以是某文件)是由哪个程序包所提供: yum clean [ packages | metadata | expire-cache | rpmdb| plugins | all ]清理本地缓存: yum search string1 [string2] […] 以指定的关键字搜索程序包名及summary信息 yum history yum history info 6 yum history undo 6 yum history redo 6 包组管理的相关命令: yum groupinstall group1 [group2] […] yum groupupdate group1 [group2] […] yum grouplist [hidden] [groupwildcard] […] yum groupremove group1 [group2] […] yum groupinfo group1 […] -y: 自动回答为“yes” 可实现非交互式 创建yum仓库: createrepo[options] ...

August 23, 2015

Linux用户资源配额

[TOC] 用户资源系统配额 在系统中,允许系统用户使用存储空间,但是不能限制的让用户随意使用存储空间,对用户存储空间的设定就是用户资源系统配额。 下面以/home 为例,通常如果系统中有一定的用户,会把用户的家目录作为一个单独的分区,从而实现更好的管理。下面具体讲解如何把用户家目录从根系统分区分离出来进行磁盘配额。 1.备份数据 拿出一个未使用的分区,把用户家目录的数据拷贝到新的分区 fdisk /dev/sdb --> n(新建分区)--> p(主分区)--> +10G--> w (保存) mkfs.ext4 -L home_dir /dev/sdb1 格式化新建的分区,卷标名称:home_dir (如果新建分区没有跟新到内存,partx -a /dev/sdb -->centos6 partprobe -->centos7|5) mkdir /mnt/home mount /mnt/home /dev/sdb1 将分区临时挂载到一个目录,备份home目录中数据 cp -a /home/* /mnt/home 这样就将home家目录中的历史数据备份到新的分区里面了,但要想将之后的数据也自动存储到新建分区的中必须重新挂载,如果直接将新的分区挂载到/home 目录下,存在以下问题。第一、挂载过程中存在用户正在使用家目录的情况,挂载到/home后原来/家目录中的数据时没有用的,而且会自动隐藏掉。所以,安全起见,必须实现通知所有用户,即将要迁移家目录,选一个时间停掉服务,在init 1 模式下实现重新挂载 2.单用户模式运行 rm -rf /home/* vim /etc/fstab --> /dev/sdb1 /home ext4 defaults.usrquota,grpquota 0 0 mount -a 将分区重新挂载到家目录下 3、init 3 重新回到正常模式 cd /home --> quotacheck -cug /home -->可以看到 aquota.group aquota.user两个数据库 quotaon -p /home quotaon /home 查看和打开系统配额功能 (如果系统配额没有打开,有可能是selinux功能没有关闭 ) getenforce 查看selinux setenforce=0 关闭selinux功能 repquota -a 可以查看所有用户的磁盘配额情况,显示如下 Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 4 0 0 1 0 0 huyu -- 56 10240 40960 19 0 0 superman -- 48 0 0 12 0 0 supergirl -- 48 0 0 12 0 0 user/group :用户或者组名 userd:用户或者组 已经使用的存储空间,以byte为单位 soft:存储空间使用过多警告提示 hard:空间使用极限,提示如下 sdb1: warning, user block quota exceeded. sdb1: write failed, user block limit reached. grace: 宽限期。在这个有效时间内,存储空间数据可以使用修改 后面的分别表示 inode节点的限制,内容和空间相同,只是数值表示限制节点个数 repquota -u /dir|/dev/sdb1 repquota -g /dir|/dev/sdb1 这两个可以看分区用户和组的配额 修改用户/组 de 存储空间配额 edquota -u/g huyu --> 进入修改 edquota -p huyu user2 配额复制,user2配额 如同 huyu setquota username soft hard soft hard 直接命令配置,没有限制,则用0 代替 4、去掉磁盘配额 1、 quotaoff /dir|/dev/sdb1 2、 rm -rf aquota.user|group 3、 vim /etc/fstab

August 19, 2015

Linux防火策略iptables

[TOC] 防火墙分类 按照硬件组成部分划分: ​ 硬件防火墙:在硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现; ​ 软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙; 按照服务范围划分: ​ 主机防火墙:服务范围为当前主机; ​ 网络防火墙:服务范围为防火墙被的局域网; netfilter netfilter是位于内核空间的一个防火墙框架,通过iptables这样一个规则管理工具,向框架中添加规则,从而实现防火墙功能。 iptables Firewall:防火墙的意思,只是一个隔离工具;Packets Filter Firewall,主要实现经过该网络的数据包的过滤功能;工作于主机或网络的边缘,对经由的报文根据预先定义的规则(匹配条件)进行检测,对于能够被规则匹配到的报文实行某预定义的处理机制的一套组件; netfilter:防火墙框架,framework;位于内核空间; iptables:命令行工具程序,位于用户空间;规则管理工具; 传说中的四表五链 要处理这些数据包总要一种规则,然而这些表和链就组成了一个规则。来看一张完整图: ...

August 10, 2015

Linux日志工具之rsyslog

[TOC] 日志:历史事件; 历史事件:时间、地点、事件; syslog: klogd:kernel syslogd:system(application) 事件记录格式: 日期时间 主机 进程[pid]: 事件内容; C/S架构:通过TCP或UDP协议的服务完成日志记录传送; rsyslog: rsyslog的特性: 多线程; UDP/TCP/SSL/TLS/RELP; 存储日志信息于MySQL, PGSQL, Oracle等RDBMS; 强大的过滤器,实现过滤日志信息中的任何部分的内容; 自定义的输出格式; …… ELK: E: elasticsearch, L: logstash, K: kibana rsyslog日志收集器的基本术语: facility:设施,收束日志数据流为有限几个; auth, authpriv, cron, daemon, kern, lpr, mail, mark, news, security, user, uucp, syslog, local0-local7 proirity:优先级 debug, info, notice, warn(warning), err(error), crit(critical), alert, emerg(panic) 程序包:rsyslog 程序环境: 配置文件:/etc/rsyslog.conf,/etc/rsyslog.d/*.conf 主程序:/usr/sbin/rsyslogd CentOS 6:service rsyslogs {start|stop|restart|status} CentOS 7:/usr/lib/systemd/system/rsyslog.service 配置文件格式: 由三部分组成: MODULES:模块配置 GLOBAL DIRECTIVES:全局配置 RULES:日志记录相关的配置 RULES: 配置格式: facility.priority target facility: *: 所有的facility; f1,f2,f3,...:指定的facility列表; priority: *: 所有级别; none:没有级别; PRIORITY:指定级别(含)以上的所有级别; =PRIORITY:仅记录指定级别的日志信息; target: 文件:将日志信息记录到指定的文件中;文件路径前的-表示异步写入; 用户:将日志事件通知给指定的用户; 日志服务器:@host,把日志通过网络送往指定的服务器记录,而非由本地记录; 管道: | COMMAND 配置rsyslog成为日志服务器: #### MODULES #### # Provides UDP syslog reception $ModLoad imudp $UDPServerRun 514 # Provides TCP syslog reception $ModLoad imtcp $InputTCPServerRun 514 其它的日志文件: /var/log/secure:系统安装日志,应该周期性分析; /var/log/btmp:当前系统上,用户的失败尝试登录相关的日志信息,lastb命令进行查看; /var/log/wtmp:当前系统上,用户正常 登录系统的相关日志信息,last命令可以查看; lastlog命令:用于查看当前系统上每一个用户最近一次的登录信息; /var/log/messages:系统日志信息; /var/log/dmesg:系统引导过程中的日志信息; 文本查看工具查看; 也可以使用专用命令dmesg查看; rsyslog将日志记录于MySQL中: (1) 准备MySQL Server; (2) 在mysql server上授权rsyslog能连接至当前服务器; mysql> GRANT ALL ON Syslog.* TO 'USER'@'HOST' IDENTIFIED BY 'PASSWORD'; (3) 在rsyslog主机上安装mysql模块相关的程序包; yum install rsyslog-mysql (4) 为rsyslog创建数据库及表; mysql -uUSERNAME -hHOST -pPASSWORD < /usr/share/doc/rsyslog-7.4.7/mysql-createDB.sql (5) 配置rsyslog将日志保存到mysql中; #### MODULES #### $ModLoad ommysql #### RULES #### facility.priority :ommysql:DBHOST,DBNAME,DBUSER,DBUSERPASSWORD (6) 重启rsyslog服务; 通过loganalyzer展示数据库中的日志: (1) 准备amp或nmp组合; # yum install httpd php php-mysql php-gd (2) 安装LogAnalyzer: # tar xf loganalyzer-3.6.5.tar.gz # cp -a loganalyzer-3.6.5/src /var/www/html/loganalyzer # cd /var/www/html/loganalyzer # touch config.php # chmod 666 config.php (3) 配置loganalyzer: systemctl start httpd.service http://HOST/loganalyzer MySQL Native, Syslog Fields, Monitorware (4) 安全加强 # cd /var/www/html/loganalyzer # chmod 644 config.php

August 7, 2015

Linux的inode软链接和硬链接

[TOC] Linux系统中的链接有两种,软连接和硬链接。要充分了解他们最好先了解下inode. inode 简单来说就是系统文件记录方式用的是inode,二文件名称只是inode的一个别名,就好像机房有100台主机,每台主机有自己的编号(inode),而有两个主机用来做管理,所以取名叫master1,master2(文件名). 为什么要这么做呢?文件系统是数据在硬盘上的一种排列组织方式,linux每个分区都可以格式化为不同的文件系统,所以可以说每个分区都是一个文件系统,都有自己的目录层次结构。而在目录之下,linux已经将所有的资源处理成为文件,不论是目录还是命令,之后linux会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结构,实现对不同分区的数据进行访问。但是通过目录层次访问磁盘上的文件,只是表面现象。要知道数据在磁盘上以块(block)存储(一个block由8个扇区组成,每个扇区0.5K,扇区是硬盘存储数据的最小单位)数据的大小不一,造成了块的数量也不尽相同,增删改查都会影响数据块的排列方式,那么如何在众多的可能不连续的数据块中,如何精准的找到数据对应的那些块,必须依附在一张索引列表之上,这就是inode。当然,inode中不仅仅存储着指针,还存储着对应资源的权限、属主、属组和大小. inode也是存储在block上的一段数据,所以其也是占用磁盘空间的,每个分区都有自己的inode上限,所以有时候如果显示磁盘空间已满,inode上限也需要作为一个原因,可使用df -i查看 [yhu@login ~]$df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda2 419430400 1008127 418422273 1% / /dev/sda1 2097152 374 2096778 1% /boot [yhu@login ~]$df -ih Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda2 400M 985K 400M 1% / /dev/sda1 2.0M 374 2.0M 1% /boot [yhu@login ~]$df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 400G 144G 257G 36% / /dev/sda1 2.0G 169M 1.9G 9% /boot 查看文件的inode,使用ls -i ...

August 5, 2015

Linux终端类型

[TOC] 1.终端的概念 所谓终端就是在一个连接主机的端子上面接入鼠标、键盘、显示器等所组成的一个组合。终端用于用户与主机之间的交互。早期的时候,在大型主机上,想使用主机的用户很多,但是主机却只有一个,也不能实现人手一台。于是为了让一台主机给多个用户使用,便产生了多个终端和多个用户,这样每个用户只要有一个终端变可以与主机交互了。 2.终端的类型 终端的类型有四类:物理终端,虚拟终端,图形终端和伪终端。 物理终端: 将鼠标、键盘、显示器直接连接到主机的接口上。也称为物理控制台(console)–/dev/console。 虚拟终端: 附加在物理终端之上,用软件的方式实现虚拟终端。centos中有6个虚拟中断,通过Alt+Ctrl+(F1-F6)进行切换。 图形终端: 图形终端也是附加在物理终端之上,用软件的方式实现。但提供桌面环境,切换方式 Ctrl+Alt+F7. 伪终端: 在图形界面下打开的的命令行界面,或者基于ssh协议或Telnet协议等远程打开的命令行界面。例如用xshell或者secureCRT远程连接的命令行界面就是属于伪终端。 在这里我们要注意的是,实际操作中当我们的系统启动还没有完全运行起来的时候,在我们的设备上运行的终端是物理终端,在服务完全启动之后映射的就是虚拟终端或者图形终端啦。

August 3, 2015

Linux用户和组的权限

[TOC] 1、文件的权限分类 文件的权限对象分三类:属主(u)、属组(g)、其他(o),每个对象都有rwx,读写执行三类权限。 对于文件 r:可查看文件内容 w:可修改其类容 x:可把此文件提请内核启动为一个进程 对于目录 r:可使用ls查看此目录中文件列表 w:可在此目录中创建和删除文件 x:可使用ls查看目录中文件列表,可以cd进入此目录 X:只给目录x权限,不给文件x权限 在访问文件之前,必须要先能够进入文件的父目录 前提:进程有属主和属组;文件有属主和属组 (1) 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限 (2) 启动为进程之后,其进程的属主为发起者;进程的属组为发起者所属的组 (3) 进程访问文件时的权限,取决于进程的发起者 (a) 进程的发起者,同文件的属主:则应用文件属主权限 (b) 进程的发起者,属于文件属组;则应用文件属组权限 (c) 应用文件“其它”权限 root 没有了 x 执行权限不能执行,但是可以给自己加权限 root用户没有读和写权限也可以直接修改查看。 2、chmod 用法 a、chmod [option]... 八进制 file eg:chmod -R 755 /dir b、chmod [option]... mode ... file eg:chmod u=rwx,g=rx,u= file/dir 或者 chmod a=rx file/dir 或者 chmod u+w file/dir c、chmod [option] ... --reference = rfile file 参考rfile权限 复制到 file chmod -R a=rwX dir 目录下的文件如果有x权限 则都有x权限 如果没有x权限 则 所有的文件都没有x权限 但是所有的目录都有x权限 3、新建文件和目录的默认权限 新建FILE权限:666-umask如果所得结果某位存在执行(奇数)权限,则将其权限+1 新建DIR权限: 777-umask,非特权用户umask是002,root的umask是022 umask: 查看 umask#: 设定 #umask -S --> u=rwx,g=rx,o=rx #umask -p --> umask 0022 4、Linux文件系统上的特殊权限,SUID, SGID, Sticky chmod 4755 file chmod u+s /usr/bin/passwd -rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd 当用户使用passwd【具有suid权限的二进制程序文件】命令,用户权限临时切换成【passwd文件所有者】权限 启动为进程之后,其进程的属主为原程序文件的属主 /bin 文件夹下面有众多 红色背景的程序均是这样。 chmod 2755 /usr/bin/passwd chmod g+s /usr/bin/passwd -rwxr-sr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd 当用户使用passwd【具有suid权限的二进制程序文件】命令,用户权限临时切换成【passwd文件所属组】权限 --黄色背景 启动为进程之后,其进程的属主为原程序文件的属组 chmod 1777 /dir [root@localhost conf]#ll -d /tmp drwxrwxrwt. 18 root root 4096 Oct 16 02:52 /tmp 可以在目录中删除【自己的】文件,而不能删除别人的文件 chmod 2755 dir chmod g+s /dir -rwxr-sr-x. 1 root root 30768 Feb 22 2012 /dir 当该目录【所属组用户】在该目录下创建文件的时候,创建的文件所属组均为目录的所属组 小坑一个: 用0777,并不能把sst等权限去掉 没有执行权限则该位置显示为【S、T】 5、设定文件特定属性(attr–attribute) chattr +i 不能删除,改名,更改 +a 只能追加(>>) lsattr 显示文件特定属性。 6、ACL ACL:Access Control List,实现灵活的权限管理,除了u,g,o可以对更多的用户设置权限 ACL生效顺序:所有者(属主,属组),自定义用户,自定义组,其他人 setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ... -b,--remove-all:删除所有扩展的acl规则,基本的acl规则(所有者,群组,其他)将被保留。 -k,--remove-default:删除缺省的acl规则。如果没有缺省规则,将不提示。 -n,--no-mask:不要重新计算有效权限。setfacl默认会重新计算ACL mask,除非mask被明确的制定。 --mask:重新计算有效权限,即使ACL mask被明确指定。 -d,--default:设定默认的acl规则。 --restore=file:从文件恢复备份的acl规则(这些文件可由getfacl-R产生)。通过这种机制可以恢复整个目录树的acl规则。 此参数不能和除--test以外的任何参数一同执行。 --test:测试模式,不会改变任何文件的acl规则,操作后的acl规格将被列出。 -R,--recursive:递归的对所有文件及目录进行操作。 -L,--logical:跟踪符号链接,默认情况下只跟踪符号链接文件,跳过符号链接目录。 -P,--physical:跳过所有符号链接,包括符号链接文件。 --version:输出setfacl的版本号并退出。 --help:输出帮助信息。 --:标识命令行参数结束,其后的所有参数都将被认为是文件名 -:如果文件名是-,则setfacl将从标准输入读取文件名。 Usage: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ... -m, --modify=acl modify the current ACL(s) of file(s) -M, --modify-file=file read ACL entries to modify from file -x, --remove=acl remove entries from the ACL(s) of file(s) -X, --remove-file=file read ACL entries to remove from file 例子: mount -o acl /directory getfacl file|directory --获取文件或者目录的acl setfacl -m u:wang:rwx file|directory --增加文件或者目录的用户acl setfacl -Rm g:sales:rwX directory --目录及其子目录以及文件增加用户acl,新增加文件或者目录不会自带acl setfacl -M file.acl file|directory --参照file.acl 给目录或者文件增加acl setfacl -m g:salesgroup:rw file| directory --增加文件或者目录的用户组acl setfacl -m d:u:wang:rx directory --增加该目录的acl,新增文件或者目录的时候【自带acl】,目录下原有的文件或者目录acl不变 setfacl -x u:wang file|directory --删除文件或者目录中,对应用户的acl ,mask还在 setfacl -X file.acl directory --参照file.acl 删除目录中的acl ,mask还在 setfacl -Rb directory --清空目录下的所有acl,包括mask setfacl-k dir --删除默认ACL权限 【注意】: 默认拷贝不会拷贝文件或者目录的acl,用cp来复制文件的时候我们现在可以加上-p选项。对于不能拷贝的ACL属性将给出警告。 mv命令将会默认地移动文件的ACL属性,同样如果操作不允许的情况下会给出警告。 如果你的文件系统不支持ACL的话,你也许需要重新mount你的file system: mount -o remount, acl [mount point] 如果用chmod命令改变Linux file permission的时候相应的ACL值也会改变,反之改变ACL的值,相应的file permission也会改变。

August 2, 2015