Linux进阶知识和命令
一.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 \b 退格(BS) ,将当前位置移到前一列 008 \f 换页(FF),将当前位置移到下页开头 012 \n 换行(LF) ,将当前位置移到下一行开头 010 \r 回车(CR) ,将当前位置移到本行开头 013 \t 水平制表(HT) (跳到下一个TAB位置) 009 \v 垂直制表(VT) 011 \\ 代表一个反斜线字符''\' 092 \' 代表一个单引号(撇号)字符 039 \" 代表一个双引号字符 034 \0 空字符(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 查看隐藏属性 查看当前目录所有文件及目录的隐藏属性