0%

Linux操作笔记

Linux(centos6)

1Bytes = 8 bits 一个字节等于 八位

1KB = 1024Bytes

clear清屏 或者ctrl+l

  • linux的所有存储设备都必须挂载之后使用,包括u盘光盘
目录名 目录作用
/bin/ 存放系统命令,普通用户和超级用户都可以执行,
/sbin/ 保存和系统设置相关的命令,只有超级用户可以使用这些命令进行系统环境设置,但是命令普通用户可以查看
/usr/sbin/ 存放系统命令的目录,普通用户和超级用户都可以执行,这些命令与系统启动无关,单用户模式下不能执行
/boot/ 系统启动目录,保存系统启动相关文件
/dev/ 设备文件的保存位置,Linux中用来保存所有的硬件设备文件/
/etc/ 配置文件的保存位置。系统内采用rpm安装的服务配置文件都在此目录中
/home/ 普通用户的家目录
/lib/ 系统调用函数库的保存位置
/lost+found/ 系统意外崩溃而产生的文件碎片,每个分区都有自己的lost+found
/media/ 挂载目录,媒体文件
/mnt/ 挂载目录,u盘,移动硬盘
/misc/ 挂载目录,系统建议nfs服务的共享目录
/opt/ 第三方安装的软件保存位置,一般把第三方软件在/usr/local/目录中
/proc/ 虚拟文件系统,该目录的数据保存到内存中,主要保存系统的内核、进程、外部状态、网络状态灯
/sys/ 和proc相似,主要保存一些内核相关的信息
/root/ 超级管理员的家目录
/srv/ 服务数据目录
/tmp/ 临时数据目录
/usr/ unix software resource 系统资源目录,用于存放系统的软件资源,不是user
/var/ 动态数据保存位置。日志,保存缓存等
  • 重启时应该关闭服务
  • 服务器访问高峰不要运行高负载命令(大容量的复制解压)
  • 远程配置防火墙不要把自己踢出服务器
  • 密码要定期更新
  • 分配合理权限
  • 定期备份重要数据和日志

Linux常用命令

文件处理命令

  • 目录处理命令:ls ,原意list;路径在/bin/ls

    参数 -a 原意all 所有文件显示

    ​ -l 原意long ,显示出详细信息

    ​ -h 原意human ,显示单位kb、mb;

    ​ -d 原意direct,只显示目录,而不展开目录所有文件

    ​ -i 原意为inode,id号

    文件把用户分成三组:

    (-二进制文件 d目录direct l软链接文件link)

    所有者user所属组 group其他 other

    r读 w写 x执行

  • 目录处理命令:mkdir

    make directories 路径/bin/mkdir

    -p 递归创建,比如:mkdir -p /tmp/test

  • 目录处理命令 : cd

    change directory

    cd .. 返回上一级目录

  • pwd ,print working directory

  • rmdir, remove empty directories ,只能删除空目录

  • 复制命令cp

    -r 复制目录

    -p 保留文件属性(修改时间等)

    cp -r [一个文件位置] [另一个文件位置]

  • 磁盘拷贝命令dd

    if = 输入文件

    of =输出文件

    bs = 字节数

    count = 个数

    • mv 剪切和拷贝

      move 。改名mv 源文件名 新文件名

      移动操作mv 路径 另一个路径

    • rm删除文件命令

      remove

      删除文件 rm文件名

      删除目录 rm -r 目录名

      删除目录不需要确认 -f

    • touch 创建文件

      touch中间带空格是指创建多个文件

      touch program files会创建两个 而 touch“program files”才会创建带空格的文件

    • cat可以显示文件的内容

      ​ -n 显示行号

      ​ 把cat反过来写tac,会倒着显示

    • more可以分页显示

      ​ 按f,space进行翻页

      ​ enter一行一行翻页

      ​ q退出more模式

    • less显示翻页显示,可以往上翻pgup,向上一行可以按上箭头

      ​ “/关键词 ” 回车 可以用于搜索,按n键可以查找下一个关键词

      ​ 其余操作与more相同

    • 指定查看前几行 head -n 7文件路径

      ​ 表示前7行

      ​ 不写7默认显示前10行

    • 指定查看后几行 tail

      ​ -n 指定行数

      ​ -f 动态显示文件末尾内容

    • ln生成链接文件(软链接类比与win快捷方式,文件权限lrwxrwxrwx,l表示link软连接)

      ​ -s 源文件 目标文件 (意为生成软链接)soft

      ​ 不加-s为硬链接 ,硬链接相当于拷贝+同步更新

      硬链接可以用i节点 识别即ls -i ,有相同id号(内核通过调用id号对文件进行修改,硬链接之间有相同的id号,实现同步更新)

      硬链接不可以跨区分区(软连接可以)

      删除软链接使用rm -rf name不能加/,不然会变成删除目录

      硬链接不能针对目录使用

权限管理命令

  • 更改权限:chmod改变文件或者目录权限

    • chmod{ugoa}{+-=} 目录或文件名

      user group other all

      例子: chmod u+w test ,给test文件的所有者加上write的权限

    • chmod 744 文件或者目录名

      例子:r4 w2 x1

      ​ rwxr–r– 对应 744

      -R 递归修改

      关于rwx权限的理解

      file r: cat/more/less/head/tail

      ​ w:vim

      ​ x:script command

      directory r:ls

      ​ w:touch/mkdir/rmdir/rm

      ​ x:cd

      用户是由有删除一个文件的权限不是看这个用户对文件本身的权限,

      而是看用户对该文件所在目录(directory)是否有写权限

    • 改变文件所有者chown

    chown [所有者][文件或目录]

    • chgrp[用户组][文件或者目录]
  • umask -S

    显示设置文件的缺省权限(创建文件时默认的权限)

    缺省创建的文件没有可执行权限x,创建时会自动是删去x权限

    umask 权限码 => 改变缺省权限

uamsk提供的四位数例如0022,第一位0是特殊权限,

022需要与777相减才是权限,即755(异或运算)才是缺省权限

文件搜索系统

  • find

    文件搜索

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

    • -name 根据文件名搜索(精准匹配,模糊搜索可以用*通配符,?匹配单个字符)

      ​ -iname 搜索不区分大小写

    • -size根据大小来查找 +大于多大的文件 -小于多大的文件

      ​ -size +204800 查找大于100MB的文件

      一个数据块 512 byte = 0.5KB,即1KB=2个数据块

      100MB=102400KB=204800

    • -user 在根目录查找所有者来查找

    • -group 在根目录根据所属组来查找

    • -amin -cmin - mmin根据时间属性来查找

      访问时间access 文件属性change 文件内容modify

      +-=与size相同

    • -a -r

      and or

    • -type根据文件类型查找

      f文件 d目录 l软链接文件

    • -exec/-ok 命令 {} ; 注意空格

      该命令用来对搜索结果执行操作

      例子:find /etc -name inittab -exec ls -l {} ; 查找/etc 目录下叫做inittab名字的文件并且列出详细的信息

      find /etc -name inittab -ok rm {} \; 查找该文件并且询问是否删除

    • -inum 根据i节点来查找文件

      根据i节点删除文件 find . -inum 31531 -exec rm {} ; 假设文件中有一个i节点为31531,”.”指当前目录

      -inum 还可以用来查找是否有硬链接(硬链接不能跨区且i节点相同)

  • locate

    类似win中everything的原理,

    在Linux当中有一数据库定期自动更新文件系统,搜索时只需搜索数据库即可,

    手动更新命令updatedb,文件资料库不会更新/tmp目录中的文件

    -i不区分大小写

  • 查找命令的位置 which

    which ls ,which useradd

  • whereis 搜索命令所在目录及帮助文档路径

  • grep 在文件内容中进行搜索

    grep [内容名字][路径]

    -i不区分不大小写

    -v排除指定字符串

    grep -v ^# /etc/inittab “^”为行首为注释行的意思

帮助命令

  • man

    可以看命令和配置文件的帮助

    man+配置文件名称,不需要绝对路径

    帮助文档中可以用“/”+关键词来查找

    1表示命令的帮助 5表示配置文件的帮助

    可以用whereis来查看命令的路径,路径中包含1,5

    查找passwd配置文件 man 5 passwd;

    man passwd默认查找passwd命令而不是配置文件

  • whatis 命令 名称

    查看命令的简短 的信息

  • apropos 配置文件名称

    查看配置文件简短的信息

  • 命令 –help

    可以获得简短参数信息等

  • help 【shell内置命令】

    例如cd,pwd,umask都是shell内置命令,无法用man,只能用help来获取帮助

  • 解压缩命令

  • 压缩文件gzip

  • 解压缩命令gunzip

压缩解压.gz

该命令只能压缩文件不能压目录,不保留源文件

  • tar [压缩后的文件名][目录] 文件打包成文件夹(目录)之后解、压缩,对目录进行操作

    -c打包

    -v显示详细信息

    -f指定文件名

    -z打包同时压缩

解包-x解包

​ 保留原文件

解压并解包到指定该目录例子:tar -zxf xxx.tar.gz -C [指定路径]

  • zip [压缩后的文件名][文件或目录] 可以保留原文件

    -r 可以压缩目录

    解压缩unzip

  • bzip2 [文件]

-k产生压缩文件后保留源文件

压缩比较大

tar -cjf [压缩后的文件名][目录]

  • bunzip2

    例子:tar -xjf xxx.tar.bz2 解压缩bz2格式并且解包tar -x

    网络命令

  • 用户之间发送信息 write [用户名]

    CTRL+d保存

    wall 英文原理write all

    例子wall hello,给所有在线用户发hello

  • ping 指定发送次数

    -c [次数] 指定发送次数

  • ifconfig

    intreface configure

  • mail [用户名]

mail 进入界面,q退出,d删除,h列出邮件列表

  • last

    所有用户登录的时间

    lastlog -u[用户名uid] 只查看该用户上次登陆的信息

  • traceroute

  • netstat 查询网络状态

-t tcp

-u udp

-l 监听 listen

-r 路由 route

-n 显示ip地址和端口号 nslookup

netstat -tlun 查看本地监听端口

netstat -an 查看所有网络链接(监听,已链接)

netstat -rn 查看本机路由表

  • setup 只有redhat系列中有

用于配置网络

  • mount 挂载命令

mount [-t 文件系统]设备文件名 挂载点

卸载命令umount

关机重启

  • shutdown

    -h时间

    -r重启

    -c取消前一个关机命令

  • /etc/inittab

修改系统默认运行级别

ininttab 5切换成5的图形界面

runlevel 查询系统运行级别

  • logout退出登录界面

环境变量

变量名称 作用
HOME 用户的主目录(即家目录)
SHELL 用户在使用的Shell解释器名称
HISTSIZE 输出的历史命令记录条数
HISTFILESIZE 保存的历史命令记录条数
MAIL 邮件保存路径
LANG 系统语言、语系名称
RANDOM 生成一个随机数字
PS1 Bash解释器的提示符
PATH 定义解释器搜索用户执行命令的路径
EDITOR 用户默认的文本编辑器
1
2
echo $PATH #输出环境变量所有路径
PATH = $ PATH : /root/bin # 添加文件夹到环境变量搜索的环境

vim

  • vi 文件名

    默认进入编辑模式

插入模式:用来打开文件,进入文件之后用aio即可进入插入模式,用esc键让退出插入模式

进入编辑模式:在命令模式下

​ 显示行号:set nu

​ 保存退出:wq

命令模式下:

json格式化

1
:%!python3 -m json.tool
命令 作用
a 在光标所在字符后插入(after)
A 在光标所在行尾插入
i 在光标所在字符前插入
I 在光标所在行行首插入
o 在光标下插入新行
O 在光标上插入新行

命令模式下:

命令 作用
:set nu 设置行号
:set nonu 取消行号
gg/G 定位到第一行/最后一行
nG/:n 定位到n行
$ 移至行尾
0 移至行首

命令模式下:

删除

x 删除光标所在的一行
nx 删除光标所在出后n个字符
dd 删除光标所在行,ndd删除n行delete
dG 删除光标所在行到文件末尾内容
D 删除光标所在处到行尾内容
:n1,n2d 删除指定范围行

复制和粘贴

命令 作用
yy 复制当前行copy
nyy 复制当前行以下n行
dd 剪切当前行
ndd 剪切当前行以下n行
p,P 粘贴当前光标所在行下或行上paste

粘贴时保留源格式:

\1. 先让 Vim 处于 NORMAL 模式下;

\2. 执行如下命令,先进入粘贴模式:

1
:set paste

\3. 然后进入 INSERT 模式;

\4. 按下p 粘贴代码进来,这个时候的格式能保留原样;

\5. 按 ESC 回到 NORMAL 模式;

\6. 退出粘贴模式:

1
:set nopaste

替换和取消

命令 作用
r 取代光标所在处的字符replace
R 从光标所在出开始替换字符,直到esc结束
u undo取消上一步操作

搜索和搜索替换命令

命令 作用
/string 搜索指定字符串,忽略大小写:set ic
n 搜索下一个指定字符串出现的位置
:%s/old/new/g 全文替换指定字符串
:n1,n1s/old/new/g 在一定范围内指定替换字符串

保存和退出命令

命令 作用
:w 保存修改
:w new_fliename 另存为指定文件
:wq 保存并且退出
ZZ 保存并且退出
:q! 不保存修改退出
:wq! 保存修改退出,仅root和文件所有者能用

vim技巧

  • 导入命令执行结果:r!命令

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

ex :map ^p I#<ESC> ctrl+p在光标所在行行首插入一个#

:map ^B 0x 删除光标所在行行首的第一个字符

值得注意的是,在使用快捷键定义时,^p不能直接按要同时按住ctrl+V+p

  • 连续行注释

    n1,n2s/^/#/g在n1和n2行之间行首添加“#”

    n1,n2s/^#//g删除n1n2行首的第一个字符

    n1,n2s/^/\/\//g在行首增加//,注释符,\代表转义

  • 替换 ab mymail 834876096@163.com

vimrc文件可以在和用户名目录下创建.vimrc,这样重启就不会被抹除配置

  • 同时显示多个文件(分屏)

    :split

    :vsplit

  • 在文件中切换

    ctrl+6下一个文件

    :bp上一个文件

    :bp上一个文件

  • 窗口之间切换

    ctrl+w h/j/k/l

  • 3.多文档编辑的命令如下

    :n 编辑下一个文档。
    :2n 编辑下两个文档。
    :N 编辑上一个文档。注意,该方法只能用于同时打开多个文档。
    :e 文档名 这是在进入vim后,不离开 vim 的情形下打开其他文档。
    :e# 或 Ctrl+ˆ 编辑上一个文档,用于两个文档相互交换编辑时使用。?# 代表的是编辑前一次编辑的文档
    :files 或 :buffers 或 :ls 可以列出目前 缓冲区 中的所有文档。加号 + 表示 缓冲区已经被修改过了。#代表上一次编辑的文档,%是目前正在编辑中的文档
    :b 文档名或编号 移至该文档。
    :f 或 Ctrl+g 显示当前正在编辑的文档名称。
    :f 檔名 改变编辑中的文档名。(file)

    多文件切换

    1. 通过vim打开多个文件(可以通过ctags或者cscope)
    2. “:ls”查看当前打开的buffer(文件)
    3. “:b num”切换文件(其中num为buffer list中的编号)

手工rpm包管理

源码包(脚本安装包)

rpm包是centos中的安装包,是二进制包,已经过编译的包

rpm包管理命名和依赖性

  • httpd-2.2.15-15.el6.centos.1.i686.rpm(例子,包全名)

    ​ httpd 软件包名

    ​ 2.2.15 软件版本

    ​ 15 软件发布次数

    ​ el6.centos 适合的Linux平台

    ​ i686 适合的硬件平台

    ​ rpm rpm包扩展名

  • 依赖性

    • 树形依赖: a->b->c
    • 环形依赖: a->b->c->a
    • 模块依赖:模块依赖查询网站

    www.rpmfind.net

    .so.2是库依赖

  • yum在线管理

yum可以从互联网上自动下载依赖库,解决rpm命令管理的依赖性问题(下一讲)

安装升级与卸载

包全名:操作的包是没有安装的软件包时,使用包全名

包名:操作已经安装的软件包时,使用包名,搜索/var/lib/rpm/中的数据库

  • 安装

rpm - ivh 包全名

-i (install) 安装

-v (verbose) 显示详细信息

-h (hash) 显示进度

–nodeps 不检测依赖性(一般不用)

ps:两次tab键补全

  • 升级

    rpm -Uvh 包全名

    upgrade

  • 卸载

rpm -e 包名

erase

查询

rpm 包名

-q query 查已安装包,包名

-a all

-i information

-p package 查询未安装包的信息,包全名

-l list 列表

-f file


-ql可以查询安装位置

-qi 包名 查询软件包的详细信息

-qf 系统文件名

-qR 包名 查询未安装的服务依赖性

效验

-V 已安装的包名

验证内容中八个信息具体内容如下

S 文件大小是否改变

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

5 文件md5校验和是否被改变

D 设备中的主从代码是否改变

L 文件路径是否改变

U 文件的所有者关系是否改变

G 文件的属组是否改变

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


c 配置文件config

d 普通文档documentation

g ghost文件不应被rpm包包含

l 授权文件license

r 描述文件readme

  • rpm包中文件提取(可以用于恢复系统文件误删)

rpm2cpio 包全名 | \ cpio -idv .文件绝对路径

#rpm2cpio是一个把rpm包转换成cpio格式的命令

#cpio是一个标准工具,用于创建软件档案文件和从档案文件中提取文件


在线rpm包管理

IP地址配置和网络yum源

  • ip地址和本机网络信息

    1. setup回车就可以配置ip地址(仅redhat系列)

    2. 改ip地址: vi /etc/sysconfig/network-scripts/ifcfg-eth0中onboot改成yes 然后 service network restart

    3. 改主机名:/etc/sysconfig/network

    4. 改dns: /etc/resolv.conf

  • 网络yum源

vi /etc/yum.repos.d/CentOS-Base.repo

yum命令

yum list 查询所有可用软件包列表

yum search 关键字 搜索服务器上所有和关键字相关的包

yum -y install 包名 安装

yum - y update 包名 升级(不加包名会升级所有软件包括内核,会导致远程内核连接不上)

yum -y remove 包名 卸载(尽量不要卸载,会卸载所有依赖库,可能会导致Linux崩溃)

  • 软件包组安装

yum grouplist 列出所有可用的软件组列表

yum groupinstall 软件组名 指定安装软件组

yum groupremove 软件组名 卸载指定软件组


光盘yum的搭建

  1. 挂载光盘

  2. 让网络yum源文件失效,通过改/etc/yum.repos.d/中除了光盘的repo文件之外的repo文件的文件名来使其失效

  3. 在修改光盘yum源文件

    file地址改为自己的光盘地址,enable = 1;打开

    源码包&rpm包

    1. 下载源码包

    2. 解压缩下载的源码包

    3. 进入解压缩目录

      ls查看INSTALL文件和README文件可以提供安装帮助

  • 源码包一般安装在/usr/local/软件名/

  • etc/rc.d/init.d/ 中有可执行文件

    service 服务名 start/restart

    service不能管理源码包

    源码包在 usr/local/src/中

    软件安装位置/usr/local/

    make 编译 如果出错 make clean

    make install 编译安装

网络

修改ip

  • 临时修改命令工具

ifconfig 查看与配置网络状态命令

临时设置eth0网卡ip地址和子网掩码

ifconfig eth0 192.168.0.200 255.255.255.0

虚拟网卡 ifconfig eth0:0 192.168.3.1

关闭虚拟网卡ifconfig eth0:0 down

  • setup图形化窗口配置
  • 修改网络配置文件

vi /etc/sysconfig/network-scripts/ifcfg-eth0

主机名vi /etc/sysconfig/network

dns vi /etc/resolv.config

修改完网络信息需要对网络服务进行重启service network restart

查看主机名

hostname显示主机名

hostname 主机名更改主机名

网卡设备开关

ifdown 网卡设备名 禁用网卡

ifup 网卡设备名 开启网卡

查看网络状态

netstat [option]

-t 列出tcp协议端口

-u 列出udp协议端口

-a all,包括tcp和udp

-n 不使用域名和服务名,而使用ip地址和端口号

-l 仅列出在监听状态的网卡

-r 查看路由列表

route -n 查看路由列表

域名解析命令

nslookup 主机名或者ip

ping命令

ping 主机或者ip

-c 次数

telnet命令

telnet [域名和ip] [端口] #远程管理和端口探测命令

或者直接用nmap扫

traceroute

traceroute [option] ip或者域名

路由跟踪命令

-n 使用ip不使用域名,速度更快

wget命令,下载

wget 网站

下载命令

SCP命令

scp [参数] [原路径] [目标路径]

  • 命令参数:

  • -1 强制scp命令使用协议ssh1

  • -2 强制scp命令使用协议ssh2

  • -4 强制scp命令只使用IPv4寻址

  • -6 强制scp命令只使用IPv6寻址

  • -B 使用批处理模式(传输过程中不询问传输口令或短语)

  • -C 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)

  • -p 留原文件的修改时间,访问时间和访问权限。

  • -q 不显示传输进度条。

  • -r 递归复制整个目录。

  • -v 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。

  • -c cipher 以cipher将数据传输进行加密,这个选项将直接传递给ssh。

  • -F ssh_config 指定一个替代的ssh配置文件,此参数直接传递给ssh。

  • -i identity_file 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。

  • -l limit 限定用户所能使用的带宽,以Kbit/s为单位。

  • -o ssh_option 如果习惯于使用ssh_config(5)中的参数传递方式,

  • -P port 注意是大写的P, port是指定数据传输用到的端口号

  • -S program 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。

  • 从本地服务器复制到远程服务器

复制文件:

1
2
3
4
$scp local_file remote_username@remote_ip:remote_folder
$scp local_file remote_username@remote_ip:remote_file
$scp local_file remote_ip:remote_folder
$scp local_file remote_ip:remote_file

指定了用户名,命令执行后需要输入用户密码;如果不指定用户名,命令执行后需要输入用户名和密码;

复制目录:

1
2
$scp -r local_folder remote_username@remote_ip:remote_folder
$scp -r local_folder remote_ip:remote_folder

第1个指定了用户名,命令执行后需要输入用户密码; 第2个没有指定用户名,命令执行后需要输入用户名和密码;

注解

从远程复制到本地的scp命令与上面的命令一样,只要将从本地复制到远程的命令后面2个参数互换顺序就行了。

  • 实例1:从远处复制文件到本地目录
1
$scp root@10.6.159.147:/opt/soft/demo.tar /opt/soft/

说明: 从10.6.159.147机器上的/opt/soft/的目录中下载demo.tar 文件到本地/opt/soft/目录中

  • 实例2:从远处复制到本地
1
$scp -r root@10.6.159.147:/opt/soft/test /opt/soft/

说明: 从10.6.159.147机器上的/opt/soft/中下载test目录到本地的/opt/soft/目录来。

  • 实例3:上传本地文件到远程机器指定目录
1
$scp /opt/soft/demo.tar root@10.6.159.147:/opt/soft/scptest

说明: 复制本地opt/soft/目录下的文件demo.tar 到远程机器10.6.159.147的opt/soft/scptest目录

  • 实例4:上传本地目录到远程机器指定目录
1
$scp -r /opt/soft/test root@10.6.159.147:/opt/soft/scptest

说明: 上传本地目录 /opt/soft/test到远程机器10.6.159.147上/opt/soft/scptest的目录中

用户和用户组管理

用户基本信息文件 /etc/passwd

account:password:uid:gid:用户说明:家目录:shell解释器所在位置

  • shell解释器的位置/bin/bash说明是允许登录的,但是/sbin/nologin就不能登录
  • 初始组和附加组,初始组的只能有一个,可以改但不建议,一个用户可以用多个附加组
  • uid为0时是管理员用户
  • passwd字段是x的意思是真实密码(加密后密码)存在/etc/shadow文件下 ,具体含义man 5 shadow

组信息文件 /etc/group

组名:password:gid:这个组中的附加用户

  • password真实加密密码在gshadow中

家目录 普通用户: /home/用户名/ root用户: /root/

用户邮箱 /var/spool/mail/用户名/

用户模板目录 /etc/skel/ 在新建用户时自动拷贝该文件夹下所有内容到新建用户的家目录

用户管理命令

添加用户

  • useradd [option] 用户名

    ​ -u 手工指定uid

    ​ -d 家目录

    ​ -c 用户的说明

    ​ -g 指定初始组

    ​ -G 指定附属组

    ​ -s 手工指定用户shell

修改密码

  • passwd [option] 用户名

    -l 锁定用户,禁止其登录

    -u 解锁用户

    –stdin 允许使用标准输入修改用户密码

    -d 允许使用空密码登录

    -e 强制用户下次登录时修改密码

    -S 显示用户的密码是否被锁定,以及密码采用的加密算法名称

  • who 可以查看当前登录的用户,w详细信息

    tty是本地终端,pts表示远程终端

  • userdel 用户名

    -

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

默认密码有效期 /etc/login/defs

修改用户

usermod [option] 用户名

-c 附加说明

-G 附加组

-L 锁定用户

-U 解锁用户

chage 用户名 修改用户密码状态

chage -d 0 用户名 # 当前用户名的shadow第三字段修改密码时间为0天,登录要求用户设置新密码

删除用户

userdel [option] 用户名

  • -r 删除用户的同时删除用户家目录
  • -f 强制删除

su 用户名

- 连带环境变量一起切换

-c 不切换身份用root身份执行一条命令

用户组管理

添加组

groupadd 组名

-g 指定gid

修改组

groupmod 用户名

-n 新组名

-g 修改组id

删除组

groupdel

将用户添加组或者从组中删除

​ gpasswd 选项 组名

-a 用户名 把用户加入组

-d 把用户从组中删除

加的都是附加组

权限管理

acl权限

补足linux中所属者所属组其他人权限配不足的问题,通过对单个用户分配不同的权限达到权限分配的目地

查看是否开启acl权限: dump2fs -h /dev/sda3 该命令用于查看值都能够文件系统详细信息

开启acl权限,默认已经挂载

如果没有acl权限就重新挂载分区

  • 临时

    mount -o remount,acl /

  • 永久

    • 修改fastab文件

      在defaluts后加入,acl

      之后重新挂载mount -o remount /或者重启

查看acl命令

getfacle 文件名

设定acl权限命令

setfacl [option] 文件名

-m 赋予权限使用 “u:用户名:权限” 的格式,权限写法rwx;“m:” 之后写入的权限是最大权限mask设定

  • 最大mask有效权限与删除

mask权限与acl权限相与之后才是最终权限

  • 删除acl权限

setfacl -x u:用户名 文件名

setfacl -x g:组名 文件名

setfacl -b 文件名/目录名

  • 递归acl权限

serfacl -m u:用户名 :权限 -R 文件名

  • 默认acl权限

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

文件特殊权限

如果设置了setuid那么所有者的权限就会变成rws原本x变成s

其余两个同理

  • setuid

    • 只有可以执行的二进制文件才能设定setuid权限
    • 执行者必须要有x权限
    • (在设置了setuid之后)命令执行者在执行文件会暂时获得文件所有者的身份
    • seruid权限只有在执行程序的过程中有效

    设定方法

    1
    2
    3
    4
    5
    6
    chmod 4755 文件名 #4表示suid
    chmod u+s 文件名

    #删除suid方法
    chmod 755 文件名
    chmod u-s 文件名

    该权限非常危险,应严格控制写权限

  • setgid

    • 只有可以执行的二进制文件才能设定setuid权限

    • 执行者必须要有x权限

    • (在设置了setuid之后)命令执行者在执行文件会暂时获得文件所属组的身份

    • setgid权限只有在执行程序的过程中有效

      针对目录功能

      • 普通用户必须对此目录拥有r和x权限才能进入此目录
      • 普通用户在此有效组会变成此目录的属组
      • 如果普通用户对此组有w权限,那么新建的文件默认属组是这个目录的属组

      设定方法与sgid类似,2表示sgid或者g+s

      1
      2
      3
      4
      5
      6
      7
        chmod 2755 文件名 #2表示sgid
      chmod g+s 文件名

      #删除sgid方法
      chmod 755 文件名
      chmod g-s 文件名

  • sbit(sticky bit)

粘着位

作用:user1创建的文件,user2没法修改和删除

前提:

  • 只对目录有效

  • 普通话用户对该目录拥有wx权限

    1
    2
    3
    4
    5
    6
    chmod 1755 目录名 #1表示sbit
    chmod o+t 目录名

    #删除sbit方法
    chmod 777 目录名
    chmod o-t 目录名

文件系统属性chattr权限

change atrribute

查看文件系统属性lsattr -a 文件或目录

a:显示所有文件和目录

d:目标是目录,仅列出目录本身的属性而不是子文件

针对root用户也生效

chattr [+-=] [选项][文件或目录]

i:如果对文件设置i,相当于只读;如果是目录,仅能对已存在文件内容进行修改

a:对于文件,只能在文件中写入新的数据(只能用ehco方式追加),不能删除和修改;对于目录允许新建和修改文件但是不允许删除

sudo权限

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

sudo的操作对象是系统命令

1
2
3
4
visudo 或者 vim /etc/sudoers
root all=(all) all
# 用户名 被管理主机地址 = (可使用的身份) 授权命令(绝对路径)

分区命令

查看分区信息disk free

​ df [option] [file name]

​ -a显示所有的文件系统信息

​ -h 使用习惯单位显示容量

显示目录和文件的大小data usage

​ du [option] [file name]

​ -a 显示每个子文件的磁盘占用量

​ -h 以习惯的单位显示磁盘占用

​ -s 统计占用量,不列出子目录和子文件占用量

挂载

mount [-l] 显示已经挂载的设备,-l 会显示卷标名称

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

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

光盘的文件系统是iso9660

特殊选项:

remount 重新挂载

exec/noexec 允许执行可执行文件或者禁止

挂载光盘

mount /dev/cdrom /mnt/cdrom/

第一个参数是系统默认的即为光盘的设备文件名也可以是sr0

第二个参数是挂载点,当前命令挂载在/mnt/cdrom/文件夹下

挂载u盘
  • 首先需要查询upan设备文件名

fdisk -l 找到u盘的设备文件名

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

设备文件名是刚刚upan的设备文件名,挂载点随意,linux系统建议mnt下

卸载设备

umount 设备文件名 / 挂载点

fdisk进行分区

拓展分区逻辑分区最后挂载分区

sdb1,2,3,4 为只能给主分区或者拓展分区,而不能给逻辑分区

5开始为拓展分区,拓展分区的作用是在拓展分区内建立更多的分区

  • fdisk -l 查询新硬盘信息
  • fdisk /dev/sdb(a) 使用(进入一个linux自带的分区程序,根据提示完成分区)
  • partprobe 重新读取分区表信息
  • mkfs - t ext4 [刚刚创建的分区] 格式化已创建的分区,只能格式化逻辑分区和主分区,不能格式化拓展分区,格式化之后才可以挂载
  • 使用mount 挂载

自动挂载和fstab文件修复

  • fstab文件修复仅出现在centos7以下的系统

自动挂载实现形式: 修改/etc/fstab文件内容

  • 第一个字段,分区设备文件名或者uuid
  • 第二字段:挂载点
  • 第三字段:文件系统名
  • 第四字段:挂载参数
  • 第五字段:系统是否定期备份,0表示不备份,1表示每天备份,2表示不定期备份
  • 第六字段指定分区是否被fsck检测,0表示不检测,其他数字代表检测的优先级高,1>2

修改完成后进行操作mount -a,

该命令根据fstab文件自动挂载分区,开机自动挂载

如果是centos 7以下 的系统,如果修改错误fstab文件会导致系统异常无法启动,根据命令输入root密码进入提示符界面

首先要给文件mount –o remount,rw /重新挂载该文件为读写,就可以进入/etc/fstab中修改

分配swap分区

  • 查询内存和swap分区占用情况 free
  • 新建swap分区 fdisk /dev/sdb,并且将id改为82
  • swap分区特有的格式化命令 mkswap /dev/sdb6
  • 加入swap分区 swapon /dev/sdb6,取消用是swapoff
  • 最后加入/etc/fstab开机自动挂载

shell

使Linux系统可以识别出该文件是个shell脚本方法,在文件的开头添加:

1
#! /bin/bash

的声明,该#不是注释内容而是声明

  • echo

    -e 支持转义符号\

    “ “,引起的内容输出

    执行shell脚本:

    1. 赋予执行权限直接运行:chmod 755 hello.sh or ./hello.sh
    2. 通过调用bash执行脚本 bash hello.sh

遇到无法执行的shell脚本,因为该脚本是在windows环境下写成的,回车符是M$而Linux是$,需要用dos2unix命令转换脚本回车识别符使Linux支持,该命令可以用在线包管理获取;

  • history

-c 清空历史命令

-w 把缓存的历史命令写入历史命令保存文件

~./bash_history

默认保存1000条,可以从/etc/profile中修改环境变量配置文件

  • 自动补全,如果唯一,一下tab,两个以上,两下tab把有的都列出来
  • 命令别名

alias 别名=‘命令’

等号两边不能有空格

让别名永久生效,修改文件vi /root/.bashrc

删除别名 unalias 别名

  • 快捷键

ctrl+c 终止当前命令

ctrl+l 相当于clear

ctrl+u 删除/剪切 一行已经输入的命令

ctrl+y 粘贴剪切的命令

ctrl+r 搜索命令

ctrl+d 退出当前终端

  • 标准输入输出

    设备 设备文件名 文件描述符 类型
    键盘 /dev/stdin 0 标准输入
    显示器 /dev/stdout 1 标准输出
    显示器 /dev/stderr 2 标准错误输出
  • 输出重定向

把原本应该输出到屏幕的信息,写到文件,称为重定向

命令>文件 覆盖

命令>>文件追加

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

错误正确都可以写入

命令 >> 文件 2>&1 追加

命令 > 文件 2>&1 覆盖 /dev/null 文件黑洞,不会

/dev/null 文件黑洞,不会输出任何结果

# 把正确的和错误的分开保存

命令>>log1 2>>log2 把正确的命令结果输入到log1,把错误的命令结果输出到log2

  • 输入重定向

wc -c统计字节数 -w统计单词数 -l统计行数

从文件输入命令

wc < 文件

多命令顺序执行和管道符

字符 格式 作用
; 命令1 ;命令2 没有逻辑联系,第一条命令执行完执行第二条
&& 命令1&&命令2 与关系,命令1正确执行命令2,反之都不执行
|| 命令1||命令2 或关系,命令1正确不执行2,1不正确执行2
  • 管道符

命令1 |命令2

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

例如: ll -a /etc/ | more more本来是分页显示文件内的内容,用管道符链接可以将命令的结果分页显示

  • grep -i忽略大小写 -n输出行号 -v反向查找 –color=auto自动显示颜色

    grep 搜索内容 文件名

    grep也是对文件进行操作,结合管道符可以对命令的输出进行操作

  • netstat -an | grep "ESTABLISHED"列出网络服务中已经建立连接的

  •  通配符
    

? 代表一个任意字符

* 代表0个或者多个

[] 匹配内容中任意一个字符

[-] -表示一个范围,a-z就是匹配一个小写字母

[^] 逻辑非

定义变量

  • 自定义变量(本地变量)
1
2
3
log ="money"
echo $log
set #显示所有的变量

和py相同,shell中也不需要对变量进行定义,输出变量是需要加上$符号

变量名和等号之间不能有空格

单引号以字符串的形式输出,双引号输出变量的内容

$() 小括号中的字符串会当作系统命令

可以用转义\符号忽略$符号的特殊意义,利用花括号来限定一个变量的开始和结束比如

1
2
log = "money"
echo"i have lots of ${log}"
  • 环境变量
1
2
3
export 变量名 = 变量值 #定义环境变量
env #查询环境变量命令
unset 变量名 #删除环境变量

PATH 系统查看命令路径的地址,用冒号分割

将自己写的脚本放入环境变量推荐用变量叠加PATH = "$PATH":/脚本存放目录

PS1 定义系统提示符变量,需要改时再查

  • 位置变量

位置参数变量的变量名称是固定的

位置参数变量 作用
$n n表示数字,$0表示命令本身,$1-$9表示第一个到第九个参数,10以上的需要用大括号包含如${10}
$* 包含所有参数的列表,看作一个整体
$@ 包含所有参数的而列表,但把每个参数区分对待
$# 包含所有参数的个数

位置参数一般跟在shell脚本的后面bash test.sh 参数1 参数2 参数3

位置变量用于传递参数,可以类比成一个内建的数组。

$1保存的是第一个参数,$2保存的是第二个参数…以此类推(比如cp有两个参数,第一个参数保存在$1)

$0用于保存该脚本的名字

  • 预定义变量
预定义变量 作用
$? 最后一次执行命令返回状态。返回值为0表示命令正确执行,返回非0即为报错
$$ 当前系统的进程号(pid)
$! 后台运行的最后一个进程号

接收键盘输入

read [选项] [变量名]

-p 提示信息

-t 秒数

-n 字符数,接受到n个字符之后直接执行不用回车

-s 隐藏输入数据

数值运算和运算符

declare [+/-] [选项]变量名

- 给变量设定烈性数据

+ 取消类型属性

-i 设定变量为整型

-x 将变量声明为环境变量

-p 显示指定的变量为被声明的类型

  • expr和let数值运算工具

$(expr $a + $b)

变量测试和内容替换

作用:通过x的值来判断y是否有值

用到再查

变量测试和内容替换

数值运算 **$((运算式)) 或者$[运算式]**(常用)

两个小括号或者一个中括号就可以进行数值运算

判断用户的参数(条件判断)

测试语句:[ ],一个中括号两边都要有一个空格

操作符号 作用
-d 文件是否为目录类型
-e 文件是否存在
-f 是否为一般文件
-r 是否有权限读取
-w 是否有权限写
-x 是否有权限执行

注意:返回值为0表示真,1表示假

[ -d /etc ] && echo”yes” || echo “no”

$?可以测试上条测试语句的执行的返回值

  • 文件比较

file1 -nt file2 文件1是否比文件2新,new than

file1 -ol file2文件1是否比文件2旧

file1 -ef file2 是否为同一个文件,比如判断两个文件是否是硬连接

  • 整数之间比较

-eq equal

-ne not equal

-gt great than

-lt low than

-ge great eauql

-le low equal

  • 字符串判断

-z 字符串 是否为空(空true)

-n 字符串 是否为空(非空 ture)

字符串1 == 字符串2

字符串1 != 字符串2

  • 多重条件判断

判断1 -a 判断2 逻辑与,and

判断1 -o 判断2 逻辑或,or

! 判断,取反

环境变量

让当前的配置文件生效,不用重启

source 配置文件 或者`. 配置文件

  • 环境变量配置文件

PATH HISSIZE PS1 HOSTNAME

  • 环境变量配置文件存放位置

etc目录下任何用户都会生效

/etc/profile

/etc/profile.d/*.sh

~/.bash_profile 此条和下一条是登录用户的家目录只有当前登录用户和root可以执行和查看

~/.bashrc

/etc/bashrc

  • 其他环境变量

    • 注销时生效的环境变量配置文件

      ~/.bash_logout

    • 历史命令配置文件

      ~/.bash_history

    • 本地终端登录信息/etc/issue

    • 远程登录信息/etc/issue.net

    • 登录后信息/etc/motd

正则表达式

  • 通配符是用来匹配符合条件的文件名,通配符是完全匹配;正则匹配的是文件中的匹配符合条件的字符串,是包含匹配

基础正则表达式

元字符 作用
* 前一个字符匹配0次或者仍以多次
. 匹配除了换行符外的任意一个字符
^ 匹配行首.例如^hello会匹配以hello开头的行
$ 匹配行尾
[] 匹配括号中指定的任意一个字符,只匹配一个字符
[^] 取反
\ 转义
\{n\} 前面出现的字符恰好出现n次(这里\是转义,取消{}}特殊含义)
\{n,\} 表示前面的字符出现不小于n次
\{n,m\} 表示前面的字符至少出现n次至多出现m次

grep "正则表达式" 文件名

字符串截取命令

cut 字符截取命令

  • (只能适用于tab进行分割或者指定的符号进行分割情况比如”:”用-d指定)

cut [option] 文件

-f 列号 提取第几列

-d 分隔符 按照指定的分隔符分割列

比如:test.txt文件中有ab!cd的数据

1
2
cut -d "!" -f 1#输出ab
cut -d "!" -f 2#输出cd

printf 命令

printf '输出类型输出格式' 输出内容

输出内容:

%ns :输出字符串.n是表示几个字符

%ni:输出整数,n表哦是几个数字

%m.nf 输出浮点数,m表示总共输出几个位,n表示小数位数

输出格式:

\n 换行

\t 制表

\r 回车

1
2
3
printf '%s' test.txt # out:"test.txt"
cat test.txt | printf '%s' #没有输出
printf '%s' $(cat student.txt) #只有这种括号里系统命令的方式才可

awk 命令

awk '条件1 {动作1} 条件2{动作2}...' 文件名

BEGIN{print “test!”} #会在所有的执行之前完成

END #在所有命令执行之后再执行

{FS=”:”} #指定分隔符

动作:

  1. 流程控制
  2. 格式化输出

举例:输出非规则数量空格的命令截取

1
df -h | awk '{print $1 "\t" $5}' #输出系统容量占用的第一列和第五列

sed 命令

sed命令也是一个文本编辑器,和vim一样,但是vim只能修改文本,不能修改命令输出

sed [option] '[动作]' 文件名

-n 加了-n会只将sed命令处理的结果输出到屏幕

-e 允许对输出应用多条sed命令编辑

-i 用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出

动作:

a : 追加,添加一行或者多行,添加多行时要加\表示数据未完结,2a表示第二行之后插入

c : 行替换,用c之后的字符替换原数据行,替换多行时要加\表示数据未完结

i :插入,再当前行前插入一行或者多行,插入多行时结尾要加\表示数据未完结,2i在第二行之前插入

d :删除指定行,2,4d的意思为删除2-4行

p:打印输出指定行,2p第二行

s:字符替换,用一个字符替换另一个字符串 行范围s/旧字符串/新字符串/g

字符处理命令

排序命令

sort [option] 文件名

默认按照字母顺序排序

-f :忽略大小写

-n : 以数值型进行排序

-r :反向排序

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

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

统计命令

wc [option] 文件

-l 只统计行数

-w 只统计单词数

-m 只统计字符数

流程控制语句

if

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if test-commands #test-commands就是条件判断式用[]括起来的测试语句
then
commands
fi

#多分支的if语句
if test-commands-1
then
commands-1
elif test-commands-2
then
commands-2
...
else
commands
fi

值得注意的是,if语句中的条件判断不是以1为真执行的,而是判断块相当于一个函数,该函数的返回值如果为0,则if条件成立,如果不为0,则条件不成立,为假。同样的判断语句块不仅在此成立,while和until中同样适用。

case

1
2
3
4
5
6
7
8
9
case word in 
pattern-1)
commands-1
;;
pattern-2)
commands-2
;;
...
esac

;;符号相当于break语句

while & until

1
2
3
4
5
6
7
8
9
while test-commands
do
commands
done

until test-commands
do
commands
done

while和until的区别在于,while是语句块成真(返回值为0)时做do,而until时当语句块为假(返回值为1)时做do

for

1
2
3
4
5
6
for variable in list #这个list可以是单独的文件比如1.txt 2.txt也可以是cat test.txt然后文件中有空格或者tab分割相当于py中的列表  
do
commands
done
# 或者常规编程语言的习惯
for(( i=1;i<=100;i++ ))

function

1
2
3
4
function funname()
{
return int;
}

数组

例如a=(1 2 3 4 5)

服务

服务分类:

  1. rpm包默认安装的服务(独立的服务,基于xinetd的服务)
  2. 源码包安装的服务

xinetd后台管理一系列独立的服务,用户只能通过访问xinetd的服务间接访问后台管理的服务

而独立的服务就是直接可以在内存中被访问到而不需要经过xinetd

查询rpm已经安装的服务:

chkconfig –list #查看自启动查看命令rpm # unbuntu下使用sysv-rc-conf工具

  • ps aux
  • netstat -tlun

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

rpm包安装的服务

  • rpm包服务产生的数据:/var/lib/
  • rpm包服务产生的日志:/var/log/

rpm包独立服务的管理

启动脚本的位置:/etc/init.d/

初始化配置文件:/etc/sysconfig/

启动命令:/etc/init.d/服务名 start|stop|status|restart 或者service 服务名 start|stop|status|restart

查看所有服务安装的状态:service --status-all

修改自启动*方法:

  • 修改/etc/rc.local文件:往文件中加入 标准的绝对路径启动命令,就会开启自启动服务(适用于源码包安装和rpm包安装的服务)
    • /etc/rc.local 的作用是在开机之后用户输入密码之前运行的脚本
  • ntsysv命令启动管理自启动,类似setup. (ubuntu中用sysv-rc-conf替代)

rpm包基于xinetd服务的管理

启动脚本的位置:/etc/xinetd.d/

xinetd配置文件:/etc/xinetd.conf

xinetd服务的启动:

修改/etc/xinetd.d/服务名中的disable来启动服务,修改完配置文件后需要重启xinetd的服务,service xinetd restart

  • xinetd中启动和自启动没区别,更改了配置文件启动后,自动开机启动.

源码包安装服务

  • 启动

在源码包中找到安装说明打开,找到启动的绝对路径,终端输入回车,即绝对路径 start|stop|status|restart

  • 自启动

在源码包中找到安装说明打开,找到启动的绝对路径就可以,写入/etc/rc.local文件中

  • 让源码包服务可以被服务管理命令识别(service 服务名)

只需要做一个软连接

ln -s 启动命令 /etc/init.d/自定义一个服务名

ssh 服务

  • 开启密钥关闭密码

    1. 生成密钥对

    ssh-keygen -t rsa 生成public key & private key

    /root/.ssh/id_rsa为private key

    /root/.ssh/id_rsa.pub为public key

    复制private key到本地进行,给予权限

    1. 修改ssh配置

      /etc/ssh/sshd_config

      1
      2
      3
      PasswordAuthentication no
      PubkeyAuthentication yes ##使用key登录
      AuthorizedKeysFile .ssh/authorized_keys ##public key的名字

记得重启sshd服务

service sshd restart

  1. 尝试登录

    尝试用密钥登录

linux系统管理

进程管理

查看系统当中所有进程ps

1
2
ps aux   #unix标准,bsd操作格式
ps -le #linux标准

输出七个字段的解释:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

VSZ:占用虚拟内存大小,单位kB

RSS:占用实际物理内存大小,单位KB

TTY:终端号,tty1-7代表本地控制终端,1~6是本地字符终端,tty7是图形终端,pts/0-255代表虚拟终端(远程登录)

STAT:status,R运行,S睡眠,T停止,s包含子进程,+位于后台

START:启动时间

TIME:cpu运算时间

COMMAND:产生进程的命令 

查看系统状态

top [option]

-d 秒数,默认是三秒更新一次

P    cpu使用率排序,默认即为此项

M    以内存的使用率排序

N     以pid排序

q   退出top

查看进程树

pstree [option]

-p :显示进程pid,详细显示

-u:显示进程的所属用户

终止进程

  1. kill命令(根据pid终止进程)

    kill [signal] 进程pid#-l显示所有数字选项

    -1 重启

    -9 强制终止

    -15 默认信号,即正常终止进程

  2. killall命令(根据进程名终止进程)

    kill [option] [signal] 进程名

    option:

    -i 交互式,会询问是否要杀死某个进程

    -I 忽略进程名大小写

    signal和kill命令一样

  3. pkill命令

    按照进程名终止进程,和killall相同

    pkill [option] [signal] 进程名

    多了一个选项-t 终端号按照终端号(终端号就是TTY的值)踢出用户

    • 使用w查询本机已经登录的用户

    • 踢出用户pkill -t -9 终端号

工作管理

任务后台

  1. 在一条命令的结尾加入一个”&”,系统会在后台执行任务直到完成任务
  2. 在任务执行的过程中,ctrl+Z表示暂停任务(ctrl+C表示结束)

查看后台在执行的任务

jobs [option]

-l 显示pid

“+”表示最后一个放入后台的工作,默认恢复的工作

“-“表示倒数第二个放入后台的工作

恢复后台暂停的任务到前台

fg %工作号

工作号是jobs的第一个字段的数字

%号可以省略,恢复的就是jobs中显示+号的任务.

kill %工作号

把后台暂停的任务继续后台执行

bg %工作号

系统资源查看

  1. vmstat监控系统资源

    vmstat [刷新延时][刷新次数]

  2. dmesg开机时内核检测信息,cpu等硬件信息

  3. free [-b | -k | -m | -g] 内存使用状态

    -b 以字节为单位显示

    -k 以KB为单位显示

    -m 以MB为单位显示

    -g 以GB为单位显示

  4. cat /proc/cpuinfo 显示cpu信息

  5. uptime 显示top的第一行

  6. uname [option]

    -a 查看系统的所有信息

    -r 查看内核的版本

    -s 查看内核的名称

    -m 查看操作系统位数

  7. linux发行版本 lsb_release -a

  8. lsof [option]列出进程打开或使用的文件信息

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

    -u 用户名 : 只列出某个用户的进程打开的文件

    -p pid :列出某个pid进程打开的文件

    lsof -i :[port]查看某个port的端口号

定时任务crond

  • 一次性计划任务at(atom)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    #在23:20重启网站服务
    at 23:30 # 进入交互式模式
    at> systemctl restart httpd
    at> 按下ctrl+d
    at -l #列出所有的一次性定时性任务
    atrm [数字] # 根据上一条命令列出的序号选择删除

    #不采用交互式直接写计划任务
    echo "systemctl restart httpd" | at 23:30
  • 长期性计划任务

    crontab [option]

    -e 编辑crontab定时任务

    -l 查询现有的crontab任务

    -r 删除当前用户所有的crontab任务

    如果是当前用户直接crontab -e进入编辑状态

    格式 : 分、时、日、月、星期 命令

    分0-59,一个小时的第几分钟

    时0-23

    日1-31

    月1-12

    星期 0,7都代表礼拜日

    *代表任何时间

    ,表示不连续的时间

    -表示连续的时间范围

    */n 表示每隔n分钟执行一次

    1
    2
    3
    4
    5
    6
    7
    #当前用户下指定定时任务
    crontab -e#回车就可以进入编辑页面
    #usage:
    crontab [ -u user ] file
    crontab [ -u user ] { -l | -r | -e }
    #example,相当于进入了一个crontab文件里面,直接写命令就行
    crontab -r

    注意

    • 除了用逗号(,)来分别表示多个时间段,例如“8,9,12”表示8月、9月和12月。还可以用减号(-)来表示一段连续的时间周期(例如字段“日”的取值为“12-15”,则表示每月的12~15日)。以及用除号(/)表示执行任务的间隔时间(例如“*/2”表示每隔2分钟执行一次任务)
    • 在crond服务的计划任务参数中,所有命令一定要用绝对路径的方式来写

日志管理

/var/log/cron 记录了定时任务相关日志

/var/log/cups/ 记录了打印信息的日志

/var/log/dmesg 记录了系统在开机时自检的信息

/var/log/btmp 吧记录错误登录的日志,该文件是个二进制文件,只能用lastb命令查看

/var/log/lastlog 记录系统中所有用户最后一次登录时间日志,也是二进制文件,用lastlog命令查看

/var/log/maillog 记录邮件信息

/var/log/message 记录系统重要的信息的日志

/var/log/secure 记录验证和授权的方面信息,设计用户密码都会记录

/var/log/wtmp 永久记录所有用户的登录注销信息,记录的用户的启动重启关机时间,只能用last命令查看

/var/run/utmp 记录当前已经登录的用户信息,文件会伴随着用户的登录和注销不断的变化,只能用w,who,users命令来查看

rsyslogd日志服务

基本日志包含四列:

  • 事件发生的时间
  • 产生时间的主机名
  • 产生事件的服务名
  • 产生的日志具体信息

/etc/rsyslog.conf 配置文件内容

例子: authpriv.* /var/log/secure

#服务名称 [连接符号] 日志等级 日志所在的位置

  • 服务名称

    服务名称 说明
    auth 安全和认证相关消息(不推荐用authpriv替代)
    authpriv 安全和认证的相关消息
    cron 系统定时任务cront和at产生的日志
    daemon 各个守护进程相关的日志
    kern 内核产生的日志
    local10-local7 为本地服务使用预留的服务
    lpr 打印产生的日志
    ftp ftp守护进程产生的日志
  • 连接符号

    连接符号 识别等级
    * 表示所有的日志等级.比如authpriv.*表示authpriv认证服务信息产生的日志所有的日志等级都记录
    . 代表只要比后面等级高的(包含该等级)日志都记录下来,比如cron.info就是代表cron产生的日志比info高的都记录
    .-= 表示只记录所需要的等级,,其他等级不仅录
    .! 表示除了该等级的日志外其他等级都记录
  • 日志等级

    等级名称 说明
    debug 一般的调试信息的说明
    info 基本的通知信息
    notice 普通信息,但有一定重要性
    warning 警告等级,但还不会影响服务和系统运行
    err 错误信息,说明可以影响到服务或系统运行
    crit 临界状态信息
    alert 警告状态信息,必须立即采取行动`
    emerg 紧急等级信息,系统gg或即将gg

日志轮替

  • 日志文件的命名规则

    • 如果配置文件中有dateext参数,就会以日期作为日志文件的后缀

    • 如果没有加dateext参数,日志温煦会自动改名,按照自然数序列自动往上加

  • 日志轮替的配置文件

    /etc/logrotate.conf

    参数 参数说明
    daily 日志轮替的周期是每天
    weekly 周期是每周
    monthly 每月
    rotate 数字 保留日志文件的个数,0是没有备份
    compress 日志轮替时,旧的日志进行压缩
    create mode owner group 建立新的日志,同时指定新日志的权限和所有者和所属组.如create 0600 root utmp
    mail address 日志轮替的时候,输出内容通过右键发送到指定邮件地址.mail 邮件地址
    missingok 如果日志不存在,忽略该日志警告信息
    notifempty 日志为空文件,则不进行日志轮替
    minsize 大小 日志轮替的最小值,只有日志达到这个值才会轮替
    size 大小 日志只有大于指定大小才会轮替,而不是按照时间轮替. 比如 size 100k
    dateext 使用日期作为日志轮替文件的后缀

rpm包安装不需要手动做日志轮替,只有源码包需要

logratate命令

logrotate [option] 配置文件名 默认的配置文件为/etc/logrotate.conf

-v 显示日志轮替的过程,

-f 强制日志轮替,忽略条件是否符合.

启动管理

运行级别

运行级别 含义
0 关机
1 单用户模式,主要用于系统修复
2 不完全的命令行模式,不含nfs服务
3 完全的命令行模式,就是标准字符界面
4 系统保留
5 图形模式
6 重启动
  • 运行级别命令
1
2
runlevel #查看运行级别
init 运行级别 #改变运行级别命令
  • 系统默认运行级别

​ 在文件/etc/inittab,修改配置文件即可.

​ 这个配置文件在最新的发行版中以及不生效了,sudo systemctl set-default runlevel5.target运行级别相同,语法改成如上即可

启动过程

![linux sys ](https://github.com/LycsHub/ImageHosting/raw/master/linux sys .jpg)

“内核解压并且自检”这一步之后因为linux默认调用的是ide接口的驱动无法加载sata接口硬盘,而装有sata驱动模块在硬盘中,形成死锁.

为了解决这个问题linux引入了一个叫做initramfs的文件放在boot目录下,在mbr加载引导程序的时候加载这个文件,这个文件是一个类似整个linux的文件系统目录的文件,被系统内核加载之后linux可以跳过读取硬盘的步骤,直接在iniramfs中读取所需要的驱动和依赖,解决死锁问题

在”挂载真正的根目录”后系统开始调用启动程序,并且根据各种文件确定启动的系统的运行级别和需要启动的服务,最后进入系统完成开机

  • 关于调用/etc/rc[0-6].d文件

    由这个脚本文件按照不同的运行级别启动相应的程序,

    • k开头的文件是按照数字顺序默认关闭(kill)
    • s开头的文件是按照数字顺序默认启动(start)

grub配置文件

/boot/grub/grub.conf

![linux grub](https://github.com/LycsHub/ImageHosting/raw/master/linux grub.jpg)

该文件中default=0是启动第一个操作系统

timeout是等待时间

hiddenmenu是隐藏菜单

grub加密和调整字符界面分辨率

grub加密

  1. 生成加密密码串 grub-md5-crypt
  2. 在grub.conf中加入password --md5 加密后内容

字符界面分辨率调整

没啥屌用

系统修复模式

  • 单用户模式

在grub启动的界面选择按e进入编辑然后选择内核接着按e,quit后加一个1保存后退回界面然后b启动

  • 光盘修复模式

    1
    2
    3
    4

    #先进入救援模式
    #以下演示的例子是误删文件inittab

chroot /mnt/sysimage#更改主目录进入系统

cd /root

rpm -qf /etc/inittab #查询/etc/inittab属于哪个包

mkdir /mnt/cdrom #建立挂载点

mount /dev/sr0 /mnt/cdrom #挂载光盘

rpm2cpio /mnt/cdrom/Packages/包名 | cpio -idv ./etc/inittab # 提取inittab到当前目录
cp /etc/inittab /etc/inittab #复制文件到指定位置

数据备份

需要备份目录:

/root

/home

/var/spool/mail

/etc

其他目录

  • apache备份的数据
    • 配置文件
    • 网页主目录
    • 日志文件
  • mysql需要备份的数据
    • 源码包:/usr/local/mysql/data
    • rpm包:/var/lib/mysql

备份命令

  • dump命令

    dump [option] 备份后文件名 源文件或者目录

    -level:0-9个备份等级

    -f:文件名

    -u:备份成功后,把备份时间记录在/etc/dumpdates文件

    -v:显示备份过程中输出更多信息

    -j:调换bzlib库压缩备份文件,其实就是把备份文件压缩为.bz2格式

    -W:显示允许被dump的分区备份等级及备份时间

  • restore命令

    restore [mode] [option]

    4个模式不能混用

    -C 比较备份数据和实际数据的变化

    -i 进入交互模式,手工选择需要恢复的文件

    -t 查看模式,用于查看备份文件中用有哪些数据

    -r 还原模式,用于数据还原

    option

    -f 指定备份文件的文件名

杂项

apt-get install lrzsz安装lrzsz让linux支持xshell自带的zmodem

  • 缓存cache和缓冲buffer的区别

  • cache是利用内存加速数据从硬盘读取的速度

  • buffer则是利用内存加速数据写入硬盘的速度

init3下终端输入中文方法:

利用:zhcon,输入命令zhcon --utf8

进入终端界面后使用CTRL+2进行输入法切换

ubuntu 图形化,应用中心的图标快捷方式,应用在/usr/share/application

  • mysql开启远程访问

使用SSH连接到服务器,登录到MySQL

1
mysql -u root -p 数据库root密码

写入SQL语句,开启远程访问

1
2
mysql>  use mysql;
mysql> update user set host = '%' where user = 'root';

运行下面的语句,查看设置是否生效(显示%的值)

1
select host,user from user where user='root'

退出MySQL命令,回到Linux命名模式,重启MySQL

1
systemctl restart mysqld

https://support.websoft9.com/docs/mysql/zh/stack-accounts.html#mysql

https://support.websoft9.com/docs/linux/zh/#%E6%94%B9%E8%BF%9B

iconv -f gbk -t utf-8 index.html > aautf8.html