您的位置:首页 > 运维架构 > Linux

Linux基础

2015-07-21 19:48 441 查看



一、Linux与Windows的不同

1、Linux严格区分大小写
2、Linux中所有内容以文件形式保存,包括硬件
3、Linux不靠扩展名区分文件类型(靠权限区分文件类型)



二、常用扩展名(约定俗成)便于区分:(靠权限执行)

1、压缩包:“*.gz”,“*.bz2”,“*.tar.bz2”,“*.tgz”等
2、二进制软件包:“*.rpm”
3、网页文件:“*.html”,“*.php”
4、脚本文件:“*.sh”
5、配置文件:“*.conf”



三、 [root@localhost ~]# 的含义

root :用户名,此处为管理员

localhost :计算机主机名

~:但前所在目录(~表示家目录)。管理员的家目录为 /root ; 普通用户的家目录为/home/user1/

#:超级用户的提示符; 普通用户的提示符是$



四、常用命令的作用

/根目录

/bin 命令保存目录(普通用户就可以读取的命令)

/boot 启动目录,启动相关文件

/dev 设备文件保存目录

/etc 配置文件保存目录

/home 普通用户的家目录

/lib 系统库保存目录

/mnt 系统挂载目录

/media 挂载目录

/root 超级用户的家目录

/tmp 临时目录

/sbin 命令保存目录(超级用户才能使用的目录)

/proc 直接写入内存的

/sys

/usr 系统该软件资源目录
/usr/bin/系统命令(普通用户)
/usr/sbin/系统命令(超级用户)

/var 系统相关文档内容


五、重要的快捷键

TAG 键: 命令不全 / 档案补齐
Ctrl + c 键: 停止/指令串终止
Ctrl + d 键: 键盘输入结束



六、相关命令

1. 显示日期

date #显示日期

date +%y/%m/%d #指定格式

date +%H:%M #指定格式

2. 显示日历

cal #当前日历
cal 7 2015 #指定日历

3. 帮助命令

进入man指令的功能后,可以按下[空格键]往下翻页,可以按下[q]案件来离开man环境

man [命令] #获取指定命令的帮助

man -k 命令 #查看和命令相关的所有帮助
相当于 apropos 命令

info [命令] #功能与man类似

4. 将数据同步写入磁盘

sync

5. 改变文件属性与权限

chgrp users install.log #将install.log的群租改为user
chown bin install.log #将install.log的拥有者改为bin这个账号
chown root:root install.log #将install.log的拥有者与群组改回为root

chmod 777 linux #将linux文件的权限都启用

chmod u=rwx,go=rwx linux #将linux文件的权限都启用

改变档案拥有者,chown

#chown [-R] 账号名称 档案或目录
#chown [-R] 账号名称:组名 档案或目录
选项
-R:进行递归(rescursive)的持续变更,也就是同次目录下的所有档案都变跟

6. 目录处理

pwd #查看当前所在目录
pwd -p #查看真实的路径,而非使用链接(link)路径
mkdir [目录名] #创建目录

mkdir -p [目录名]
#递归创建目录
mkdir -m 700 [目录名] #创建目录并且指定目录权限
rmdir [目录名] #删除空目录

rmdir -p [目录名] #连同上层空目录一起删除
rmdir -r #删除文件

rmdir -rf #强制删除
cd ~ #进入当前用户的家目录
cd - #进入上次目录

cd .. #进入上一级目录

cd . #进入当前目录

7 查看当前目录下的文件
ls
常用选项与参数
-a : 全部的档案,连同隐藏档(开头为.的档案) 一起列出来
-d : 仅列出目录本身,而不是列出目录内的档案数据
-l :长数据串输出,包含档案的属性与权限等等数据

ls
#查看当前目录下的文件
ls -a #显示所有文件,包括隐藏文件
ls -l
#显示详细信息
ls -al ~
#将家目录下的所有档案列出
ls -alF --color=never ~ #不显示颜色,但在文件未显示出该文件代表的类型
ls -al --full-time ~ #完整呈现档案的修改时间
ls -d
#查看目录属性
ls -h #人性化显示文件大小
ls -i
#显示inode
ls -Z #观察安全性文本

8 复制命令 cp [选项] [原文件或目录] [目标目录]
cp
常用选项与参数

-a : 相当于-pdr的意思,至于pdr请看下面
-d : 若来源文件为链接文件的属性(link file),则复制链接文件属性而非档案本身

-i : 若目标文件已经存在时,在覆盖时会先询问动作的进行
-p :连同档案的属性一起复制过去,而非使用默认属性
-r :递归持续复制,用于目录的复制行为

cp -r # 复制目录
cp ~/.bashrc /tmp/bashrc #将家目录下的.bashrc复制到/tmp下,并更名为bashrc/.
sudo cp -a /tmp . #复制/tmp目录的所有文件至当前目录,包括文件属性

cp -p #连文件带属性复制
cp -d #若原文件时链接文件,则复制链接属性
cp -l hello.sh hello_l.sh
#硬连接复制文件

cp -s hello.sh hello_s.sh #软连接复制文件

cp -u .bashrc /tmp/bashrc #若.bashrc比/tmp/bashrc新才复制过来

9 移除档案或目录 rm [-fir] 档案或目录
rm
选项与参数

-f : 就是force的意思,忽略不存在的档案,不会出现警告讯息
-i : 互动模式,在删除前会询问使用者是否动作

-r : 递归删除,这是非常危险的选项

rm /tmp/bashrc #删除tmp目录下的bashrc

rm -i hello* #使用通配符批量删除

rm -r tmp #删除tmp目录(包括tmp下的文件)

\rm -r tmp #删除tmp目录,且不询问(包括tmp下的文件)

10 移动档案或目录或更名 mv

mv
选项与参数

-f: force强制的意思,如果目标档案已经存在,不会询问而直接覆盖
-i : 若目标档案已经存在时,就会询问时候覆盖

-u : 若目标档案已经存在,且source比较新,才会更新update

$mv wtmp mvtest
#将wtmp文件移到mvtest目录中

mv mvtest mvt
#将mvtest目录更名为mvt

11 取得路径的文件名与目录名字

basename mvtest/wtmp #取得最后的档案名

dirname mvtest/wtmp #取得最后的目录名

12 直接检视档案内容 cat

cat

选项与参数

-b: 列出行号,仅针对非空白行做行号显示,空白行不标行号!
-n : 打印出行号,连同空白行也会有行号,与-b的选项不同;

cat -n .bashrc #查看.bashrc这个档案,显示行号

tac .bashrc #查看.bashrc这个档案,但从最后一行开始显示

13 修改档案时间或监置新档 touch

touch testtouch #新建一个空的档案

touch -d "2 days ago" testtouch #修改testtouch的时间为两天前

touch -t 1511112358 testtouch #修改testtouch的时间为2015/11/11 23:58

14 配置档案隐藏属性 chattr [+-=][ASacdistu] 档案或目录

chattr

选项与参数
-+: 增加某一个特殊参数,其他原本存在参数则不动
-- : 移除某一个特殊参数,其他原本存在参数则不动
-= : 设置一定,且仅有后面接的参数

-a : 当设定a之后,这个档案将只能增加数据,而不能删除也不能修改数据,只有root

-i :当设置i之后,这个档案[不能被删除、改名、设定连接、写入]

15 显示档案隐藏属性 lsattr [-adR] 档案或目录

选项与参数
-a: 将隐藏文件的属性也秀出来
-d: 如果接的是目录,仅列出目录本身的属性而非目录内的文件民
-R : 连同子目录的数据也一并列出来

16 重启命令

shutdown -r now #立刻重启
shutdown -r 10 #过10分钟自动重启
shutdown -r 20:35 #在时间为20:35时候重启
shutdown -h now #立刻关机
shutdown -h 10 #10分钟后自动关机

17 命令搜索命令

whereis 命令名

-b : #只查找可执行文件位置

-m: #只查找帮助文件位置

which 命令名 # 查看命令所在位置,如果有别名的话同时显示命令别名

locate 文件名

#在后台数据库中按文件名搜索,搜索速度快,搜索的库为 /var/lib/mlocate ,更新的频率为一天一次,可以通过 updatedb命令强制更新。
#local命令的配置文件中( /etc/updatedb.cnf) 的设置会让local命令不搜索某些目录或某些类型的文件

find命令

find [搜索范围] [搜索条件]
#搜索文件
#find是在系统当中搜索符合条件的文件名。如果需要匹配,使用通配符匹配,通配符是完全匹配。
*匹配任意内容
? 匹配任意一个字符
[] 匹配任何一个中括号内的字符

find / -mtime 0 #将过去系统上面24小时内有更改过内容的档案列出
find /etc -newer /etc/passwd #寻找/etc底下的档案,如果档案日期比/etc/passwd新就列出

find / -name install.log #根据名称在/目录下搜索所有install.log文件
find / -iname install.log #不区分大小写
find /root -user root #在root下寻找属于root的文件
find /root -nuser #查找没有所有者的文件
find / -perm +7000 #搜寻档案中含有SGID或SUID或SBIT的属性
find / -size +1000k #找出系统中,大于1MB的档案
find /root -name “install.log*” #根据名称在/root目录下搜索所有匹配 install.log*文件
find /var -type s #找出/var目录下,文件类型为Socket的档案
find /var/log -mtime +10 #查找10天前修改的文件

#-10 10天内修改文件
#10 10天当天修改的文件

#+10 10天前修改的文件
# atime 文件访问时间
#ctime 改变文件属性

#mtime 修改文件内容

find . -size 25k #查找文件大小是25k2624的b的文件

#-25k 小于25kb的文件
#25k 等于25kb的文件
#+25k 大于25k的文件

find . inum 262422 #查找i节点是262422的文件
find /etc -size -20k -a -size -50k #查找/etc/目录下,大于20KB并且小于50kb的文件

#-a and 逻辑与,两个条件都满足
#-o or 逻辑或 ,两条条件满足一个即可

find /etc -size +20k -a -size -50k -exec ls {} \;#查找/etc/目录下,大于20kb并且小于50kb的文件,并显示详细信息

18. 查看网络

ip addr
ifconfig #查看与配置网络状态的命令
ifconfig eth0 192.168.0.200 netmask 255.255.255.0 #临时设置eth0网卡的IP地址与子网掩码

19 磁盘与目录的容量 df [-ahikHTm] [目录或文件]
df
常用选项与参数
-l: 仅显示本地磁盘(默认)
-a: 显示所有文件系统的磁盘使用情况,包括比如/proc/

-h: 以人们较易阅读的GBytes,MBytes,KBytes等格式自行显示
-H: 以1000进制计算最合适的单位显示磁盘容量
-T: 显示磁盘分区类型
-t: 显示指定类型文件系统的磁盘分区
-x: 不显示指定类型文件系统的磁盘分区
-i: 不用硬盘容量,而已inode的数量来显示

df #呼叫出目前挂在的指令
df -h #将容量以容易阅读的格式显示出来
df -aT #将系统内的所有特殊文件格式以及名称都列出来
df -h /etc #将/etc 底下的可用磁盘容量以容易阅读的格式显示
df -ih #将目前各个partition当中可用的inode数量列出

du [-ahskm] 档案或目录名称
常用选项与参数
-b: 以byte为单位统计文件

-k: 以KB为单位统计文件

-m: 以MB为单位统计文件

-h: 按照1024进制以最适合的单位统计文件

-H: 按照1000进制以最适合的单位统计文件

-s: 指定统计目标

du #列出目前目录下的所有档案容量
du -a #同上,但是将档案的容量也列出
du -sm /* #检查根目录底下,每个目录所占的容量

20. ln [-sf] 来源文件 目标文件
ln

常用选项与参数

-s: 如果不加任何参数就进行连接,那就是hard link,至于 -s 就是symbolic link
-f: 如果目标文件存在,就主动将目标文件直接移除后再建立

ln passwd passwd-hd #创建一个passwd的硬链接passwd-hd
ln -s passwd passwd-so #创建一个passwd的软链接passwd-so

21. 磁盘分区 fdisk [-l] 装置名称
fdisk
选项与参数
-l: 输出后面接的装置所有的partition内容,。若仅有 fdisk -l时,则系统将会把整个系统内能搜寻到的装置的partition均列出来。

22. 磁盘格式化 mkfs [-t 文件系统格式] 装置文件名
mkfs
选项与参数:
-t: 可以接文件系统格式,例如ext3,ext2,vfat等

23. 磁盘挂载与卸除 mount [-t 文件系统] [-L Label 名] [-o 额外选项] [-n] 装置文件名 挂载点 ; unmount [-fn] 装置文件名或挂载点
mount

mkdir /mnt/hdc6 ; mount /dev/hdc6 /mnt/hdc6 #将刚刚建立的/dev/hdc挂载到/mnt/hdc6上
mount -l #观察目前[已挂载]的文件系统,包含文件系统的Label名称
mkdir /media/cdrom ; mount -t iso9660 /dev/cdrom /media/cdrom # 挂载光盘
mount -o remount,rw,auto / #将 / 重新挂载,并加入参数为rw ,auto
mkdir /mnt/home ; mount --bind /home /mnt/home #将/home这个目录暂时挂载到 /mnt/home底下

unmount

选项与参数:

-f: 强制卸除,可用在类似网络文件系统(NFS)无法读取到的情况下

-n: 不更新 /etc/mtab 情况下卸除

unmount /dev/hdc6 #用装置文件名来卸除
unmount /media/cdrom #用挂载点来卸除

24 压缩

常见的5种压缩格式
gzip
gzip [-cdtv#] 档案名
选项与参数

-c: 将压缩的数据输出到屏幕上,可透过数据流重导来处理

-d: 解压缩的参数

-t: 可以用来检验一个压缩文件的一致性~看看档案有无错误

-v: 可以显示出原档案/压缩文件 的压缩比等信息

-#: 压缩登记,-1最快,但是压缩比最差、-9最慢,但是压缩比最好,默认是-6

gzip -v test.sh #压缩test.sh。并显示压缩比
gzip -d test.sh.gz #将test.sh.gz解压
gzip -9 -c test.sh > tesh.sh.gz #用最佳压缩比压缩test.sh,并且保留原本的档案

bzip2

bzip2 [-cdkzv#] 档案名

选项与参数

-c: 将压缩的数据输出到屏幕上,可透过数据流重导来处理

-d: 解压缩的参数

-k: 保留源文件,而不会删除原始的档案

-z: 压缩的参数

-v: 可以显示出原档案/压缩文件的压缩比等信息

-#: 压缩登记,-1最快,但是压缩比最差、-9最慢,但是压缩比最好,默认是-6

bzip2 -z test.sh #压缩test.sh
bzip2 -d test.sh.bz2 #解压test.sh.bz2

tar
tar [-j | -z] [cv] [-f 建立的档名] filename... #打包与压缩
tar [-j | -z] [tv] [-f 建立的档名] #查看档名
tar [-j | -z] [xv] [-f 建立的档名] #解压缩
常用选项与参数:

-c: 建立打包档案,可搭配 -v来 查看过程中被打包的档名

-t: 查看打包档案的内容有哪些档名

-x: 解打包或解压缩的功能,可以搭配-C 在特定目录解开,特别留意的是,-c, -t, -x 不可同时出现在一串指令中

-j: 透过 bzip2的支持进行压缩/解压缩 : 此时档名最好为 *.tar.bz2

-z: 透过 gzip 的支持进行压缩/解压缩 : 此时档名最好为 *.tar.gz

-v: 在压缩/解压缩的过程汇总,将正在处理的文件名显示出来

-f : filename: -f 后面要立刻接要被处理的档名!建议-f 单独写一个选项

-c: 目录: 这个选项在解压缩,若要在特定目录解压缩,可以使用这个选项

-p: 保留备份数据的原本权限属性,常用于备份(-c)重要的配置文件

-P: 保留绝对路径,即允许备份数据中含有根目录存在

--exclude =FILE : 在压缩的过程中,不要将FILE打包

tar -jcv -f filename.tar.bz2 要被压缩的档案或目录名称 #压缩
tar -jtv -f filename.tar.gz2 #查询
tar -jxv -f filename.tar.bz2 -C #欲解压缩的目录
tar -zpcv -f etc.tar.gz /etc #备份/etc

tar -ztv -f etc.tar.gz #查看 etc.tar.gz 档名字

tar -zxv -f etc.tar.gz #解压缩 etc.tar.gz

tar -jxv etc.tar.gz etc/shadow #解开etc.tar.gz中的 etc/shadow

25. 字符串搜索 grep [-acinvAB] [--color=auto] '搜寻字符串' filename
选项与参数:

-a: 将binary档案以text档案的方式搜索数据

-c: 计算找到'搜寻字符串'的次数

-i: 忽略大小写不同

-n: 输出行号

-v: 反向选择,即显示出没有‘搜索字符串’的那一行

-A: 后面可加数字,为after的意思,除了该列之外,后续的n行也列出来

-B: 后面可加数字,为before的意思,除了该咧之外,前面的n行也列出

--color=auto: 加上颜色

last | grep 'root' #将last当中,有出现root的那一行
last | grep -v 'root' #与例1相反,只要没有root的就取出
last | grep 'root' |cut -d ' ' -f1 #在last的输出讯息中,只要有root就取出,并且仅取第一列
grep --color=auto 'MANPATH' /etc/man.config #取出/etc/man.config内包含MANPATH的那几行
dmesg | grep -n -A3 -B2 --color-auto 'eth' #关键词所在的前两行与后三行也一起显示
grep -n 't[ae]st' regular_express.txt #搜寻test或taste这两个单字
grep -n '\.$' regular_express.txt #搜寻行尾结束为小数点的那一行
grep -n '^$' regular_express.txt #找出空白行
grep -v '^$' /etc/syslog.conf | grep -v '^#' #第一个 -v '^$'代表不要空白行,第二个 -v '^#' 代表不要开头是#的那行
grep -n 'g..d' regular_express.txt #找出g??d的字符串
grep -n 'ooo*' regular_express.txt #至少要两个以上的oo字符串
grep -n 'goo*g' regular_express.txt #两个g之间至少有一个o
grep -n 'g*g' regular_express.txt #找出开头与结尾是g的字符串,中间有无字符串不关心
grep -n 'g.*g' regular_express.txt #gg中间至少要有一个字符
grep -n 'go\{2,5\}g' regular_express.txt #要出g后面接2到5个o,再接一个g的字符串

26.备份工具 dd if="input_file" of="output_file" bs="block_size" count="number"

dd

选项与参数

-if: 就是input file, 也可以是装置

-of: 就是output file,也可以是装置

-bs: 规划一个block大小,若未指定则预设是512 bytes

-count: 多少个bs的意思

dd if=/etc/passwd of=passwd.back #将/etc/passwd备份到passwd.back当中

dd if=/dev/hdc of=mbr.back bs=512 count=1 #将自己的磁盘第一个扇区备份下来

27 完整备份工具 dump [-Suvj] [-level] [-f 备份档] 待备份资料

dump

选项与参数

-S: 仅列出后面的待备份数据需要多少磁盘空间才能够备份完毕

-u: 将这次 dump的时间记录到 /etc/dumpdates 档案中

-v: 将dump的档案过程显示出来

-j: 加入 bzip2的支持,将数据进行压缩,默认bzip2的压缩等级为2

-level: -0~-9 共10个等级

-f: 后面产生的档案

dump -S /dev/hdc1 #测试备份 /dev/hdc1需要多少容量
dump -0u -f /root/boot.dump /boot #将完整备份的文件记录成为/bot/boot.dump ,同时更新记录文件

restore 还原

restore -t -f /root/boot.dump #查看备份
restore -C -f /root/boot.dump #查看文件系统与备份文件之间的差异

28 与文件系统及程序的限制关系:ulimit

bash可以[限制用户的某些系统资源],比如cpu,内存等
ulimit -[SHacdfltu] [配额]
选项与参数
-H: hard limit,严格的设定,必定不能超过这个设定的数组
-S: soft limit,警告的设定,可以超过这个设定值,但是若超过则有警告讯息
在设定上,通常soft会比hard小,举例来说,soft可以设定为80而hard设定为100。当介于80~100时,系统会有警告讯息
-a: 后面不接任何选项与参数,可列出所有的限制额度
-c: 当某些程序发生错误时,系统可能会将该程序在内存中的信息写成档案
-f: 此shell可以建立的最大档案容量(一般可能设定为2GB)
-l: 可用于锁定的内存量
-t: 可使用的最大CPU时间
-u: 单一用户可以使用的最大程序数量

ulimit -a #列出你目前身份的所有限制资料树值
ulimit -f 10240 #限制用户仅能建立10MBytes以下的容量的档案

29 历史命令 history [选项] [历史命令保存文件]

选项:
n: 数字,意思是[要列出最近的n笔命令行表]的意思
-c:清空历史命令
-a: 将目前新增的history指令新增入histfiles中,若没有加histfiles,则预设~/.bash_history
-r:将histfiles的内容读到目前这个shell的history记忆中
-w: 将目前的history记忆内容写入histfiles中

history #列出目前内存内的所有history记忆
history 3 #列出最近3
history -w #立即将目前的资料写入histfile当中

30 别名与快捷键
(1)不显示颜色
ls - -color=never /
alias ls =“ls - - color=never” 设置别名
(2)ailias 查看所有生效别名

(3)别名永久生效与删除别名
vi ~/.bashrc 写入环境变量配置文件
source .bashrc 让配置文件生效

(4)unalias 别名 删除别名

31读入环境配置文件的指令 source:
source 配置文件档名

source ~/.bashrc #读入~/.bashrc档案
. ~/.bashrc #读入~/.bashrc档案

32
快捷键
ctrl+c 强制终止当前命令
ctrl+l 清屏
ctrl+a 光标移动到命令行首
ctrl+e 光标移动到命令行尾
ctrl+u 从光标所在位置删除到行首
ctrl+z 把命令放入后台
ctrl+r 在历史命令中搜索

33通配符与特殊符号
*:代表[0个到无穷多个]任意字符
? :代表[一定有一个]任意字符
[]:代表[一定有一个在括号内]的字符。例如[abcd]代表[一定有一个字符,可能是a,b,c,d这四个任何一个]
[-]:若有减号在中括号内时,代表[在编码顺序内的所有字符]。例如[0-8]代表0到9之间的所有数字,因为数字的语系编码是连续的。
[^]:若中括号内的第一个字符为^,那表示[反向选择],流入[^abc]代表一定有一个字符,只要是非a,b,c的其他字符就接受。

ll -d /etc/cron* #找出/etc/底下以cron为开头的档名
ll -d /etc/????? #找出/etc/底下文件名[刚好是五个字母]的文件名
ll -d /etc/*[0-9]* #找出/etc/底下文件名含有数字的文件名
ll -d /etc/[^a-z]* #找出/etc/底下,档名开头非为小写字母的文件名
cp -a /etc/[^a-z]* /tmp #将上一例的档案复制到/tmp中

除了通配符之外,bash环境中的特殊符号有哪些呢?
#:批注符号,常被用在script当中,在后的数据均不执行
\:跳脱符号,将[特殊字符或通配符]还原成一般字符
|:管线,分隔两个管线命令的界定
;:连续指令下达分隔符:连续性命令的界定
~:用户的家目录
$:取用变数前导符,亦即是变量之前需要加的变量取代值
&:工作控制,将指令变成背景下工作
!:逻辑运算意义上[非]not的意思。
/:目录符号,路径分割的符号
>,>>:数据流重导向,输出导向,分别是[取代]与[累加]
<,<<:数据流重导向,输入导向
‘’:单引号,不具有变量置换的功能
“”:双引号,具有变量置换的功能
``:两个[`]中间为可以先执行的指令,也可以使用$()
():在中间为子shell的起始与结束
{}:在中间为命令区块的组合

34
输出重定向
命令 > 文件 以覆盖的方式,把正确输出和错误输出都保存到同一文件中。
命令 >> 文件 以追加的方式,把正确数出和错误输出都保存到同一文件中。
命令 >>文件1 2>>文件2 把正确的输出追加到文件1中,把错误的输出追加到文件2中

35 && 和 ||
cmd1 && cmd2
(1)若cmd1执行完毕且正确执行,则开始执行cmd2
(2)若cmd1执行完毕且为错误,则不执行cmd2
cmd1 || cmd2
(1)若cmd1执行完毕且正确执行,则cmd2不执行
(2)若cmd2执行完毕且为错误,则开始执行cmd2

ls /tmp/abc && touch /tmp/abc/hehe #使用ls查阅目录/tmp/abc是否存在,若存在则用touch建立 /tmp/abc/hehe
ls /tmp/abc || mkdir /tmp/abc #测试/tmp/abc是否存在,若不存在则建立。
ls /tmp/abc || mkdir /tmp/abc && touch /tmp/abc/hehe #不清楚/tmp/abc是否存在,但是要建立/tmp/abc/heh档案

36 cut
选项与参数:

-d: 后面接分隔字符。与-f一起使用
-f:依据-d的分隔字符将一段讯息分割成数段,用-f取出第几段的意思
-c: 以字符(characters)的单位取出固定字符区间

echo $PATH | cut -d ':' -f 5 #将PATH变量的第5个路径取出

export | cut -c 12- #将export输出的讯息,取得第12字符以后的所有字符串

last | cut -d ' ' -f 1 #用last将显示的登入者的信息中,仅留下用户大名

37 sort
sort [-fbMnrtuk] [file or stdin]

选项与参数:

-f: 忽略大小写的差异,例如A与a视为编码相同
-b:忽略最前面的空格部分
-M: 以月份的名字来排序,例如JAN, DEC等排序方法
-n: 使用[纯数字]进行排序(默认是以文字形态来排序)
-r:反向排序
-u: 就是uniq,相同的数据中,仅出现一行;
-t:分隔符,预设使用[tab]键来分割
-k: 以那个区间(field)来进行排序的意思

cat /etc/passwd |sort #将个人账号进行排序
cat /etc/passwd | sort -t ':' -k 3 -n #帐号信息以[:]进行分割,第三行数字进行排序
last | cut -d ' ' -f1 | sort #利用last,将输出的数据仅取账号,并进行排序

38 uniq
uniq [-ic]

选项与参数:

-i : 忽略大小写字符的不同
-c:进行计数

last | cut -d ' ' -f1 | sort | uniq #使用last将账号列出,仅取出账号拦,并且相同的只输出一次
last | cut -d ' ' -f1 | sort | uniq -c #承上题,还需知道每个账号的登录次数

39 wc

wc [-lwn]

选项与参数

-l: 仅列出行
-w:仅列出多少字(英文单词)
-m:多少字符

cat /etc/man.config | wc #那个/etc/man.config 里面到底有多少相关行,字,字符数

40 tree

tree [-a] file

选项与参数

-a: 以累加(append)的方式,将数据加入到file当中

last | tree last.list | cut -d " " -f1 #将last的输出存一份到last.list档案中
ls -l /home | tree ~/homefile |more

41 字符转换命令: tr , col , paste
tr [-ds] SET1 .....

选项与参数

-d: 删除讯息当中的SET1这个字符串;
-s: 取掉重复的字符

last | tr '[a-z]' '[A-Z]' #将last输出的讯息中,所有的小写变成大写字符
cat /etc/passwd | tr -d ':' #将/etc/passwd 输出的讯息中,将冒号(:)删除

col [-xb]

选项与参数

-x: 将tab键转换成对等的空格键
-b: 在文字内有反斜杠(/)时,仅保留反斜杠最后接的那个字符

cat /etc/man.config | col -x | cat -A | more #利用cat -A 显示出所有特殊按键,最后以col将将[tab]转成空白

paste [-d] file1 file2

选项与参数

-d: 后面可以接分隔字符。预设是以[tab]来分隔的
- : 如果file部分写成- ,表示来自standard input的资料的意思

paste /etc/passwd /etc/shadow #将/etc/passwd与/etc/shadow同一行贴在一起

42 分隔命令: split [-bl] file PREFIX
split

选项与参数

-b: 后面可接欲分隔成的档案大小,可加单位,例如b,k,m等
-l: 以行数来进行分割
PREFIX: 代表前导符的意思,可作为分割档案的前导文字。

cd /tmp ; split -b 300k /etc/termcap termcap #我的/etc/termcap有七百多K,要发成300k一个
cat termcap* >> termcapback #将上面的几个档案合成一个档案,名为termcapback

43 sed

$表示最后一行
sed命令中使用 \(\) 包裹的内容表示郑泽表达式的第n部分

nl /etc/passwd | sed '2,5d' #将 /etc/passwd的内容列出并且打印行号,同时,将2~5行删除
nl /etc/passwd | sed '2d' #将 /etc/passwd的内容列出并切打印行号,同时,删除第2行
nl /etc/passwd | sed '3,$d' #将 /etc/passwd的内容列出并且打印行号,同时,删除第3行至最后一行
nl /etc/passwd | sed '2a drink tea' #在第二行后,加上 [drink tea]字样
nl /etc/passwd | sed '2i drink tea' #在第二行前,加上[drink tea]字样
nl /etc/passwd | sed '2,5c No 2-5 number' #第2-5行的内容取代为[ No 2-5 number ]
nl /etc/passwd | sed -n '5,7p' #仅列出 /etc/passwd 档案内的第5-7行
sed '1,$a \add one' test.txt #在test.txt文件中第一行至最后一行都加上add one
sed '/first/a \add one' test.txt #在包含first字符串的行的后面加上字符串add one
sed '/^ha.*day$/a \add one' #在ha开头,以day结尾的行,后面加add one
sed '$c \add one' test.txt #将最后一行替换成字符串"add one"
sed 's/line/text/g' test.txt #将文本中的所有line替换成text,g是全局的意思,如果没有g,则只会替换第一个line

sed 's/要被取代的字符串/新的字符串/g'

ipconfig | grep 'inet addr' | sed 's/^.*addr://g' #将ip前面的部分予以删除
ipconfig | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g' #将ip后面的部分予以删除
cat /etc/man.config | grep 'MAN' | sed 's/#.*$//g' | sed '/^$/d' #删除批注和空白符
sed -i 's/\.$/\!/g' regular_express.txt #利用sed将regular_express.txt内的每一行结尾.换成!

$sed -i '$a # This is a test' regular_express.txt #利用sed直接在regular_express.txt最后一行加入[#This is a test]

44 格式化打印: printf

printf '打印格式' 实际内容

选项与参数:

关于格式方面的几个特殊样式:

\a 警告声音输出
\b 退格键
\f 清除屏幕
\n 输出新的一行
\r 即Enter按键
\t 水平的[tab]按键
\v 垂直的[tab]按键
\xNN NN为两位数的数字,可以转换数字称为字符
关于C语言内,常见的变数格式
%ns n是数字,s代表string,即多少个字符
%ni n是数字,i 代表integer ,即多少个整数字数
%N.nf n和N都是数字,f代表floating,如果有小数字数,假设我共要十个位数,但小数点有两位,即为%10.2f

45 awk

awk '条件类型 1{动作1} 条件类型 2{动作2} ....' filename

last -n 5 | awk '{print $1 "\t" $3}' #取出账号与登入者的IP,且以[tab]隔开

awk 有一些内建的变量
NF 每一行拥有的字段总数
NR 目前awk所处理的时[第几行]数据
FS 目前的分割字符,默认是空格

cat /etc/passwd | awk 'BEGIN {FS=":"} $3<10 {PRINT $1 "\t" $3} '

46 diff [-bBi] from-file to-file

选项与参数

-from-file: 一个档名,作为原始比对档案的档名
-to-file: 一个档名,作为目的比对档案的档名
注意,from-file或 to-file可以 -取代,那个-代表[Standard input] 之意
-b: 忽略一行当中,仅有多个空白的差异。例如"about me" 与'about me"相同

-B: 忽略空白行的差异

-i: 忽略大小写的不同

diff passwd.old passwd.new #比对passwd.old与passwd.new的差异
diff -Naur passwd.old passwd.new > passwd.patch # 以passwd.old与passwd.new 制作布丁档案
patch -p0 < passwd.patch #将上一例制作出来的path file用来更新旧版数据
patch -R -p0 < passwd.patch # 恢复旧档案的内容

47 shell script的追踪与debug

sh [-nvx] script.sh

选项与参数

-n : 不要执行script, 仅查询语法的问题
-v:在执行script前,先将scripts的内容输出到屏幕上
-x:将使用到的script内容显示到屏幕上,这是很有用的

sh -n sh.16.sh #测试sh16.sh有无语法问题
sh -x sh15.sh #将sh15.sh的执行过程全部列出来

48 实际运行单一工作排程 at [-mldv] TIME

at

选项与参数

-m : 当at的工作完成后,即使没有输出讯息,以email通知使用者改工作完成
-l:at -l 相当于atrm,列出目前系统上面的所有该用户的at排程
-v: 可以使用较明显的时间格式栏出at排程中的任务栏表
-c:可以列出后面接的该项工作的实际指令内容

atq #查询目前主机上面有多少的at工作排程
atrm 5 #将上诉的第5个工作移除

batch与at类似,它会在系统的cpu工作负载小于0.8的时候,才进行所下达的工作任务

crontab [-u username] [-l|-e|-r ]

选项与参数

-u: 只有root才能进行这个任务,即帮助其他使用者建立/移除crontab工作排程
-e:编辑crontab的工作内容
-l: 查阅crontab的工作内容
-r: 移除所有crontab的工作内容,若仅移除一项,请用-e去编辑

(1)假若你的女朋友生日是5月2日,你想要在5月1日的23:59发一封信给他,这封信的内容已经写在/home/dmtsai/lover.txt 内了,该如何进行?

答: 直接下达 crontab -e之后,编辑
59 23 1 5 * mail kiki < /home/dmtsai/lover.txt
(2)假如每五分钟需要执行 /home/dmtsai/test.sh 一次,又该如何?
答: 同样适用crontab -e ,编辑
*/5 * * * * /home/dmtsai/test.sh
(3) 假如你每星期六都与朋友有约,那么想要每个星期五下午4:30告诉你朋友星期六的约会不要忘记,则:
答: 适用 crontab -e 编辑
30 16 * * 5 mail friend@his.server.name < /home/dmtsai/friend.txt

crontab -l #查询使用者目前的crontab

49. 观察目前的背景工作状态:jobs [-lrs]

选项与参数

-l: 除了列出job number与指令串之外,同时列出PID的号码
-r:仅列出正在背景run的工作
-s: 仅列出正在背景中暂停(stop)的工作

jobs -l #观察目前的bash当中,所有的工作,与对应的PID

50 将背景工作拿到前景来处理 fg %jobnumber

选项与参数

-%jobnumber: jobnumber为工作号码(数字)。注意,那个%是可有可无的。

51 管理背景当中的工作: kill -signal %jobnumber

选项与参数

-l : 这个是L的小写,列出目前kill能哦股使用的讯号( signal)有哪些
signal: 代表给予后面的那个工作什么样的指示,一般来说有:
-1: 重新读取一次参数的配置文件
-2: 代表与由键盘输入 [ctrl]-c 同样的动作
-9: 立刻强制删除一个工作
-15: 以正常的程序方式终止一项工作。与-9是不一样的。

52 脱机管理问题 nohup
nohup可以让你再脱机或注销系统后,还能让工作继续进行,他的语法有点像这样:
nohup [指令或参数] #在终端机前景中工作
nohup [指令或参数] & #在终端机背景中工作

53 程序的观察
ps : 将某个时间点的程序运作情况截取下来

ps aux #观察系统所有的程序数据
ps -lA #观察所有系统的数据
ps axjf #连同部分程序树状态
ps -l #仅观察自己的bash相关程序
ps aux | egrep '(cron|syslog)' #找出与cron与syslog这两个服务有关的PID号码

top : 动态观察程序的变化 top [-d 数字] | top [-bnp]

top 预设使用CPU使用率(%CPU)作为排序的重点,如果你想要使用内存使用率排序,则可以按下[M],若要回复则按下[P]即可 。如果想要离开top则按下[q]吧!

top -d 2 #每两秒钟更新一次top
top -b -n 2 > /tmp/top.txt #将top的信息进行2次,然后将结果输出到 /tmp/top.txt

pstree

pstree -A #列出目前系统上面所有的程序树相关性
pstree -Aup #承上题,同时秀出PID与users

54 nicee [-n 数字] command

选项与参数

-n : 后面接一个数值,数值范围-20~19

nice -n -5 vi & #用root 给一个nice值为-5,用于执行vi,并观察该程序

55 已存在程序的nice重新调整 renice [number] PID

选项与参数

PID : 某个程序的ID

56 系统资源的观察
free 观察内存使用情况 free [-b|-k|-m|-g] [-t]
选项与参数
-b: 直接输入free时,显示的单位是Kbytes,我们可以使用b(bytes) ,m(Mbytes)及g(Gbytes)来显示单位
-t: 在输出的最终结果,显示物理内存与swap的总量

free -m #显示目前系统的内存容量

uname : 查询系统与核心相关信息 uname [-asrmpi]

选项与参数
-a: 所有系统相关的信息,包括底下的数据都会被列出来;
-s: 系统核心名称
-r: 核心的版本
-m: 本系统的硬件名称,例如 i686 或x86_64
-p: CPU的类型,与-m类似,只是显示的是CPU的类型
-i: 硬件的平台(ix86)

uname -a #输出系统的基本信息

57 netstat [-atunlp]

选项与参数
-a: 将目前系统上所有联机、监听、Socket数据都列出来
-t: 列出tcp网络封包的数据
-u: 列出udp网络封包的数据

-n: 不以程序的服务名称,以port number来显示
-l: 列出目前正在网络监听的服务
-p: 列出该网络服务的程序PID

netstat #列出目前系统已经建立的网络联机与unix socket状态
netstat -tlnp #找出目前系统上已在监听的网络联机及其PID
netstat -tulp #找出目前系统开启的[网络服务]有哪些
netstat -lnp #找出所有的有监听网络的服务
service --status-all #观察所有的服务状态

58 侦测系统资源变化 vmstat

r: 等待运作中的程序数量
b: 不可被唤醒的程序数量
这两个项目越多,代表系统越忙碌
si: 由磁盘中将程序取出的量
so: 由于内存不足而将没用到的程序写入到磁盘的swap的容量
如果si/so 的数值太大,表示内存内的数据常常得在磁盘与主存储器间传来传去,系统效能会很差
bi: 由磁盘写入的区块数量
bo:写入到磁盘去的区块数量。
如果这部分的值越高,代表系统的I/O非常忙绿
选项与参数
-a: 使用 inactive/active(活跃与否)取代buffer/cache的内存输出信息
-f: 将开机到目前为止,系统复制(fork)的程序数
-s: 将一些时间(开机到目前为止)导致内存变化情况列表说明
-S: 后面可以接单位,让显示的数据有单位。例如K/M取代bytes的容量
-d: 列出磁盘的读写总量统计表
-p: 后面列出分割槽,可显示该分割槽的读写总量统计表

vmstat 1 3 #统计目前主机的CPU状态,每秒一次,共计三次

59 fuser [-umv] [-k [i] [-signal]] file/dir

fuser -uv . #找出目前所在目录的使用 PID/所属账号/权限
fuser -mvu /proc #找到所有使用到 /proc 这个文件系统的程序

60 lsof

lsof #列出目前系统上面所有已经被开启的档案与装置

61 pidof [-sx] program_name

选项与参数
-s: 仅列出一个PID而不列出所有的PID
-x: 同时列出该program name 可能的PPID那个程序的PID

pidof init syslogd #列出目前系统上面init以及syslogd这两个程序的PID

62 chkconfig: 管理系统服务默认开机启动与否

选项与参数
--list: 仅将目前的各项服务状态栏出来
--level: 设定某个服务在该level下启动(on)或关闭(off)

chkconfig --list | more #列出目前系统上面所有被chkconfig管理的服务
chkconfig --list | grep "3:on" #显示目前在run level 3为启动的服务
chkconfig --level 345 atd on #让atd这个服务在run level为3,4,5时启动

63 gcc 的简易用法

gcc -c hello.c #仅将原始码编译成为目标文件,并不制作链接等功能
gcc -O hello.c -c #在编译的时候,依据作业环境给予优化执行速度,会自动产生hello.c这个档案,并且进行优化
gcc sin.c -lm -L/usr/lib -I/usr/include #在进行binary file制作时,将连结的函数库和相关的路径填入
gcc -o hello hello.c #将编译的结果输出成某个特定档名
gcc -o hello hello.c -Wall #在编译的时候,输出较多的讯息说明

64 rpm -ivh package_name

选项与参数
-i: install的意思
-v: 查看更细部的安装信息画面
-h: 以安装信息列显示安装进度
rpm安装时常用的选项与参数说明

--nodeps: 当软件属性相依问题而无法安装,但你执意安装时

--replacefiles: 如果在安装的过程中出现了[某个档案已经被安装在你的系统上]的信息,又或许出现版本不合的讯息时,可以使用这个参数来直接覆盖档案

--replacepkgs: 重新安装某个已经安装过的软件!如果你要安装一堆RPM软件档案时,可以使用rpm -ivh *.rpm ,但若某些软件已经安装过了,此时系统就会出现[某软件已安装]的信息,导致无法继续安装,此时可以使用这个选项来重复安装

--force: 这个参数就是 --replacefiles 与 --replacepkgs的综合

--test: 想要测试一下该软件是否可以被安装到使用者的Linux环境当中,可找出是否有属性相依的问题

--justdb:由于RPM数据库破损或者某些缘故产生错误时,可以使用这个选项来更新软件在数据库内的相关信息

--nosignature: 想要略过数字签名的检查时,可以使用这个选项

--prefix 新路径:想要将软件安装到其他非正规目录时。

--noscripts: 不想让软件在安装过程中自行执行某些系统指令

rpm -q logrotate #找出Linux是否有安装logrotate这个软件
rpm -ql logrotate #列出上题当中,属于该软件所提供的所有目录与档案
rpm -qi logrotate #列出logrotate这个软件的相关说明数据
rpm -qc logrotate #找出logrotate的配置文件
rpm -qd logrotate #找出logrotate的说明档
rpm -qR logrotate #若要成功安装logrotate, 还需要什么档案的帮助
rpm -qf /bin/sh #找出/bin/sh是哪个软件提供的
rpm -qpR filename.i386.rpm #找出档案的需求档案
rpm -qa | grep ^c | wc -l #找出系统中以c开头的软件有几个
rpm -V logrotate #列出Linux内的logrotate这个软件是否被更动过
rpm -Vf /etc/crontab #查询一下,你的/etc/crontab是否有被更动过
rpm -e pam #卸载一个软件,但是必须先删除依赖他的软件
rpm --rebuilddb #重建数据库

65 yum [option] [查询工作项目] [相关参数]

选项与参数
[option]: 主要的选项,包括有:
-y: 当yum要等待用户输入时,这个选项可以自动提供yes的响应
--installroot=/some/path: 将该软件安装在 /some/path 而不使用默认路径
-install :后面接要安装的软件
-update:后面接要升级的软件,若要整个系统都升级,就直接update即可
-remove: 后面接要移除的软件
[查询工作项目][相关参数]: 这方面的参数有:
search : 搜寻某个软件名称或者是描述的重要关键字
list: 列出目前yum所管理的所有软件名称与版本,有点类似 rpm -qa
info:同上,不过有点类似 rpm -qai 的执行结果
provides:从档案去搜索软件!类似 rpm -qf 的功能

yum search raid #搜寻磁盘阵列(raid)相关的软件有哪些
yum info mdadm #找出mdadm 这个软件的功能
yum list #列出yum 服务器上面提供的所有软件名称
yum list updates #列出目前服务器上可供本机进行升级的软件有哪些
yum provides passwd #列出提供passwd这个档案的软件有哪些
yum install pam-devel #安装pam-devel
yum repolist all #列出目前 yum server 所使用的容器有哪些
yum clean all #删除已下载过的所有容器的相关数据
yum grouplist #查阅目前容器与本机上面的可用与安装过的软件群组有哪些

66 test指令的测试功能

当要检查系统上面某些档案或者相关属性时,利用test这个指令,比如

test -e /dmtsai #检查 /dmtsai是否存在

执行结果并不会显示任何讯息,但最后可以通过$? 或 && 及 || 来展现整个结果。

test -e /dmtsai && echo "exist" || echo "Not exist"

除了 -e之外,还有很多测试的标志,如

-e : 该 [档名是否存在]
-f: 该[档名]是否存在且为file
-d: 该[档名]是否存在且为目录
-b: 该[档名]是否存在且为一个block device装置
-c: 该[档名]是否存在且为一个character device装置
-S:该[档名]是否存在且为一个Socket档案
-p: 该[档名]是否存在且为一个FIFO(pipe)档案
-L: 该[档名]是否存在且为一个连结档
-r : 该[档名]是否存在且具有[可读]权限
-w:该[档名]是否存在且具有[可写]权限
-x: 该[档名]是否存在且具有[可执行]权限
-u: 该[档名]是否存在且具有[SUID]的属性
-g: 该[档名]是否存在且具有[SGID]的属性
-k: 该[档名]是否存在且具有[Sticky bit]的属性
-s: 该[档名]是否存在且为[非空白档案]?
两个档案之间的比较,如: test file1 -nt fil2
-nt:判断 file1 是否比 fil2 新
-ot:判断 file1 是否比 file2 旧
-ef:判断file1与fil2是否为同一档案,可用在判断hard link的判断上。
关于两个整数之间的判断,例如: test n1 -eq n2
-eq:两数值相等
-ne:量数值不相等
-gt: n1 大于 n2
-lt : n1 小于 n2
-ge: n1大于等于n2
-le: n1小于等于n2
判断字符串数据
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
多重条件判定,例如 test -r filename -a -x filename
-a : (and)量状况同时成立。
-o :(or) 两状况任何一个成立
! :反相状态,例如 test ! -x file ,当file不具有 x时,回传true

67 变量内容的删除、取代与替换

${变量#关键词}: 若变量内容从头开始的数据符合[关键词],则将符合的最短数据删除

${变量##关键词}:若变量内容从头开始的数据符合[关键词],则将符合的最长数据删除

${变量%关键词}:若变量内容从尾向前的数据符合[关键词],则将符合的最短数据删除

${变量%%关键词}:若变量内容从尾向前的数据符合[关键词],则将符合的最长数据删除

${变量/旧字符串/新字符串}:若变量内容符合[旧字符串]则[第一个旧字符串会被新字符串取代]

${变量//旧字符串/新字符串}:若变量内容符合[旧字符串]则[全部的旧字符串会被新字符串取代]

var=${str-expr} : 若str已设定,则var=str,否则var=expr
var=${str:expr}:若str已设定且非空,则var=str,否则var = expr
var=${str+expr}:若str已设定,则var=expr ,否则var =""
var=${str:+expr}:若str已经设定非空,则var =expr,否则var =""
var=${str=expr}: 若str已经设定,则str不变,var=str, 否则str=expr,var=expr
var=${str:=expr}:若str已设定非空,则str不变,var=str,若str为空,则str=expr,var=expr,若str未设定则,str=expr,var=expr
var=${str?expr}:若str已设定,则var=str,否则输出expr至stderr
var=${str:?expr}:若str已设定非空,var=str,否则输出expr至stderr


七、其他

1. 绝对路径和相对路径

绝对路径:路径的写法[一定是由根目录/写起],例如:/usr/share/doc 这个目录

相对路径:路径的写法[不是由/写起],例如由/usr/share/doc 要到/usr/share/man底下时,可以写成:[cd ../man ] 这就是相对路径的写法

2.目录的相关操作

[.] 代表此层目录

[..] 代表上一层目录

[-] 代表前一个工作目录

[~] 代表[目前用户身份]所在的家目录

~account 代表account这个用户的家目录(account是个账号名称)

3.三个时间的概念

modification time(mtime): 当该档案的[内容数据]变更时,就会更新这个时间!内容数据指的是档案的内容,而不是档案的属性和权限。

status time(ctime): 当该档案的[状态(status)]改变时,就会更新这个时间,举例来说,像是权限与属性被更改了,都会更新这个时间。

access time(atime): 当该档案的[内容被取用],就会更新这个读取时间(access)。举例来说,我们使用cat去读取/etc/man.config,就会更新档案的atime。

4.权限与指令的关系

(1)让用户能够进入目录成为[可工作目录]的基本权限为:

可使用的指令:例如cd等变换工作目录的指令
目录所需权限:用户对这个目录至少要拥有x权限
额外需要:如果用户想要在这个目录内利用ls查阅文件名,则用户对此还需要r的权限

(2)用户在某个目录内读取一个档案的基本权限为:

可使用的指令:例如cat, less, more 等等
目录所需权限:用户对这个目录至少要拥有x权限
档案所需权限:使用者对这个档案至少要拥有r权限

(3)让使用者可以修改一个档案的基本权限为:

可使用的指令:例如nano或未来要介绍的vi编辑器等
目录所需权限:用户在该档案所在目录至少要拥有x权限
档案所需权限:使用者对这个档案至少要有w,x权限

(4)让使用者可以建立档案的基本权限为:

目录所需权限:用户在该目录至少需要w, x权限。重点在w权限

(5)让用户进入某个目录并且执行该目录下某个指令的基本权限为:

目录所需权限:用户在该目录至少需要有x权限
档案所需权限:使用者在该档案至少需要有x权限

5. 特殊权限

(1)SUID:当s这个标记出现在档案拥有者的x权限上时,此时就被称为Set UID,简称为SUID的特殊权限。基本上SUID有这样的限制和功能:

SUID权限仅对二进制程序有效
执行者对该程序需要有x权限才可执行
本权限只在执行该程序的过程中有效
执行者将具有该程序拥有者的权限

(2)SGID:当s这个标记出现在档案群组的x权限上时,此时就被称为Set GID,简称为SGID。与SUID不同,SGID可以针对档案或目录来设定,SGID有如下功能:

SGID对二进制程序游泳
程序执行者对该程序来说,需具备x的权限
执行者在执行的过程中将会获得该程序群组的支持

注意,当一个目录设定了SGID权限之后,它将具有如下的功能:

用户对此目录具有r与x权限时,该用户能够进入该目录
用户在目录下的有效群组将会变成该目录的群组
用途:若用户在此目录具有w权限,则使用者建立的新档案,该新档案的群组与此目录群组相同

(3)SBIT:SBIT目前只针对目录有效,SBIT对目录的作用是:

当用户对此目录具有w,x权限时,即具有写入权限时;
当用户在此目录建立档案或目录时,仅有自己和root才有权限删除该档案

权限的设定 ,如 2770 。第一个数字表示的是特殊权限,4表示SUID,2为SGID,1为SBIT

6 关于减号 -的用途

在管线命令当中,常常会使用到前一个指令的stdout作为这次的stdin,某些指令需要用到文件名(例如tar)来进行处理时,该stdin与stdout可以利用减号‘-’来替代,举例来说:

tar -cvf - /home | tar -xvf -

上面这个例子是说:[我将/home 里面的档案给他打包,但打包的数据不是纪录到档案,而是传送到stdout;经过管线后,将tar -cvf - /home 传送到后面的tar -xvf -]。后面的这个 - 则是取用前一个指令的stdout, 因此,我们就不需要使用file了 。

7 系统的开机流程

(1)加载BIOS的硬件信息与进行自我测试,并依据设定取得第一个可开机的装置

(2)读取并执行第一个开机装置内MBR的boot Loader(即grub , spfdisk等程序)

(3)依据boot loader的设定加载Kernel , Kernel 会开始侦测硬件与加载驱动程序

(4)在硬件驱动成功后,Kernel会主动呼叫init程序,而init会取得run-level信息

(5)init 执行 /etc/rc.d/rc.sysinit 档案来准备软件执行的作业环境(如网络,时区等)

(6)init 执行 run-level 的各个服务之启动(script 方式)

(7)init 执行 /etc/rc.d/rc.local 档案

(8)init 执行终端机仿真程序 mingetty 来启动login程序,最后就等待用户登入啦。

8 如何查看与修改 runlevel

查看很简单,只要输入 [runlevel] 就可以得知。而如果要修改目前的runlevel,可以直接输入 init [level] 例如要去到 runlevel 3可以: [init 3]即可。如果想要每次开机都设定固定的runlevel ,那么可以修改 /etc/inittab 这个档案! 将里面的这一行改成 : [id:3:initdefault:] 即可


八、综合案例

1. 管理员root讲自己的.bashrc文件复制给dmtsai,并且允许他修改。

cp ~/.bashrc ~dmtsai/bashrc  #复制档案
chown dmtsai:users ~dmtsai/bashrc  #修改档案所有者


2.在/temp下建立一个目录,这个目录名为canghong,并且拥有着为canghong,群组为users,此外,任何人都可以进入该目录浏览,但是只有canghong可以进行修改。

mkdir /tmp/canghong  #创建目录
chown -R canghong.ch:users /tmp/canghong  #修改所有者
chmod -R 755 /tmp/canghong   #修改权限


3. 创建两个账号,分别是alex和arod,这两个账号共同支持一个名为project的群组。假设两个用户需要共同拥有ahome目录的开发权,且该目录不许其他人进入查阅,请问该权限的目录该如何设定

groupadd project  #增加新的群组
useradd -G project alex  #建立alex账号,且支持project
useradd- G project arod  #建立arod账号,且支持project
mkdir ahome   #建立项目目录
chgrp project ahome #修改目录的群组
chmod 770 ahome  #修改目录的权限
chmod 2770 ahome  #给目录加入SGID权限


4 备份 /srv/myproject 这个目录内的数据至/backups这个目录下。然后进行还原

mkdir /backups        #创建目录
dump -0u -j -f /backups/myproject.dump /src/myproject       #开始进行dump,进行level 0的完整备份
cp -a /var/log /srv/myproject #假设现在原文件加大了
dump -1u -j -f /backups/myproject.dump.1 /src/myproject #将/srv/myproject以level1来进行备份
还原

umount /dev/hdc6  #先将/srv/myproject卸除
mkfs -t ext3 /dev/hdc6 #将partition重新格式化
mount -a  #重新挂载原本的partition
cd /srv/myproject
restore -r -f /backups /myproject.dump #将完整备份的level 0的档案 /backups/myproject.dump 还原回来
cd /src/myproject
restore -r -f /backups/myproject.dump.1 #将后续的level 1的备份也还原


5 以ls -l配合grep 找出 /etc/ 底下文件类型为链接文件属性的文件名

由于ls -l 列出连接档时标头会有[l] ,因此使用如下的指令即可找出结果:

ls -l /etc | grep '^l'


6 假设有一个指令程序,名称为: ping.sh 这个档名。我想要让系统每3分钟执行这个档案一次,但是偏偏这个档案会有很多讯息显示出来,所以我的root账号每天都会收到差不多四百多封的信件。请问如何设定比较好?

这个涉及数据流重导向的问题,我们可以将他导入档案或者直接丢弃。如果讯息不重要的话,那么就予以丢弃,如果讯息很重要的话,才将他保留。假设今天这个命令不重要,所以将他丢弃掉,因此,可以这样写

*/3 * * * * root /usr/local/ping.sh > /dev/null 2>&1


7 查询 crond这个daemon的PID和他的PRI值

ps aux | grep crond


8 通过安装、设定、启动、观察与管理防火墙机制,完整地了解一个服务的启动与观察

rpm -q telnet-server   #查看telnet是否安装
yum install telnet-server   #安装telnet
chkconfig --list telnet      #查看配置文件 telnet,只有on或off者为super daemon
ll /etc/xinetd.d/telnet
grep "^telnet" /etc/services
chconfig telnet on ;chkconfig --list telnet #改变telnet,让其启动
/etc/init.d/xinetd restart    #重启
netstat -tlnp | grep xinetd
grep server /etc/xinetd.d/telnet  #找到telnet的主程序是哪一支
vim /etc/hosts.allow  #指定开放的网域
in.telnetd:.edu.tw
vim /etc/hosts.deny   #指定封闭的网域
in.telnetd:ALL


9 在没有网络的前提下,想要安装一个名为pam-devel的软件,你手边只有原版光盘,如何是好?

可以通过挂载原版光盘来进行数据的查询与安装。将原版光盘放入光驱,底下我们尝试将光盘挂载到/media当中

mount /dev/cdrom /media  #挂载光盘
find /media -name 'pam-devel*'   #找出档案的实际路径
rpm -ivh pam-devel... --test        #测试此软件是否具有相依性
rpm -ivh pam-devel....               #直接安装
umount /dev/cdrom                  #卸除光盘
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: