zoukankan      html  css  js  c++  java
  • 【学习笔记】兄弟连LINUX视屏教程(沈超 李明)

    发现自己的linux水平楞个瓜皮,找个视屏教程学习一哈

    1 linux系统简介

    1.1 UNIX和Linux发展史

    unix发展历史:1969年,美国贝尔实验室的肯.汤普森开发出unix系统,1971年丹尼斯·里奇发明C语言,1973年,unix用c重写

    硬件平台的概念  也就是cpu架构

    PowerPC      IBM          AIX

    PA-RISC       HP        HP-UX

    SPARC         Sun          Solaris

    IA(Intel、AMD、Cyrix、RISE…)      Red Hat Linux、Ubuntu…   linux

    AIX和HP-UX是不能安装在pc中,必须在特定的服务器上,Solaris可以

    freebsd  加州大学伯克利分校

    mac也是由unix演变来的

    linux发展历史:1991年,Linus Torvalds和其他众多爱好者开发完成

    Linux是开源软件,源码开放的UNIX

    内核官网:www.kernel.org

    版本号如  2.6.18

    目前最新  4.18.4

    次版本是偶数是稳定版奇数是开发版,这种说法在主版本更新到3就没了

    发行版:redhat系列(yum)和debian系列(apt-get)

    fedora是rhel的实验版本,要收费

    centos完全免费 社区维护

    gentoo linux不适合初学者

    SUSE在欧洲用的多,界面都快赶上unbuntu

    KNOPPIX不用安装,类似livecd

    ubuntu界面漂亮,桌面用户多点,server端并不多

    1.2 开源软件简介

    商业软件是收费的

    开源软件免费但是可以收服务费

    image

    使用、研究、散布及改良的自有

    1.3 Linux应用领域

    基于Linux的企业服务器

    www.netcraft.com 扫描和踩点网站

    嵌入式应用

    安卓、手机、平板、智能家电、航空、银行、卡拉OK点歌系统、树莓派

    1.4 学习方法

    善用工具

    英文

    忘掉windows思维方式

    2 Linux系统安装

    磁盘分区

    分区类型

    主分区:最多4个

    扩展分区:最多1个,不能写入数据,只能挂载逻辑分区

    主分区+扩展分区 最多4个

    逻辑分区

    格式化(高级格式化)又称为逻辑格式化,是要在硬盘中写入文件系统

    ext4  4k  数据块 block

    i节点 inode列表

    低级格式化是硬盘操作不是操作系统操作

    硬件设备文件名:

    IDE硬盘             hd[a-d]                     

    SCSI/SATA/USB硬盘      sd[a-p]       

    光驱                    cdrom或sr0

    鼠标                     mouse

    打印机(25针)                 lp[0-2]

    打印机(USB)                 /dev/usb/lp[0-15]

    ide 133MB  最古老, scsi都淘汰了 200MB贵服务器

    SATA3 串口硬盘 500MB/s  现在一般都是这个

    逻辑分区不能占用1 2 3 4编号   5一定是第一个逻辑分区

    挂载:

    / 根分区

    swap分区 交换分区  内存1.5-2倍  不超过2G

    推荐分区/boot  启动分区 200m即可 太大无用,系统启动都要有空闲空间,防止系统写满导致无法启动,写完之后永远不会往这个分区再写入数据,他永远有空闲空间  boot分区一定是sda1第一个分区

    挂载点必须是空目录

    安装日志:

    /root/install.log:存储了安装在系统中的软件包及其版本信息

    /root/install.log.syslog 存储安装过程中留下的事件记录

    /root/anaconda-ks.cfg 已Kickstart配置文件的格式记录安装过程的选项设置  作为无人值守安装的模板

    linux 严格区分大小写

    命令全是小写

    文件名区分大小写

    tab键自动补全

    linux中一切皆文件  设备文件是特殊的文件

    永久生效都要写入文件  写入内存的都是临时生效

    linux不通过扩展名区分文件类型

    linux存储设备都必须挂载后才能使用

    目录作用

    /bin  存放系统命令,普通用户和root都可以执行

    /sbin 保存和系统环境设置相关的命令,只有root能执行

    /usr/bin

    /usr/sbin

    /boot 系统启动目录

    /dev 设备文件

    /etc  配置文件

    /home 宿主目录

    /lib 系统函数库

    /lost+found/ 当系统崩溃或意外关机而产生的文件碎片。当系统启动过程fsck工具会检查这里,并修复系统   每个分区都有自己的这个目录

    /media 挂载目录   多媒体设备  光盘

    /mnt 挂载目录 u盘移动硬盘或其他操作系统分区

    /misc 挂载目录 系统建议用来挂载nfs服务的共享目录

    /opt 第三方软件保存位置  用处不多,现在外部软件一般放/usr/local目录

    /proc 虚拟文件系统  放内存中 当前系统的进程和硬件信息

    /sys  虚拟文件系统  放内存中 存放内核相关信息

    /root  root家目录

    /srv  服务数据目录

    /tmp 临时

    /usr 系统软件资源目录

    /var 动态数据保存位置。保存缓存、日志及软件运行产生的文件

    usr  unix system resource

    服务器不允许关机,只能重启

    重启时应该关闭服务

    不要在服务器访问高峰运行高负载命令

    远程配置防火墙时不要把自己踢出服务器

    合理分配权限

    定期备份重要数据和日志

    mint 默认不启用root用户,sudo passwd root来启用

    mint也默认不启用ssh,sudo apt-get install openssh-server然后修改配置文件vi /etc/ssh/sshd_config 修改PermitRootLogin yes行,来允许root用户ssh远程登陆

    3 常用命令

    3.1 文件处理命令

    命令格式  命令 [-选项] [参数] ls -al /etc     中括号表示可选

    个别命令不遵守此格式 多个选项可以写一起  简化选项和完整选项  -a  –all

    目录处理命令:

    ls  list    /bin/ls  -aldh

    所有者  所属组  其他人  ugo rwx  读写执行权限  777 软链接 硬链接

    -表示文件 d表示文件 l表示link

    .开头的文件表示隐藏文件   .当前目录  ..父目录

    mkdir /bin 创建目录   -p 表示递归创建 -m=mode  可以同时创建多个目录 空格分割

    cd 切换目录 change directory  shell内置命令

    pwd  /bin 显示当前目录

    rmdir  remove empty directories  /bin   删除空目录

    cp copy /bin   -rp   r表示递归 p保留文件属性 可以复制多个文件

    mv move /bin  剪切、改名 可以剪切多个

    clear ctl+l  清屏

    rm 删除文件 remove /bin -rf f表示强制执行

    文件处理命令:

    touch /bin 创建空文件 文件名如果是有空格 加双引号 不建议

    cat 查看文件 /bin -n 显示行号

    tac 导致显示

    more 分页显示文件内容 /bin   空格或f 翻页 q或Q退出 enter换行

    less 同more不过可以向上翻页  pageup 上箭头 还可以搜索 /词儿  高亮显示搜索到的  n显示下个搜索到的

    head 查看前几行 -n  默认10行

    tail -fn  查看后几行  -f实时监控

    链接命令:

    ln link /bin  ln -s [原文件] [目标文件]  -s表示软连接  不加表示硬链接

    软连接类似win快捷方式,l标记权限全是777 软连接很小

    硬链接和原文件的i节点相同

    硬链接删除源文件,目标文件依然可以使用。软链接一旦删除源文件,目标文件不可用

    和cp -p的不同处 修改一处后,另外一处也会同时更新。

    硬链接不能跨分区  硬链接不能对目录使用

    3.2 权限管理命令

    chmod  root和所有者可以改权限

    change the permissions mode of a file

    /bin

    -R 递归修改 mode=421 {ugoa}+-={rwx}

    可以同时进行多个授权

    更多的是用数字方式 777 表示拥有全部权限

    对目录 r表示可以列出目录内容  w表示可以在目录中创建 删除文件 x可以进入目录

    删除文件的权限是对所在目录有写权限

    对目录有r权限就一般有x权限

    chown  只有root可以改

    change file ownership

    chgrp

    useradd

    groupadd

    一般谁创建的文件 谁就是所有者

    一个用户有多个组 单有个缺省组  文件的创建者的缺省组就是文件的所属组

    umask -S 缺省权限   u=rwx,g=rx,o=rx

    创建目录的权限和缺省权限一样

    创建文件的权限是缺省权限去除x权限  防木马病毒

    umask          0022   0 特殊权限  022  真正的权限是777-022=755

    umask 023

    3.3 文件搜索命令

    find  搜索会占用大量资源 不要在服务高峰期使用 window中everything挺好用的,不过没有linux版本,并且只支持ntfs分区

    /bin      find [搜索范围] [匹配条件]

    -name 根据文件名搜索  find /etc -name init

    通配符  *匹配任意字符       ?匹配单个字符

    -iname  忽略大小写

    搜索范围越小越好  能不在根目录下就不要全局搜索 严重耗费资源

    -size 指定文件大小   +-  linux一个数据块512B  就是0.5k   查找大于100M的文件find / -size +204800

    -user  找所有者的文件

    -group 找所属组的文件

    根据时间属性查找

    -amin 访问时间 access

    -cmin 文件属性 change

    -mmin 文件内容 modify

    find /etc -cmin -50  查找50分钟以内修改过文件属性的文件 +-

    连接选项  -a两个条件同时满足 -o两个条件满足任一           find / -size +163840 -a -size -204800

    find /etc -name init -exec ls -l {} ;                  -exec/-ok 命令 {} ; 对搜索结果执行操作     -ok有确认询问

    -type 根据文件类型  f文件 d目录 l软连接

    -inum 根据i节点查找        可以找硬链接

    locate命令

    /usr/bin 在文件资料库中查找

    yum install -y mlocate

    会定期更新

    速度快

    updatedb 初始化

    locate -i 不区分大小写

    /tmp目录不被收录  某些目录不被收录

    which 命令搜索  which ls  还能搜到命令别名

    whereis  还能搜到帮助文件

    grep  -i 不区分大小写  -v排除指定字符串  ^表示行首  反向查找 屏蔽

    3.4 帮助命令

    man manual /usr/bin

    可以查命令帮助 也可以查配置的帮住

    man ls

    man services  不可以写绝对路径

    可以    /内容   查找

    man passwd 优先查命令   1一般是命令的帮住 5一般是配置文件的帮住

    man 5 passwd 是查配置

    whatis 可以查到命令的简短介绍  就是帮助文档的name部分

    apropos 可以查配置文件的简短介绍 也不要加绝对路径

    –help  只看选项 不会man那么长

    info 和man大同小异

    help  可以查看shell内置命令的帮助

    shell内置命令找不到路径

    3.5 用户管理命令

    useradd 加用户

    passwd 改密码  普通用户改自己密码需要满足复杂度要求

    who 查看哪些用户登录   tty表示本地登录 pts表示远程终端

    w 查看登录用户及正在干嘛

    3.6 压缩解压命令

    绝大多数病毒很难感染压缩文件

    常用压缩格式

    .gz linux中常用格式 命令gzip  gunzip解压缩 或者gzip -d        

    压缩比很惊人 差不多5倍

    不过gzip只能压缩文件 不能目录

    压缩解压均不保留源文件

    .zip linux和win通用格式

    zip命令 保留源文件 -r压缩目录

    压缩比差于gzip

    unzip解压缩  不区分文件和目录

    .tar .tar.gz可以压缩目录

    tar命令 -z 打包同时压缩格式为gz -c打包  -v verbose详细  -f 指定文件名  -x解包  -j打包同时压缩格式为bz2

    .bz2   gzip的升级版

    bzip2命令 -k可以保留原文件 压缩比惊人

    bunzip2 解压缩.bz2文件 -k可以保留源文件 bzip2 -d也可以解压

    tar -xjf 可以解压.tar.bz2文件

    3.7 网络命令

    write  发信息给服务器上其他用户,登录了的用户才能发信息  最初的及时通讯 ctrl+d结束

    wall 给所有在线用户发信 , writeall的意思

    ping  给远程用户发送icmp包,检测目标是否存在,每经过一个路由节点ttl减少1  不同系统ttl初始值不一样 可以大概判断对方操作系统类型 linux是64

    ifconfig 查看当前网络 eth0是初始网卡  lo是回环网卡用户检测tcpip是否通畅,mac地址是固话在网卡的只读存储器中的地址不可变

    ifconfig eth0 192.0.0.0 可以临时更改ip

    mail 邮件命令 用户不在线也可以 mail用户名发信  mail啥都不跟收信 输入help查看帮助 输入序列号查看信 h可以看到信列表  d 1 删除邮件

    last 重启信息都有 所有用户登录信息  非常有效 常用的命令

    lastlog 同last只记录最后一次登录 lastlog -u 502指定用户

    traceroute 显示数据包到主机间的路径   凡走过必留痕迹  结果显示**是被该节点屏蔽了

    netstat 显示网络相关信息 -t tcp协议 -u udp协议  -l 监听 -r路由 -n 显示ip端口

    netstat -tlun 查看本机监听的端口

    netstat -an 查看本机所有的网络连接

    netstat -rn 查看本机路由

    tcp 传输控制协议 有三次握手协议  更可靠  类似打电话

    udp 用户数据报协议 更快  类似发短信

    tcp才可以监听端口  udp不可以  udp可以直接发送

    发起端口是随机的  目标端口才是22 80等端口

    setup 修改网络, 是redhat中特有的 其他版本没有  永久生效

    yum install -y setuptool

    安装工具组件如 ntsysv(系统服务)system-config-networktui(网络服务)iptables(防火墙配置)

    yum install system-config-securitylevel-tui

    yum install iptables

    yum install ntsysv

    yum install system-config-network-tui  centos7,已经setup已经无法配置网络了,该命令中无法找到,推荐使用nmtui命令

    service network restart 重启网卡

    mount 挂载

    mount -t iso9660 /dev/sr0 /mnt/cdrom

    /dev/cdrom 是/dev/sr0的软连接

    -t iso9660 可以不写 默认就是

    umount /dev/sr0

    如果正在挂载目录中,是卸载不了提示设备忙,要退出挂载目录

    3.8 关机重启命令

    shutdown

    shutdown -h now

    shutdown -h 8:30

    shutdown -r now

    shutdown -r 8:30

    最早期只有shutdown 可以正确保存服务,目前其他命令也可以不过推荐使用shutdown

    -c 取消前一个关机命令

    -h 关机

    -r 重启

    服务器不能关机 只能重启 谨记

    halt

    poweroff  相当于直接断电  比较危险

    init 0

    上面3个命令也可以关机

    reboot重启

    init 6也可以重启

    系统运行级别:表示linux启动时候可以进入的级别号

    0 关机

    1 单用户      类似win启动f8安全模式,启动最小服务,启动最小核心程序,用户修复系统,只能root登陆,没有图形界面和win安全模式不一样

    2 不完全多用户,不含nfs服务    nfs验证机制弱,不建议用这个文件共享

    3 完全多用户

    4 未分配

    5 图形界面

    6 重启

    cat /etc/inittab 是init的配置文件  别改0或6   改错就不好了

    X11代表图形界面 X表示X-window

    runlevel 查询系统运行级别

    logout 注销  做完操作一定要退出  防止安全隐患

    4 Vim文本编辑器

    vim是vi的增强版

    vim是功能非常强大的全屏幕文本编辑器,是linux/unix中最常用的编辑器

    vim没有菜单只有命令

    命令模式

    插入模式  iao进入 esc退出

    编辑模式   输入: 进入编辑模式 命令以回车结束    :set nu 显示行号   :wq保存退出

    插入命令

    a 在后面插入

    A 在行尾插入

    i 在前面插入

    I 在行首插入

    o 在下行插入

    O 在上行插入

    定位命令:

    :set nu 显示行号

    :set nonu 取消行号

    gg 到第一行

    G 到最后一行

    nG 到第n行

    :n 到第n行

    $ 移到行尾

    0 移到行首

    删除命令:

    x 删除光标出字符

    nx 删除光标所在处后n字符

    dd 删除当前行

    dG 删除光标所在行到文件尾

    D 删除光标所在处到文件尾

    :n1,n2d删除指定范围行

    复制和剪切命令:

    yy 复制当前行

    nyy 复制n行

    dd 剪切当前行

    ndd 剪切多行

    p、P 粘贴到当前行下或者行上

    替换和取消命令

    r 替换单个字符

    R 多个字符替换,esc结束

    u 取消上一步操作  undo

    搜索和搜索替换命令:

    /string   搜索字符串 搜索时候忽略大小写:set ic 取消 :set noic       n下一个

    :%s/old/new/g  全文替换    %s表示全文替换

    :n1,n2s/old/new/g   范围替换   g可以换c  表示需要询问

    不加g表示只对搜索字符串的首次出现进行替换

    保存退出命令:

    :w 保存

    :w new_filename 另存为

    :wq 保存退出

    ZZ 是:wq的快捷键

    :q! 不保存退出

    :wq! 强制保存退出 文件所有者和root可以操作

    导入命令执行结果 :r !命令     :r 文件名

    定义快捷键  :map 快捷键 触发命令

    :map ^P I#<ESC>                ^P 是ctrl+v+p 来输入 颜色不一样 代表快捷键ctrl+p

    连续注释  :n1,n2s/^/#/g

    :n1,n2s/^#//g

    :n1,n2s/^////g  避免转义符  可以用#或者其他字符来表示分割

    ls是别名  ls 转义符可以使用ls本来命令

    自动替换  :ab mymail yongestcat@126.com

    这些设置重启失效  要永久生效 要写入对应用户的home目录下的vim配置文件 /root/.vimrc   这里面只能放编辑模式的命令  不用加:

    5 软件包管理

    软件包分类:

    源码包(看到源码 安装慢 但是更加稳定执行效率高 系统高度适配 卸载方便 可以自由选择所需功能,安装步骤多,编辑时间长,安装一旦报错新手工解决)

          >脚本安装包  特殊的源码包 一般是install.sh安装 给初学者用的

    二进制包(经过编译 安装快 资源利用率稍低 包管理简单  源码不可见 功能选择不如源码包灵活 依赖性):rpm包、系统默认包

    rpm命令管理

    httpd-2.2.15-15.el6.centos.l.i686.rpm

    软件包名  软件版本 软件发布次数 适合的linux平台 适合的硬件平台  noarch表示适合任何硬件平台  没写linux平台表示适用所有linux平台

    包名 安装过的 /var/lib/rpm/中的数据库

    包全名 未安装过的  绝对路径

    rpm包依赖性

    典型的是树形依赖  a->b->c

    环形依赖 a->b->c->a   abc用一条命令安装可以解决

    模块依赖   模块依赖查询网站 www.rpmfind.net

    1.安装软件:执行rpm -ivh rpm包名,如:

    #rpm -ivh apache-1.3.6.i386.rpm     -i  install 安装   -v 详细  -h  显示进度   –nodeps 不检测依赖性,一般不用

    2.升级软件:执行rpm -Uvh rpm包名。

    3.反安装:执行rpm -e rpm包名。

    4.查询软件包的详细信息:执行rpm -qpi rpm包名    可以查未安装的包

    5.查询某个文件是属于那个rpm包的:执行rpm -qf rpm包名

    6.查该软件包会向系统里面写入哪些文件:执行 rpm -qpl rpm包名

    rpm -qa|grep

    rpm -qi  包名

    rpm -qf 文件名

    rpm -qRp 包名   查依赖

    rpm -V 校验

    S 文件大小是否改变

    M 文件的类型或权限是否被改变

    5 MD5校验是否改变

    D 代码是否改变

    L 文件路径是否改变

    U 文件的属主是否改变

    G 文件的属组是否改变

    T 文件的修改时间是否改变

    文件类型:

    c 配置文件

    d 普通文件

    g ghost文件,就是该文件不应该被rpm包含,很少见

    l 授权文件

    r 描述文件

    rpm包文件提取:

    rpm2cpio 包全名 |                 将rpm格式改为cpio格式

    cpio -idv .文件绝对路径        i copy-in模式,还原      d还原时自动新建目录   v详细    cpio是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件

    yum在线管理

    自动解决依赖性问题,不能上网 可以用光盘作为yum源

    yum在redhat中需要收费

    网络yum源 vi /etc/yum.repos.d/CentOS-Base.repo

    [base] 容器名称

    name 容器说明,自己随便写

    mirrorlist 镜像站点 可以注释掉

    baseurl yum源服务器地址

    enabled 是否有效  不写默认是1 表示有效

    gpgcheck  1表示rpm的数字证书生效

    gpgkey 数字证书的公钥文件保存位置。不用修改

    yum命令

    yum list 查询可用软件包

    yum search 包名     查询

    yum中没有包全名概念,全用包名

    yum install -y 包名   安装包

    yum -y update  包名    升级   如果没写包名就是全部升级包括内核  会导致服务器崩溃 因为需要本地配置些  慎用

    yum -y remove 卸载   会把依赖的包也卸载  这些卸载的依赖包可能被别的软件依赖  卸载命令不安全

    安装的时候最小化安装   尽量不卸载  不全局升级

    yum grouplist  查询软件组

    yum groupinstall 软件包组

    yum groupremove 软件包组

    光盘yum源搭建:

    挂载

    网络yum源失效   enable=0或者改名其他yum源文件

    修改 CentOS-Media.repo  enable=1 地址改为file:///mnt/cdrom

    源码包安装是人为手工指定安装位置  而rpm是默认位置

    rpm默认安装位置

    /etc/ 配置文件安装目录

    /usr/bin 可执行文件安装位置

    /usr/lib  库文件位置

    /usr/share/doc 手册位置

    /usr/share/man 帮助文件位置

    源码包一般安装在  /usr/local/软件名   这是系统给准备的第三方软件位置

    安装位置不同带来的影响  服务的管理

    rpm包安装的服务可以用系统服务管理命令service来管理,例如rpm包安装的apache启动方法/etc/rc.d/init.d/httpd start   或 service httpd start

    service 命令是红帽专有命令  别的linux发行版不一定有

    service命令不能管理源码包安装的服务

    源码安装:

    需要gcc编译器

    下载源码包

    解压 进入目录

    ./configure  –prefix=/usr/local/apache2       定制功能、检测系统环境是否符合、将定义的功能和检测的信息写入Makefile文件,用户后续的编辑

    make && make install    编译  编译安装           make clean

    报错:安装停止且出现warning、error、no等提示

    脚本安装:

    自动安装的源码包  适合新手 下一步下一步那种

    debian系列中apt是apt-get、apt-cache、apt-config的集合

    apt 命令    取代的命令    命令的功能
    apt install    apt-get install    安装软件包
    apt remove    apt-get remove    移除软件包
    apt purge    apt-get purge    移除软件包及配置文件
    apt update    apt-get update    刷新存储库索引
    apt upgrade    apt-get upgrade    升级所有可升级的软件包
    apt autoremove    apt-get autoremove    自动删除不需要的包
    apt full-upgrade    apt-get dist-upgrade    在升级软件包时自动处理依赖关系
    apt search    apt-cache search    搜索应用程序
    apt show    apt-cache show    显示安装细节

    当然也有apt独有的命令

    新的apt命令    命令的功能
    apt list    列出包含条件的包(已安装,可升级等)
    apt edit-sources    编辑源列表

    6 用户和用户组管理

    相关配置文件

    /etc/passwd   用户信息文件   7个字段

    用户名 密码标志x表示有密码 如果没有的话 不校验密码登陆不过只能本机登陆 不能远程

    UID 0:超级用户 1-499 系统用户(伪用户 不能登陆不能删除) 500-65535 普通用户

    root不一定是管理员  uid=0的一定是管理员  普通用户改为uid0就变成管理员了

    GID:初始组id

    用户说明

    家目录

    登陆之后的shell

    初始组:有且只有一个一般和用户名相同   能改 但是不推荐改

    附加组:可以有多个

    影子文件 /etc/shadow    权限000      9个字段

    用户:

    密文密码sha512散列加密 比之前的md5更安全(同一个密码加密出来的也不一样)如果!!或者*表示没有密码表示不能登陆:

    密码最后一次修改日期  时间戳  1970年1月1日 没过1天 加1算出来的时间戳

    两次密码的修改间隔

    密码有效期

    密码到期前的告警天数

    密码到期后的宽限天数 0表示过期后立即失效 -1表示密码永远不失效

    账号失效时间 时间戳表示

    保留

    时间戳换算

    date -d “1970-01-01 16066 days”

    echo $(($(date–date=”2014/01/06″+%s)/86400+1))

    组信息文件/etc/group

    组名

    组密码标志

    GID

    组中附加用户

    添加用户会生成一个同名组作为用户主组

    /etc/gshadow 组名 组密码 组管理员用户名 组中附加用户

    用户的邮箱

    /var/spool/mail/用户名/

    用户模板目录

    /etc/skel/

    用户管理命令

    useradd 选项 用户名

    -u UID  手工指定uid

    -d 家目录

    -c 用户说明

    -g 组名

    -G 附加组

    -s shell

    用户默认值文件/etc/default/useradd

    GROUP=100  #用户默认组            公有模式  私有模式

    HOME=/home #用户家目录

    INACTIVE=-1 #密码宽限天数(shadow文件7字段)

    EXPIRE=       #密码失效时间(8)

    SHELL=/bin/bash #默认shell

    SKEL=/etc/skel  #模板目录

    CREATE_MAIL_SPOOL=yes  #是否建立邮箱

    /etc/login.defs 定义了shadow文件中7 8字段之外的字段

    PASS_MAX_DAYS 9999    #  5字段

    PASS_MIN_DAYS              # 4

    PASS_MIN_LEN 5   #最小8位 这个5 没用 现在pam文件生效

    PASS_WAR_AGE 7         #6

    UID_MIN   500

    UID_MAX 60000

    ENCRYPT_METHOD    SHA512

    添加用户默认值都靠上面两个文件

    passwd命令

    -S 查询用户密码状态 仅root可用

    -l 暂时锁定用户 仅root    shadow文件密码暗文前面加双!!

    -u 解锁用户  仅root

    –stdin 可通过管道符输出的数据作为用户的密码

    echo “123” | passwd –stdin lamp   一般用与shell编程

    whoami

    usermod  修改用户信息

    -u  修改uid

    -c 说明  有空格用双引号

    -G 加入附加组

    -L  锁定

    -U  解锁

    chage 修改用户密码状态

    -l 列出用户的详细密码状态

    -d 日期:修改密码最后一次更改日期(shadow 3字段)

    -m 天数: 两次密码修改间隔(4字段)

    -M 天数: 密码有效期(5字段)

    -W 天数: 密码过期前警告天数(6字段)

    -I 天数: 密码过期后宽限天数(7字段)

    -E 日期: 账号失效是加(8字段)

    chage -d 0 king  要求用户一登陆必须改密码 其他的基本都不用记  直接修改shadow文件更直观

    userdel命令  删除用户

    -r 同时删除家目录

    手工删除用户

    vi /etc/passwd

    vi /etc/shadow

    vi /etc/group

    vi /etc/gshadow

    rm -rf /var/spool/mail/lamp

    rm -rf /home/lamp

    id user1  查看用户信息

    su 切换用户

    – 选项表示同时切换环境变量   su root   和su – root    env命令可以查看环境变量

    -c 仅执行一次命令 不切换身份  su – root -c “useradd user3”

    groupadd 添加组

    -g GID  指定组id

    groupmod 修改组

    -g GID                    改组id

    -n 新组名               改组名

    groupdel 删除组

    如果组中有用户,组中有初始用户 不能删,如果是附加组 可以删除

    gpasswd 把用户添加组或者从组中移除

    -a  用户名

    -d 用户名

    7 权限管理

    ACL权限  解决身份不足问题  所有者所属组其他人  不够用

    查看分区ACL权限是否开启

    dumpe2fs -h /dev/sda1   默认支持acl   Default mount options:    user_xattr acl

    -h 仅显示超级块中信息,而不显示磁盘组的详细信息

    临时开启分区ACL权限

    mount -o remount,acl /    #重新挂载根分区,并挂载加入acl权限

    永久开启ACL

    vi /etc/fstab 文件  系统开机自动挂载   写错了的话 系统可能崩溃  一定小心

    defaults,acl    万一默认不支持 后面,acl   重启生效

    查看acl命令

    getfacl 文件名   不支持绝对路径 报错但是不影响

    设定acl权限

    setfacl命令

    -m  设定ACL

    -x   删除指定ACL

    -b 删除所有acl

    -d 设定默认acl

    -k 删除默认acl

    -R 递归设置acl

    chown root:tgroup /project

    chmod 770 /project

    setfacl -m u:st:rx /project   u表示用户 g表示组

    给用户st赋予r-x权限,u:用户名:权限

    setfacl -m g:group2:rx /project

    drwxr-xr-x+  2 root root      4096 Sep  6 11:41 king    多个+号表示有acl权限

    最大有效权限mask

    如果给用户赋予了acl权限,是需要和mask的权限相与才能得到真正权限

    不影响所有者的权限 但是影响acl和所属组的权限

    setfacl -m m:rx  文件名  设置mask

    setfacl -b 文件

    setfacl -x g:tgroup2 /project/

    递归acl权限  -R选项 注意只能放后面     老的文件都要递归设置下

    默认acl权限  如果给父目录设定了默认ACL权限,那么父目录中所有新建的子文件都会,只针对新文件  -R可以不取消

    setfactl -m d:u:用户名:权限 文件名

    文件特殊权限

    SetUID的功能:(危险)

    只有可以执行的二进制程序才可以设定SUID权限

    命令执行者要对该程序有x权限

    命令执行者在执行该程序时获得该程序文件的属主的身份(在执行程序的过程中灵魂附体为文件的属主)

    SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效

    passwd命令有SUID权限  在执行期间可暂时获得root身份得以改写shadow文件

    -rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd

    cat没有SUID权限,所以普通用户不能查看/etc/shadow文件内容

    设定方法 4代表SUID

    chmod 4755 文件

    chmod u+s 文件名

    用户必须对他有执行权限,否则显示大写S,表示报错

    危险的SUID权限,系统一些SUID权限的是迫不得已,轻易不能设置,并且定期巡检

    比如给vim加SUID权限,那么普通用户,红色表示危险,系统警告,然后vim普通用户也能改系统关键信息比如shadow文件等

    SGID也可以针对目录:(不那么危险)(用处不大)

    普通用户必须对此目录有rx权限,才能进入此目录

    普通用户在此目录中的有效组会变成此目录的属组

    若普通用户对目录有w权限时候,新建的文件的默认属组是这个目录的属组

    SGID针对文件:(危险)

    只有二进制可执行文件可以设置SGID

    命令执行者要有x权限

    命令执行时候组身份升级为该程序属组

    只在执行程序时候有效

    locate命令就是这样的 有SGID权限    临时提升为slocate用户组

    /var/lib/mlocate/mlocate.db数据库

    SGID  在所属组中有s权限   2代表

    chmod 2755 文件

    chmod g+s 文件名

    SBIT权限   黏着位权限  对root无效(不危险)

    只对目录有效

    普通母对该目录有wx权限,即普通用户可以在此目录拥有写入权限

    如果没有黏着位,因为木桶用户有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一旦赋予黏着位,除了root可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,不能删除其他用户建立的文件

    chmod 1755 目录

    chmod o+t 目录

    chmod 7755 文件  特殊权限位 7没有作用 根据需要赋予

    文件系统属性chattr权限:     对root也能限制

    chattr [-RVf] [-+=aAcCdDeijsStTu] [-v version] files…

    +-=权限

    i:针对文件,那么不允许对文件删除改名,也不能添加和修改数据 相当于锁起来了;针对目录,那么只能修改目录下文件的数据 单不允许建立和删除文件

    a:针对文件,那么只能在文件中增加数据,但是不能删除也不能修改数据;针对目录,那么只能在目录中建立和修改文件,不能删除文件

    lsattr命令: 文件系统属性查看 -a -d

    这也不能限制到root 只是防止误操作

    selinux可以限制root

    sudo权限   su指的是switch user,并不是super do

    root把本来只能超级用户执行的命令赋予普通用户执行

    sudo的对象是系统命令

    visudo   #实际修改的是/etc/sudoers文件

    root  ALL=(ALL)  ALL

    用户或者组(%组名)    被管理的主机=(可使用的身份)   命令 (绝对路径)

    man 5 sudoers

    8 文件系统管理

    分区和文件系统

    主分区:总共最多4个

    扩展分区:只能有1个,并且也算主分区的一种,主分区+扩展分区最多4个。但是扩展分区不能存储数据和格式化,必须再划分为逻辑分区才能使用

    逻辑分区:逻辑分区是在扩展分区中划分的,如果是IDE硬盘,linux最多支持59个逻辑分区,入股欧式scsi硬盘linux最多支持11个逻辑分区

    逻辑分区从sda5开始编号,就算主分区不足4个,sd表示sata硬盘,hd表示ide硬盘,也就是第一个逻辑分区一定是5

    文件系统:

    ext2:是ext文件系统升级版本,red hat linux 7.2版本以前系统默认都是ext2文件系统。1993年发布,最大支持16TB的分区和最大2TB的文件

    ext3:和ext2支持大小一样,区别是支持日志功能

    ext4(现在主流分区):centos6以后的主流分区,最大支持1EB和单个16TB文件,在性能、伸缩性、可靠性方便大量改进,ext4的变化是翻天覆地的,向下兼容ext3,无限数量子目录、extents连续数据块概念、多块分配、延迟分配、持久预分配、快速FSCK、日志校验、无日志模式、在线碎片整理、inode增强、默认启动barrier等

    常用命令:

    df 统计文件系统的占用情况

    -h 人性化显示

    du 统计目录大小

    du -sh /etc/

    -h

    -s 统计和

    df和du统计根分区不一样大小,df是从文件系统考虑,不仅考虑文件占用的空间,还要统计呗命令或程序占用的空间(最常见的就是文件已经删除但是程序并没有释放空间),定期重启还原系统状态

    df看到的剩余空间才是真正的空间

    du命令是面向文件的,只会计算文件或目录占用的空间

    fsck 文件系统修复命令

    -a 不用显示用户提示,自动修复文件系统

    -y 自动修复,和-a一致,不过有些系统只支持-y

    该命令不需要人工执行,系统启动的时候自动检测,知道就好

    dump2fs 显示磁盘状态命令,最主要是的看分区数据块大小和是否支持acl

    mount 挂载命令

    mount [-l] 查询系统中已经挂载的设备,-l会显示卷标名称   这些输出内容又叫超级块的内容

    mount -a 根据配置文件/etc/fstab的内容,自动挂载

    命令格式

    mount [-t 文件系统] [-L 卷标名] [-o 特殊选项] 设备文件名 挂载点

    fat32识别vfat  fat16 识别fat

    -t 文件系统:加入文件系统类型来指定挂载的类型,可以ext3,ext4,iso9660等文件系统

    -L 卷标名:挂载指定卷标的分区,而不是安装设备文件名挂载    没啥用处 起个别名的意思

    -o 特殊选项:可以指定挂载的额外选项

    atime/noatime  更新访问时间/不更新访问时间。访问分区文件时,是否更新文件的访问时间,默认更新

    async/sync      异步/同步,默认为异步

    auto/noauto    自动/手动,mount -a命令执行时,是否会自动安装/etc/fstab文件内容挂载,默认为自动

    defaults 定义默认值,相当于rw,suid,dev,exec,auto,nouser,async这7个选项

    exec/noexec 执行/不执行,设定是否允许在文件系统中执行可执行文件,默认exec允许   有时候程序不能运行不一定是权限的事情

    remount 重新挂载已挂载的文件系统,一般用户指定修改特殊权限     比较常用

    rw/ro 读写/只读,文件系统挂载时,是否具有读写权限,默认是rw

    suid/nosuid  具有/不具有SUID权限,设定文件系统是否具有SUID和SGID的权限,默认是具有

    user/nouser 允许/不允许普通用户挂载,设定文件系统是否允许普通用户挂载,默认不允许只有root可以

    usrquota  写入代表文件系统支持用户磁盘配额,默认不支持

    grpquota 写入代表文件系统支持组磁盘配额,默认不支持

    umount 设备文件名或者挂载点     –先卸载才能弹出光盘  真机器中不卸载     不能在光盘目录中卸载会报错正忙

    挂载u盘

    fdisk -l

    mount -t vfat /dev/sdb1 /mnt/usb

    linux默认不支持ntfs格式

    如何支持ntfs格式 :手工编译内核 将新的驱动加进来;下载ntfs-3g插件 http://www.tuxera.com/community/ntfs-3g-download

    手工分区fdisk

    fdisk /dev/sdb

    m 帮助

    n 新建

    l 显示

    d 删除

    w 保存

    partprobe命令重新读取分区表  有时候分区表正在被占用需要重启才能下一步,那就直接用这个命令   当做分区之后必定执行的命令

    +2G

    格式化分区

    mkfs -t ext4 /dev/sdb1

    然后创建挂载点挂载即可

    自动挂载

    /etc/fstab配置文件6个字段

    第一字段:分区设备文件名或者UUID(硬盘通用唯一识别码)  UUID防止分区改顺序 dumpe2fs -h /dev/sdb1能查到UUID

    第二字段:挂载点

    第三字段:分区类型

    第四字段:挂载参数,和mount的挂载权限一致

    第五字段:指定分区是否被dump备份,0代表不备份,1每天备份,2 不定期备份    lost+found是自动备份位置

    第六字段:指定分区是否被fsck检测,0代表不检测,其他数字代表检测的优先级,那么当然1的优先级比2高

    如果弄错,系统启动崩溃 所以不应该先重启 应该mount -a

    如果崩溃  恢复   启动时候输入root密码可以操作 不过根分区是只读的  remount下挂为读写 然后重新编辑这个文件修复错误

    mount -o remount,rw /

    分配swap分区

    free命令  查看内存与swap分区使用状况  -m 以兆显示  -h

    cached(缓存):是指把读取出来的数据保存在内存当中,当再次读取时,不用读取硬盘而直接从内存中读取,加速了数据的读取过程

    buffer(缓冲):是指在写入数据时,先把分散的写入操作保存到内存中,当达到一定程度再集中写入硬盘,减少磁盘碎片和硬盘的反复寻道,加速了数据的写入过程

    fdisk /dev/sdb   建立个逻辑分区  83标准分区  t来改变分区id 改为82 就是swap分区   partprobe

    格式化    mkswap /dev/sdb6

    swapon /dev/sdb6  加入swap

    swapoff /dev/sdb6  取消swap

    swap开机自动挂载  /etc/fstab  和普通一样 挂载点是swap

    9 SHELL 基础

    Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动挂起停止甚至编写一些程序。

    硬件–>内核–>Shell–>外层应用程序

    window图形交互界面也是shell

    Shell还是一个功能强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。

    分类:Bourne Shell(linux识别为sh),C Shell(主要用在BSD版)

    Shell的两种主要语法类型:Bourne和C  两个语法结构完全不同

    Bourne家族主要包括:sh(单用户模式用的是这个)、ksh、Bash(主流,和sh兼容)、psh、zsh

    C家族主要:csh、tcsh

    /etc/shells  可以查询到系统支持哪些shell

    Shell脚本的执行方式:

    echo输出命令   -e  支持反斜线控制的字符转换

    \  输出本身

    a 输出警告音

      退格键

    c  取消输出行末的换行符。和“-n”选项一致

    e ESCAPE键

    f 换页符

      换行符

    回车

    制表符  tab

    v 垂直制表符

    nnn 按照8进制ASCII码表输出字符。其中0为数字0零,nnn是三位八进制数

    xhh 按照16进制ASCII码表输出字符。其中hh是两位16进制数

    echo -e “e[1;31m abcd e[0m”

    e[1;开启颜色输出

    e[0m关闭颜色输出

    30m=黑色  31m=红色  32m=绿色 33m=黄色 34m=蓝色 35m=洋红 36m=青色 37m=白色

    第一个脚本

    vi hello.sh

    #!/bin/bash                                         这不是注释   不写不影响运行 单要求必须写

    #The first program

    #Author:king

    echo -e “hello world”

    sh hello.sh

    cat -A显示包括隐藏

    win和linux的回车符不一样

    dos2unix来转换文件

    bash基本功能

    历史命令和补全

    历史命令history -c 清空历史命令 -w 把缓存保存~/.bash_history  正常登陆退出才写入

    默认保存1000条 /etc/profile 可以更改

    上下箭头可以调用历史命令    !n可以可以重复第n条命令  !!重复执行上一条命令   !字符串 执行最后一条字符串开头的命令

    ctrl+r 可以反查历史命令

    命令 文件 目录  都可以tab补全  多个的话 tab两次列出可执行的

    命令别名和常用快捷键

    alias 别名=’原命令’

    命令执行顺序:

    1.绝对路径或者相对路径

    2.别名

    3.bash内部命令

    4 按照$PATH环境变量定义的目录查找顺序找到的第一个命令

    unalias 别名     删除别名

    永久别名生效.bashrc修改

    bash常用快捷键:

    ctrl+a  把光标移动到命令行开头。如果我们输入的命令过长

    ctrl+e  把光标移动到命令行结尾

    ctrl+c 强制终止当前命令

    ctrl+l 清屏 相当于clear

    ctrl+u 删除或者剪切光标之前的命令

    ctrl+k 删除或者剪切光标之后的内容

    ctrl+y 粘贴ctrl+u或者k的内容

    ctrl+r 在历史命令中搜索,命令反查

    ctrl+d 退出当前终端

    ctrl+z 暂停,并放入后台。这个快捷键牵扯工作管理的内容

    ctrl+s 暂停屏幕输出

    ctrl+q 恢复屏幕输出

    输入输出重定向:

    标准输入输出:

    设备  设备文件名 文件描述符 类型:

    键盘 /dev/stdin  0  标准输入

    显示器 /dev/sdtout 1 标准输出

    显示器 /dev/sdterr 2 标准错误输出

    输出重定向:

    标准输出重定向  命令>文件  命令>>文件           分别是覆盖和追加,把命令的输出输出到指定的文件或设备中

    标准错误输出重定向  错误命令 2>文件  错误命令 2>>文件

    正确输出和错误输出同时保存:

    命令>文件 2>&1

    命令>>文件 2>&1

    命令 &>文件

    命令 &>>文件    这四个命令都是把正确输出和错误输出放到同一个文件

    命令 >> 文件1 2>> 文件2   正确放1,错误放2

    ls &>/dev/null   不管正确错误 只管执行就好

    输入重定向:用的不多 一般只给源码包打补丁时候用

    wc [选项] [文件名]

    -c 统计字节数

    -w 统计单词数

    -l 统计行数

    命令<文件

    命令<<符号   。。。。 符号         常见的符号用EOF

    多命令顺序执行与管道符:

    命令1 ; 命令2        多个命令顺序执行,命令之间无任何逻辑联系

    命令1 && 命令2  当命令1执行正确,命令2才会执行,1执行错误 2不执行

    命令1 || 命令2       当命令1执行不正确,则命令2才会执行  命令1执行正确,2就不执行

    dd命令  磁盘对拷命令

    dd if=输入文件 of=输出文件 bs=字节数 count=个数

    选项:if=输入文件 制定源文件或源设备

    of=输出文件      指定目标文件或者目标设备

    bs=字节数      指定一次输入/输出多少字节,即把这些字节看做一个数据块

    count=个数  指定输入/输出多少个数据块

    例子:date;dd if=/dev/zero of=/root/testfile bs=1k count=100000;date  可以看命令执行多长时间

    ls && echo yes

    ./configure && make && make install

    命令 && echo yes || echo no

    管道符  |

    命令1 | 命令2

    命令1的正确输出作为命令2的操作对象

    ll -a /etc/ | more

    netstat -an |grep ESTABLISHED

    命令1必须执行正确否则命令2不执行

    grep -i 忽略大小写 -n输出行号 -v反向查找 –color=auto 搜索出的关键字用颜色显示

    通配符:

    ?  匹配一个任意字符

    *    匹配0个或任意多个任意字符,也就是可以匹配任何内容

    []   匹配中括号中任意一个字符。[abc] a或者b或者c

    [-]  匹配中括号中任意一个字符。-代表一个范围。[a-z]代表匹配任意一个小写字母

    [^] 逻辑非,表示匹配不是中括号内的一个字符。[^0-9]代表匹配一个不是数字的字符

    bash中其他特殊符号

    ” 单引号。在单引号中所有的特殊符号,如”$”、”"(反引号)都没有特殊符号

    "" 双引号。 在双引号中特殊符号都没有特殊含义,但是"$"、"“和””是例外,拥”调用变量的值”、”引用命令”和”转义符”的特殊含义

    反引号。反引号括起来的内容是系统命令,在bash中会先执行他。和$()作用一样,不过推荐使用$(),因为反引号很容易看错

    $() 和反引号一样,用来引用系统命令

    # 在shell脚本中 #开头的行代表注释

    $ 用户调用变量的值,如需要调用变量name的值,需要用$name的方式得到变量的值

    转义符,跟在后面的特殊符号将失去特殊含义,变为普通字符。如$将输出$符号,而不是当做变量引用

    bash变量:

    用户自定义变量、

    环境变量、

    位置参数变量(这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的)(其实是预定义变量的一种,因为较多单独分类)、

    预定义变量(是bash中已经定义好的变量,不能自定义,变量作用也是固定的)

    变量设置规则:

    变量名称可以由字母、数字、下划线但是不能是数字开头

    bash中变量的默认类型都是字符串型,如果要进行数值运算,则必指定变量类型为数值型

    变量用等号连接值,等号左右两侧不能有空格

    变量的值有空格,需要用单引号或者双引号包括

    在变量的值中,可以使用转义符

    如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含”$变量名”或用${变量名}包含

    可以把命令结果赋予变量,用反引号或$()

    环境变量名建议大写,便于区分

    本地变量  就是用户自定义变量

    变量定义 name=”king kong”

    变量叠加  aa=123 aa=”$aa”456 aa=${aa}789

    变量调用 echo $name

    变量查看set

    变量删除unset name

    环境变量 :系统环境变量、自由定义的环境变量

    用户自定义变量又称作本地变量,因为只在当前的shell中生效,而环境变量会在当前shell和这个shell的子shell中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有shell生效

    设置  export 变量名=变量值   #申明变量

    env     #查询环境变量

    unset 变量名  #删除变量

    命令pstree 确定进程树

    PATH   :分割的一个个路径,是用于系统查找命令的路径

    PATH变量叠加 PATH=”$PATH”:/root/sh

    PS1 (严格来说不是环境变量不能用env查看只能用set 他是系统预留专门用作定义系统环境的变量 对系统有特殊含义)

    定义系统提示符的变量

    d:显示日期,格式为“星期 月 日”

    h:显示简写主机名。如默认主机名“localhost”

    :显示24小时制时间,格式为“HH:MM:SS”

    T:显示12小时制时间,格式为“HH:MM:SS”

    A:显示24小时制时间,格式为“HH:MM”

    u:显示当前用户名

    w:显示当前所在目录的完整名称

    W:显示当前所在目录的最后一个目录

    #:执行的第几个命令

    $:提示符。如果是root用户为#普通用户$

    PS1='[u@ w]$’

    位置参数变量:

    $0 $1..0表示命令本身  1 2 表示1 2的参数,10以上用括号${10},用于从命令行传递参数到脚本中

    $* 代表命令行所有参数,吧所有的参数看做一个整体

    $@ 代表命令行所有参数,所有的参数区分对待

    $# 代表命令行中所有参数的个数

    $*和$@不是很常用 能看懂即可,可以在执行命令同时输入参数

    预定义变量:

    $?  上一次命令的结果的返回状态   0正确执行  非0表示不正确执行  具体是哪个数字由写命令的人决定

    $$  当前进程的进程号PID

    $!  后台运行的最后一个进程的进程号PID

    命令后跟&符号 放入后台执行  类似window最小化窗口

    接收键盘输入(较位置参数变量更常用):

    read [选项] [变量名]

    -p “提示信息”

    -t 秒数   等待时间

    -n 字符数    只接收指定的字符数,就会执行  (不加的话回车结束)

    -s: 隐藏输入的数据 适用于机密信息

    数值运算与运算符:

    declare -p aa 可以查看变量属性

    -:给变量设定类型属性

    +:取消变量的类型属性

    -i 将变量生命为整数型(integer)

    -x: 将变量生命为环境变量

    -p:显示变量的被声明类型

    数值运算

    方法1:定义变量类型declare -i cc=$aa+$bb

    方法2:expr或者let数值运算工具 dd=$(expr $aa + $bb)      +左右两侧空格不能省略

    方法3(推荐):$((运算式))或者$[运算式]

    运算符:

    优先级(数值越高优先级越高)  运算符   说明

    13       -,+  单目正,单目负

    12  !,~       逻辑非、按位取反或补码

    11  *,/,%   乘,除,取模

    10   +,-   加减

    9   <<,>>  按位左移,按位右移

    8  <=,>=,<,> 小于或等于、大于或等于、小于、大于

    7        ==,!=   等于,不等于

    6  &    按位与

    5  ^    按位异或

    4  |     按位或

    3     &&   逻辑与

    2        ||    逻辑或

    1     =,+=,-=,*=,/=,%=,&=,^=,|=,<<=,>>=  赋值、运算且赋值

    可以用小括号改变优先级

    变量测试与内容替换:

    image

    通过判断x得到y的情况

    变量测试是通过显示x的值,判断y的值;程序执行时用于判断,可以用 if 判断同样实现

    环境变量配置文件:

    source 配置文件

    . 配置文件

    强制让配置文件直接生效  避免重登陆过程    .就是source的缩写

    环境变量配置文件中主要是定义对系统的操作环境生效的系统默认环境变量,比如PATH,HISTSIZE,PS1,HOSTNAME等默认环境变量

    /etc/profile

    /etc/profile.d/*.sh

    ~/.bash_profile     –只对当前用户生效 隐藏文件

    ~/.bashrc

    /etc/bashrc

    image

    /etc/profile的作用:

    USER变量:

    LOGNAME变量:

    MAIL变量:

    PATH变量:

    HOSTNAME变量:

    HISTSIZE变量:

    umask:

    调用/etc/profile.d/*.sh文件

    其他配置文件和登陆信息:

    注销时生效的环境变量配置文件 ~/.bash_logout

    历史命令~/.bash_history  是重要的配错手段   给mysql设置密码是明文放在这儿不安全  需要清空  其他情况不推荐清空

    Shell登陆信息   不要写欢迎的,写警告信息比较好 法律问题

    本地终端欢迎信息:/etc/issue      反斜杠

    d 显示当前系统日期

    s 显示操作系统名称

    l 显示登陆的终端号,比较常用

    m  显示硬件体系结构,如i386,i686

    显示主机名

    o  显示域名

    显示内核版本

      显示当前系统时间

    u  显示当前登陆用户的序列号

    alt+f1 f6切换6个登陆终端

    远程终端欢迎信息:/etc/issue.net

    转义符在/etc/issue.net不能使用

    是否显示欢迎信息,由ssh的配置文件/etc/ssh/sshd_config决定,假如”Banner /etc/issue.net”行才能显示(记得重启ssh服务)

    登陆后欢迎信息:/etc/motd   是登陆后的    之前两个是登陆前的 不管远程还是本地都生效

    正则表达式:

    基础正则表达式:

    grep、awk、sed等命令可以支持正则表达式,正则是包含匹配,在文件中匹配符合条件的字符串

    通配符和正则在linux中有不小的区别 ,其他语言中大概是一致的, 通配符是完全匹配,ls、find、cp不认识正则,只识别shell自己的通配符

    正则和通配符有些符号通用但是含义完全不同

    元字符      作用

    *  前一个字符匹配0次或者任意多次

    .  匹配除了换行符外任意一个字符

    ^  匹配行首。例如^hello会匹配以hello开头的行

    $  匹配行尾

    []      和通配符一样,匹配中括号中指定的任意一个字符,只匹配一个字符。

    [^]    匹配除中括号的字符以外的任意字符。如[^0-9]匹配任意一位非数字字符

      转义符

    {n}  表示其前面的字符恰好出现n次。例如:[0-9]{4}匹配4位数字

    {n,} 表示其前面的字符出现不小于n次。例如:[0-9]{2,}表示两位及以上的数字

    {n,m} 表示其前面的字符至少出现n次,最多出现m次

    linux中() + ?是属于扩展正则表达式,用的不多

    字符截取命令:

    cut:提取列   字段提取命令  和grep结合使用  行列提取

    -f  列号       :      提取第几列

    -d 分隔符: 指定分隔符   (默认制表符  而不要用空格)

    cat /etc/passwd |grep /bin/bash|grep -v root|cut -d “:” -f 1

    命令局限 分隔符不定的时候不好使

    printf 格式化打印命令 常用在下面awk命令

    printf ‘输出类型输出格式’ 输出内容

    %ns:输出字符串,n是数字指代输出几个字符

    %ni:输出整数。n是数字指代输出几个数字

    %m.nf:输出浮点数。m n是数字,指代整数位和小数位

    输出格式:

    a   输出警告声音

       输出退格键

    f 清屏

     换行

     回车

     水平输出退格键,也就是tab键

    v   垂直输出退格键,也就是tab键

    printf  ‘%s’ $(cat student.txt)   #不调整输出格式

    printf ‘%s %s %s %s %s %s   ’ $(cat student.txt) #调整输出格式

    print命令会在每个输出后加换行符,linux默认没有这个命令

    printf是标准格式输出命令,并不会自动加入换行符,如果需要换行,需要手工加入换行符

    awk:提取列   都不叫命令了 awk编程  相对复杂太多

    awk ‘条件1{动作1}条件2{动作2}…’  文件名

    条件 (Pattern):

    一般使用关系表达式作为条件

    动作(Action):

    格式化输出

    流程控制语句

    awk ‘{printf  $2 “ ” $6 “ ”}’ student.txt

    df -h|awk ‘{print $1 “ ” $3}’

    print在awk内部默认是有的,在linux系统中默认没有

    awk默认是空格和制表符作为分隔符

    BEGIN命令   awk ‘BEGIN{printf “This is a test ”}{print $2} ‘ student.txt

    FS内置变量 指定分隔符  awk ‘BEGIN{FS=”:”}{print $1 “ ” $3}’ /etc/passwd

    END命令   所有数据读取完后执行END动作

    支持关系运算符

    cat student.txt | grep -v Name | awk ‘$6 >= 87 {printf $2 “ ”}’

    sed命令:是一种几乎在所有unix平台的轻量级流编辑器,主要是用来将数据进行选取替换删除新增的命令,可以用管道符接收数据

    和vi不同的是,vi只能修改文件

    选项:

    sed [选项] ‘[动作]’ 文件名

    -n 一般sed命令会把所有数据输出到屏幕,如果加入此选项,则只会把经过sed命令处理的行输出到屏幕

    -e  允许应用多条sed命令编辑 多个动作之间用;分割

    -i  同时更新源数据

    动作:

    不加行号表示整个文档

    a : 追加,在当前行后添加一行或多行。添加多行时,除最后一行外,每行行尾需要用””代表数据未完结。

    c : 行替换,用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行行尾需要用””代表数据未完结。

    i : 插入,在当期行前插入一行或者多行。插入多行时,除最后一行外,每行行尾需要用””代表数据未完结。

    d: 删除,删除指定行

    p: 打印,输出指定的行

    s: 字符替换,格式为”行范围s/旧字串/新字串/g” 类似vi中的替换

    sed ‘2p’ student.txt

    sed -n ‘2p’ student.txt

    df -h|sed -n ‘2p’

    sed ‘2,4d’ student.txt

    sed ‘2a hello’ student.txt

    sed ‘2i hello

    word’ student.txt

    sed ‘2c no such person’ student.txt

    字符处理命令:

    排序命令sort  可从管道符接收

    sort [选项] 文件名

    -f 忽略大小写

    -n   以数值型排序,默认使用字符串型排序

    -r    反序

    -t 指定分隔符,默认是制表符

    -k n,[m]   按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)

    sort /etc/passwd

    sort -r /etc/passwd

    sort -t “:” -k 3,3 /etc/passwd

    sort -n -t “:” -k 3,3 /etc/passwd

    统计命令wc   可从管道符接收

    -l:只统计行数

    -w:只统计单词数

    -m:只统计字符数

    条件判断:

    按照文件类型进行判断:

    LINUX中的七种文件类型

    d 目录文件。

    l 符号链接(指向另一个文件,类似于瘟下的快捷方式)。

    s 套接字文件。

    b 块设备文件,二进制文件。

    c 字符设备文件。

    p 命名管道文件。

    – 普通文件,或更准确地说,不属于以上几种类型的文件

    image

    -d -e -f 这三个最常用

    两种判断格式

    test -e /root/install.log

    [ -e /root/install.log ] 前后有空格

    echo $?判断命令执行状态  或者  [ -d /root ] && echo “yes” || echo “no”

    按照文件权限进行判断:

    image

    不会分那么细  只有所有者所属组其他人有一个人有写权限  就认为真

    两个文件之间进行比较:

    测试选项  作用

    文件1 -nt 文件2   判断文件1的修改时间是否比文件2的新,如果新则真

    文件1 -ot 文件2  判断文件1的修改时间是否比文件2的旧,如果旧则true

    文件1 -ef 文件2  判断文件1是否和文件2的inode号一致,可以判断是否为同一文件,判断硬链接是很好的办法

    两个整数之间比较

    测试选项     作用

    整数1 -eq  整数2     相等则true

    整数1 -ne  整数2 不相等则true

    整数1 -gt  整数2     大于则true

    整数1 -lt  整数2  小于则true

    整数1 -ge  整数2      大于等于

    整数1 -le  整数2  小于等于

    字符串比较:

    -z 字符串     空则true

    -n 字符串  非空则true

    字串1 == 字串2   等等则true

    字串1 != 字串2 不等则true

    多重判断:

    判断1 -a 判断2   逻辑与

    判断1 -o 判断2   逻辑或

    ! 判断                         逻辑非    注意有空格

    流程控制if语句:

    1、单分支if条件语句

    if [ 条件判断 ]; then

    程序

    fi

    或者

    if [ 条件判断 ]

    then

    程序

    fi

    注意点:if语句使用fi结尾,和一般语言使用大括号结尾不同

    [ 条件判断 ] 空格不能省略

    then后面跟符合条件之后执行的程序,可以放在[]之后要用;分割,也可以换行写入就不需要;了

    例子:判断分区使用率

    #!/bin/bash

    #统计根分区使用率

    #Author:king

    rate=$(df -h | grep “/dev/mapper/centos-root” | awk ‘{print $5}’ | cut -d “%” -f1)

    #把根分区使用率作为变量赋值给变量rate

    if [ $rate -ge 80 ]

      then

        echo “warning! root si full”

    fi

    10 服务管理


    image


    启动与自启动

    查询已安装的服务

    rpm包安装的服务

    chkconfig –list  #查看服务自启动状态可以看到所有rpm包安装的服务

    ps aux    查看进程

    netstat -tlun  查看端口

    源码包安装的服务 查看服务安装位置 一般是/usr/local/下

    rmp包安装在默认位置/etc    /etc/rc.d/init.d/

    rpm 独立服务的管理:

    /etc/init.d/     独立服务的启动脚本     /etc/rc.d/init.d/是一个 链接

    /etc/sysconfig/ 初始化环境配置文件位置

    /etc/ 配置文件位置

    /etc/xinetd.d/ 基于xinetd服务的启动脚本

    /var/lib/ 服务产生的数据放在这里

    /var/log 日志

    独立服务的启动 /etc/init.d/独立服务名 start|stop|status|restart

    service 独立服务名 start|stop|status|restart      #红帽专有命令

    独立服务自启动3中方法:

    1:chkconfig –list

    chkconfig –level 2345 httpd on                       #off

    chkconfig httpd off #默认就是2345 可以省略

    2:  vi /etc/rc.d/rc.local                     #系统启动输入账户密码之前 所有程序启动完之后  就执行这个文件 环境变量是在输入密码之后,所以这个文件中没有环境变量,只能输入绝对路径, 把启动标准命令放入  即可自启动,推荐该方法

    3:使用ntsysv命令管理自启动     不仅可以管理独立服务 也可以管理基于xinetd的服务,但是同样不能管理源码包的服务(不推荐,是红毛专有命令)

    基于xinetd服务的管理:了解下 基本不常用

    xinetd 超级守护进程  这个服务本身需要安装   随着linux版本,现在基于xinetd的服务越来越少,现在只有不太安全的telnet和少数其他的使用

    yum -y install xinetd

    yum -y install telnet-server

    xinetd本身是常驻内存的服务

    xinetd服务的启动

    vi /etc/xinetd.d/telnet

    image

    xinetd服务的自启动

    chkconfig telnet on

    ntsysv

    xinetd服务的启动和自启动是通用的 和独立服务不一样 ,这很反人类

    源码包服务的管理:

    启动:使用绝对路径启动 不同服务的启动脚本不同  查看安装说明得知

    自启动:vi /etc/rc.d/rc.local

    让service命令能识别源码包服务

    在/etc/init.d/中加入软连接即可

    让源码包的服务能被chkconfig与ntsysv命令管理

    image

    chkconfig –add apache

    虽然可以,但是不推荐这么干

    image

    11 系统管理

    进程管理:

    监控服务器  当服务器数量比较多的时候用

    ps aux #查看系统中所有进程  使用BSD操作系统格式   a前台进程 x后台进程 u显示命令是谁执行

    ps -le #使用Linux标准命令格式

    USER 用户

    PID  进程id

    %CPU  占用cpu

    %MEM  占用内存

    VSZ  占用虚拟内存大小 kb

    RSS 占用实际物理内存大小kb

    TTY 终端,tty1-tty7本地终端 tty1-tty6是本地的字符界面终端,tty7是图形终端 pts/0-255代表虚拟终端   ?表示内核直接产生的

    STAT:进程状态。常见状态:R运行S睡眠T停止s包含子进程+位于后台

    START:进程启动时间

    TIME:该进程占用cpu的运算时间,注意不是系统时间

    COMMAND 命令名

    查看系统健康状态 TOP

    -d 秒数 指定更新秒数 默认3秒

    在top命令的交互模式中可执行的命令:

    ?或h  显示帮助

    P 以cpu使用率排序,默认就是

    M 以内存使用率排序

    N 以PID排序

    q 退出top

    第一行信息为任务队列信息

    image

    第二行为进程信息

    image

    第三行为cpu信息

    image

    第四行为物理内存

    image

    第五行是交换分区

    image

    内存空闲率 cpu负载和系统压力这三个是重要指标

    查看进程树

    pstree

    -p 显示进程pid

    -u 显示进程所属用户

    进程终止:

    kill -l  #查看可用的进程信号

    常用的 1 9 15

    image

    kill pid  默认是15

    kill -1 2332 #重启进程

    kill -9  2332  #强制终止

    killall [选项][信号] 进程名

    #按照名称杀死进程

    -i  交互式

    -I 忽略大小写

    pkill  [选项][信号] 进程名               不是标准终止命令

    #按照进程名终止进程  和killall一样

    -t 终端号:按照终端号提出用户

    pkill -9 -t tty1

    工作管理:

    把程序放入后台    win中最小化就是放入后台

    tar -zcf etc.tar.gz /etc  &     #命令后加&放入后台

    ctrl+z放入后台暂停

    查看后台工作

    jobs [-l]

    -l 显示job的pid

    +表示最近一个放入后台的工作,也是工作恢复时,默认恢复的工作。-表示倒数第二个放入后台的job

    将后台暂停的工作恢复到前台执行

    fg %工作号

    %工作号:%可以省略但是注意工作号和pid区别

    将后台暂停的工作恢复到后台执行

    bg %工作号

    top恢复到后台还是stop状态  因为这个命令必须和前台交互

    后台恢复执行的命令,是不能和前台有交互的,否则不能恢复到后天执行

    系统资源查看:

    vmstat命令监控系统资源

    vmstat [刷新延时 刷新次数]

    如:vmstat 1 3

    dmesg开机时内核检测信息

    dmesg | grep CPU

    free 查看内存使用状态

    -b -k -m -g

    cache加速读取  缓存

    buffer加速吸入 缓冲

    查看cpu信息

    cat /proc/cpuinfo

    uptime

    实际是top w命令的第一行

    查看系统与内核相关信息:

    uname [选项]

    -a 查看系统所有相关信息

    -r 查看内核版本

    -s 查看内核名称

    file /bin/ls    #判断当前系统位数    linux没有直接命令查看位数命令   随便file一个外部命令即可

    查看当前系统发行版

    lsb_release -a

    列出进程打开或者使用的文件信息

    lsof [选项]

    -c 字符串:只列出以字符串开头的进程打开的文件

    -u 用户名

    -p pid

    系统定时任务:

    crond服务管理与访问控制:service crond restart

    chkconfig crond on

    服务后面的d代表守护进程

    crontab -e #进入crontab编辑界面。会打开vim编辑你的job

    crontab -l

    crontab -r

    * * * * * command      #前面5个*代表日期

    image

    image

    image


    12 日志管理


    centos6.x中日志服务已经由rsyslogd取代了原先的syslogd服务

    rsyslogd的新特点:

    基于TCP网络协议传输日志信息;

    更安全的网络传输方式;

    有日志消息的及时分析框架;

    后台数据库;

    配置文件中可以写简单的判断逻辑

    与syslog配置文件相兼容

    确定服务启动

    ps aux|grep rsyslogd

    chkconfig –list|grep rsyslog

    image

    image

    除了系统默认日志,rpm安装的系统服务也会默认把日志记录在/var/log目录(源码安装的服务日志是在源码包指定的目录中)。不过这些日志不是由rsyslogd服务来记录和管理,而是各个服务使用自己的日志管理文档来记录自身日志

    常见的

    image

    rsyslogd日志服务:

    基本日志格式包含四列:

    时间产生的时间

    主机名

    服务名或程序名

    时间的具体信息

    配置文件 /etc/rsyslog.conf

    image

    image

    image

    image

    image

    image

    日志轮替:旧日志被新日志替换

    日志文件的命名规则:如果配置文件中拥有dateext参数,那么日志会用日期来作为日志文件的后缀,例如 secure-20130605,这样的话日志文件名不会重叠,所以也就不需要日志文件名的改名,只需要保存指定的日志个数,删除多余的日志文件即可。

    如果没有dateext参数,那么日志文件就需要改名了。当第一次进行日志轮替时,当前的secure日志会自动改名为secure.1等,以此类推。

    大多数以第一种方法

    logrotate   /etc/logrotate.conf

    image

    image

    image

    所有rpm包安装的都会自动轮替,源码包安装的要按照上面的方法加入轮替,实际上是变成了系统定时任务

    logrotate命令

    logrotate [选项] 配置文件名

    如果此命令没有选项,则会按照配置文件中的条件进行日志轮替

    -v 显示日志轮替过程

    -f 强制进行日志轮替。不管轮替条件是否符合,强制配置文件中所有的日志进行轮替

    13 启动管理


    系统运行级别:

    image

    runlevel 查看当前运行级别

    init 运行级别     #改变运行级别  如果切换错误  运行级别也会改变 可以欺骗系统

    系统默认运行级别  vim /etc/inittab            这个文件在centos7中已经淘汰

    id:3:initdefault:

    系统启动过程:

    image

    image

    image

    image

    image

    image

    启动引导程序Grub配置文件

    image

    vi /boot/grub/grub.conf 或者etc下目录的软连接

    image

    image

    grub加密:

    grub-md5-crypt  #生成加密密码串   还是md5   用户密码是sha512

    image

    纯字符界面分辨率调整:

    grep “CONFIG_FRAMEBUFFER_CONSOLE” /boot/config-2.6.32-279.el6.i686   #查询内核是否支持修改分辨率

    image

    image

    image

    有些不支持10进制 要改为16进制  redhat系列是支持10进制的

    系统修复模式:

    grub界面按b键进入单用户模式:修复

    遗忘root密码

    修改系统默认运行级别

    光盘修复模式:理论可以修复一切问题

    可以修复grub密码

    image

    image

    image

    服务器安全指的是网络安全,如果你拿到了真实机器,那么就认为你有它所有权

    14 备份与恢复


    image

    鸡蛋不要放在同一个篮子

    企业数据要异地备份

    image

    备份策略:

    完全备份

    增量备份

    差异备份

    image

    image

    image

    目录不支持增量备份

    image

    image

    image

  • 相关阅读:
    LeetCode 123. Best Time to Buy and Sell Stock III (stock problem)
    精帖转载(关于stock problem)
    LeetCode 122. Best Time to Buy and Sell Stock II (stock problem)
    LeetCode 121. Best Time to Buy and Sell Stock (stock problem)
    LeetCode 120. Triangle
    基于docker 搭建Elasticsearch5.6.4 分布式集群
    从零开始构建一个centos+jdk7+tomcat7的docker镜像文件
    Harbor实现容器镜像仓库的管理和运维
    docker中制作自己的JDK+tomcat镜像
    docker镜像制作---jdk7+tomcat7基础镜像
  • 原文地址:https://www.cnblogs.com/yongestcat/p/11736732.html
Copyright © 2011-2022 走看看