Linux总结

文章目录

  • 1. Linux基础操作
  • 2. 文件管理
    • 2.1 目录操作命令
    • 2.2 文件查看命令
    • 2.3 文件操作命令
    • 2.4 文件权限命令
    • 2.5 文件查找命令
  • 3. Vi文本编辑器
    • 3.1 vi编辑器的启动与退出
    • 3.2 文件操作
    • 3.3 光标移动和翻页操作
    • 3.4 vi常用命令
      • 3.4.1 一般模式下的常用命令
      • 3.4.2 编辑模式下的常用命令
      • 3.4.3 命令行模式下的常用命令
    • 3.5 Vim
  • 4. 设备管理
    • 4.1 文件系统的简单操作
    • 4.2 磁盘分区指令
    • 4.3 磁盘格式化指令
    • 4.4 检查磁盘
    • 4.5 硬盘挂载指令
    • 4.6 挂载不同存储介质
  • 5. 软件包管理
    • 5.1 压缩命令
    • 5.2 tar命令
    • 5.3 RPM
    • 5.4 YUM
  • 6. 用户和群组管理
    • 6.1 群组账号切换
    • 6.2 账号管理
    • 6.3 群组账号管理
    • 6.4 转换身份指令
    • 6.5 系统用户查询
  • 7. Bash Shell
    • 7.1 变量相关
    • 7.2 Shell指令
    • 7.3 字符处理
      • 7.3.1 选取指令
      • 7.3.2 排序指令
      • 7.3.3 统计指令
      • 7.3.4 双重导向指令
      • 7.3.5 字符转换指令
      • 7.3.6 拆分指令
    • 7.4 正则表达式
      • 7.4.1 通配符与特殊符号
      • 7.4.2 正规表达式
      • 7.4.3 扩展正则表达式
    • 7.5 sed工具
  • 8. Shell Script
    • 8.1 脚本的执行
    • 8.2 判断指令
    • 8.3 脚本语法
  • 9. 其他
    • 9.1 进程管理与系统监视
    • 9.2 系统服务和任务定制

1. Linux基础操作

显示日期
date
显示日历
cal [month] [year] 显示日历
联机帮助命令
man/info
用户注销
logout/exit
查看当前在线用户
who
查看联机状态
netstat -a
查看后台执行程序
ps –aux
清屏
clear
关机
shutdown [-kh] time [‘msg’]

-k:仅发送警告,不是真的关机
-r:将所有的服务停止后重启(常用)
-h:将所有的服务停止后关机(常用)

重启
reboot [-n] [-w] [-d] [-f] [-i]

-n:重启前不进行回填操作
-w:并非真的重启,而是把记录写入到文档
/var/log/wtmp中去
-d:不把记录写入上述文件中
-f:强制重启
-i:将网络相关装置停止后再重启

2. 文件管理

2.1 目录操作命令

显示当前的工作目录

pwd [-p]

-p 显示出实际路径,而非使用连接的路径

切换当前的工作目录

cd [相对路径或绝对路径]

cd ~user表示去user的家目录
cd . 表示当前目录
cd . . 表示父目录
cd ~ 返回当前用户主目录
cd - 返回用户上次所在的目录

显示指定目录和文件的信息

ls [-aAdfFhilRS] 目录名

-A 列出所有条目,除了 .(点)和 …(点-点)
-a 列出目录中所有项,包括以 .(点)开始的项
-l(L 的小写)显示方式、链接数目、所有者、组、大小(按字节)和每个文件最近一次修改时间
-d列出目录本身,而不是目录内的文件
-r反转排序顺序,适当的按字母逆向排序或者首先排序最旧的文件
-R递归列出所有子目录
-h 将文件的容量以易读的方式显示
-li 查看文件占用的inode号码

ls [–color={none,auto,always}] 目录名

–color=never 不要按照文件属性用不同的颜色
–color=always 显示颜色
–color=auto 让系统自行设置是否显示颜色

ls [–full-time] 目录名

–full-time 以完整的时间模式输出
–time={atime,ctime} 输出访问时间或者是改变权限的时间,而非是修改时间

创建指定名称的目录

mkdir [-mp] 目录名

-p 创建丢失中间路径名称目录;如果没有指定 -p 标志,则每个新创建的目录的父目录必须已经存在
-m 设置新创建的目录的权限,不管默认权限

删除指定名称的目录
rmdir [-p] 目录名

-p 沿着参数指定的路径名除去所有目录;父目录必须为空且在可以除去父目录前,用户必须有父目录的写权限

2.2 文件查看命令

显示文件文本内容
cat [-AEnTv] 文件名

-n 或 --number 由 1 开始对所有输出的行数编号
-v 将非打印字符显示为可视字符,除了跳格符、换行符和换页符;
-E 在每行末尾显示一个 $(美元符号)
-T则将跳格字符显示为 ^I,与-v联合使用;- t= -vT
-A 等同于-v E t

cat filename1 > filename2 :将filename1中的内容复制到自动新建的filename2中
cat file1 file2 > file3 :把文件file1和文件file2的内容合并起来,放入文件file3中

从最后一行开始显示,tac和cat字母顺序相反
tac 文件名
显示的时候,输出行号
nl [-bnw] 文件名

-b:制定行号的指定方式
-b a:表示不论是否为空行,同样列出行号
-b t:如果有空行,空行不要列出行号
-n:列出行号的表示方法
-n ln:行号在字段的最左方显示
-n rn:行号在字段的最右方显示,不加0
-n rz:行号在字段的最右方显示,加0
-w:行号字段占用的位数

分页显示文本文件内容
more 文件名

more 命令读文件,而且每次一屏显示文本;此命令在每屏后暂停,并在屏幕底部打印单词 More;
回车键: more 命令会再显示一行;
空格键: more 命令显示文本的另一屏。
b/ctrl+b:往回翻页
:f:立刻显示文件名以及目前的行数
q :结束查看

less 文件名

pageup
pagedown
/ 向下搜索
? 向上搜索
:f:立刻显示文件名以及目前的行数

显示文件首部内容
head [–n Num] 文件名

-n 选项用来指定从每一要显示的指定文件的开头的行数

显示文件尾部内容
tail [-n num] 文件名

+Num 显示从第Num行开始至文件尾的内容
-Num 显示从距文件尾Num行开始至文件尾的内容
-f 如果文件内容正在增长中,此选项则动态显示增长的内容,直到用户使用“Ctrl+C”结束

2.3 文件操作命令

显示指定文件的类型
file 文件名
建立指定名称的文件或更新文件时间
touch [-opt] 文件名

-c修改文件的时间,如果文件不存在,则不要进行创建
-a更改文件的访问时间
-m更改 文件 的修改时间
-t Time使用指定时间而不是当前时间

复制文件或目录
cp [-options] 源文件 目标文件
cp [-options] 源文件1 源文件2 源文件3 目标目录

-a (相当于-pdr)复制目录时使用,保留链接、文件属性、并递归地复制目录(常用)
-d 若源文件是连接文件,则复制连接文件而非文件本身
-f 如果指定的目标文件存在,先强行覆盖
-i 覆盖目标文件前需要用户先确认(常用)
-p 复制文件,包括其修改时间和访问权限(备份文件)
-r 复制目录时可递归复制目录中的内容(常用)
-l 进行硬连接的连接文件的创建
-s复制成为符号链接文件,即创建快捷方式
-u复制的文件比源文件新时才更新(备份文件)

删除文件或目录
rm [options] file/dir

-f 在删除有写保护的文件前不提示
-i 删除每个文件前提示
-r 当目标参数为目录时递归删除目录及其内容
-R 同-r

移动文件或目录,文件或目录重命名
mv [opt] source destination
mv [opt] source1 source2 source3 destination

-f:强制直接转移不询问
-i:若目标文件已经存在询问是否覆盖
-u:若目标文件已经存在,但源文件比较新,则更新

2.4 文件权限命令

修改文件权限
chmod[选项]xyz / [ugoa][±=][rwx] 文件名
chown [选项]用户或组 文件名
chgrp [选项] 组名 文件名

-f:若文件或目录权限无法被更改也不要显示错误信息。
-v:显示权限变更的详细资料。
-R 递归式地改变指定目录及其所有子目录、文件的文件主

设置新建文件权限的掩码
umask [模式]
设置文件的隐藏属性
chattr [±=] [ASacdistu] 文件或目录

A:文件或目录的 atime (access time)不可被修改(modified), 可以有效预防例如手提电脑磁盘I/O错误的发生。
S:硬盘I/O同步选项,功能类似sync。
a:设定该参数后,只能向文件中添加数据,而不能删除,多用于服务器日志文 件安全,只有root才能设定这个属性。
c:即compresse,设定文件是否经压缩后再存储。读取时需要经过自动解压操作。
d:即no dump,设定文件不能成为dump程序的备份目标。
i:设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。i参数对于文件 系统的安全设置有很大帮助。
j:即journal,设定此参数使得当通过mount参数:data=ordered 或者 data=writeback 挂 载的文件系统,文件在写入时会先被记录(在journal中)。如果filesystem被设定参数为 data=journal,则该参数自动失效。
s:保密性地删除文件或目录,即硬盘空间被全部收回。
u:与s相反,当设定为u时,数据内容其实还存在磁盘中,可以用于undeletion.

显示文件夹的隐藏属性
lsattr [-aR] 文件或目录

-a:显示隐藏文件的属性
-R:连同子目录的数据一并列出

2.5 文件查找命令

查看可执行文件的路径
which [-a] 命令

-a  将所有可找到的命令列出,不仅仅列出第一个找到的命令

查找“特定文件”
whereis [选项] 文件列表

-b  只查找二进制文件
-m  只查找说明文件
-s 只找源文件
-u 查找不属于以上三种的文件

通过存储系统文件信息的数据库
locate 文件

-i:忽略大小写差异
-r:后面可接正则表达式

直接搜索硬盘
find 起始目录 查找条件 [操作]

可以为find命令同时指定多个查找条件进行查找
and 逻辑与,在命令中用“-a” 表示,是默认选项,可以省略
or 逻辑或,在命令中用“-o” 表示
not 逻辑非,在命令中用“!”表示

查找条件

-name ‘字串’ 按照文件名查找文件
-lname ‘字串’ 查找文件名匹配所给字串的所有符号链接文件
-gid n 查找属于ID号为n的用户组的所有文件
-uid n 查找属于ID号为n的用户的所有文件
-group ’字串’ 查找属于用户组名为所给字串的所有的文件
-user ’字串’ 查找属于用户名为所给字串的所有的文件
-empty 查找大小为0的目录或文件
-path ’字串’ 查找路径名匹配所给字串的所有文件
-perm 权限 查找具有指定权限的文件和目录,权限的表示可以如755,644
-nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在
-nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在
-type 查找某一类型的文件
-size n [ck] 查找文件长度为n块的文件,带有c时表示文件长度以字节计
-depth 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找

以时间为条件查找

-amin +n -n 按访问时间查找; -n指n分钟以内,+n指n+1分钟以前 ,n
-atime +n -n 按访问时间查找;-n指n天以内,+n指n+1天以前 ,n  
-cmin +n -n n 按创建时间查找
-ctime +n -n n按创建时间查找
-mmin +n -n n按修改时间查找
-mtime +n -n n按修改时间查找
-newer file 列出比file还新的文件

可执行的操作

-exec 命令 {} \; 对符合条件的文件执行所给的命令
{}表示命令的参数即为所找到的文件
命令的末尾必须以“\ ;”结束
-ok 命令 {} \; 同-exec,但会询问用户是否执行该命令

3. Vi文本编辑器

3.1 vi编辑器的启动与退出

进入编辑环境并打开(新建)文件
vi myfile
退出vi编辑环境
:q!

3.2 文件操作

打开新文件
打开新的文件到vi编辑器中
:e filename
打开新的文件到vi编辑器中,并放弃对当前文件的修改
:e! filename

读取文件
:r filename
保存文件
保存对vi编辑器中已打开文件的修改
:w
另存为文件
将vi编辑器中的内容另存为指定文件名
:w myfile
退出vi编辑器
未修改退出
没有对vi编辑器中打开的文件进行修改,或已对修改进行了保存,直接退出vi编辑器
:q
保存并退出
对vi编辑器中的文件进行保存并退出vi编辑器
:wq
不保存退出
放弃对文件内容的修改,并退出vi编辑器
:q!

3.3 光标移动和翻页操作

光标移动键 功能
h 向左移动光标
l 向右移动光标
j 向上移动光标
k 向下移动光标
ctrl+f 向前翻整页
ctrl+b 向后翻整页
ctrl+u 向前翻半页
ctrl+d 向后翻半页

3.4 vi常用命令

3.4.1 一般模式下的常用命令

光标移动
n<空格>: 向右移动n个字符
0:移动到行首
$:移动到行尾
G:移动到文末
nG:移动到文件的第n行
gg:移到文件第一行
n<回车>:向下移动n行
删除、复制、粘贴
x/X:向后/前删除一个字符
dd:删除整列
ndd:删除从当前行向下的n行
yy:复制当前列
nyy:复制从当前行向下的n行
p/P:将复制来的数据粘贴在光标的下/上一行
撤销操作
u: 取消最近一次的操作,并恢复操作结果
可以多次使用u命令恢复已进行的多步操作
U:取消对当前行进行的所有操作
Ctrl + r:对使用u命令撤销的操作进行恢复

3.4.2 编辑模式下的常用命令

i/I:在光标出插入(insert)/从当前所在行的第一个非空格符处开始插入
a/A:从光标的下一个字符插入/从光标所在行的最后一个字符插入
o/O:从光标所在行的下/上插入一行
r/R:替换,区别在于r仅替换一个字符,R一直替换到按下Esc才停止
Esc:退出,回到一般模式

3.4.3 命令行模式下的常用命令

:w:将修改写入文件
:q:退出vi
:q!:强制退出vi
:wq:保存后退出
:wq!:强制保存后退出
:w[filename]:另存为
:r[filename]:读入另一个文件
:set nu:显示行号
:set nonu:取消行号
:!command :暂时离开vi到命令行模式下执行命令
查找替换
/word: 在当前光标后查找含word的字符串
?word:从光标开始向前查找含word的字符串
:n1,n2s/word1/word2/g:将n1行到n2行之间的word1替换为word2
:1,$ s/word1/word2/g:将全文中的word1替换为word2
:1,$ s/word1/word2/gc:与上个命令相同,但需要用户确认替换

3.5 Vim

块选择
v :字符选择,将光标经过的地方反白选择
V:行选择,将光标经过的行反白选择
[ctrl]+v:块选择,可以用长方形的方式选择数据
y:复制反白区域
d:删除反白区域
多文件编辑
通常用于将一个文件的部分内容复制到另一个文件去时或需要多文件内容相互对照的情况下
vim 文件名1 文件名2 ……
:n或:n filename表示查看或编辑下一个文件
:N或:N filename表示查看或编辑上一个文件
:file显示当前打开的文件的信息
多窗口变换
vi在字符界面下的一种特殊应用形式,表现为在一个终端上同时显示两个文件或同时显示一个文件的不同段落,为用户查看资料、编写程序提供了便利
:sp [filename]
ctrl+w, j/k表示下/上移一个窗口
ctrl+w, q表示退出

4. 设备管理

4.1 文件系统的简单操作

查看分区、文件系统的详细信息
dumpe2fs [-bh] 设备文件名:

-b:列出保留为坏道的部分
-h:仅列出superblock的数据,不列出其他的区段数据

查看磁盘各个分区的使用状况或某个分区的使用状况
df [-ahikHTm] [文件名或目录]

-a:列出所有的文件系统,包括特有的/proc等文件系统
-h:以GB、MB、KB等格式显示
-i:使用inode显示结果
-H:以M=1000K取代M=1024K的计算方式
-T:连同该分区的文件系统一起列出
-k:结果以KB形式显示
-m:结果以MB形式显示

查看目录容量的指令
du [-abshkm] [dirname/filename]

-a:列出所有文件与目录
-b:以字节显示结果
-c:显示所有文件和目录的总和
-s:列出总量,不列出每个目录占用的容量
-S:不包括子目录下的总计
-h:以易读的容量格式显示
-k:以KB显示结果
-m:以MB显示结果

建立链接的命令
ln [-sf] [源文件] [目标文件]

-s 提供符号链接,不带选项执行ln代表硬链接
-f 如果目标文件已经存在,则主动将目标文件删除,之后在创建

4.2 磁盘分区指令

用fdisk查看分区
fdisk [-l] devname

-l:列出指定硬盘的分区内容
仅修改分区表,并未实际切割
针对硬盘而非分区,设备名称不加数字

用fdisk新建分区
fdisk /dev/hdb:进入fdisk分区工具的操作界面

n:新建分区,此时会询问用户创建何种类型的分区
p、e、l:指定建立主分区、扩展分区或逻辑分区
1-4:选择了分区类型后要求指定分区号,选择未用的号码,接着分别输入新建分区的初始磁柱号和终止磁柱号
q:不保存刚才的操作指令,退出
w:将输入的操作指令执行,修改分区表并退出

用fdisk删除分区
fdisk /dev/sdb:进入fdisk分区工具的操作界面,此时输入m可以查看指令列表

p:显示当前分区表
d:输入该指令后会要求指定要删除的分区号
q:不保存操作指令,退出
w:将输入的操作指令执行,修改分区表并退出

4.3 磁盘格式化指令

将一个分区格式化为所需的fs
mkfs [-t 文件系统格式] devname

-t:后面接文件系统,例如ext2、ext3、ext4、vfat等linux系统支持的文件系统

将一个分区格式化为ext3,并且有更详细的要求时
mke2fs [-b 块大小] [-i inode值] devname
mke2fs [-c/L/j]

-b:设定块大小,默认为4K
-i:多少data blocks的空间赋予一个inode
-c:检查分区错误,-c快速测试,-c -c读写测试(慢)
-L:设定卷标
-j:将分区格式化为ext3文件系统,不加则为ext2
-N:inode个数 ,指定要建立的inode数目。
-t:指定文件系统,例如ext2、ext3、ext4

4.4 检查磁盘

fsck [-aCrf] devname
执行时务必确保被检查分区没有挂载,避免分区中文件被修改后不能使用

-t : 给定档案系统的型式,若在 /etc/fstab 中已有定义或 kernel 本身已支持的则不需加上此参数
-a:自动修复坏轨,不再询问
-r:询问用户是否修复坏轨
-C:使用条形图表示进度
-f:强制检查,一般如果fsck没有发现unclean 的标志,不会主动进入细化检查,如果需要细化检查,则加上此选项
-D:针对文件系统下的目录进行优化配置

检查硬盘或软盘是否有坏轨
badblocks –[svw] 设备名称

-s:在屏幕上列出进度
-v:可以在屏幕上看到进度
-w:使用写入的方式来检测,一般不采用

4.5 硬盘挂载指令

mount [-altLo] 设备名 挂载点

mount 后面什么也不加的话,会显示目前挂载的信息 ,加上-l可增加label列
-a 会根据/etc/fstab文件中的信息,将没有挂载全部挂载上
-t 文件系统 文件系统包括的内容主要包括:ext3 ext4 vfat ntfs iso nfs smbfs
-o 后面的选项内容很多,主要是一些挂载时候的权限限制类的。
ro/rw: 挂载文件系统时成为只读(ro)或可读写(rw)
exec/noexec: 是否允许此文件系统上拥有可执行的文件
suid/nosuid: 是否允许此文件系统上含有suid的文件
dev/nodev: 是否允许此文件系统上建立设备文件
auto/noauto: 允许此文件系统用mount -a自动挂载
async/sync: 此文件系统是否使用同步(sync)或异步(async)写入硬盘的内存机制
user/nouser: 是否允许此文件系统让任何用户执行mount命令
defaults: 默认值为:rw, suid, dev, exec, auto, nouser, and async
remount: 重新挂载。这个选项在系统修复,或重新更新参数时经常用到

  • 列出系统已经载入的分区
    mount
  • 将新建分区载入
    mount –t ext3 /dev/hdb1 /mnt/hdb1
  • 载入光盘
    mount –t iso9660 /dev/cdrom /mnt/cdrom
  • 载入windos fat软盘
    mount –t vfat /dev/fd0 /mnt/floppy
  • 以卷标名来挂载
    mount –t ext3 –L logical /mnt/hdb1
  • 将目录载入另一个目录
    mount --bind /home/ /tmp/home
  • 卸载指令:
    umount [device|mountpoint]

4.6 挂载不同存储介质

  • 挂载指定分区
    将设备hdb1以ext3文件系统挂载到/mnt, 这里的/mnt是linux的公共挂载点
    mount -t ext3 /dev/hdb1 /mnt
  • 挂载光盘
    光盘的文件系统为iso9660
    mount -t iso9660 /dev/cdrom /mnt/cdrom
    mount /dev/cdrom /mnt/cdrom
  • 挂载U盘
    vm下挂载U盘:将鼠标点到linux的操作界面再插U盘,看到显示了一个vmware usb设备的提示信息后,进行下面的操作
    fdisk -l:列出目前挂载的所有分区,寻找新增加的分区
    mkdir /mnt/usb:在linux系统中建立挂载点
    mount -t vfat /dev/sda1 /mnt/usb:挂载U盘
  • 挂载软盘
    Linux格式:
    mount –t ext2 /dev/fd1 /mnt/floppy
    Windows格式:
    mount –t vfat /dev/fd1 /mnt/floppy
    卸载:umount /mnt/floppy
  • 载入windos磁盘
    假设windos的VFAT文件系统是在/dev/hda1上
    mount /mnt/xp
    mount –t vfat /dev/hda1 /mnt/xp
    mount –t vfat –o iocharset=cp950 /dev/hda1 /mnt/xp
    重新挂载根目录与挂载不特定目录
    mount -o remount,rw,auto /
    mkdir /mnt/home
    mount --bind /home/ /mnt/home

5. 软件包管理

5.1 压缩命令

gzip [-crd#] filename
压缩后的后缀名为.gz

-d:解压缩参数
-c:将压缩过程显示到屏幕上,通过导向数据来处理
-#:压缩等级,1最差,9最优,6默认

zcat filename.gz
解压缩.gz格式的压缩文件

bzip2 [-dzc] filename
该指令的后缀为.bz2

-d:解压缩
-z:强制压缩文件
-c:将压缩结果显示到屏幕去
-#:#代表1到9,即压缩级别,1压缩较小,9压缩较多

bzcat filename.bz2
在不解压的前提下读取压缩文件的内容
compress [-dfr] filename

-d:解压缩参数
-f:强制压缩文件
-r:针对目录,将目录下的文件同时压缩

uncompress filename
解压文件

5.2 tar命令

tar [-zjxvctpPNf] target source

-c:打包文件
-f:后接打包文件名或压缩文件名,通常放在所有选项的最后
-x:解压文件
-v:压缩时显示被文件
-t:查看.tar包中的文件列表
-z:打包并用gzip压缩
-j:打包并bzip2压缩
-p :打包时不改变文件属性和权限
-P :保留绝对路径
N:把较新的文件打包进新建的文件夹内(yyyy/mm/dd)
–exclude FILE:在打包过程中,不打包file

  • 对文件和目录进行打包
    tar -cf myfiles.tar files/
  • 对文件和目录进行打包压缩
    tar -czf myfiles.tar.gz files/
  • 查看打包文件中的目录列表
    tar -tf myfiles.tar
  • 查看打包压缩文件中的目录列表
    tar -tzf myfiles.tar .gz
  • 恢复打包文件
    tar -xf myfiles.tar
  • 恢复打包压缩的归档文件
    tar -xzf myfiles.tar.gz
  • 恢复打包压缩文件到指定目录
    tar -xzf myfiles.tar.gz -C restore/
  • 把较新的文件打包进新建的文件夹内
    tar -zcvf myfiles.tar.gz --newer-mtime=“2012/10/10” source
    --newer:比2012/10/10更晚的文件才会打包压缩
    --exclude file:压缩过程中不打包file

5.3 RPM

rpm [-ieqUFVvh] packagename

-i:安装
-e:卸载
-q:查询
-a:代表全部软件包
-U:升级,若包不存在就安装
-F:升级,若包不存在也不进行安装
-V:校验
-v:报告正在进行的操作进展情况
-h:用#标识进度

  • RPM软件包的查询
    rpm -q vsftpd
  • RPM软件包的安装
    rpm -i vsftpd
  • RPM软件包的升级
    rpm -U vsftpd
  • RPM软件包的卸载
    rpm -e vsftpd

5.4 YUM

  • 使用yum安装软件包
    yum install vsftpd
  • 使用yum更新软件包
    yum update vsftpd
  • 使用yum卸载软件包
    yum remove vsftpd

6. 用户和群组管理

6.1 群组账号切换

  • 查看用户当前所属群组,第一个群组为该用户的有效群组
    groups
  • 将用户的有效群组切换为groupname
    newgrp groupname

6.2 账号管理

新增用户
useradd [-u UID] [-g GID] [-G GID] [-Mm] [-d HOME] [-s shell] [-r] username

-u :增加用户时直接为其指定一个特定的 UID
-g :后接初始群组的GID
-G:后接其他群组的GID
-M:强制不建立用户家目录
-m:强制建立用户家目录
-d :指定某目录为用户家目录,而不使用预设值
-s :后接 shell ,默认为/bin/bash
-r:创建一个系统账号,通常会使用100以后的UID和GID

删除用户
userdel [-r] username

-r :删除用户的同时也删除其家目录

修改用户
usermod [-degGlsuLU] username

-d :后接用户家目录
-e :账号失效时间,格式是 YYYY-MM-DD
-g:后接群组名,用于修改/etc/passwd的第四个字段
-G:后接群组名,用于修改/etc/group的第四栏
-l :后接账号名,用来修改账号名称
-s :后接 Shell ,例如 /bin/bash 或 /bin/csh 等
-u :后接 UID
-L :在用户密文前加上一个!,暂时冻结用户密码
-U :将 /etc/shadow 密码栏的 ! 去掉

密码管理
passwd [-lu] username

-l:将用户username的密码锁定
-u:将用户username的密码解锁

6.3 群组账号管理

新增群组
groupadd [-g GID] [-r] groupname
新增名为groupname的群组

-g :直接为新建群组指定GID
-r:建立系统用户组

修改群组
groupmod [-g GID] [-n new_groupname] groupname

-g :修改GID值(慎用)
-n :修改群组名称

加密群组
gpasswd groupname
为群组加一个密码
gpasswd [-A user1] [-M user3, user4…] groupname
将群组管理员设为user1,群组成员为user3, user4…
gpasswd [-rR] groupname

-r:删除群组密码
-R:让密码栏失效,newgrp失效

管理员的操作
gpasswd [-ad] user groupname
删除群组
groupdel groupname
删除名为groupname的群组
删除时要求该群组不是任何用户的初始群组

6.4 转换身份指令

su [- lcm] [username]
一般用户变成root用户

-:将当前用户转换为root,且使用root的环境设置
-l :将当前用户转换为username,同时使用其相关环境设置
-m :使用当前用户的环境设置值
-c :将后接指令执行一次
eg: su - -c “ls -al"

sudo:不需要root密码,仅以当前普通用户密码执行一次root权限指令

6.5 系统用户查询

  • Id:显示用户的id及所属的组群
  • W:显示当前用户已登录的用户详细信息
  • who:显示当前用户已登录的用户简单信息
  • last:查询一个月来用户的登录信息
  • lastlog:查询用户登录终端和最后登录时间

7. Bash Shell

7.1 变量相关

查看指令是否是bash的内置指令
type [-tpa] name

:不加选项,显示指令是外部命令还是bash的内置指令
-t:将指令通过下面的文字显示出它的意义
files:外部指令
alias:该指令为命令别名所设置的名称
builtin:该指令为bash的内置指令
-p:如果后面接的是命令,会显示完整的文件名(外部命令)或显示为内置命令
-a:在PATH变量定义的路径中,列出所有含有name的命令,包含alias

取消变量
unset paraname

查看系统默认环境变量的值
env

  • BASH_ENV=/root/.bashrc
    用户自定义的环境变量的配置文件
  • HISTSIZE=1000
    .bash_history中记录的指令条数
  • HOSTNAME=localhost.localdomain
    主机名
  • LANG=zh_CN.UTF-8
    语言类型
  • LOGNAME=root
    当前登录用户的账号
  • MAIL=/var/spool/mail/root
    邮件的存取地址
  • PATH=……
    系统可执行文件的默认查找路径

将自定义变量变成环境变量
export varname

读取来自键盘输入的变量
read [-pt] variable

-p:后面可以接提示符
-t:后面可以接等待的“秒数”

变量键盘读取、数组与声明
declare [-aixr] variable

-a:将后面variable的定义为数组(array)
-i:将后面variable的定义为整数数字(integer)
-x:与export一样,将后面的variable变成环境变量
-r:将一个variable的变量设置成只读(readonly),也不能取消设置(unset)
限制用户的某些系统资源:可打开的文件数量,可使用的CPU资源,可使用的内存总量1

7.2 Shell指令

命令提示符
PS1:提示符的设置

\d:代表日期
\H:完整的主机名称
\h:仅取主机名称的第一个名字
\t:显示时间,为24小时格式,HH:MM:SS
\T:显示时间,为12小时格式
\A:显示时间,为24小时格式,HH:MM
\u:当前用户的帐号名称
\v:bash的版本信息
\w:完整的工作目录名称,家目录以~代替
\W:利用basename取得工作目录名称,所以仅列出最后一个目录名
#:执行的第几个命令
$:提示符,如果是root则是#,否则就是$

与文件系统及程序的限制关系
ulimit [-SHacdflmnpstuv] 配额

-H:hard limit,严格设置,必定不能超过的值
-S:soft limit,警告设置,可以超过这个值,但会有警告消息
-a:列出所有的限制额度
-c:可建立的最大核心文件容量
-d:程序数据可使用的最大容量
-f:此shell可建立的最大文件容量(一般可设置为2G),单位为KB
-l:用于锁定内存容量
-p:用于管道处理的数量
-t:可使用的CPU时间(单位:秒)
-u:单用户可使用的最大进程数量

指令别名
alias usrcmd=‘command’
该指令将command指令置换为usrcmd,当用户使用usrcmd时,其功效等同于command
简化指令,使其更符合自己的操作习惯
查看别名使用alias
取消别名
unalias usrcmd

历史指令

  • history [n]
  • history [-c]
  • history [-raw] histfiles

可以查看的历史指令包括本次登录以来的指令以及以往登录时使用过的指令

-n:数字,意思是“要列出最近执行的n行命令”
-c:将当前shell中的history内容全部清除
-a:将当前新增的history命令加入~/.bash_history中
-r:将~/.bash_history的内容读到当前shell的历史记忆中
-w:将当前的历史记忆内容写入到~/.bash_history中
HISTORYSIZE:设置~/.bash_history文件会记录多少条记录

  • history 显示历史指令
  • !! 执行上个指令
  • !22 执行文件~/.bash_history中记载的第22号指令
  • !vi 执行上一个以vi开头的指令

输入输出重定向
三种输入输出状态

  • 标准输入:<
    command < dev/file
  • 标准输出:1>
    command > dev/file
    command >> dev/file
  • 错误输出:2>
    command 2> dev/file
    command 2>> dev/file
类别 操作符 说明
输入重定向 < 输入重定向是将命令中接收输入的途径由默认的键盘更改(重定向)为指定的文件
输出重定向 > 将命令的执行结果重定向输出到指定的文件中,命令进行输出重定向后执行结果将不显示在屏幕上
输出重定向 >> 将命令执行的结果重定向并追加到指定文件的末尾保存
错误重定向 2> 清空指定文件的内容,并保存标准错误输出的内容到指定文件中
错误重定向 2>> 向指定文件中追加命令的错误输出,而不覆盖文件中的原有内容
输出与错误组合重定向 &> 将标准输出与错误输出的内容全部重定向到指定文件

将标准错误输出与标准输出分别放在不同文件中
command 1>stdinfile 2>errorfile

mail命令
mail 用户名[@hostname]
输入主题和内容后,使用“Ctrl+D”结束
出现Cc.后回车,即选择不使用密件发送
mail –s “邮件主题” 用户名[@hostname] < /home/user/mailfile
使用输入重定向将某文件内容作为邮件主体发给某用户 (mailfile是事先写好的文件 )
使用不带参数的mail命令可用来收信

h:显示当前的邮件列表
z 显示后面二十封邮件列表
d 删除当前邮件,指针并下移。 d 1-100 删除第1到100封邮件
f num 指针移动到某一封邮件
阅读当前指针所在的邮件内容 阅读时,按空格键就是翻页,按回车键就是下移一行
t num 阅读某一封邮件
x 退出mail命令平台,并不保存之前的操作,比如删除邮件
q 退出mail命令平台,保存之前的操作

输出字符
echo [-ne][字符串]

-n 不要在最后自动换行
-e 若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
\a 发出警告声;
\b 删除前一个字符;
\n 换行且光标移至行首;
\t 插入tab;

命令执行的判断依据
&& - 当前一个指令执行成功时,执行后一个指令
|| - 当前一个指令执行失败时,执行后一个指令
command1 && command2 || command3
如果1可以执行,就执行2,若1不可以执行,就执行3

管道操作符
|
“|”符用于连接左右两个命令,将“|”左边的命令执行结果(输出)作为“|”右边命令的输入
cmd1 | cmd2
当前一个指令的输出为stdout(正确输出)时才可以进行下一个指令,此时第二个指令的输入为前者的输出
在同一条命令中可以使用多个“|”符连接多条命令
cmd1 | cmd2 | … | cmdn

7.3 字符处理

7.3.1 选取指令

将一段数据经过分析后,取出我们想要的部分,或者是通过分析关键词,取出我们想要的行。
cut:将一段消息的一段切出来,以行为单位
cut -d’分隔符’ -f fields
cut -c 字符范围

-d:后面接分隔符,与-f一起使用
-f:表示取出第几段
-c:以字符为单位取出固定的字符范围

grep:分析一行消息,若有需要信息,就将该行读出
grep [-acinv] ‘搜索字符’ filename

-a:将二进制文件以文本的方式搜索数据
-c:计算找到’搜索字符串’的次数
-i:忽略大小写
-n:顺便输出行号
-v:反向选择,显示没有‘搜索字符’内容那一行

7.3.2 排序指令

sort [-tfbMnruk] [filename or stdin]

-t :用来分隔不同的区块,默认是tab键
-k:以哪个区间来进行排序
-n:按数字排序
-r:反向排序
-u:只列出首次出现的行
-f:忽略大小写

uniq:将重复的数据仅显示一次
uniq -ic

-I:忽略大小写
-c:进行计数

7.3.3 统计指令

wc [-lmw] filename

-l:计算行数
-m:计算字符数
-w:计算字数

7.3.4 双重导向指令

tee -a filename
该指令除了将数据导入指定文件外还将其显示到屏幕上

-a 附加内容到现有文件,默认为覆盖

7.3.5 字符转换指令

join:把两个文件中有相同数据的行加在一起
join [-ti12] file1 file2

-t:join默认以空格符分割数据,并且比较“第一个字段”的数据,如果相同,则将两个数据连成一行,且第一个字段放在第一个
-i:忽略大小写
-1:表示第一个文件要用那个字段来分析
-2:表示第二个文件要用那个字段来分析

paste:将两个文件的两行贴在一起
paste [-d] file1 file2

-d:后面接分隔符,默认以[tab]来分割
-:如果file部分写成-,表示来自标准输入的数据

7.3.6 拆分指令

split:将较大的文件按大小或行拆分为较小的文件
split [-bl] file PREFIX

-b:后接要拆分的文件的大小,可加单位,b,k,m
-l:按行进行拆分

7.4 正则表达式

7.4.1 通配符与特殊符号

  • *-通配符,代表任意字符(0到多个)
  • ? - 通配符,代表一个字符
  • #- 注释
  • \ - 跳转符号,将特殊字符或通配符还原成一般符号
  • | - 分隔两个管线命令的界定
  • ; - 连续性命令的界定
  • ~ - 用户的根目录
  • $ - 变量前需要加的变量值
  • ! - 逻辑运算中的"非"(not)
  • / - 路径分隔符号
  • .>, >> - 输出导向,分别为"取代"与"累加"
  • ’ - 单引号,不具有变量置换功能
  • " - 双引号,具有变量置换功能
  • ` - quote符号,两个``中间为可以先执行的指令
  • () - 中间为子shell的起始与结束
  • [] - 中间为字符组合
  • {} - 中间为命令区块组合

7.4.2 正规表达式

grep 搜索字符串 [filename]

grep [-acinv] ‘word’ filename

-a:在二进制文件用文本方式查找word字符串
-c:计算找到word字符串的次数
-i:不区分大小写
-n:输出时显示行号
-v:显示没有word的行

正规表达式 含义
^word 寻找行首字符为word的行
word$ 寻找行尾字符为word的行
. 代表任意“一个”字符
* 代表任意“多个”字符
\ 转义字符
[list] 寻找列表中的字符所在的行
[^list] 寻找不在列表中的字符所在的行
{n,m} 连续n到m个的“前一个重复字符”

7.4.3 扩展正则表达式

egrep -v '^$|^#' regular_express.txt
egrep支持扩展型正则表达式, egrep是grep-E的命令别名

RE字符 含义
+ 重复“一个或一个以上”的字符egrep -n ‘go+d’ regular_express.txt 搜索(god)(good)(goood)等字符串
? “0个或一个字符”egrep -n ‘go?d’ regular_express.txt搜索(gd),(god)这两个字符串(go*d)
| 用(or)的方式找出数个字符串egrep -n ‘gd|good’ regular_express.txt搜索(gd)或(good)这两个字符串
() 找出“用户组”字符串egrep -n ‘g(la|oo)d’ regular_express.txt搜索(glad)或(good)这个字符串
()+ 多个重复组的判别echo 'AxyzxyzxyzxyzC' | egrep 'A(xyz)+C‘搜索以A开头,C结尾,中间有一个以上”xyz”的字符串

7.5 sed工具

sed工具主要有替换、删除、新增、选取特定行等处理功能。
sed [-nefr] [动作]

-n:使用安静模式。在一般sed的用法中,所有来自STDIN的数据一般都会显示在屏幕上,但如果加上-n,则只有经过sed特殊处理的行才会列出来
-e:直接在命令行模式上进行sed的操作编辑
-f:直接将sed的操作写在一个文件内,-f filename则可以执行filename内的sed操作
-r:sed的操作支持的是扩展正则表达式的语法(默认是基础表达式)
-i:直接修改文件内容,而不是由屏幕输出

动作

  • a\ :在当前行后面加入一行文本。
  • c\ :用新的文本改变本行的文本。
  • d :从模板块(Pattern space)位置删除行。
  • i\ :在当前行上面插入文本。
  • p :打印某个选择的数据,通常与sed -n 一起使用
  • s/re/string/g :用string替换正则表达式re;g表示行内全面替换。

多次修改
如果需要对同一文件或行作多次修改,可以有三种方法来实现它。第一种是使用 “-e” 选项,它通知程序使用了多条编辑命令。例如:

$ echo “The tiger cubs will meet on Tuesday after school”
 | sed -e ' s/tiger/wolf/' -e 's/after/before/' 
$ The wolf cubs will meet on Tuesday before school

这是实现它的非常复杂的方法,因此 “-e” 选项不常被大范围使用。更好的方法是用分号来分隔命令:

$ echo The tiger cubs will meet on Tuesday after school
 | sed ' s/tiger/wolf/; s/after/before/' 
The wolf cubs will meet on Tuesday before school 

删除:d命令
$ sed ‘2d’ example-----删除example文件的第二行。
$ sed ‘2,$d’ example-----删除example文件的第二行到末尾所有行。
$ sed ‘$d’ example-----删除example文件的最后一行。
$ sed '/test/'d example-----删除example文件所有包含test的行。

替换:s命令
$ sed ‘s/test/mytest/g’ example-----在整行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest。
$ sed -n ‘s/^test/mytest/p’ example-----(-n)选项和p标志一起使用表示只打印那些发生替换的行。也就是说,如果某一行开头的test被替换成mytest,就打印它。

8. Shell Script

8.1 脚本的执行

方法一:将 shell.sh 加上可读与可执行 (rx) 权限,然后就能够以 ./shell.sh 來执行了(即以相对/绝对路径来执行)
方法二:将 shell.sh 加上可读与可执行 (rx) 权限,并将shell.sh的存放路径累加到PATH变量中,然后以shell.sh来直接执行
方法三:将 shell.sh 加上可读与可执行 (x) 权限,以 sh shell.sh 的方式直接执行即可
方法四:source shell.sh(文件无需可执行权限)

8.2 判断指令

test expression 或 [□expression□] 或 [[□expression□]]

说明:上面的形式中的□为空格

类型参数 含义
-e filename 判断名为filename的文件是否存在
-f filename 判断名为filename的文件是否为文件
-s filename 判断名为filename的文件是否为非空文件
-d filename 判断名为filename的文件是否为目录文件
-b filename 判断名为filename的文件是否为块设备文件
-c filename 判断名为filename的文件是否为字符设备
-L filename 判断名为filename的文件是否为链接文件
权限参数 含义
-r filename 判断名为filename的文件是否具有可读属性
-w filename 判断名为filename的文件是否具有可写属性
-x filename 判断名为filename的文件是否具有可执行属性
-u filename 判断名为filename的文件是否具有SUID属性
-g filename 判断名为filename的文件是否具有GUID属性
-k filename 判断名为filename的文件是否具有SBit属性
时间参数 含义
file1 -nt file2 (newer than)判断 file1 是否比 file2 新
file1 -ot file2 (older than)判断 file1 是否比 file2 旧
file1 -ef file2 判断 file2 与 file2 是否为同一文件 ,可用于判断硬连接,主要判断两个文件是否均指向一个inode
数值参数 含义
n1 -eq n2 判断n1是否等于n2
n1 -ne n2 判断n1是否不等于n2
n1 -gt n2 判断n1是否大于n2
n1 -lt n2 判断n1是否小于n2
n1 -ge n2 判断n1是否大于等于n2
n1 -le n2 判断n1是否小于等于n2
条件判断参数 含义
-z string 判断string是否为空 字符串,是空字符串则返回ture
-n string 判断string是否为非空字符串,若为空字符串返回false
test str1 = str2 判断str1和str2是否相等,相等时返回true
test str1 != str2 判断str1和str2是否相等,不等时返回true
条件判断参数 含义
-a 两个条件同时成立
-o 两个条件任意一个成立
条件取反,通常与其他参数配合使用

8.3 脚本语法

if条件判断

if [ condition1 ]
   then
      commandelif [ condition2 ]
   then
      commandelse
      commandfi

条件判断

case $变量名称 in 
    "变量值1")
            程序段1
            ;; 
     "变量值2") 
            程序段2 
            ;; 
      *) 
           不包含第一个变量内容与第二个变量内容的其他程序段 
           exit 1 
           ;;
 esac 

while循环

while [conditions]
	do
		commanddone

until循环

until [conditions]
	do
	  commanddone

for循环

for (( 初值 ;终值 ;步长 ))
   do
       指令段
   done

调试脚本
sh [-nvx] scripts.sh

-n:查询并指出语法错误并不执行
-v:执行脚本前显示脚本内容至屏幕
-x:只将用到的脚本内容显示出来

9. 其他

9.1 进程管理与系统监视

进程属性
ps [options]

ps -e显示所有系统中运行的进程信息
ps -l显示当前属于自己这次登陆的PID与相关信息
ps aux 查看当前正在内存中的所有进程信息
ps -axjf 显示进程家族树
ps –p n显示PID为n的进程信息
ps –l:显示属于自己这次登陆的进程信息
以长格式显示进程信息
长格式中的信息包括标志F、状态S、进程号PID、父进程号PPID、CPU使用的资源百分比C、优先权PRI、进程虚拟大小VSZ、进程等待事件WCHAN、进程状态STAT、所处终端TTY、累计运行时间TIME、命令COMMAND等
状态:S表示休眠,D表示不可中断的休眠,R表示运行,Z表示僵死(其父已死,其祖回收资源),T表示被追踪或停止
ps –r显示所有处于运行态的进程信息

任务管理器
ps静态观察,top持续监测系统的进程工作状态
显示系统中CPU密集型任务的状态并交互控制这些进程
top [-dbnp]

d:后接进程画面更新的秒数,默认为5″
b:以批处理方式执行top,常搭配重定向操作,将批处理结果输出为文件
n:与b配合,表示记录几次top的输出结果
p:观测指定PID的进程执行情况

top的交互指令

?:显示可用的top命令
P:按CPU的使用量排序
M:按内存使用量排序
N :以PID来排序
k :指定结束(kill)的进程号PID
r :给某个PID重新定义一个值
q :退出top,返回上层

后台作业管理
kill -signal

%n将后台第n号作业进行signal指定操作
-l:显示kill当前可用的全部信号
-1:重新加载一次参数
-9:强行终止
-15:中断运行

观察当前后台作业状态
jobs [-lrs]

-l:列出作业号的同时也列出进程PID
-r:只显示后台运行作业
-s:只显示后台暂停作业

9.2 系统服务和任务定制

仅进行一次的工作任务分配
at [-m] TIME

-m:当at的工作完成后,以电子邮件的方式通知用户该工作已经完成
TIME:时间格式,定义“什么时候进行at工作”
HH:MM
HH:MM YYYY-MM-DD
HH:MM[am|pm] [Month] [Date]
HH:MM[am][pm] + number [minutes|hours|days|weeks]
当前时间可以使用now表示

atq:查询当前主机上设置的at工作
atrm:删除某个at指令

用户周期性任务定制
crontab [-u username] [-l|-e|-r]
-u:只有root才能执行这个任务,即帮助其他用户建立/删除crontab
-e:编辑crontab的工作内容
-l:查看crontab的工作内容
-r:删除crontab的工作内容
系统周期性任务定制

你可能感兴趣的:(Linux总结)