Linux基础篇

Linux基础篇

说明:本文章内容是笔记性的

安装Linux

CentOS 映像文件下载地址

软件安装、原始码

  • file /bin/bash:看看是否是二进制文件
Tarball源码安装
  • 安装gcc
  • 编写hello.c
  • 执行gcc hello.c
  • ll hello.c a.out
  • 执行gcc -c hello.c
  • ll hello.c hello.o
  • 执行gcc -o hello hello.c
  • ll hello*
gcc简易用法
  • gcc -c hello.c:会自动产生hello.o这个目标文件,但是不会产生二进制执行档
  • gcc -O hello.c -c:产生hello.o这个文件,并且进行优化
  • gcc hello.c -lm(指libm.so或者libm.a) -L/lib(函式库文件) -I/usr/include(原始码内的include文件)
  • gcc -o hello hello.c:-o后面接的是要输出的二进制档名
  • gcc -o hello hello.c -Wall:编译会变得较为严谨一点
make

- vi makefile:制作出执行档

    main:main.o haha.o sin.o cos.o
    [tab]    gcc -o main main.o haha.o sin.o cos.o -lm

- make
- ###### makefile
- 目标1:目标文件1 目标文件2
- [tab]指令如:echo “hello”
- 目标2:目标文件1 目标文件2
- [tab]指令如: echo “work”
- make 目标1 或者 make 目标2

Tarball
  • 将下载的tarball在/usr/local/src目录下解压缩
    -./configure:建立Makefile文件,执行前需要查看README或者INSTALL
  • make clean:去除目标文件*.o
  • make:将原始码编译成可执行的二进制文件
  • make install:安装
  • ###### 安装需注意
  • 最好将每个软件安装在/usr/local/底下
  • 如:/usr/local/tomcat

- 加入man path:

    MANPATH_MAP/usr/local/tomcat/bin/usr/local/tomcat/man
paatch编译修改过的内容
  • 下载xxx.patch文件
  • 执行patch -p1 < ../xxxx.patch:-p[number]表示拿掉几个/
  • patch -R < ../xxx.patch:还原
  • 编译
  • 安装
  • 注意:2.4不能更新2.5,只能更新2.4.x,而却要按顺序
函式库
静态
  • 扩展名:.a
  • 编译行为:直接整合到可执行文件
  • 执行状态:可独立
  • 升级:整个执行档必须重新编译
动态
  • 扩展名:.so
  • 编译行为:可执行文件并没有函式库内容,只有指向动态函式库所在的指标而已
  • 独立执行状态:不能独立执行
  • 升级:不需要重新编译
放置目录
  • /lib /lib64
加快读取动态函式库
  • 在/etc/ld.so.conf.d/目录下新建xxx.conf
  • 将动态函式库所在目录名称写入
  • 最后执行ldconfig
查看程序的函式库
  • ldd 程序路径如:/usr/bin/passwd
  • ldd -v /usr/bin/passwd
指纹校验
  • 下载某文件的md5/shal
  • 解压得到指纹码
  • md5sum/shalsum/sha256sum [-bct] filename
  • md5sum xxxx.tar.gz:看看编码是否与下载的md5相同

软件安装和升级

RPM
  • 格式xxxx.rpm
  • rp-ppppoe-3.1.1-5.el7.x86_64.rpm意义为:
  • rp-ppppoe:软件名称
  • 1.1:版本信息
  • 5:
  • .el7.x86_64:适合的硬件平台
  • .rpm:扩展名
  • 数据库目录:/var/lib/rpm
  • 安装命令

    rpm -ivh xxx.rpm
    i:install
    v:显示安装信息
    h:显示安装进度
    rpm -ivh x.rpm xx.rpm xxx.rpm
    rpm -ivh http://www.xxx.xxx/xx.rpm
    可选:
    --nodeps:忽略软件相关性,强制安装
    范例:rpm -ivh xxx.rpm --nodeps
    --replacefiles:覆盖系统相同的安装过的软件
    --replacepkgs:重复安装已经安装过的某个软件
    --force:等同--replacefiles和--replacefiles
    --test:测试该软件是否可以被安装到使用者的环境当中
    --justdb:更新软件在数据库内的相关信息
    --nosignature:略过数字签名的检查
    --prefix 新路径:
    范例:rpm -ivh xx.rpm --prefix /usr/tomcat
    --noscripts:不想让软件安装过程中自行执行某些系统指令
    
RPM软件升级更新
    rpm -Uvh xxx.rpm:不存在会下载
    rpm -Fvh xxx.rpm:不存在不会下载
RPM查询
    rpm 
    -q:仅查询后面的软件名称是否有安装
    -qa:列出所有的,已经安装的
    -qi:列出该软件的详细信息
    -ql:列出该软件的所有文件与目录所在的完整文件名
    -qc:列出该软件所有的配置文件
    -qd:列出该软件所有说明文件man
    -qR:列出与该软件有关的相依软件所含的文件
    -qf:找出该软件属于哪一个已安装的软件
    -q --scripts
    -qp[icdlR]
RPM验证与数字签名
    rpm -V 软件名称
    rpm -Va:列出系统上面所有可能被更动过的文件
    rpm -Vp filename
    rpm -Vf 
数字签名
  • /etc/pki/rpm-gpg/RPM-GRG-KEY-CentOS-7
  • find /etc -name ‘*GPG-KEY*’
  • rpm –import/etc/pki/rpm-gpg/RPM-GRG-KEY-CentOS-7:安装
  • rpm -qa | grep pubkey:查找安装的所有密钥软件

- rpm -qi gpg-pubkey-xxxxxxx:查看密钥软件详细信息

反安装与重建数据库
    rpm -e xxx
重建rpm数据库
    rpm --rebuilddb
yum查询
    yum
    -y:(当yum要等待用户输入时,这个选项可以自动提供yes的响应)
    --installroot=/some/path:将软件安装在/some/path中,而不是默认的路径
    search:搜寻某个软件名称或者是描述的重要关键字
    yum search raid
    list:列出目前yu所管理的所有的软件名称与版本;类似rpm -qa
    yum list
    info:同上
    yum info mdadm
    provides:从文件去搜寻软件。类似-qf的功能
    yum provides passwd:列出提供passwd这个文件的软件有哪些

    yum list updates:列出目前服务器上可供本机进行升级的软件有哪些
yum安装
    yum install 要安装的软件
    yum update 要升级的软件,如果不接任何软件,则整个系统升级
yum升级
    yum list updates:列出目前服务器上可供本机进行升级的软件有哪些
yum移除
    yum remove 软件名称
修改yum配置文件
    vi /etc/yum.repos.d/CentOS-Base.repo
    [base][updates]之类的代表软件库的名称,不能有两个相同的软件库名称
    name:说明这个软件库的意义
    mirrorlist:列出这个软件库可以使用的映射站台
    baseurl:软件库的实际网址
    enable:让这个软件库被启动
    gpgcheck:RPM数字签名,这里指代是否需要查阅RPM文件内的数字签名
    gpgkey:数字签名的公钥文件

    yum repolist all:列出目前yum server 所用的软件库有哪些
    yum clean all:将所有的软件库都删除
yum软件群组功能
    yum grouplist:列出所有可使用的软件群组
    yum groupinfo groupname:了解某个组内包含的所有的软件名
    yum groupinstall:可以安装一整组的软件群组
    yum groupremove groupname:移除某个软群组
修改配置文件让groupinstall预设安装所有的optional软件
    vi /etc/yum.conf
    找到:distroverpkg=centos-release
    底下新增一行:
    group_package_types=default, mandatory, optional
EPEL/ELRepo
    vi /etc/yum.repos.d/epel.repo
    [epel]
    name=epel packages
    baseurl=https:/dl.fedoraproject.org/pub/epel/7/x86_64
    gpgcheck=0
    enabled=0
    yum --enablerepo=epel install netcdf R
定时全系统自动升级
    echo '10 1 * * * root /usr/bin/yum -y --enablerepo=epel update' > /etc/cron.d/yumupdate
实战安装httpd php mysql
rpm -q httpd php mariadb-server php-mysql
yum install httpd php mariadb-server php-mysql
systemctl daemon-reload
systemctl start httpd
systemctl enable httpd
systemctl status 
firewall-cmd --add-service="http"
firewall-cmd --permanent --add-service="http"
firewall-cmd --list-all
SRPM
与RPM不同的是SRPM包含原始码,文件以xxxx.src.rpm格式
也就是说SRPM文件是需要编译的
假设我目前下载了aaa.src.rpm

打包编译:
rpmbuild --rebuild aaa.src.rpm
打包编译安装:
rpmbuild --recompile aaa.src.rpm
实战SRPM
    下载SRPM文件:
    wget http://vault.centos.org/7.3.1611/updates/Source/SPackages/ntp-4.2.6p5-25.el7.centos.1.src.rpm
    编译:
    rpmbuild --rebuild ntp-4.2.6p5-25.el7.centos.1.src.rpm
    编译失败提示需要安装相依软件
    yum install xxx xxx xxx xxx xx
    rpmbuild --rebuild ntp-4.2.6p5-25.el7.centos.1.src.rpm
    编译如果成功,最终的软件就会被放置到:
    家目录/rpmbuild/RPMS/x86_64/ntp-4.2.6p5-25.el7.centos.1.rpm
修改SRPM配置
    家目录/rpmbuild/SPECS:放置该软件的配置文件
    SOURCES:放置的是该软件的原始文件*.tar.gz以及config
    BUILD:编译过程的暂存数据
    RPMS:打包好的文件放置处
    编译完成后,除了RPMS目录外其他目录将会全部被移除

    家目录/rpmbuild/SPESC*.spec:编译步骤配置文件

    rpmbuild -ba xxx.spec:编译并同时产生RPM与SRPM
    rpmbuild -bb xxx.spec:仅编译成RPM文件

登录档

  • /var/log目录为登录档记录地
  • 登录档由rsyslog这支服务在负责
  • ps aux | grep rsyslog:查看该服务是否启动
  • systemctl status rsyslogd.service:查看该服务的状态
  • rsyslogd.service这支服务的配置文件是:/etc/rsyslog.conf,这个文件记载了什么服务的什么等级需要被记录在哪里
  • syslog:核心所提供的登录档设计指引,所有的要求大概写入到syslog.h的头文件案中
  • rsyslogd:为了要达成实际上进行讯息的分类所开发的一套软件
  • rsyslog.service:为了加入systemd的控制,因此rsyslogd的开发者设计的启动脚本设定
  • man 3 syslog:可查询服务类型
  • 讯息等级:
  • .:代表比后面还要严重的等级都被记录下来
  • .=:代表所需要的等级就是后面的等级,其它不要
  • .!:代表不等于
  • ###### rsyslogd语法实战
  • 将mail相关的数据写入/var/log/maillog
  • 在/etc/rsyslog.conf的语法为:
  • mail.info /var/log/maillog
  • 语法例子:
  • news.*; cron.* /var/log/newscron
  • .;news,cron,mail.none /var/log/message:记录所有但是不记录cron、news、mail、
  • ###### 实战自行增加登录文件
  • 将所有的信息额外写入到/var/log/admin.log
  • vi /etc/rsyslog.conf
  • *.info /var/log/admin.log
  • systemctl restart rsyslog.service
  • ll /var/log/admin.log
  • ####### 注意:
  • systemd只要被编辑过就无法再记录
  • 使日志文件只能添加不能删除:
  • chattr +a /var/log/admin.log
  • lsattr /var/log/admin.log
  • chattr -a /var/log/admin.log
  • ###### 登录档服务器
  • 1、Server端:修改/etc/rsyslog.conf
  • vim /etc/rsyslog.conf
  • 取消注释:$ModLoad imtcp
  • $InputTCPServerRun 514
  • 2、重新启动与观察rsyslog喔
  • systemctl restart rsyslog.service
  • netstat -ltnp | grep syslog
  • 至此,服务设置妥当
  • Client设定:
  • vim /etc/rsyslog.conf
  • . @@服务器ip :这是tcp的设置
  • . @服务器ip :这是UDP设定
  • Client设定完毕
  • ###### 登录档的轮替logrotate
  • 主要的配置文件,记载多久什么状态下才将登录档进行轮替等等
  • /etc/logrotate.conf
  • /etc/logrotate.d/
  • 对于设定chattr +a filename的日志文件可以修改某个服务的配置文件的prerotate、postrotate。
实战自定义登录档轮询
  • 设定好服务的日志文件后将设定日志轮询
  • 如/var/log/cron.log{
    具体设定届时可百度
    }
systemd-journald.service登录档信息
  • 说明:作用是记录启动服务于服务若启动失败的情况
  • 记录在内存(/run/log),不会保存到下一次开机
  • 配置文件:/etc/systemd/journald.conf
  • 详细man 5 journald.conf
  • journalctl:观察登录信息
  • journalctl -n 2:只观察几行
  • journalctl -r 2:反向输出
  • journalctl -p:排序
  • journalctl -f :持续输出
  • journalctl –since –until:设定开始于结束时间_PID=pid:只输出pid号码的信息
  • SYSLOG_FACILITY=[0-23]:使用syslog.h规范的服务相对序号呼出正确的数据
  • 命令例子:
  • journalctl –since “2015-08-15 00:00:00” –until “2015-08-16 00:00:00”
  • journalctl –since today
  • journalctl –since yesterday –until today
  • 只找出crond.service最新的10行数据
  • journalctl _SYSTEMD_UNIT=crond.service -n 10
  • journalctl -p err:按error错误的讯息
  • //找出跟登录服务有关的文件讯息
  • journalctl SYSLOG_FACILITY=4 SYSLOG_FACILITY=10
  • ###### logger命令(将信息传送到登录档)
  • logger -p 服务名称.等级 “讯息”
  • logger -p syslog.info “test logger command”
  • ###### 保存登录信息到磁盘

- mkdir /var/log/journal

开机流程、模块管理、Loader

开机流程:
  • 按下电源开关后,会读取BIOD或UEFI BIOS来加载硬件信息及进行硬件系统的自我测试,之后系统会读取第一个可开机的装置(由BIOS设定的,通常是系统第一个开机装置的MBR[master boot record:主要启动记录区])。该记录区提供选单功能,可以选择不同的(每个文件系统或分区都会保留一块启动扇区提供操作系统安装boot loader)开机项目(多重引导功能).此时就可以读入开机管理程序。关于boot loader说明:由于每个操作系统的文件系统格式不一致,所以安装每个操作系统都会同时提供自己boot loader加载系统内核。加载完成后系统内核会接管BIOS的侦测硬件及尝试以只读的方式挂载根目录来取得额外的驱动程序(在根目录/lib/modules内)。通常系统的文件系统与磁盘的格式不一致SATA,需要通过解压缩虚拟文件系统到内存,将系统内核暂时挂载到虚拟文件系统上,进行获取(SATA)驱动程序,加载SATA驱动程序后将核心重新挂载到磁盘根目录,卸载虚拟目录。在核心完整的加载后,接下来,开始执行系统的第一支程序:systemd
  • systemd是透过/etc/systemd/system/default.targer来获得预设的操作界面。根据获得的预设操作界面接下来就会去找两个地方的设定:
    /etc/systemd/system/[multi-user].targer.wants:使用者设定加载的unit
    /usr/lib/systemd/system/[graphical].target.wants:系统默认加载的unit
  • 可以查看 /usr/lib/systemd/system/[graphical/multi-user].target文件,了解加载前后的服务也可以使用命令:
    systemctl list-dependencies graphical.targer列出所有服务相关性
  • 可以看出开机流程大约是这样:
  • local-fd.target + swap.target:/etc/fstal里面所规范的文件系统与相关的内存置换空降
  • sysinit.target:这个target主要在侦测硬件
  • basic.target:加载主要的外围硬件驱动程序与防火墙相关任务
  • multi-user.target:一般系统或网络服务的加载,可以到/etc/systemd/system/multi-user.target.wants/里头看看预设要被启动的服务

  • ls –format=single-column -F /boot:查看核心文件

  • lsinitrd /boot/initramfs-3.10.0-229.el7.x86_64.img:查看虚拟文件系统的内容
  • ll /etc/rc.d/rc.local:开机启动完成时额外执行的程序
  • systemctl status rc-loval.service:查看这个服务的状态
  • systemctl list-dependencies multi-user.target | grep rc-local:查看该服务是否启动
  • chmod a+x /etc/rc.d/rc.local; ll /etc/rc.d/rc.local:修改权限
  • systemctl daemon-reload:重新加载配置文件
  • systemctl list-dependencies multi-user.target | grep rc-local:查看该服务是否启动
  • 启动后可以将需要开机后执行的脚本放在该文件内
  • 开机加载用户自定义模块:
  • /etc/modules-load.d/*.conf:需要核心加载模块的位置
  • /etc/modprobe.d/*.conf:可以加上参数的位置
  • 例子:
  • vi /etc/modules-load.d/test.conf
  • 输入:
  • 模块名称,一个模块一行
  • depmod:记录核心支持的模块的各项相依性到/lib/modules/$(uname -r)/modules.dep
  • 新增模块a.ko
  • cp a.ko /lib/modiles/$(uname -r)/kernel/drivers/net
  • depmod
  • ###### 核心模块的观察
  • lsmod:秀出目前核心加载的模块,还可以看出模块依赖性
  • modinfo -[a/n/l/d] modulename|filename
核心模块的加载和移除
  • insmod midulename:自行手动加载模块,如果加载的模块有相依性,则加载失败
  • rmmod fat:移除模块
  • modprobe modulename:加载模块
  • modprobe -r modulename:移除模块
  • modprobe -c :列出所有的模块
  • modprobe -f modules:强制加载
  • /etc/modprobe.d/*.conf:给模块加上某些参数
Boot Loader:Grub2
  • 由于boot sector或者MBR只有446bytes,只安装boot loader的最小主程序。其它相关配置放置在/boot/grub2/下面
  • ls -l /boot/grub2
  • /boot/grub2/grub.cfg:grub2的配置文件
  • 介绍磁盘代号:
  • 第一颗(MBR)hd0:指代磁盘,xxx1:指代分区:(hd0)(hd0,msdos1)(hd0,msdos2)(hd0,msdos3)
  • 第二颗(GPT):(hd1,gpt1)(hd2,gpt2)
  • 第三颗2:(hd2)(hd2,1)(hd2,2)
  • 官方建议不要直接修改/boot/grub2/grub.cfg.确实需要修改可以到/etc/default/grub文件修改,修改后必须使用grub2-mkconfig -o /boot/grub2/grub.cfg来重建grub.cfg才行
  • ###### chainloader移交loader控制权
  • vi /etc/grub.d/40_custom
  • menuentry ‘Go to Windows 7’ –id ‘win7’ {
    insmod chain
    insmod ntfs
    set root=(hd0,msdos2):第一颗磁盘第二个分区
    chainloader +1:去boot sector将Loader软件读出来的意思
    }
  • menuentry ‘Go to MBR’ –id ‘mbr’{
    insmod chain
    set root=(hd0)
    chainloader +1
    }
  • grub2-mkconfig -o /boot/grub2/grub.cfg
  • 设定默认开机:
  • vi /etc/default/grub
  • GRUB_DEFAULT=win7
  • ###### initramfs
  • 解决Linux核心没有SATA磁盘驱动时,无法识别磁盘从而无法挂载根目录问题,一般系统自带这个文件,如果需要自行重制initramfs文件的话,使用dracut/mkinitrd来处理
  • ###### 测试与安装grub2(loader)
  • grub2-install /dev/sda
  • grub2-install –force –recheck –skip-fs-probe /dev/sda4
  • ###### 进入救援模式
  • 登入系统:systemctl rescue
  • 没有登入系统时:
  • 按e,添加systemd.unit=rescue.target,然后按下^+x
  • ###### 开机选单权限控制
  • useradd test:添加用户test
  • useradd manager:
  • passwd test:设置密码如:123
  • passwd manager
  • vi /etc/grub.d/01_users添加如下内容:

    set superusers=”manager” //设定管理员
    password manager 123 //设定管理员密码
    password test 123 //一般账号

    • chmod 755 /etc/grub.d/01_users
    • vi /etc/grub.d/10_linux
    • 修改menuentry 选项–users test
    • grub2-mkconfig -o /boot/grub2/grub.cxf
    • reboot

      说明:如果默认选单没有加上–unrestricted,同时又加上了superusers=”test”,这时grub.cfg内的所有的参数都已经收到限时了,开机时,系统会呼出账号密码输入的窗口给你填写

  • 忘记root密码
    1、开机进入选单
    2、按e编辑该选单参数
    3、找到Linux16 /Vmlinuz-添加rd.break参数
    4、mount
    5、mount -o remount,rw /sysroot
    6、chroot /sysroot:代表根目录,暂时切换到根目录/sysroot
    7、echo "new_passwd" | passwd -stdin root
    8、touch /.autorelabel:让系统开机时自动恢复SELinux的安全本文
    9、exit 
    10、reboot
    

基础系统设定与备份策略

  • DHCP:设定上网的方式
  • netmask:子网掩码
  • DNS:168.95.1.1
  • 以太网协议所开发出来的以太网卡eth0
  • ifconfig -a:查看有多少网卡
  • nmcli connection show:查出网卡代号
  • nmcli connection show ens33:查阅该网卡号的详细信息
  • 设定网卡参数:

    nmcli connection modify ens33 \
    connection.autoconnect yes \
    ipv4.method manual \
    ipv4.addresses 172.16.1.1/16 \
    ipv4.gateway 172.16.200.254 \
    ipv4.dns 172.16.200.254

    nmcli connection up ens33
    nmcli connection show ens33

自动取得IP
  • ifocnfig -a:取得网卡代号
  • nmcli connection modify 网卡代号 connection.autoconnect yes ipv4.method auto
  • nmcli conneciton up 网卡代号
修改主机名
  • hostnamectl:查看主机名信息
  • hostnamectl set-hostname 主机名
  • cat /etc/hostname:查看主机名
日期与时间的设定
  • timedatectl:查看当前时间设定信息
  • timedatectl list-timezones:查看支持的所有的时区
  • timedatectl set-timezone 时区名:设定时区
  • timedatectl set-time “yyyy-mm-dd HH:MM”
  • /etc/locale.conf:语系配置文件
  • localectl:系统的语系
  • locale:当前bash的语系
  • localectl set-locale LANG=en_US.utf8
查询硬件
  • dmidecode -t type

    1:详细的系统数据,含主板与硬件的基础数据等
    4:CPU的相关资料,包括倍频,外频,核心数,核心绪数
    9:系统的相关插槽格式,包括PCI,PCI-E等等的插槽规格说明
    17:每一个内存插槽的规格,若内有内存,则列出内存的容量与型号
    
    dmidecode -t 1
    dmidecode -t 17
    
  • gdisk -l

  • dmesg
  • vmstat
  • lspci
  • lsusb
  • iostat
  • smartctll -a /dev/sda
备份目录
  • /etc
  • /home
  • /root
  • /var/spool/mail,/var/spool/cron/,/var/spool/at/
  • /var/lib/
不需要备份
  • /dev
  • /proc /sys /run
  • /mnt /media
  • /tmp
完整备份常用工具
  • dd :可以直接读取磁盘的扇区,而不理会文件系统;

    dd if=/dev/sda of=/dev/sdb

  • cpio:能够备份所有的档名,得要配合find;

    find / -print | cpio -convB > /dev/st0 磁带机的意思;还原:cpio -iduv < /dev/st0
    

- xsdump:累积备份;

    第一次完整将/home备份起来
    xfsdump -l 0 -L 'this is full backup' -M 'this is full backup' -f /backupdata/home.dump /home

    第二次累积备份
    xfsdump -l 0 L 'full-1' M 'full-1' -f /backupdata/home.dump1 /home

-tar

    /backupdata是个独立的文件系统,备份整个系统。排除不必要的/proc /mnt /tmp
    tar --exclude /proc --exclude /mnt --exclude /tmp --exclude /backupdata -jcvp -f /backupdata/system.tar.bz2 /
完整备份之差异备份
    比2017-05-09还要新的文件,目录还是会记录下来,只是目录内的旧文件不会备份
    tar -N '2017-05-09' -jcvp -f /backupdata/home.tar.gz2 /home
镜像备份
    将/home镜像到/backupdata/home去
    rsync -av /home /backupdata/
    再次执行快很多
    rsync -av /home /backupdata/
远程备份
    rsync -av -e ssh 本地需要备份目录 远程用户名@远程IP:远程目录

系统服务

  • CentOS7以前使用的是:init.d
  • CentOS7使用的是:systemd
  • ###### systemd配置文件目录:
  • /usr/lib/systemd/system:每个服务主要启动脚本
  • /run/systemd/system:系统执行过程中所产生的服务脚本
  • /etc/systemd/system:管理员所建立的执行脚本
  • 以上目录下的文件的执行优先级一层比一层高
  • ###### systemd的分类看扩展名:
  • .service:一般服务类型
  • .socket:内部程序数据交换的插槽服务
  • .target:一群unit的集合
  • .mount/.automount:文件系统挂载相关的服务
  • .path:侦测特定文件或目录
  • .timer:循环执行的服务
  • ###### systemctl管理服务
  • 管理单一服务:
  • systemctl [command] [unit]
  • command主要有:start、stop、restart、reload(不关闭unit情况下重载配置文件)、enable(设定下次开机时启动)、disable(设定下次开机时不会被启动)、status(目前后面接的状态)、is-active(目前有没有在运作中)、is-enable(开机时有么有预设要启动这个unit)
  • systemctl status crond.service
  • 显示信息说明:Loaded:开机是否启动
  • Active:是否正在执行
  • PID
  • 登录文件信息
  • ###### systemctl观察系统所有的服务
  • systemctl [command] [–type=TYPE] [–all]
  • command:
  • list-units:列出目前启动的unit;加上–all连没有启动的一并列出
  • list-unit-files:列出/usr/lib/systemd/system内的文件启动状态
  • –type:service,socket,target等
  • systemctl list-units –type=service –all | grep cpu:查看type 为service的服务,不管是否启动
  • ###### systemctl管理不同的操作环境
  • systemctl get-default:获得当前的模式
  • 常用模式有:
  • multi-user.target:纯文本模式
  • graphical.target:文字加上图形界面
  • rescue.target:问度娘
  • emergency.target:度娘
  • shutdown.target:关机流程
  • getty.target:设定需要几个tty
  • systemctl set-default unit.target
  • systemctl isolate:切换
  • systemctl poweroff:系统关机
  • systemctl reboot:重启
  • systemctl suspend:暂停
  • systemctl hibernate:休眠模式
  • systemctl rescue:救援模式
  • systemctl emergency:紧急救援模式
  • systemctl list-dependencies unit:查看某个服务的依赖
  • systemctl list-dependencies:查看当前系统模式的依赖
  • systemctl list-dependencies –reverse:查看有哪些target依赖当前系统模式
  • systemctl list-dependencies –reverse unit:查看谁会用到unit这个服务
  • systemctl list-sockets:查看本机所有的sockets服务
  • ###### 网络服务
  • netstat -tlunp:查看本机监听的网络服务端口
  • 通过systemctl list-units | grep 服务名称查看到这个服务
  • systemctl stop units:关闭某个unit
  • systemctl disable units:设定某个units开机不启动
  • ###### systemctl配置文件
  • /usr/lib/systemd/system/xxx.service:官方释出预设配置文件
  • /etc/systemd/system/xxx.d/xxx.conf:累加其它设定
  • /etc/systemd/system/xxx.service.wants/*:连接档,启动xxx服务之后启动这个目录底下的服务
  • /etc/systemd/system/xxx.service.requires/*:启动xxx服务之前启动这些服务
  • ###### 创建服务步骤
  • 进入/etc/systemd/system/目录下新建backup.service
  • 建立完成后:systemctl daemon-reload
  • systemctl enable backup.service
  • systemctl restart backup.timer
  • systemctl list-unit-files | grep backup
  • man systemd.unit
  • man systemd.service
  • man systemd.timer
  • 上面三条语句作用是查询/etc/systemd/system目录底下的语法

进程

  • ps -l:列出所有的进程(PPID=父进程)
  • Alt + F[1-7]:切换窗口
  • & :表示将任务放到背景执行
  • Ctrl + z:将工作放到背景并暂停
  • jobs -l:查看背景工作
  • jobs -r:运行
  • jobs -s:停止
  • fg:将带有+号的最后那个工作放到前景执行
  • fg -:将带有-符号的那个放到前景处理
  • fg %number:指定拿出哪个放到前景处理
  • bg %number:指定后台某个任务运行
  • kill -9 %number:立即删除一个工作
  • kill -2 %number:等同ctrl -c
  • kill -15 %number:以正常的进程方式终止工作
  • kill -1 %number:重新读取一次参数配置文件
  • 注意:这里的背景是bash背景,不是系统背景,与那几个(tty[1-7])终端机有关。at和cron是与系统有关
  • nohup 指令 &: 注销后继续工作
  • nohup :前景工作
  • ps -l:列出属于自己bash的所有进程
  • ps aux:列出系统的所有进程
  • ps -lA:
  • ps axjf:进程树
  • 说明:ps是摄取某个时间点的进程状态
  • top:则可以持续侦测进程运作的状态
  • top -d 2:2秒更新一次,默认是5秒
  • top -p number:指定某个pid
  • top后可按P(CPU) M(MEMORY) N(PID) T(CUP TIME+)q(quit)?查看可输入的指令
  • top -b(批次) -n(次数) 2 > /tmp/top.txt
  • echo $$:bash pid
  • pstree -A:列出进程的相关性,ASCII码
  • pstee -u -p(PID):
  • killall -i -9 bash:
  • ##### 进程优先级:
  • PRI = PRI-NI
  • nice -n [-20-19] [0-19] command:执行命令时就设置优先级
  • renice -[-20-19] [0-19] PID:调整已经存在的进程优先级
  • ##### 内存
  • free -h:系统自动选择使用什么单位
  • free -s 2:2s观察一次
  • free -s 2 -c 3:观察3次
  • free -t:计算swap 和物理内存
  • uname -a:
  • uptime:
  • netstat:
  • vmstat:
  • vmstat-d:磁盘相关
  • vmstat 1 3
  • dmesg:
  • fuser -uvm dirname:找出某个文件/装置有哪些进程在访问
  • fuser -mki dirname:删除某文件/装置的进程访问
  • lsof:列出目前系统所有开启的文件
  • lsof -u root -a -U:root的socket文件
  • lsof +d /dev:所有被启动的周边装置
  • lsof -u root | grep bash:列出root的bash这支程序所开启的文件
  • pidof -s -x program_name:列出某支程序的一个PID,PPID
  • ###### SELinux
  • ls -Z:列出某个目录的SELinux相关信息
  • ps -eZ | grep -E ‘cron|bash’:获取某个进程的SELinux政策本文,关键是第三个字段type
  • getenforce:查看当前的SELinux的状态是否开启,宽容,关闭
  • /etc/selinux/config:修改状态
  • setenforce 0:宽容模式
  • setenforce 1:强制模式
  • setenforce:不能再关闭模式下切换
  • getsebool -a:列出目前系统上面所有的SELinux规则的布尔值为开启或关闭值
  • sestatus -b:同上
  • seinfo
  • seinfo -A -u -r -t -b:
  • sesearch -A -s crond_t | grep spool
  • sesearch -A -b(规则)
  • setsebool -P 规则名称 0|1:修改规则
  • getsebool 规则:查看某个规则的状态
  • setsebool -P 规则名称 1:启动某个规则
  • 流程:第一考虑SELinux的三种类型;第二考虑SELinux的政策规则是否放行;第三比对type;可通过sesearch找到主体进程与文件的SELinux type关系
  • ll -Z filename:查看某个文件的SELinux信息
  • chcon -v(显示改变信息) -t(type) -u(system_u|udified_u身份) -r(角色system_r|object_r文件或目录) -R(连同子目录一并修改) filename:
  • chcon -v –reference=sourcefile targetfile:以某个文件作为参考文件设定
  • restorecon -Rv dirname:恢复某个目录的预设的SELinux
  • semanage:查询、修改、删除预设的SELinux type
  • semanage fcontext -l | grep -E ‘^/srv’
  • semanage fcontext -a -t system_cron_spool_t “/srv/mycron(/.*)?”:将目录默认值改为
  • semanage fcontext -m(修改) -d(删除)

例行性工作

  • #### 执行一次任务at
  • 重启:systemctl restart atd
  • 开机启动:systemctl enable atd
  • 查阅atd状态:systemctl status atd
  • at工作行程表/var/spool/at/
  • 限制用户使用白名单:at:/etc/at.allow和黑名单:/etc/at.deny;缺省情况下只有root可以执行at
  • 查看:atq
  • 删除:atrm
  • 创建:at
  • #### 周期性任务 crontab
  • 限制用户使用:白名单/etc/cron.allow黑名单:/etc/cron.deny(一般使用这个,列入这个文件的用户将不能使用cron)
  • crontab这个指令建立工作都放置到/var/spool/cron里面去,一个账号一个文件夹
  • crontab执行的日志都在/var/log/cron这个登录档
  • 创建一个任务:
  • crontab -e (进入vi编辑任务如0(分) 12(时) (日) (月) *(周) echo “hello”)
  • 查看任务列表:crontab -l
  • 删除所有的任务:crontab -r
  • 系统自动读取文件:/etc/crontab
  • 加入任务:分 时 日 月 周 身份 命令
  • /etc/cron.d目录下文件是/etc/crontab配置文件脚本
  • 错过的任务由anacron这个指令去补偿
  • /etc/cron.hourly/0anacron每小时会去判断执行
  • anacron执行流程:
  • anacron是一支程序,已经进入crontab排程,每小时被主动执行一次。就是文件/etc/cron.hourly/0anacron。这个文件就是执行anacron -s。执行时会读取配置文件/etc/anacrontab
  • 由/etc/anacrontab分析到某个任务差异天数
  • 由/var/spool/anacron/某个任务名称获得最近一次执行的时间戳
  • 由上个步骤与当前时间对比,若等于或大于差异天数,就准备进行指令
  • 根据/etc/anacrontab的设定,将延迟(第二个字段)+ START_HOURS_RANGE的设定
  • 延迟过后,开始执行
  • anacron结束
  • 总结:
  • 建立自己个人的任务使用cron -e
  • 建立系统的任务使用vi /etc/crontab
  • 新建立的任务都会记录在/etc/spool/cron目录下,以用户名区分

软件磁盘阵列

  • mdadm –detail /dev/md0:观察详情
  • mdadm –create /dev/md[0-9] –auto=yes –level=[015] –chunk=?K –raid-devices=? –spare-devices=N /dev/sda{0,1,2}
  • 说明:
  • –create :建立RAID
  • –auto=yes:决定建立
  • –chunk=Nk:决定这个装置chunk的大小,stripe大小,一般是64K,或512k
  • –raid-devices=N:使用几个磁盘作为备份
  • –level=[015]:RAID0 RAID1 RAID5意思
  • –detail:后面所接那个磁盘阵列详细信息
  • mkfs.xfs -f -d su=256k,sw=3 -r extsize=768k /dev/md0
  • mkdir /srv/raid;mount /dev/md0 /srv/raid;df -hT /srv/raid;
  • RAID错误救援:
  • mdadm –manage /dev/md[0-9] [–add 装置] [–remove 装置] [–fail 装置]
  • –add:加入装置
  • –remove:移除
  • –fail:设定为出错
  • 将/dev/sd7设定为出错:mdadm –manage /dev/md0 –fial /dev/sda7
  • mdadm –manage /dev/md0 –remove /dev/sd7:移除,如果是实体磁盘的话就拔掉磁盘
  • 开机自动挂载:
  • mdadm –detail /dev/md0 | grep -i uuid
  • vi /etc/mdadm.conf:ARRAY /dev/md0 UUID=xxxxxxxxxxxxxx
  • blkid /dev/md0
  • vi /etc/fstab
  • umount /dev/md0;mount -a
  • reboot
  • 关闭软件RAID:
  • umount /srv/raid
  • vi /etc/fstab:批注自动挂载
  • dd if=/dev/zero of=/dev/md0 bs=1M count=50 :清除覆盖
  • mdadm –stop /dev/md0:停止
  • dd if=/dev/zero of=/dev/sda6 bs=1M count=50
  • dd if=/dev/zero of=/dev/sda7 bs=1M count=50
  • cat /proc/mdstat:确认没有任何数组装置
  • vi /etc/mdadm.conf:批注

备份文件系统

  • 备份:xfsdump -l(级别) 0 -f 备份文件 文件系统挂载点
  • 还原:xfsrestore -f 备份文件 文件系统挂载点

LVM

  • 概念:
  • 从磁盘分区出几个,设定为PV格式,建立VG组(看作为一个磁盘),将这些PV添加VG组中并设置PE(block)大小,最后再VG中分区出多个LV挂载到目录即可使用,作用是大小可伸缩(滚动条模式);通常过程需要经历如下:分区-PV-VG-LV-mkfs.xfs LVname(格式化)-mount dirname(挂载)-使用
  • #### 实战PV:
  • 第一步:分区
  • lsblk
  • fdisk/gdisk /dev/sda
  • partprobe
  • 第二步:设置SystemId=8e
  • fdisk /dev/sda;t;10;8e;w;
  • 第三步:查看当前的系统任何具有PV的磁盘
  • pvscan
  • 第四步:将分区好的建立成PV格式(一个分区对应一个PV)
  • pvcreate /dev/sda{6,7,8,9,10}
  • 再查看:pvscan
  • 单个查看:pvdisplay /dev/sd6
  • 恢复为正常分区:pvremove /dev/sda6
  • #### 实战VG:
  • 第一步:创建VG
  • vgcreate -s 16M[G|T](PE大小) lzyvg(VGname) /dev/sda{6,7,8}(PVname)
  • 查看:vgscan;pvscan;
  • 单独查看:vgdisplay lzyvg
  • 从VG删除一个PV:vgreduce lzyvg(VGname) /dev/sda10(PVname)
  • 添加一个PV到VG:vgextend lzyvg(VGname) /dev/sda10(PVname)
  • #### 实战LV
  • 第一步:从某个VG中创建LV
  • lvcreate -L 2G(LV大小) -n lzylv(LVname) lzyvg(VGname) 或者:
  • lvcreate -l 50(PE个数)
  • 查看:lvscan;lvdisplay /dev/lzyvg(VGname)/lzylv
  • #### 实战格式化、挂载、使用
  • mkfs.xfs /dev/lzyvg/lzylv
  • mkdir /srv/lvm
  • mount /dev/lzyvg/lzylv /srv/lvm
  • df -hT /srv/lvm
  • cp -ap /etc /var/log /srv/lvm
  • df -hT /dev/lzyvg/lzylv
  • #### 实战LV放大100M(XFS文件系统放大后不可缩小,EXT可以)
  • 第一步查看VG容量是否充足(PE size)
  • vgdisplay lzyvg(VGname)
  • 第二步:放大LV
  • lvresize -L[-l](当-l时后面接的是PE数量) +100M[-100M] /dev/lzyvg/lzylv
  • 查看:lvscan
  • df -hT /dev/lzyvg/lzylv
  • 第三步:创建blick组(agcount)到文件系统
  • 查看:xfs_info /srv/lvm(文件系统挂载目录)
  • 重点命令:xfs_growfs /srv/lvm
  • 查看:xfs_info /srv/lvm
  • df -Th /srv/lvm
  • ls -l /srv/lvm

- #### 完毕!

  • #### thin pool(磁盘容量存储池,实际用多少,支付多少)
  • 第一步:查看VG的剩余可用磁盘空间(Free PE)vgdisplay lzyvg(VGname)
  • 第二步:从VG中取出(如果足够的话)1G来做出一个名为lzypool的thin poolLV装置
  • lvcreate -L 1G -T lzyvg/lzypool
  • 查看池信息:lvs lzyvg
  • 第三步:创建10G的装置
  • lvcreate -V 10G -T lzyvg/lzypool(thin name) -n lzythin(LVname)
  • 再查看池相关信息:lvs lzyvg
  • 第四步:格式化文件系统
  • mkfs.xfs /dev/lzyvg/lzythin
  • 创建挂载目录:mkdir /srv/thin
  • 第五步:挂载
  • mount /dev/lzyvg/lzythin /srv/thin
  • 查看:df -Th /srv/thin
  • 测试:dd if=/dev/zero of=/srv/thin/123.img bs=1M count=500
  • 注意:分区LV有10G,但是实体的池只有1G可用。如果LV挂载的目录下使用超过池的话,可能会导致数据毁坏!
  • #### 实战快照
  • 查看VG这个磁盘还剩多少容量:vgdisplay lzyvg
  • 第一步:创建LV快照
  • lvcreate -s -l 26 -n lzysnap(快照LVname) /dev/lzyvg/lzylv(要被快照的区LVname)
  • 查看详细:
  • lvdisplay /dev/lzyvg/lzysnap
  • 第二步:挂载
  • mkdir /srv/snap
  • mount -o nouuid(XFS不允许相同的UUID文件系统挂载) /dev/lzyvg/lzysnap /srv/snap
  • df -Th /srv/lvm /srv/snap:可以观察是一模一样的
  • 第三步:改动被快照文件
  • 第四步:备份快照文件系统
  • xfsdump -l 0 -L testsnap -f /home/lvm.dump /srv/snap
  • 第五步:卸载快照和目标的挂载
  • umount /srv/snap
  • umount /srv/lvm
  • 第六步:删除快照LV
  • lvremove /dev/lzyvg/snap
  • 第七步:格式化目标文件分区为XFS文件系统
  • mkfs.xfs -f /dev/lzyvg/lzylv
  • 第八步:重启挂载目标文件系统
  • mount /dev/lzyvg/lzylv /srv/lvm
  • 第九步:还原快照备份
  • xfsrestore -f 备份文件 文件系统挂载目录
  • 完毕
  • #### 删除LVM
  • 第一步:卸载所有的LV(逻辑文件系统)挂载
  • umount /srv/lvm /srv/thin /srv/snap
  • 查看:lvs VGname
  • 第二步:删除所有LV
  • lvremove /dev/lzyvg/lzylv /dev/lzyvg/lzypool
  • 第三步:让VGname这个VG不具有Active的标志
  • vgchange -a n VGname
  • 第四步:删除VG(逻辑磁盘)
  • vgremove lzyvg(VGname)
  • 第五步:删除PV(逻辑分区)
  • pvremove /dev/sda{5,6,7,8,9,10}
  • 第六步:利用fdisk将SystemId 8e改回83
  • 完毕

磁盘配额quota和文件系统进阶

  • uquota/usrquota/quota:针对使用者账号设定
  • gquota/grpquota:群组
  • pquota/prjquota:单一目录,
  • xfs_quota -x -c “print”:列出目前主机文件系统参数
  • xfs_quota -x -c “df -h” /home:
  • xfs_quota -x -c “report -ubih” /home:列出home所有用户的配额限制值
  • xfs_quota -x -c “state”:列出目前支持quota的文件系统是否有启动了quota功能,如user,group,project 限制
  • 实战:某个文件系统下群组限额
  • 创建5个用户(myquota[1-5]):创建一个组(myquotagrp),将5个用户加入该组;创建一个目录(myquota),该目录权限为2770,该目录设定为chown root:该组名 dirname,将该目录放置于某个文件系统(/home);开始:
  • vi /etc/fstab:defauts,usrquota,grpquota
  • umount /home
  • mount -a
  • xfs_quota -x -c “report -ubih” /home:观察该文件系统对磁盘配额情况
  • xfs_quota -x -c “state” /home:观察该文件系统是否启动quota功能
  • xfs_quota -x -c “limit [-ug] b[soft|hard]=?M|G i[soft|hard]=?M|G username|groupname” 文件系统挂载点
  • xfs_quota -x -c “timer [-ug] [-bir] ?days”
  • xfs_quota -x -c “limit -u bsoft=100M bhard=150M myquota[1-5]” 文件系统挂载点:每个用户只有300M
  • xfs_quota -x -c “limit -g bsoft=950M bhard=1G myquotagrp” 文件系统挂载点:该组总共只有1G,达到950M将警告,14天后还没有降下来将最大设置为soft
  • xfs_quota -x -c “timer -ug -b 14days” 文件系统挂载点
  • xfs_quota -x -c “state” /home:没有home表示所有支持quota的文件系统

  • 实战:某个文件系统下目录配额

  • 取消群组的限制:
  • vi /etc/fstal:defautls,usrquota,prjquota
  • 规则:创建两个文件分别是/etc/projects和/etc/projid;内容分别是:(项目标识符:目录绝对路径)和(项目名称:项目标识符)
  • 初始化项目名称:xfs_quota -x -c “project -s myquotaproject”
  • 观察:xfs_quota -x -c “print” /home
  • xfs_quota -x -c “report -pbih” /home
  • 设定blick:xfs_quota -x -c “limit -p bsoft=450M bhard=500M myquotaproject” /home
  • 查看确认:xfs_quota -x -c “report -pbih” /home 好了
  • 测试:dd if=/dev/zero of=/home/myquota/123.img bs=1M count=500
  • 后续:如果想添加其它目录的限制,直接修改/etc/projects /etc/projid两个文件即可
  • xfs_quota -x -c “disable -up” /home:暂停用户和目录限制
  • xfs_quota -x -c “enable -up” /home:恢复用户和目录限制
  • xfs_quota -x -c “off -up” /home:关闭
  • xfs_quota -x -c “remove -up” /home:移除所有,需要先关闭
  • 注意:以上是XFS文件系统的命令

Linux账号管理

计算从1970-01-01至今的毫秒数

  • $((`date –date=”2015/05/04” +%s`/86400+1))

  • /etc/passwd文件记录Linux系统的所有账号,UID,GID,用户名,家目录,使用bash信息

  • /etc/shadow文件记录Linux系统的所有账号的用户名、密码、密码改动日期、密码在多少天之后才能改动、密码过期日期、距离密码过期时间多少天前提示、过期后的宽限天数、彻底过期时间、保留字段
  • 修改一般用户密码:root用户用passwd命令
  • /etc/group:系统所有组文件
  • /etc/gshadow:系统所有组密码文件
  • groups/id:当前登录用户支持的群组,第一个为建立文件有效群组
  • newgrp:切换有效群组
  • usermod -a -G groupname username:root执行将某个用户添加到某个组
  • useradd -u 指定UID -g 初始群组 -G 次要群组 -m 强制要建立家用户目录 -M 强制不建立家目录 -d 家目录绝对路径 -r 告诉系统建立系统账号(UID&GID<1000) -c 说明 -s shell 账号名称
  • useradd -D :列出当前添加用户的默认值
  • /etc/default/useradd:设定添加用户默认值
  • /etc/skel :新建用户的家目录数据都是从该目录下复制过去的
  • /etc/login.defs:新建用户密码默认值参考文件
  • passwd -l 给/etc/shadow 第二栏加!-u 取消使密码失效功能 -n 设定/etc/shadow第四个字段指多久内不能改密码 -x 多久必须改密码 -w 密码过期前的警告天数 -i 第七字段密码失效后宽限天数 –stdin 接受管道标准输入 用户账号名(注意:如果不加用户账号名则修改自己也就是当前登录用户的密码)
  • passwd -S 账号名:显示所有的密码设置项
  • chage -l列出该账号详细参数 -d 修改(3)最近一次更改密码日期YYYY-MM-DD -E 修改(8)彻底失效日期YYYY-MM-DD -I修改(7)密码失效天数 -m修改(4)密码最短保留天数 -M修改(5)密码多久需要变更 -W 修改(6)过期前警告天数
  • 使用户首次登陆需要修改密码:
  • useradd test
  • echo “test” | passwd –stdin test
  • chage -d 0 test :关键命令!
  • chage -l test | head -n 3 :看一下
  • usermod -c(passwd-5) -d(passwd-6) -e(passwd-8 format:YYYY-MM-DD) -f(shadow-7 天数) -g(passwd-4) -G(group 次要组) -a(添加次要组,而非设定,和-G配合使用) -l(passwd-1) -s(passwd-shell) -u(passwd-3) -L(冻结用户) -U(解除冻结) username
  • userdel -r username:删除用户
  • find / -user username:找出属于该用户的文件
  • demasg | grep -i acl
  • setfacl -m u:lzy:rwx filename/dirname:设定某个用户的权限
  • setfacl -m u::rwx filename/dirname:设定该文件拥有者权限
  • setfacl -m g:lzy:rx filename/dirname:设定某个组拥有该文件的权限
  • getfacl filename/dirname:获取该文件的权限设置详细
  • setfacl -m m:r filename/dirname:设定mask值(有效权限)
  • setfacl -m d:u[g]:[usernames]:rwx file/dir:目录使具备继承能力
  • setfacl -b 档名:删除所有的ACL设定
  • setfacl -x u:[usernames]: file/dir:删除某些用户的ACL设定
  • setfacl -m u:[usernames]:- file/dir :使某些用户的权限为—
  • su - username / su -l username :切换用户包括环境
  • su username:不包括环境
  • su - -c “cat /etc/passwd”
  • sudo -u username “指令”:使用某个账号
  • sudo -u username sh -c “一串指令”
  • /etc/sudoers文件指定谁能用sudo指令。默认只有root能用
  • 修改/etc/sudoers (visudo)%wheel 设置该组用户可执行sudo命令
  • User_Alias ADMPW= useranme1,username2
  • Cmnd_Alias ADMPWCOM = !/user/bin/passwd,/usr/bin/passwd [a-zA-Z]*,!/usr/bin/passwd root
  • Host_Alias = (主机)
  • AMDPW ALL=(root) ADMPWCOM:设定某些用户只能执行某些指令
  • write username
  • ^c 结束输入
  • mesg n:关闭接收消息
  • mesg y:开启接受消息
  • wall username:给所有用户发广播
  • mail -s “邮件标题” username@localhost :注意消息输入后以.号结束
  • mail -s “邮件标题” username@ip < filename
  • pwck :检查密码
  • grpck:检查群组
  • pwconv:手动建账号时有用 /etc/passwd -> /etc/shadow
  • pwunconv:这个命令与pwconv相反禁用
  • 添加用户时默认设置和限制在文件/etc/login.defs /etc/default/useradd
  • usermod -a -G [groups] username:append 次要群组

if else

if [ “1” -lt “2” ];then
echo “ok”
elif [ “1” -eq “1” ];then
echo “no”
else
echo “contine”
fi

or

s=”test”
case ${s} in
“test”)
echo “this is test”
“ceshi”)
echo “this is ceshi”
esac

循环

read -p “Please input a number ,I will count it:” nu

s=0

while [ “ nu>0]dos= (( s+ {nu})
nu= (( {nu}-1))
done

or

for (( i=0; i<= nu;i++))dos= (( s+ {i}))
done

or

for i in (seq 1 nu)dos= (( s+ {i})
done

or

#for i in (echo {a..g}) do echo ${i} done

for i in (1.. nu)dos= (( s+ {i}))
done

echo “The result is :${nu}”

正规表示法

  • dmesg | grep -A2 -B3 -n ‘XFS’
  • grep ‘the’ filename
  • grep -n ‘the’ filename 行号
  • grep -nv ‘the’ filename 取反
  • grep -ni ‘the’ filename 忽略大小写
  • grep -n ‘th[ie]’ filename 可选
  • grep -n ‘[^o]th[ie]’ filename 排除
  • grep -n ‘[^a-z]th[ie]’ filename
  • grep -n ‘[\^[:lower:]]thi’ filename 排除小写,不受编码影响([:alnum:]=0-9,a-z,A-Z [:alpha:]=a-z,A-Z [:blank:]=空格,TAB [:cntrl:]=控制键 [:digit:]=0-9 [:graph:]=除空格和TAB键外其他所有 [:lower:]=a-z [:print:]=可以被打印的 [:punct:]=标点符号’,”,?,!,;,:,#,$…[ [:upper:]=A-Z [:space:]=任何可产生 空白的键 [:xdigit:]=16进制)
  • grep -n ‘^[^a-zA-Z]’ filename
  • grep -n ‘^$’ filename
  • grep -n ‘\.$’ filename
  • grep -v ‘^$’ filename | grep -v ‘^#’ 去掉批注和空白行
  • nl /etc/passwd | sed ‘2a jiazaixiamian’
  • nl /etc/passwd | sed ‘2i shangmian’ 第二行上面增加
  • nl /etc/passwd | sed ‘3a jiazai\
  • disanhang\
  • duohangshuju’
  • nl /etc/passwd | sed ‘2,5d’
  • nl /etc/passwd | sed ‘2,6a nihao’ 2-6行下面新增nihao
  • nl /etc/passwd | sed ‘2,5c tidai’ 将2-5行替代为tidai
  • head -n 20 | tail -n 10 获得11-20
  • nl /etc/passwd | sed -n ‘5,9p’ 显示56789行数据
  • grep -n ‘^root’ /etc/passwd | sed ‘s/^1.*x//g’ | sed ‘s/:root.*//g’
  • grep ‘MAN’ /etc/passwd | sed ‘s/#.*//g' | sed '/^/d’
  • sed -i ‘$a #test insert to file’ filename 在文件末尾加入
  • egrep -n ‘go+d’ filename 一个或一个以上
  • egrep -n ‘go?d’ filename 0个或1个
  • egrep -n ‘go*d’ filename 0个或多个前面的字符
  • egrep ‘gd|hao|ni’ filename 或
  • egrep ‘(sd|bd)a’ filename 找sda或bda
  • last -n 5 | grep -v ‘^' | awk '{print1 “\t” NR “\t” NF “\t” FS} 打印出第一个字段默认空格分割,目前行数,总行数,分割符’

连接档

  • ln /etc/passwd /tmp/passwd-ln 只能连接文件(档名指向相同的i-node)
  • ln -s /etc /tm/etc-ls 软连接可连接文件和目录(blok记载另一个档名)

变量

  • env = export 查看环境变量
  • export var 将变量设为全局
  • set 观察bash环境下所有变量
  • $? 查看上次指令执行正确否0=success
  • locale 看语系
  • read var
  • ulimit 限制用户使用资源情况
  • && || 处理连续命令下达,三目

查看列表

  • ls -l /
  • ls -al /
  • ls -ld /
  • ls -ald /
  • ls -il /
  • ls -ila /
  • ls -ild /
  • ls -ld /abc
  • ls -alSF /
  • ls -alSF –full-time /
  • ls -iSF /
  • ls -hl
  • ls -k
  • ls -ld /bin/???? 四个字符
  • ls -ld /bin/[^a-b]*

复制

  • cp -a /etc/passwd /tmp/passwd

- cp -p -R / /tmp/root_back

打包压缩

  • tar -zcv -f /tmp/back.tar.gz /etc/
  • tar -Jcv -f /tmp/back.tar.xz /etc/
  • tar -jcv -f /tmp/back.tar.bz2 /etc/
  • tar -zxv -v
  • tar -Jxv -f
  • tar -jxv -f
  • tar -ztv -f /tmp/back.tar.gz
  • tar -Jtv -f /tmp/back.tar.xz
  • tar -jtv -f /tmp/back.tar.bz2
  • tar -zcv -f /tmp/back.tar.gz -exclude=filename –exclude=dirname /etc
  • tar -zcvf - /home | tar -zxvf - -C /tmp

创建目录

  • mkdir -m 7775 /tmp/test; rm -rf /tmp/test
  • mkdir -m 4770 /tmp/test
  • mkdir -m 2555 /tmp/test
  • mkdir -m 1755 /tmp/test

- mkdir -p /data/test

新建删除用户/组

  • groupdel project
  • groupadd project
  • userdel test
  • useradd -g project test
  • passwd test

切换退出root

  • su -
  • exit
  • /etc/issue 修改登录提示
  • /etc/motd 修改登录后提示

分区,格式化,挂载

  • lsblk
  • parted /dev/sda print
  • fdisk /dev/sda –>MBP
  • gdisk /dev/sda –>GPT
  • fdisk m p n enter +1G p w q …
  • blkid /dev/sda3
  • lsblk
  • partprobe
  • lsblk
  • mkfs.xfs /dev/sda3
  • mount /dev/sda3 /data/sda3
  • partprobe
  • df -h /dev/sda3
  • umount /dev/sda3 或 umount /home
  • partprobe
  • df -h /dev/sda3
  • vi /etc/fstab
  • /dev/sda3 | UUID=? xfs|swap| /data/sda3 0 0
  • :wq | ZZ
  • mount -a
  • mkswap /dev/sda5
  • mount /dev/sda5 /data/sda5
  • swapon /dev/sda5
  • swapon -s
  • swapoff /dev/sda5
  • partprobe
  • lsblk
  • dd if=/dev/zero of=/data/sd6 bs=1M count=500
  • mount -o remount dirname:重新挂载
  • /etc/fstab :启动立即挂载文件
  • mount -a :测试/etc/fstab 开机挂载文件
  • mount 列出挂载详细

less more nl cat

  • cat filename
  • cat -n filename
  • tac filename
  • tac -n filename
  • less -n filename
  • more -n filename
  • nl -b a -n rz -w 3 filename

- head -n 3 /etc/passwd

查找命令

  • find / -name test
  • find / -type s|f
  • find / -perm 2000 属于SUID即可
  • find / -size +50G
  • find / -size -50G
  • find / -size +50G | find -size -100G -exec ls -l {} \ ;
  • whereis filename
  • type comman
  • file filename
  • type ls; type man
  • which ls;

管道命令

  • echo ${PATH}|cut -d “:” -f 3,5
  • export | cut -c 12- 从12个字符开始
  • find / -name test | cut -c 12-20
  • last | tr ‘[a-z]’ ‘[A-Z]’
  • cat /etc/passwd | tr -d ‘:’
  • cat -A /etc/man_db.conf
  • cat /etc/man_db.conf | col -x | cat -A | more
  • join -t ‘:’ /etc/passwd /etc/shadow | head -n 3
  • join -t ‘:’ -1 4 /etc/passwd -2 3 /etc/group | head -n 3
  • find / tr -d ‘/’
  • cat /etc/passwd | tr -d ‘\r’ > ~/passwd.linux.format
  • cat /etc/group | paste /etc/passwd /etc/shadom - | head -n 3
  • grep ‘^MANPATH’ | /etc/man_db.conf | head -n 3 | expand -t 6 - | cat -A
  • split -b 200k /etc/services service
  • ls -lhS service* 分为小文件
  • cat services* >> serviceback 合并
  • ls -al / | split -l 10 - list-root 10行分一个文件
  • id root 查UID/GID
  • cut -d ‘:’ -f 1 /etc/passwd | head -n 3 | xargs -n 1 id 处理id只接受一个参数
  • cut -d ‘:’ -f 1 /etc/passwd | xargs -n 1 -p id
  • cut -d ‘:’ -f 1 /etc/passwd | xargs -n 1 -e’sync’ -p id
  • vi ~/.bash_logout
  • date >> ~/.myhistory
  • history 50 >> ~/.myhistory
  • clear
  • unset var
  • unalias alias

变量宣告

  • declare -i sum=1+3
  • echo $sum output: 4
  • declare -a arr
  • arr[1]=1
  • arr[2]=2
  • echo ${arr[2]}

- declare -x USERNAME = export USERNAME 宣告为环境变量=全局

重定向流

  • echo “message” > filename
  • echo “message” 1> filename
  • echo “message” 2> filename 错误信息
  • echo “error message” 1>&2 转换为错误信息格式
  • find / -name test > filename 2>&1 filename 将正确和错误一起累加同一文件
  • echo “add” >> filename
  • cat > filename << “end”
  • last | cut -d ’ ’ -f 1
  • last | grep ‘root’
  • last | grep -v ‘root’
  • grep –color=auto ‘MANPATH’ /etc/man_db.conf
  • last | tee last.list | cut -d ’ ’ -f1
  • ls -l /home | tee home.list | more
  • ls -l / | tee -a home.list | more 累加

排序

  • cat /etc/passwd | sort
  • cat /etc/passwd | sort -t ‘:’ -k 3 -n
  • last | cut -d ’ ’ -f1 | srot | uniq -c -i 忽略大小写并计数
  • cat /etc/man_db.conf | wc 列出行、字数、字符数
  • cat /etc/passed | wc -l
  • last | grep [a-zA-Z] | grep -v ‘reboot’ | wc -l

登录、关机、重启

  • last
  • sync;sync;reboot
  • sync;sync;shotdown -h 5 5秒后关机
  • sync;shtdown -h now 现在关机

vi vim

  • hl jk
  • gg = G
  • G
  • yy
  • 10yy
  • p
  • dd
  • 10dd
  • ^
  • $
  • 10x
  • d1G
  • dG
  • ^v
  • V
  • v
  • yy
  • p
  • sp
  • sp filename
  • ^j
  • ^k
  • :q
  • :wq
  • :q!
  • :wq!
  • ZZ
  • :1,10s/man/MAN/g 替换
  • :1,$/man/MAN/gc
  • :set nu
  • :set nonu
  • esc
  • i
  • I
  • o
  • a
  • O
  • A
  • vi filename
  • ^z
  • vi filename
  • D|O|
  • /findstr 向下 n N
  • ?findstr 向上 n N

- dos2unix filename unix2dos 处理断行符号

你可能感兴趣的:(linux)