Linux 鸟叔私房菜学习笔记
head取前几行head -n 20取前20行除后面100行,前面全部取出tail取后几行tail -n 20取后20行只列出100行以后的数据tail -f持续侦测文件内容。
Linux
6.3.3 数据颉取
head
取前几行
head -n 20
取前20行
head -n -100
除后面100行,前面全部取出
tail
取后几行
tail -n 20
取后20行
tail -n +100
只列出100行以后的数据
tail -f
持续侦测文件内容
6.3.4 非纯文本文件od
od -t [acdfox]
a:默认字符输出;
c:ASCII字符输出
d十进制 f浮点 o八进制 x十六进制
6.3.5 touch修改文件时间或创建新文件
touch [-acdmt]
-a 仅修订accesstime; -m modificationtime; -c 文件时间;
touch -d "2 day ago" bashrc
两天前
touch -t 201506150202
修改日期为2015/06/15 2:02
6.4 文件与目录的默认权限与隐藏权限
6.4.1 文件默认权限umask
umask:022 (默认
设置方式: umask 002
文件权限 = 666 - umask = 644 = rw-r–r–
目录权限 = 777 - umask = 755 = rwxr-xr-x
6.4.2 文件隐藏属性chattr、lsattr
chattr [+-=][ASacdistu]
a:文件只能增加数据,而不能删除也不能修改数据
i:文件不能被删除、改名、设置链接也无法写入或新增数据
lsattr [-adR]
-a:将隐藏属性也展示出来
-d:目录
-R:联通子目录的数据一并列出来
6.4.3 文件特殊权限SUID、SGID、SBIT
SUID: Set UID
s在文件拥有者的权限上
例如linux所有账号密码都记录在/etc/shadow文件中,这个文件的权限为 --------- 1 root root 意思是只有root才能修改,但我们使用一般账号user时可以使用passwd命令自行修改密码 1.user对/usr/bin/passwd这个程序具有x权限, 2.passwd的拥有者是root这个账号 3.user在执行passwd过程中会暂时获得root的权限 4./etc/shadow可以被user执行的passwd修改1.仅对二进制bin有效
2.执行者必须具有x权限
3.仅在runtime有效
4.执行者将具有owner权限
SGID: Set GID
当s标志在文件群组的x项目为SGID,但是SGID可以针对文件和目录来设置。
对文件:
1.对二进制bin有效
2.执行者必须具有x权限
3.执行者在执行时会获得该程序群组的支持
对文件:
1.使用者对此目录具有r和x的权限时,该使用者能进入此目录
2.使用者在此目录下的有效群组将会变成该目录的群组
3.用途:若使用者在此目录具有w的权限(可以创建文件)时,则创建的文件群组与目录群组一致
SBIT: Stiky Bit
目前仅对目录有效:
1.当使用者具有目录的w,x权限时,亦即拥有写入的权限
2.当使用者在目录下创建文件或目录时,仅有自己和root才有权力删除该文件
对SUID、SGID、SBIT的权限设置分别记值421,需要在原先的755之前加,
例如加入SUID,chmod 4755 filename
6.4.4 观察文件类型 file
file filename
6.5 指令与文件的搜寻
6.5.1 指令文件名的搜寻
which [-a] command
which是寻找PATH内所规范的目录,像bash内置的history无法找到,可以使用type指令
6.5.2 文件文件名的搜寻
whereis [-bmsu] name
只在特定目录寻找
locate [ir] keyword
利用数据库寻找
find [PATH] [option] [action]
搜寻硬盘(最慢且消耗硬盘的方法,最次用)
find / -name "*file*"
6.6 权限与指令间的关系
cd
使用者对目录至少需要x权限
cat
more
less
对目录至少需要x权限,对文件至少需要r权限
nano
vi
对目录至少需要x权限,对文件至少需要r,w权限
cp /dir1/file1 /dir2
对dir1至少需要x权限,对file1至少需要r权限,对dir2至少需要w,x权限
6.7 复习回顾
ls [-dal]
很重要
-d 仅列出目录本身
-a 全部文件连同隐藏文件也一起列出来
-l 长数据串列出
文件的记录时间有三种:access time(atime)、status time(ctime)、modification time(mtime)
umask
规范新文件的默认权限
page338 例题
SUID
SGID
SBIT
的用法
7 Linux磁盘与文件系统管理
7.2文件系统的简单操作
7.2.1 磁盘与目录的容量
- df:列出文件系统的整体磁盘使用量
- du:评估文件系统的磁盘使用量(常用在推估目录所占容量)
df [-ahikHTm]
a:全部。h:易读。km:单位。i:inode。
du [-ahskm]
a:全部。h:易读。s:列出总量,不列各别目录。S:不包括子目录下的总计。
7.2.2实体链接与符号链接:ln
- 文件内容由inode指向
- 读取文件需要经过目录记录的文件名指向正确的inode号码才能读取
ln /etc/crontab
Hrad Link实体链接是文件名连接到相同的inode,因此除了文件名,其余全部相同。但不能跨Filesystem,不能link目录。(指向data的inode)
ln -s /etc/crontab crontab2
Symbolic Link符号链接创建了一个独立的文件,这个文件会让数据的读取指向他link的那个文件的文件名。(指向data文件名的inode)
7.3 磁盘的分区、格式化、检验与挂载
添加硬盘时的步骤:
1.对于磁盘进行分区,创建可用的partition
2.对partition进行格式化(format),创建可用的filesystem
3.可以对刚刚创建好的filesystem进行检验
4.在Linux系统上需要创建挂载点,亦即是目录,并将它挂载上来
7.3.1 观察磁盘分区状态
lsblk
列出系统上所有磁盘列表(list blok device)
blkid
列出设备UUID等参数
parted
列出磁盘的分区表类型和分区信息(parted /dev/sda print
)
7.3.2 磁盘分区gdis/fdisk
-
创建新的分区
gdisk /dev/sda
command:n
partprobe -s
更新Linux核心的分区表信息cat /proc/partitions
-
用gidsk删除一个分区 command:d
7.3.3 磁盘格式化(创建文件系统)
mkfs
make filesystem
- xfs文件系统 mkfs.xfs
mkfs,xfs [-b bsize] [-d parms] [-i parms] [-L label] [-f] [-r parms] 设备名称
7.3.4 文件校验系统
xfs_repair [-fnd] 设备名称
处理xfs文件系统。
fsck.ext4 [-pf] [-b superblock] 设备名称
处理EXT4文件系统
7.3.5 文件系统的挂载与卸载
- 单一文件系统不应该被重复挂载再不同的挂载点(目录)中;
- 单一目录不应该重复挂载多个文件系统;
- 要作为挂载点的目录,理论上应该是空目录才是。(如果不是空的,目录中原有的东西就会暂时消失)
mount -a
mount [-l]
mount [-t 文件系统] LABEL='' 挂载点
mount [-t 文件系统] UUID='' 挂载点
mount [-t 文件系统] 设备文件名='' 挂载点
挂载xfs等
blkid /dev/sda4
mkdir /data/xfs
mount UUID="0aea968b7c0c" /data/xfs
df /data/xfs
挂载光盘
blkid /dev/sr0
mkdir /data/cdrom
mount /dev/sr0 /data/cdrom
df /data/cdrom
挂载U盘
blkid /dev/sda1
/dev/sda1:UUID="35BC-6D6B" TYPE="vfat"
/dev/sda1
mkdir /data/usb
mount -o codepage=950,iocharset=utf8 UUID="35BC-6D6B" /data/usb
df /data/ usb
重新挂载根目录与挂载不特定目录
当根目录出现只读状态时,可以重新开机,也可以使用mount -o remount,rw,auto
要注意 -o mount,xx的选项与参数,重新挂载是非常重要的机制,尤其是进入单人维护模式时。
将设备文件卸载
umount [-fn]
-f 强制卸载,可以用在类似网络文件系统NFS无法读取到的情况
-l 立刻卸载文件系统,比-f还强
-n 不更新/etc/mtab情况下卸载
7.3.6 磁盘/文件系统参数修订
修改Label name或是journal的参数。
mknod 设备文件名 [bcp] [Major] [Minor]
b:设置设备名称成为一个周边存储设备,例如磁盘等
c:设置设备名称成为一个周边输入设备,例如键鼠等
p:设置设备名称成为一个FIFO文件
xfs_admin [-lu] [-L label] [-U uuid]
修改XFS文件系统的UUID与Label name,在格式化时忘记加表头名称,想要再次加入时可以使用这个命令来处理LABEL name和UUID。
tune2fs [-l] [-L label] [-U uuid]
修改ext4的label name和UUID
7.4 设置开机挂载
7.4.1 开机挂载/etc/fstab以及/etc/mtab
filesystem table :
[设备/UUID等] [挂载点] [文件系统] [文件系统参数] [dump] [fsck]
7.5 内存交换空间(swap)的创建
7.5.1 使用实体分区创建swap
1.分区:使用gdisk在磁盘中区分出一个分区做swap。Linux的gdisk会默认将分区的ID设置为Linux的文件系统,所以需要设置一下system ID。
2.格式化:使用创建swap格式的mkswap
格式化
3.使用:将swapon将设备启动
4.观察:通过free
和swapon -s
观察
7.6 文件系统的特殊观察与操作
7.6.1 磁盘空间之浪费问题
7.6.2 利用GNU的parted进行分区行为(optional)
parted [设备] [指令 [参数]]
parted /dev/vda print
至少应该使用过parted的指令
parted /dev/sda print //先找出上一个分区的end=下一个分区的起始点
parted /dev/sda mkpart primary fat32 36.0GB 36.5GB
parted /dev/sda print`
partprobe
lsblk /dev/sda7 //确定确实以及创建
mkfs -t vfat /dev/sda7
blkid /dev/sda7
nano /etc/fstab UUID=6032-BF38 /data/win vfat defaults 0 0
mkdir /data/win
mount -a
df /data/win
7.7 重点回顾
- 一个可以被挂载的数据通常称为“文件系统” filesystem 而不是分区partition喔!
- 基本上Linux的传统文件系统为Ext2,该文件系统内的信息主要有:
- superblock:记录此filesystem的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息等;
- inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码;
- block:实际记录文件的内容,若文件太大,会占用多个block;
- Ext2文件系统的数据存取为索引式文件系统
- 磁盘重组的原因:block太过离散
- Ext2文件系统主要有:boot sector,superblock,inode bitmap,block bitmap,inode table,data block等六大部分
- data block放置文件内容,在Ext2中block的大小有1K,2K,4K三种。
- inode记录文件的属性,权限等数据,每个inode大小固定,有128bytes和256bytes两种基本容量,每个文件仅会占用一个inode而已。
- 日志式文件系统(journal)会多出一块记录区,随时记载文件系统的主要活动,可加快系统复原时间。
- 实体链接只是多了一个文件名对该inode号码的链接而已;
- 符号链接就类似Windows的捷径功能
- 磁盘的使用必须经过:分区、格式化和挂载,分别惯用的指令为:gdisk,mkfs,mount三个指令
- 分区时应该使用parted检
- 分区表格式,再判断使用fdisk/gdisk来分区,或直接使用parted分区。
- 为了考虑性能,XFS文件系统格式化时可以考虑加上agcount/su/sw/extsize等参数较佳
- 开机自动挂载可参考/etc/fstab来设置,设置完毕之后务必使用mount -a测试语法正确与否。
8 文件与文件系统的压缩,打包和备份
8.1 压缩文件的用途与技术
8.2 Linux常见的压缩指令
8.2.1 gzip,zcat/zmore/zless/zgrep
gzip [-cdtv#] 文件名
zcat 文件名 .gz
-v 比较原始数据
-# 从1-9压缩速度与质量(默认6)
gzip -c services > services.gz
压缩文件并保留源文件(其实是通过-c输出到文件services.gz)
8.2.2 bzip2,bzcat/bzmore/bzless/bzgrep
bzip2 [-cdkzv#] 文件名
-c 显示到屏幕上 (可以保存为文件)
-k 保留原始文件
8.2.3 xz,xzcat/xzmore/xzless/xzgrep
xz [-dtlkc] 文件名
-t 测试文件完整性
8.3 打包指令:tar
8.3.1 tar
tar [-z|-j|-J] [cv] [-f 待创建的文件名] [filename]
打包
tar [-z|-j|-J] [tv] [-f 既有的tar文件名] [filename]
查看
tar [-z|-j|-J] [xv] [-f 既有的tar文件名] [filename] [-C 目录]
解压
-c 创建打包文件,搭配v来查看被打包的文件名
-t 查看
-x 解压缩
-c -t -v不能同时出现在一串命令。
-z 通过gzip 进行压缩/解压缩 此时文件名最好为 *.tar.gz
-j 通过bizp2进行压缩/解压缩 此时文件名最好为 *.tar.bz2
-J 通过xz 进行压缩/解压缩 此时文件名最好为 *.tar.xz
-z -j -J 不能同时出现在遗传命令中
-f 后面立刻接要被处理的文件名
-C 目录
最简单的tar指令
- 压缩
tar -j<u>c</u>v -f filename.tar.bz2
- 查询
tar -j<u>t</u>v -f filename.tar.bz2
- 解压
tar -j<u>x</u>v -f filename.tar.bz2 -C
8.4 XFS文件系统的备份与还原
8.4.1 XFS文件系统备份xfsdump 以及各个level
不仅可以完整备份(full backup),还可以进行累积备份(incremental backup) 。
- xfsdump只能备份已挂载的文件系统。
- xfsdump必须使用root的权限才能进行。
- xfsdump只能备份xfs文件系统。
- xfsdump备份下的数据只能由xfsrestore解析
- xfsdump是通过文件系统的UUID来分辨各个备份文件的,因此不能备份两个具有相同UUID的文件系统。
xfsdump [-L S_label] [-M M_label] [-l #] [-f 备份文件] 待备份数据
xfsdump -I
8.4.2 XFS 文件系统还原xfsresore
xfsrestore [-f 备份文件] [-L S_label] [-s] 带复原目录 <
单一文件全系统复原
xfsrestore [-f 备份文件] -r 待复原目录 <
通过累计备份文件来复原系统
xfsrestore [-f 备份文件] -i 待复原目录 <
进入互动模式
8.5 光盘写入工具
mkisofs [-o 镜像文件] [-Jrv] [-V vol] [-m file] 待备份文件 ... \ > -graft-point isodir=systemdir ...
8.5.2 cdrecord 光盘烧录工具
8.6 其他常见的压缩和备份工具
8.6.1 dd
dd可以读取磁盘设备的内容
dd if="input_file" of="output_file" bs="block_size" count="number"
if:input file
of:output file
bs:规划的一个blokc的大小,默认512Bytes
count:多少个bs
8.6.2 cpio
cpio -ovcB > [file|device] <
备份
cpio -ivcdu < [file|device] <
还原
cpio -ivct < [file|device] <
查看
9.vim程序编辑器
9.3.2 多文件编辑
-
数字有意义,5yy为复制5行
-
光标移动 1G,G分别移动到文章首尾
-
小数点"."为重复前一次动作
-
进入编辑模式常用i o R,尤其新增一列的o和取代的R
-
如果文章中又对齐的区块,可以使用ctrl+v进行复制/粘贴/删除的行为
-
的环境设置可以写在~/.vimrc中
-
可以用iconv进行文件语系编码的转换
-
使用dos2unix和unix2dos可以变更文件的每一列和行尾断行字符
10. bash
10.2.6 变量键盘读取、阵列与宣告: read、array、declare
read [-pt] variable
- p后面可以接提示符
- t后面可以接等待的秒数
declare [-aixr] variable
- -a: 让variable变为阵列(array)
- -i:让variable变为整形(intrger)
- -x:export
- -r:readonly,不可以unset
10.2.7 与文件系统及程序的限制关系:uklimit
ulimit [-SHacdfltu] [配额]
- -H:hard limit,必定不能超过
- -S:Soft limit,可以超过,但是会警告
- -a:后面不接任何选项与参数,可以列出所以额度限制
- -c:程序发生错误是,可将文件在内存的信息写成文件(core file)
- -f:为shell可以创建的子哦大文件大小
- -d:程序可以使用的最大断裂内存(segment)的大小
- -l:可用于锁定(lock)的内存量
- -t:可使用的最大CPU时间
- -u:单一使用者可以实验最大程序数量
10.2.8变量内容的删除、取代与替换
10.3 命令别名与历史命令
10.3.1命令别名设置:alias,unalias
alias lm='ls -al | more'
rm='rm -i'
10.3.2历史命令:history
history [n]
history [-c]
history [-raw] histfiles
10.4.5 万用字符与特殊符号
10.5 数据流重导向 输入:< << 输出:> >> 错误:2> 2>> 覆盖,累加
cat > catdile << "eof"
10.5.2
$? : 指令回传值(正确执行返回0)
cmd1 && cmd2 :cmd1返回0 -> 则执行cmd2 (1执行正确才执行2)
cmd1 || cmd2 :cmd1返回非0 -> 执行cmd2 (1执行错误才执行2)
10.6 管线命令(pipe)
10.6.1 颉取命令:cut、grep
cut -d '分隔字符' -f fields <
cut -c 字符区间
以“:”为分割,输出第3和第5个字符串:echo ${PATH} | cut -d ':' -f 3,5
输出第12个字符后的所有字符:export | cut -c 12-
grep [-acinv] [--color=auto] '搜寻字串' filename
-a : 将binary以text文件的方式搜寻数据
-c : 计算找到‘搜寻字串’的次数
-i : 忽略大小写不同
-n : 输出行号
-v : 反向选择,即显示没有‘搜寻字串’的那些
10.6.2 排序命令:sort、wc、uniq
sort [-fbMnrtuk] [file or stdin]
-f :忽略大小写
-b :忽略最前面的空白
-M:以月份的名字来排序,例如JAN,DEC
-n:以纯数字进行排序
-r:反向排序
-u:即uniq
-t:分隔符号,默认使用【TAB】进行分割
-k:以那个区间进行排序
将/etc/passwd 内容按:分割,对第三栏进行排序
cat /etc/passwd | sort -t ' ' -k 3
如果要以数字排序,末尾加 -n
uniq [-ic]
-i:忽略大小写字符的不同
-c:进行计数
用last将账号列出来,仅取出账号栏,进行排序后去除最后一位,并计算每个人登陆次数
last | cut -d ' ' -f1 | sort | uniq -c
wc [-lwm]
-l:仅列出行
-w:仅列出多少字
-m:多少字符
/etc/man_db.conf里有多少行、相关字、字符
cat /etc/man_db.conf | wc
10.6.3 双向重导向:tee
tee [-a] file
last | tee last.list | cut -d " " -f1
将last保存到last.list中
10.6.4 字符转换命令:tr、col、join、paste、expand
tr [-ds] SET1 ...
-d:删除讯息中的SET1这个字串
-s:取代掉重复的字符
last | tr '[a-z]' '[A-Z]'
将last输出的字符小写转换为大写
cat /etc/passwd | tr -d ':'
将冒号删除
col [-xb]
-x:将tab键转换成对等的空白键
join [-ti12] file1 file2
-t:join默认以空白字符分隔数据,并且对比第一个字段的数据,如果两个文件相同,则练成一行,且第一个字段放在第一个
-i:忽略大小写
-1:第一个文件要用那个字段来分析
-2:第二个文件要用那个字段来分析
paste [-d] file1 file2
-d:后面可以接分隔字符,默认以TAB分隔
- :若file部分写成- ,表示来自stdin的数据
expand [-t] file
:将tab转换成空白键
-t:后面可以接数字,一个tab可以用8个空白键取代,也可以自定义
10.6.5 分区命令:split
split [-bl] file PREFIX
-b:后面可以借像分区成的文件大小,可接单位,b、k、m等
-l:以行数进行分区
PREFIX:代表前置字符的意思,可作为分区文件的签到文字。
10.6.6 参数代换:xargs
xargs [-Θepn] command
-Θ:特书字符例如`\空白键等等,这个参数可以将特殊字符还原成一般字符
-e:EOF。后面可以接一个字串,当分析到这个字串的时候停止工作
-p:询问使用者
-n:接次数
10.6.7 减号-的用途
文件代替, stdin,stdout
10.7 重点回顾
- env和export可以观察环境变量(全局变量),export可以将自定变量转换成环境变量
- set可以观察当前bash的所有变量
- $?也是变量,是前一个指令执行完毕后的返回值
- loacl可以观察语系数据
- read让使用者有键盘输入变量
- ulimit限制使用者使用系统资源的情况
- bash的配置文件主要分为login shell和non-login shell,分别读取etc/profile和/.bash_profile,non-login仅读取/.bashrc
- 万用字符有:*,?,[]
- 数据流重导向通过>,2>,<
- 连续下达命令可以通过 ; || &&
11 正则表达式
11.2 基础正则表达式
grep [-A] [-B] [--color=auto] '搜寻字串' filename
-A:后面加数字,表示同时显示前几行
-B:后面加数字,表示同时显示后几行
11.2.4 基础正则表达式字符汇整
^word : 待搜寻字串(word)出现在行首
word$ : 待搜寻字串(word)出现在行尾
. : 一定有一个任意字符
\ : 转义字符
- : 重复0到无穷多个字符
[list] :字符集合,里面列出想要颉取的范围
[n1-n2]:同上
[^list]:不要列出的范围
{n,m}:连续n到m个
11.2.5 sed工具
sed [-nefr] [动作]
-n:使用silent模式,只有经过处理的数据才会被列出来
-e:直接在命令行界面进行sed的动作编辑
-f:直接将sed的动作写在一个文件内,-f filename可以执行filename内的sed动作
-r:sed的动作支持的是延伸型正则表达式的语法
-i:直接修改读取文件的内容,而不是屏幕输出
动作:[n1,[,n2] function]
function:
a:新增 nl /etc/passwd | sed '2a drink tea \hello'
c:取代 nl /etc/passwd | sed '2,5c No 2-5 number'
d:删除 nl /etc/passwd | sed '2,5d'
i:插入 nl /etc/passwd | sed '2i drink tea'
p:打印 通常与 sed -n一起运行
s:取代,可以直接进行取代的工作,可以搭配正则表达式 nl /etc/passwd | sed 's/要被取代的字串/新的字串/g'
11.3 延伸正则表达式
+:重复“一个或一个以上”的前一个RE字符
?:“零个或一个”的前一个RE字符
|:用or的方式找出这个字串
():找出“群组”字串
()+:多个重复群组的判别
11.4 文件的格式化处理
11.4.1 格式化打印:printf
printf '打印格式' 实际内容
\a:警告声音输出
\b:倒退键backsppace
\f:清除屏幕form feed
\n:输出新一行
\r:回车键
\t:水平的tab
\v:垂直的tab
\xNN:转换数字为字符
%ns:n是数字,s是string
%ni:i是integer
%N.nf:f代表floating
11.4.2 awk:数据处理工具
awk '条件类型1{动作1} 条件类型2{动作2} filename'
last -n 5 | awk '{print $1 "\t" $3}'
列出五条登陆者与ip,($1表示变量1),以tab隔开
NF:每一行($0)拥有的字段总数
NR:目前awk所处理的是第几行的数据
FS:目前的分割字符,默认是空白键
逻辑运算符
cat /etc/passwd | awk '{FS=":"} $3 < 10 {print $1 "\t" $3}'
第一行输出说明(NR==1),第二行之后操作
cat pay.txt | awk \
> 'NR==1{printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"Total"}
> NR>=2{printf "%10s %10d %10d %10d %10.2f\n",$1,$2,$3,$4,$2+$3+$4}'
Name 1st 2nd 3rd Total
bird 200 2100 100 2400
11.4.3 文件对比工具
-
difff
diff [-bBi] from-file to-file
-b:忽略一行中空白的差异
-B:忽略空白行的差异
-i:忽略大小写的不同 -
cmp
cmp [-l] file1 file2
-l:将所有不同点全列出来(cmp默认只列第一个) -
patch
patch -pN < patch_file
更新
patch -R -pN < patch_file
还原
-p:取消几层目录
diff -Naur passwd.old passwd.new > passwd.patch
12.3 善用判断式
12.3.1 利用test指令的测试功能
test -e /tmp && echo "exist" || echo "Not exist"
检查/tmp是否存在
-
1.文件是否存在提示符:
-e:该文件名是否存在
-f:该文件名是否存在,且为文件
-d:该文件名是否存在,且为目录
-b:是否存在,且为一个block device设备
-c:是否存在,且为一个character device设备
-S:是否存在,且为一个Socket文件
-p:是否存在,且为一个FIFO(pipe)文件
-L:是否存在,且为一个链接文件 -
2.文件权限检测提示符:
-r:是否可读
-w:是否可写
-x:侦测该文件名是否存在且具有“可执行”的权限?
-u:侦测该文件名是否存在且具有“SUID”的属性?
-g:侦测该文件名是否存在且具有“SGID”的属性?
-k:侦测该文件名是否存在且具有“Sticky bit”的属性?
-s:侦测该文件名是否存在且为“非空白文件”? -
3.两个文件的比较
-nt:(newer than)判断 file1 是否比 file2 新
-ot:(older than)判断 file1 是否比 file2 旧
-ef:判断 file1 与 file2 是否为同一文件,可用在判断hard link的判定上。主要意义在判定两个文件是否均指向同一个inode。 -
4.关于两个整数之间的判定
如 test n1 -eq n2
-eq:两数值相等 (equal)
-ne:两数值不等 (not equal)
-gt:n1 大于 n2 (greater than)
-lt:n1 小于 n2 (less than)
-ge:n1 大于等于 n2 (greater than or equal)
-le:n1 小于等于 n2 (less than or equal) -
5.判定字串的数据
test -z string:判定字串是否为 0 ?若 string 为空字串,则为 true
test -n string:判定字串是否非为 0 ?若 string 为空字串,则为false。 -n 亦可省略
test str1 == str2:判定 str1 是否等于 str2 ,若相等,则回传 true
test str1 != str2:判定 str1 是否不等于 str2 ,若相等,则回传 false -
6.多重条件判定,例如: test -r filename -a -x filename
-a:(and)两状况同时成立!例如 test -r file -a -x file,则 file 同时具有 r 与 x 权限时,才回传 true。
-o:(or)两状况任何一个成立!例如 test -r file -o -x file,则 file 具有 r 或 x 权限时,就可回传 true。
!:反相状态,如 test ! -x file ,当 file 不具有 x 时,回传 true
12.3.2 判断符号[ ]
"$HOME" == "$MAIL"
判断HOME与MAIL是否相等,需要有空格
12.3.3 Shell script的默认变量($0,$1…)
/path/t0/scriptname opt1 opt2 opt3 opt4
$0 $1 $2 $3 $4
$#:代表后接的参数的个数
$@:代表$1$2$3$4全部的opt,每个变量独立,用双引号括起来
$*:代表$1 $2 $3 $4
- sh
- t:造成参数变量号码偏移
后面可以接数字
12.4 条件判断式
12.4.1 利用if…then
if [条件1]; then
执行的指令
elif [条件2]; then
执行的命令
else
fi
date -d,–date=STRING 显示由STRING指定的时间
计算退伍时间、计算生日
12.4.2 利用case…esac判断
case ${1} in
"case1")
echo "asd"
;;
"case2")
echo "222"
;;
*)
echo "others"
;;
esac
12.4.3 function 功能
funciton printiit(){
echo -n "your choice is ${1}"
}
**printit 1**;
12.5 loop循环
12.5.1 while do done, until do done
12.5.2 for(…in…)do…done
12.5.3 for(…;…;…)do…done
12.6 shell script的追踪和debug
sh [-nvx] script.sh
-n:不执行scipt,只进行语法检查
-v:执行scipt之前先将script的内容输出
-x:将使用道德scipt内容显示到屏幕
12.7 复习回顾
- script的执行若以source来执行,代表在父程序bash内执行
- 若需要进行判断式,可使用test或中括号([ ])来处理
- $0,$1, 2... 2... 2...@都是有特殊含义的
13 Linux账号管理与ACL权限设置
13.1 Linux的账号与群组
13.1.1 使用者识别码:UID GID
13.2 账号管理
13.2.2新增与移除useradd,配置文件passwd,usermod,userdel
useradd [-u UID] [-g 初始群组] [-G 次要群组] [-mM] [-c 说明栏] [-d 主文件夹绝对路径] [-s shell] 使用者账号名
-u :后面接的是 UID ,是一组数字。直接指定一个特定的 UID 给这个帐号;
-g :后面接的那个群组名称就是我们上面提到的 initial group 啦~该群组的 GID 会被放置到 /etc/passwd 的第四个字段内。
-G :后面接的群组名称则是这个帐号还可以加入的群组。这个选项与参数会修改 /etc/group 内的相关数据喔!
-M :强制!不要创建使用者主文件夹!(系统帐号默认值)
-m :强制!要创建使用者主文件夹!(一般帐号默认值)
-c :这个就是 /etc/passwd 的第五栏的说明内容啦~可以随便我们设置的啦~
-d :指定某个目录成为主文件夹,而不要使用默认值。务必使用绝对路径!
-r :创建一个系统的帐号,这个帐号的 UID 会有限制 (参考 /etc/login.defs)
-s :后面接一个 shell ,若没有指定则默认是 /bin/bash 的啦~
-e :后面接一个日期,格式为“YYYY-MM-DD”此项目可写入 shadow 第八字段,
亦即帐号失效日的设置项目啰;
-f :后面接 shadow 的第七字段项目,指定密码是否会失效。0为立刻失效,
-1 为永远不失效(密码只会过期而强制于登陆时重新设置而已。)
passwd [--stdin] [帐号名称] <==所有人均可使用来改自己的密码
passwd [-l] [-u] [--stdin] [-S] [-n 日数] [-x 日数] [-w 日数] [-i 日期] 帐号
选项与参数:
–stdin :可以通过来自前一个管线的数据,作为密码输入,对 shell script 有帮助!
-l :是 Lock 的意思,会将 /etc/shadow 第二栏最前面加上 ! 使密码失效;
-u :与 -l 相对,是 Unlock 的意思!
-S :列出密码相关参数,亦即 shadow 文件内的大部分信息。
-n :后面接天数,shadow 的第 4 字段,多久不可修改密码天数
-x :后面接天数,shadow 的第 5 字段,多久内必须要更动密码
-w :后面接天数,shadow 的第 6 字段,密码过期前的警告天数
-i :后面接“日期”,shadow 的第 7 字段,密码失效日期
chage [-ldEImMW] 帐号名
选项与参数:
-l :列出该帐号的详细密码参数;
-d :后面接日期,修改 shadow 第三字段(最近一次更改密码的日期),格式 YYYY-MM-DD
-E :后面接日期,修改 shadow 第八字段(帐号失效日),格式 YYYY-MM-DD
-I :后面接天数,修改 shadow 第七字段(密码失效日期)
-m :后面接天数,修改 shadow 第四字段(密码最短保留天数)
-M :后面接天数,修改 shadow 第五字段(密码多久需要进行变更)
-W :后面接天数,修改 shadow 第六字段(密码过期前警告日期)
usermod [-cdegGlsuLU] username
选项与参数:
-c :后面接帐号的说明,即 /etc/passwd 第五栏的说明栏,可以加入一些帐号的说明。
-d :后面接帐号的主文件夹,即修改 /etc/passwd 的第六栏;
-e :后面接日期,格式是 YYYY-MM-DD 也就是在 /etc/shadow 内的第八个字段数据啦!
-f :后面接天数,为 shadow 的第七字段。
-g :后面接初始群组,修改 /etc/passwd 的第四个字段,亦即是 GID 的字段!
-G :后面接次要群组,修改这个使用者能够支持的群组,修改的是 /etc/group 啰~
-a :与 -G 合用,可“增加次要群组的支持”而非“设置”喔!
-l :后面接帐号名称。亦即是修改帐号名称, /etc/passwd 的第一栏!
-s :后面接 Shell 的实际文件,例如 /bin/bash 或 /bin/csh 等等。
-u :后面接 UID 数字啦!即 /etc/passwd 第三栏的数据;
-L :暂时将使用者的密码冻结,让他无法登陆。其实仅改 /etc/shadow 的密码栏。
-U :将 /etc/shadow 密码栏的 ! 拿掉,解冻啦!
userdel [-r] username
选项与参数:
-r :连同使用者的主文件夹也一起删除
13.2.2 使用者功能
- id
id username
- finger
finger [-s] username
- chfn
chfn [-foph] username
(change finger) - chsh
chsh [-ls]
(change shell
13.2.3 新增与移除组
-
groupadd [-g gid] [-r] 群组名称
选项与参数:
-g :后面接某个特定的 GID ,用来直接给予某个 GID ~
-r :创建系统群组啦!与 /etc/login.defs 内的 GID_MIN 有关。 -
groupmod [-g gid] [-n group_name] 群组名
选项与参数:
-g :修改既有的 GID 数字;
-n :修改既有的群组名称 -
groupdel [groupname]
-
gpasswd groupname
gpasswd [-A user1,...] [-M user3,...] groupname
gpasswd [-rR] groupname
选项与参数:
:若没有任何参数时,表示给予 groupname 一个密码(/etc/gshadow)
-A :将 groupname 的主控权交由后面的使用者管理(该群组的管理员)
-M :将某些帐号加入这个群组当中!
-r :将 groupname 的密码移除
-R :让 groupname 的密码栏失效
gpasswd [-ad] user groupname
选项与参数:
-a :将某位使用者加入到 groupname 这个群组当中!
-d :将某位使用者移除出 groupname 这个群组当中。
14 磁盘配额(Quota)与进阶文件管理系统
15 例行性工作调度(crontab)
16 程序管理与SELinux初探
17 认识系统服务 Linux
更多推荐
所有评论(0)