一.Linux目录结构
目录 |
说明 |
/lost |
found系统修复 |
/bin |
二进制命令所在的目录。 |
/boot |
系统引导程序所需的文件目录。安装系统分区的时候一般单独要分一个boot分区,大小可谓128-256M,该分区数据增长神效 |
/dev |
(Device flies)设备软件目录,比如磁盘、光驱….. |
/etc |
系统配置,启动程序 |
/home |
普通用户的家,目录默认数据存放目录 |
/lib |
启动系统和运行命令所需的共享库文件和内核模块存放 |
/mnt |
临时挂载存储设备的挂载点, u盘直接插入光驱无法使用,要先挂载后使用 |
/opt |
额外的应用软件包 |
/proc |
操作系统运行时,进程信息及内核信息(比如cpu、硬盘分区、内存信息等)存放在这里。/proc目录是虚拟文件系统的挂载点,proc并不是真正的文件系统,它的定义可以参见/etc/ fstab,系统运行很多信息都在这个目录下。 |
/proc/loadavg |
<==系统负载(系统繁忙程度) |
/proc/memrino |
<==系统内存信息 |
/proc/cpuinfo |
<==系统cpu信息 |
/proc/mounts |
<==系统挂载信息。 |
/root |
Linux超级用户root的家目录:root类似win32管理员administrator |
/sbin |
和管理系统相关的命令(超级管理员用) |
/tmp |
(Temporary files)临时文件目录, 这个目录可以被用作回收站使用 |
/usr |
用户或系统软件应用程序目录 |
/var |
这个目录的内容是经常变动的。是个用来存放系统日志的目录,系统日志的路径/var/log/messages; /var/lib用来存放一些库文件 |
/etc系统初始化及设置相关重要文件
l /etc/sysconfig/network-scripts/ifcfg-eth0 #网卡配置文件
l /etc/resolv.conf #Linux系统DNS配置文件
l /etc/sysconfig/network #CentOS-6主机名配置文件
l /etc/hostname #CentOS-7主机名配置文件
l /etc/syscconfig/i18n #CentOS-6字符集配置文件
l /etc/locale.conf #CentOS-7字符集配置文件
l /etc/hosts #ip地址与域名快速解析的文件
l /etc/fstab #配置开机设备自动挂载的文件
l /etc/rc.local #存放开机自启动程序命令的文件
l /etc/inittab # centos7设定运行级别等配置的文件
l /etc/systemd/system/default.target #centos7设定运行级别等配置的文件
l /usr/lib/systemd/system/runlevel*.target #centos7运行级别
l /etc/profile及/etc/bashrc #配置系统的环境变量/别名等的文件
l /etc/profile.d #用户登录后执行的脚本所在的目录
l /etc/issue和/etc/issue.net #配置在用户登录终端前显示信息的文件
l /etc/init.d #软件启动程序所在的目录
l /etc/motd #配置用户登录系统之后显示提示内容的文件
l /etc/redhat-release #声明RedHat版本号和名称信息的文件
l /etc/sysctl.conf #Linux内核参数设置文件
网卡配置文件详解
systemctl restart network
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 UUID=30126a53-c912-4552-a7fe-af1925bd4d2f #网卡uuid克隆虚拟机需要删除。 HWADDR=00:0c:29:fe:f9:8a #mac地址,网卡唯一标识,克隆虚拟机要删除。 NM_CONTROLLED=no #要不要被网络管理器控制,选no USERCTL=no #USER ConTrol普通用户是否可以管理网卡,no PEERDNS=yes #要不要覆盖/etc/resolv.conf文件(DNS客户端文件) IPV6INIT=no #是否支持ipV6 DEVICE=eth0 #网卡设备的名字,eth0是第一块。 ONBOOT=yes #开机时,是否和系统一起启动 TYPE=Ethernet #以太网 BOOTPROTO=none #启动协议.dhcp(动态主机配置协议).static/none(静态ip) IPADDR=10.0.0.200 #IP地址 NETMASK=255.255.255.0 #子网掩码(也可以是24) GATEWAY=10.0.0.2 #网关 DNS1=223.5.5.5 #第一个DNS DNS2=223.6.6.6 #第二个DNS
配置DNS的配置文件
/etc/sysconfig/network-scripts/ifcfg-eth0
配置方法:DNS1=xxx.xxx.xxx.xxx DNS2=xxx.xxx.xxx.xxx
/etc/resolv.conf
配置方法:nameserver xxx.xxx.xxx.xxx nameserver xxx.xxx.xxx.xxx
CentOS-7系统修改主机名
hostnamctl set-hostname 新的主机名
修改配置文件/etc/hostname
修改字符集
echo $LANG #查看 export LANG=zh_CN.UTF-8 #临时修改 localectl set-locale LANG=en_US.utf8 #需重新加载,永久生效 CentOS-6修改配置文件/etc/syscconfig/i18n CentOS-7修改配置文件/etc/locale.conf source 配置文件
运行级别
CentOS-6
runlevel #查看 #修改级别 init 级别 / 或者修改运行级别配置文件/etc/inittab
0 关机状态 (不要把运行级别永久设置为0) 1 单用户模式 root密码忘记 故障 2 多用户模式 (不能使用NFS软件) 3 完全的多用户模式 文本模式 命令行模式 4 没有使用 5 桌面模式 X11 6 重启 (不要把运行级别永久设置为0)
CentOS-7
systemctl get-default #查看 systemctl set-default #修改
别名与环境变量
#查看系统中已经定义的别名 alias #alias 命令
#命令设置 (临时生效,重启系统之后失效) alias rm=' echo rm command bny'
#配置文件修改 vim /etc/profile| /etc/bashrc (别名所有用户可用)#国法 vim ~/.bashrc| ~/.bash_profile(别名当前用户可用)#家规
#生效(永久生效) source 配置文件名
#取消别名 unalias 有别名的命令
env #查看环境变量 #命令设置(临时生效,重启系统之后失效) export TEST=123 #环境变量统一大写(普通变量随意),名称不要与系统中已经定义好的变量冲突 echo $TEST #查看 #配置文件定义 vim /etc/profile(所有用户可用)#国法 vim ~/.bash_profile(当前用户可用)#家规 #生效(永久生效) source 配置文件 #取消环境变量 unset TEST
#对系统的小优化 cat >>/etc/profile.d/color.sh<<"EOF" alias ll='ls -l --color=auto --time-style=long-iso' PS1='[e[32;1m][u@h W]$ [e[0m]' EOF source /etc/profile
/var目录下的路径知识
/var/log #记录系统及软件运行信息文件所在的目录 /var/log/messages #系统级别日志文件 /var/log/secure #用户登录信息日志文件 /var/log/dmesg #记录硬件信息加载情况的日志文件
/proc目录下的重要路径知识
/proc/meminfo #系统内存信息 /proc/cpuinfo #关于处理器的信息,如类型,厂家,型号,性能等 /proc/loadavg #系统负载信息,uptime的结果 /proc/mounts #已加载的文件系统的列表
/dev目录下的路径知识
/dev/sd* #磁盘设备 /dev/sr0或者/dev/cdrom #光驱设备文件 /dev/zero #写0设备,作用:1.清空磁盘数据 2.产生空设备文件 /dev/null #黑洞设备,作用:销毁操作系统输出信息使用
二.软件安装
yum install -y tree xxxx #安装软件 yum grouplist #查看已安装的软件包 yum groupinstall #安装指定的软件包 yum provides #查询命令属于哪个软件包 yum remove sl -y #删除一个软件包
-ivh rpm –ivh #软件包 -e rpm –e #卸载软件包 -qa rpm –qa #查询所有软件包 -ql rpm –ql #查看软件包里的文件列表 -qf rpm –qf #查询命令或文件属于哪个软件包 -qc rpm -qc #查询软件的主配置文件
#编译安装三部曲 ./conflgure #编译参数选项 make #开始编译 make install #开始安装
三.Linux文件类型
-rw-------. 1 root root 4434 May 30 13:58 ks.cfg -rw-------. ①:文件类型与权限 1 ②:硬链接次数 root ③:所属用户 root ④:所属组 4434 ⑤:文件大小 May30 13:58 ⑥⑦⑧:最新修改的时间与日期 ks.cfg ⑨:文件或目录名称
Linux下扩展名只是方便用户记忆,对文件类型不影响 .txt #文本文件 .log #日志文件 .conf .cfg .configure .xml #配置文件 .sh .bash #shell脚本 .py #python脚本
ls -l 文件名 //看第一个字符 格式 说明 - 普通文件(文本, 二进制, 压缩, 图片, 日志等) d 目录文件 b 设备文件(块设备)存储设备硬盘 /dev/sda1, /dev/sda2 c 设备文件(字符设备)打印机,终端 /dev/tty1, /dev/zero s 套接字文件, 进程间通信(socket) p 管道文件 l 链接文件
文件及目录查找命令
file [文件] #查看普通文件类型 which [命令] #显示命令的全路径 whereis [命令] #查看命令及其相关内容
作用:查找目录下文件 find /oldboy –maxdepth 1 –type f –name “*.txt” -size +1M -maxdepth #最大查找多少层,一定放在最前面,1是该目录下一层 -type #类型 f d l -iname #名字 (忽略大小写) -name #名字 -size +1M(大于1M)-100k(小于100k ) #根据大小查找文件 -mtime +7(7天以前) -7(7天以内) #根据时间查找文件 示例: find /root/ -type f -iname "*.txt" |xargs cp -t /tmp/ cp $(find /root/ -type f -iname "*.txt") /tmp/ find /root/ -type f -iname "*.txt" -exec cp {} /tmp/ ; find /root/ -type f -iname "*.txt" | xargs -i cp {} /tmp/
seq 10 >ett.txt xargs -n5 <ett.txt -n 分组 主要配合find命令使用
压缩包管理
#创建压缩包 [root@oldboy ~]# tar zcvf /tmp/etc.tar.gz /etc/ 把/etc/打包压缩 压缩包放在/tmp/etc.tar.gz tar 参数 zcvf z 表示通过gzip软件进行压缩 c 表示创建压缩包 v 表示显示创建压缩包和解压的过程 f 表示指定压缩包(f一定要放在这几个参数的最后)
t 查看压缩包内容
tar tf /tmp/etc.tar.gz
#解压 x 表示解压 解压时进入到tmp 下 cd/tmp tar xf /tmp/etc.tar.gz
/tmp/etc.tar.gz 解压到 /opt tar xf /tmp/etc.tar.gz -C /opt/ 排除 --exclude
#压缩文件 zip test.zip test.log #压缩目录 zip -r test.zip test -q #静默模式 #解压 unzip test.zip #解压到指定目录 unzip -d /opt scripts.zip #解压的其他参数 -l 只看一下zip压缩包中包含哪些文件,不进行解压缩 -v 查看显示的文件列表还包含压缩比率 -t 检查zip文件是否损坏
date 显示与设置系统时间
date 显示或设置系统时间 显示日期以2018-09-30 显示 [root@oldboyedu /etc]# date +%F 2018-09-30 [root@oldboyedu /etc]# date +%Y-%m-%d 2018-09-30 显示日期,不显示世纪 [root@oldboyedu /etc]# date +%y-%m-%d 18-09-30 显示时间以10:30:12 显示 [root@oldboyedu /etc]# date +%T 10:30:12 [root@oldboyedu /etc]# date +%H:%M:%S 10:31:23
date +格式 #%Y year #%m month 月 #%d day 日期 #%H hour 小时 #%M minute 分钟 #%S sec 秒 #+%F === %Y-%m-%d 2018-09-30 #+%T === %H:%M:%S #+%w 周几 (0周日) date 参数 -d 根据你的描述显示日期 -s 修改日期
#同步时间 ntpdate ntp1.aliyun.com
四.Linux系统角色
Linux 系统中,UID以如下的方式划分: 0 表示管理员(root) 1 - 500 表示系统虚拟用户 501 - 65535 表示普通用户 不同的Linux发行版,这些数字可能不一样
用户及用户组相关命令
useradd 添加用户 -u 给用户指定UID -s 指定用户的shell命令解释器 -M 表示不创建家目录,创建虚拟用户使用 -g 指定用户组 -c 添加说明信息 passwd 设置密码 --stdin 非交互式设置密码 echo 123456 | passwd --stdin 用户名 whoami 我是谁,显示当前用户 su 切换用户 su - 切换用户的时候更新环境变量 -c 切换到另一个用户,运行一个命令, su - maple -c "pwd" id 查看用户的uid,gid及归属的用户组 userdel 删除用户,默认不删除用户的家目录和邮箱 -r 删除与用户有关的所有信息 usermod 修改用户信息 -s 修改用户使用的shell -g 修改属于的用户组,主要组 -u 修改UID -c 修改用户说明 groupadd 创建用户组 -g 指定用户组并指定GID groupdel 删除用户组,不能删除还有用户归属的主用户组
文件的权限
列表的列定义如下:
[权限属性信息] [连接数] [拥有者] [拥有者所属用户组] [大小] [最后修改时间] [文件名]
权限属性列表为10个字符:
第一个字符表示文件类型,d为目录 -为普通文件 l为连接 b为可存储的接口设备 c为键盘鼠标等输入设备 2、3、4个字符表示所有者权限,5、6、7个字符表示所有者同组用户权限,8、9、10为其他用户权限 第二个字符表示所有者读权限,如果有权限则为r,没有权限则为- 第三个字符表示所有者写权限,如果有权限则为w,没有权限则为- 第四个字符表示所有者执行权限,如果有权限则为x,没有权限则为- 第五个字符表示所有者同组用户读权限,如果有权限则为r,没有权限则为- 第六个字符表示所有者同组用户写权限,如果有权限则为w,没有权限则为- 第七个字符表示所有者同组用户执行权限,如果有权限则为x,没有权限则为- 第八个字符表示其他非同组读权限,如果有权限则为r,没有权限则为- 第九个字符表示其他非同组写权限,如果有权限则为w,没有权限则为- 第十个字符表示其他非同组执行权限,如果有权限则为x,没有权限则为-
文件的修改时间属性
mtime modify time 修改时间 (文件内容变化)
ctime change time 属性改变的时间(文件属性;变化;大小;权限;inode;所有者用户硬链接数量)
acime access time 访问时间(cat)
怎样查看:
stat命令
硬链接与软连接
#硬链接用法 ln [原文件] [目标文件]
#硬链接 1.具有相同inode的不同文件名 2.删除硬链接或者原文件之一,文件实体不会被删除 3.删除所有硬链接,数据会在被磁盘检查或者新数据写入时候删除回收。 4.可以给文件设置硬链接防止误删 5.通过ln [原文件] [目标文件]设置硬链接 6.通过rm –f 删除硬链接 7.文件目录不可创建硬链接,因为硬链接无法跨区
#软连接用法 ln –s [原文件] [目标文件]
#软连接 1. 软链接类似于快捷方式,存放原文件路径,执行原文件 2. 删除原文件,软链接依然存在,但是失效 3. 执行ln –s [原文件] [目标文件]完成创建 4. 软链接和原文件是不同类型文件,inode不同 5. rm –f 删除软链接 6. 可以创建目录和文件的软链接,即可以跨区
#硬链接与软连接的区别 1.从定义:linux系统中,链接有两种,一种被称为软链接,类似于快捷方式,存放指向原文件inode的信息,与原文件inode不同。一种是硬链接,与原文件有相同的inode,可以指向数据block。 2.从创建方式:硬链接命令 ln [原文件] [目标文件],软链接命令ln –s [原文件] [目标文件] 3.从创建对象:ln命令不能对目录创建硬链接,但是可以对目录创建软链接。因为软链接可以跨越文件系统,,硬链接则不能。对目录和为客户创建的文件软链接经常用到。 4.删除软链接文件,对硬链接和原文件无影响。 5.删除文件硬链接,对原文件及软链接文件无影响 6.删除原文件,对硬链接读取数据无影响,软链接则失效。会出现红底白字状。 7.同时删除原文件和硬链接,原文件才会被真正删除 8.很多硬件设备中的快照原理,类似于硬链接原理
五.Linux通配符与特殊符号
*
匹配任意(0个或多个)字符或字符串,包括空字符串
{}
生成序列
引用变量作为变量与普通字符分隔
?
匹配任意1个字符,有且只有一个字符
[abcd]
匹配abcd中任何一个字符,abcd也可是其他任意不连续字符
[a-z]
匹配a到z之间的任意一个字符, a到z表示范围,字符前后要连续,-表示范围的意思,也可以用连续数字[1-9]
[!abcd]
同[^abcd],表示不匹配括号里面的任何一个字符,也可为[!a-d]
~ 用户的家目录,超级用户为/root,普通用户为/home - 代表上一次(相对于当前路径)用户所在的路径 . 代表当前目录(点号还有很多其它含义,暂且不表) .. 代表上一级目录
'' 单引号,所见即所得,即输出单引号内容时会将单引号内的所有内容都原样输出,或者描述为单引号里面看到的是什么就会输出什么,被称之为强引用。 "" 双引号,输出双引号内的所有内容时;如果内容中有命令(要反引下)、变量、特殊转义符等,会先把变量、命令、转义字符解析出结果,然后在输出最终内容来,推荐使用,被称为弱引用。 `` 反引号,一般用于引用命令,执行的时候命令会被执行,相当于$(),赋值和输出都要将命令用``引起来。 空 赋值时,如果变量内容有空格会赋值不完整。而在输出内容时,会将含有空格的字符串视为一个整体输出,如果内容中有命令(要反引下)、变量等,会先把变量、命令解析出结果,然后输出最终内容,如果字符串中带有空格等特殊字符,则有可能无法完整的输出,因此需要改加双引号,一般连续的字符串、数字、路径等可以不加任何引号赋值和输出,不过无引号的情况最好用双引号替代之,特别是变量赋值时。
#重定向符号 0 表示标准输入(stdin),配合<或<<使用,数据流从右向左 1 表示标准输出(stdout),配合>或>>使用,数据流从左向右 2 标准错误(stderr),配合>或>>使用,数据流从左向右 0<或< 标准输入重定向,清空已有内容,数据从文件流向处理的命令 0<<或<< 追加输入重定向,追加内容到底部,数据从文件流向处理命令 1>或> 标准输出重定向,正常输出重定向到文件,会清空已有内容 1>>或>> 标准输出追加重定向,将内容追加到文件底部,不清空已有内容 2> 错误输出重定向,将标准错误内容重定向到文件,如文件存在内容则清空 2>> 错误输出追加重定向,将标准错误内容追加到文件底部,不会清空已有内容
; 表示一个命令的结束,也是命令间的分隔符 # (1)表示是注释内容,给管理员看的注释部分,系统不会执行井号开头的内容;(2)root用户的命令提示符 | 表示管道,将一个命令处理后的内容输出给下一个命令继续处理 $ (1)字符串前加$符号,代表字符串变量内容;(2)普通用户命令提示符 逃脱符,即将有特殊含义的字符还原成字符本意,例如$仅代表美元符 & 将程序放入后台运行符,例如:/bin/sh /scripts/oldboy.sh &(后文会讲)
#逻辑操作符号 && 与,and || 或,or ! 非,opppsite
六.正则表达式
POSIX规范将正则表达式分为两种:
l 基本正则表达式(BRE,basic regular expression);
l 扩展正则表达式(ERE,extended regular expression)——高级功能。
+ 一般与[]进行配合 把各种连续的东西取出来 | 或 ( ) 一个整体 后向引用-sed { } 0{n,m} 前一个字符至少连续出现n次,最多连续出现了m次 ? 前一个字符连续出现0次或1次
BRE:^ $ ^$ . * .* [] [^]
ERE:+ | () {} ?
BRE:grep/sed/awk
ERE:egrep/grep -E/sed -r/awk
$ ^$空行 cat -A 取出文件中的空行或包含#或只有空格的行 .(点) (撬棍) [abc] [^abc] |(竖线) ()
#表示重复连续出现 + * a{n,m} ?
#查看资料 man sed/grep/awk info grep/sed/awk
#转义字符 转义字符 意义 ASCII码值(十进制) a 响铃(BEL) 007 退格(BS) ,将当前位置移到前一列 008 f 换页(FF),将当前位置移到下页开头 012 换行(LF) ,将当前位置移到下一行开头 010 回车(CR) ,将当前位置移到本行开头 013 水平制表(HT) (跳到下一个TAB位置) 009 v 垂直制表(VT) 011 \ 代表一个反斜线字符''' 092 ' 代表一个单引号(撇号)字符 039 " 代表一个双引号字符 034 空字符(NULL) 000 ddd 1到3位八进制数所代表的任意字符 三位八进制 xhh 1到2位十六进制所代表的任意字符 二位十六进制
七.Linux系统12位权限体系
rwx含义 read 可读 write 可写 execute 命令 or 脚本
rwx 权限位表示 r read 读 4 w write 写 2 x execute 执行 1 - 没有权限 0 权限位计算 -rwxr-xr-x 755 -r-x------ 500 -rw------- 600 -rw-r--r-- 644 -rwxrwxrwx 777 644 rw-r--r-- 755 rwxr-xr-x 400 r-------- 650 rw-r-x--- 404 r-----r-- 403 r------wx
#chmod命令 chmod:change mode,修改权限,-R 递归修改
#用户的表示方法 u-user(文件的所有者-主人) g--group(用户属于的组-家人) o-others(其他人 隔壁老王-陌生人)
#权限授予 +添加权限 -去掉某一个权限 =先去掉原有的权限,然后在赋予新的权限 chmod u=rx test.sh
#权限对应的数字 r--- 4 w---- 2 x----- 1 - ==== 0
#使用数字授予权限 rwxr-xr-x 755 chmod 755 test.sh
#chown命令 chown change own,修改属主属组,-R 递归修改
r 是否能查看文件内容
w 是否能修改文件的内容,需要r权限配合 rw
只有w的时候vim强制修改文件内容,会导致源文件内容清空
x 是否能运行命令或脚本的权限,需要r权限配合
root 默认对文件rw权限,默认没有执行权限
#linux系统默认权限控制命令umask 临时:umask 022 #默认为022 永久:修改/etc/profile文件
#chattr 授予隐藏属性 授予文件或目录隐藏的权限 a (append 只能追加) 如果设置了这个权限 只能追加 不能删除 不能修改 i( immutable 无敌) 无法修改 无法删除
#lsattr 查看隐藏属性 查看当前目录所有文件及目录的隐藏属性