鸟哥linux私房菜 随笔

来源:互联网 发布:黑衣剑士修改数据 编辑:程序博客网 时间:2024/04/30 00:16

切换执行等级,可以用init 命令来切换执行等级,linux共有7种执行等级,

run level 0 :关机

run level 3: 纯命令模式

run level 5: 含有图形界面模式

run level 6: 重启

所以关机又等于 init 0 = shutdown -h now以及poweroff。

chgrp 改变所属组

chown 改变文件所有者

chmod改变权限

权限对于目录的重要性:

文件是存放实际数据的所在,目录主要的内容是记录文件名列表

r 表示具有读取目录结构列表的权限,可以查询该目录下的文件名数据

w 表示你具有更改该目录结构列表的权限

1, 新建新的文件与目录

2,删除已经存在的文件与目录(不论该文件的权限是什么)

3,将已经存在的文件或者目录进行重命名

转移该目录内的文件,目录位置。

x 目录不可以被执行,目录的x代表的是用户能否进入该目录成为工作目录的用途。(也就是切换到这个目录下)

FSH 规定 三层目录下应该放置什么数据:

/(root 根目录),与开机系统有关 ,FHS建议 根目录(/)所在分区应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好.如此不但性能好,根目录所在的文件系统也较不容易发生问题.

/usr(unix software resource) ,与软件安装/执行有关;

/var (variable): 与系统运作过程有关。

/根目录下 子目录:

/bin bin放置的是在单用户维护模式下还能够被操作的命令,cat,chmod,chown,date,mv,mdir,cp,bash等命令

/boot 目录下放置的开机会使用到的文件。

/dev 任何设备与接口设备都是以文件的 形式存在于这个目录当中,只要你访问这个目录下的某个文件,就等于访问某个设备。

/etc 系统主要的配置文件几乎都放置在这个目录里面,只有root有权利修改,FHS建议,不要放置可执行文件(binary)在这个目录中。

/home 这是系统默认的用户文件夹

/lib 系统的函数库非常多,而/lib放置的则是在开机时会用到的函数库,以及在/bin或/sbin下面的命令会调用到的函数库而已,

/media 下面放置的就是可删除的设备,包括软盘,光盘,DVD等设备都暂时挂载与此。

/mnt 暂时挂载某些额外的设备 早些版本,这个目录跟/media用途相同,后来有了media,只用来暂时挂载

/opt 放置第三方软件的目录

/root 系统管理员的主文件夹,只挂载根目录时,该目录能够拥有root的主文件夹,因此希望root的主文件夹与根目录放置在同一分区中

/sbin 放在/sbin下面的为开机过程所需要的,里面包括了开机,修复,还原系统所需的命令。至于某些服务器软件,一般放置在/usr/sbin当中,本机自行安装的软件所产生的系统执行文件,则放置在/usr/local/sbin。常见的命令包括fdisk,fsck,ifconfig,init,mkfs等。(system bin)

/srv 为servicr的缩写,网络服务启动之后,这些服务所需要取用的数据目录,常见的服务如www,ftp。

/tmp 这是让一般用户或者正在执行的程序暂时放置文件的地方那个,需要定期清理。

开机过程中 只有根目录会被挂载,其他分区都是在开机完成之后才会持续进行挂载的行为,因为有些开机过程有关的目录就不能够与根目录分开分区,有/etc,/bin,/dev,/lib,/sbin 这五个目录千万不可与根目录分开放在不同的分区,

/usr目录 软件开发者应该将他们的数据合理地分别放置到这个目录下的子目录,所有系统默认的软件都会放置到/usr下面,因此这个目录类似于“c:/wProgram file”

/var 一般放置缓存,登录文件以及软件运行所产生的文件,等等。会越来越大。

umask 就是指定 “当前用户在新建文件或者目录时候的权限默认值”

若 用户创建“文件”则默认没有可执行(x)权限,因为一般文件是用来数据的记录,并不需要执行的权限,因此只需要有  r w这两项,也就是最大为666即:-rw-rw-rw-

用户新建“目录”,由于x与是否可以进入此目录有关,因此默认所有权限都开放,即为777。

而umask的分数指的是 “该默认值需要减掉的权限”,因此 umask 为022的意思是 group跟other都减掉2也就是w的权限

more 或者less来查看文件,一页一页的查看,man就是调用的less来查看文件的.

隐藏属性 chattr +-= [ASacdistu]

S 对文件进行任何的修改,该改动会同步写入磁盘中。

a 设置a属性 这个文件只能增加数据,而不能删除不能修改数据,只有root才能执行此属性

i 这个可以让一个文件 不能被删除,改名,设置链接也无法写入或者添加数据,只有root可以设置此属性

s:当文件设置了此属性,如果文件被删除了,它将会被完全从这个硬盘空间中删除.

查看文件类型 file命令 可以查询是文本 还是二进制还是data数据等。

which可以查询命令所在的路径,原理就是根据PATH这个环境变量所规范的路径去查询“执行文件”的文件名

wheresi与locate是利用数据库来查询数据,并不是跟find一样去查询磁盘,所以快很多.

-b 只找二进制格式的文件;-m 只找在说明文件manual路径下的文件 -s只找source源文件

都是查询的数据库,因此要更新数据库以防止刚刚新建的文件找不到,更形命令 updatedb。

df :列出文件系统的整体磁盘使用量.

du : 评估文件系统的磁盘使用量(常用于评估目录所占容量),与df不一样的是,du这个命令其实会直接到文件系统内去查找所有的文件数据,所以比较耗时间。

链接文件: ln

hard link(硬链接或者实际链接): hard link 只是在某个目录下新建一条文件名链接到某inode号码的关联记录而已。

如果你将任何一个“文件名”删除,其实inode与block都还是存在的,此时你可以通过另一个“文件名”来读取到正确的文件数据. 不管你使用哪个“文件名”来编辑,最终的结果都会写入到相同的inode与block中,因此均能进行数据的修改.

使用hard link 设置连接文件时,磁盘的空间与inode的数目都不会改变,hard link只是在某个目录下的block多写入一个关联数据而已,既不会增加inode,也不会耗用block数量.

hard link 不能跨文件系统; 不能链接到目录.

symbolic link(符号链接 也即是快捷方式) symbolic link就是在创建一个独立的文件,而这个文件会让数据的读取指向它连接的那个文件的文件名.,所以当源文件被删除之后,smybolic link的文件会 “开不了”. symbolic link所创建的文件为一个独立的新的文件 所以会占用掉inode与block,但是修改连接文件就是在修改“源文件”

ln [-sf]  -s 不加s就进行连接 就是hard link -s就是符号链接

-f 如果目标文件存在时,就主动将目标文件删除后再创建.

du -sb, df -i。

partprobe这个命令 使告知内核必须要重新读取新的分区表而已,不然就要重新启动来确保分区工作的完成.

mkfs -t 可以按照文件系统格式来格式化文件设备。

fsck(file system check)

硬链接用来做备份,删除一个文件名还可以通过另外一个文件名来访问。

软连接是用来做快捷方式的,访问软连接就是访问源文件。

mount  设备文件名 挂载点

mount -l 显示目前已经挂载的文件系统

光驱一旦挂载之后就无法退出光盘,除非你将它卸载才能退出。

tar -C这个命令 是解压缩的目的目录.

tar命令可以用来备份关键数据,而dd可以用来备份整块分区或整块磁盘。

loop挂载镜像文件,不用刻录就可以查看使用。

dd创建大型文件

压缩:tar -jcv -f filename.tar.bz2 被压缩的文件或目录名称

查询: tar -jtv -f filename.tar.bz2

解压缩: tar -xjv -f filename.tar.bz2 -C 欲解压到的目录

新建框盘刻录数据时,可通过mkisofs命令来构建

cdrecord来写入CD或DVD刻录机

vim: 命令行:n1,n2s/word1/word2/g n1 n2为数字,在第n1与n2之间寻找word1这个关键字,然后替换为word2

:1,$s/word1/word2/g 从第一行到结尾查找替换

G命令在vim里面是跳行的意思,100G跳到100行,x删除字符的意思。

可以用vim file1 file2来编辑两个文件,这样可以将1的东西复制到2里面,n编辑下一个文件,N编辑上一个文件.

窗口切割功能,可以上下显示两个文件,:sp[filename] 不加filename就是显示对比两个相同的文件.

[ctrl] +w+j/向下键 切换窗口.

整体的vim配置配置文件是在/etc/vimrc这个文件中,不过你可以修改~/.vimrc这个文件

linux跟dos的断行符不一样,linux多一个^M

alias lm = 'ls -al'设置命令别名.

type查询 是否是内置命令.

echo $PATH或者echo ${PATH}.

"var="lang is $LANG"";echo $var为lang is en_US.本来变量赋值两边不能有空格 处理就要加“ ” ‘’。

"var='lang is $LANG'";echo $var为lang is $LANG.

name=Vbird\'s\ name 没问题\可以做转义字符来将'与空格转义.

export的作用是将变量变成环境变量后,就能够在子进程下面使用这个变量了

uname -r 变量代表了内核版本.

单双引号的不同在于,双引号仍然可以保有变量的内容,单单引号内仅能是一般字符,不能有特殊符号.

PATH就是执行文件查找的路径.

RANDOM 随机数的变量 0~32767之间的随机数.

CPU主要分为32位跟64位,其中32位可分为i386,i586,i686,而64位则称为x86_64,

软件也份 i386,i686 x86_64,是向下兼容的。

子进程仅会继承父进程的环境变量,子进程不会继承父进程的自定义变量
环境变量 = 全局变量
自定义变量 = 局部变量

bash对于变量默认为“字符串”,declare 可以声明变量类型.

ulimit 可以设置文件大小,单位是KB ulimit -f。

alias起别名,alias vi='vim -i' 取消别名 unalias

history !66执行第66条命令 !!执行上一条命令

ls 其实是 alias ls='ls --color=tty'带有颜色的

type -a 命令 查询命令的执行顺序

/etc/profile:这个是系统整体的设置,最好不要修改这个文件.

~./bash_profile或~bash_login或~/.profile:属于个人设置,你要修改自己的数据,就写在这里.

/etc/profile.d/*.sh只要在/etc/profile.d/这个目录下的且扩展名为.sh 并且用户具有r的的权限,该文件就会被/etc/profile调用,这个目录下的文件有很多是命令的别名,,如果你需要设置一些共享的命令别名,就创建.sh的扩展名文件.

最终会读取的是~./bashrc这个文件.

利用source或者.都可以将配置文件的内容读进目前的shell环境中,

stty setting tty的意思来设置终端机的输入按键代表意义,

Ctrl+c 终止目前的命令

Ctrl+D 输入结束(EOF)

Ctrl+M 就是Enter

Ctrl+s 暂停屏幕的输出

Ctrl+Q 恢复屏幕的输出

Ctrl+U删除整行命令

Ctrl+z 暂停目前的命令

通配符

*代表无数多个任意字符

?代表一定有一个任意字符

[]代表一定有一个[]里面的字符,例如[abcd]代表一定有一个字符,可能是a b cd这四个任何一个.

[-]代表编码内的所有字符,例如[1-9]代表1到9之间的所有数字.

[^]只要是非[]里面的字符就接受的意思.例如[^abc]代表一定有个字符,只要是非abc就接受.

特殊字符

# 注释

\ 转义字符 将“特殊字符或通配符”还原成一般字符.

| 管道

;连续命令执行分隔符

~用户的主文件夹

$使用变量前导符,即是变量之前需要加的变量替代值

&作业控制(job control)

!逻辑上的非

/目录符号,路径分割的符号

>,>>数据重定向,输出,替换和追加

<,<<输入,代表输入结束的意思.

‘’不具有变量置换的功能

""具有变量置换的功能

( ) 在中间为子shell的起始与终止

{ }  在中间为命令快的组合.

命令与命令之间用分隔号,这样一来,分隔号前面的命令执行完后就会立刻接着执行后面的命令了.

$?命令回传码 cmd1 && cmd2 若cmd1执行完毕切正确执行($?=0),则开始执行cmd2 cmd1错误则,cmd2不执行

cmd1 || cmd2 跟&&相反,1正确执行完毕($?=0)则2不执行.

linux下的命令是从左到右执行的.命令结果以此往右传递。

三个命令 顺序不能变 cmd1 && cmd2 || cmd3变容易出错

管道命令|仅能处理经由前面一个命令传来的正确信息,也就是standard output的信息,对于stdandard error并没有直接处理的能力

管道后面接的第一个数据必定是 命令,而且这个命令必须能接收 standard input的数据才行.

cut -d '分隔字符' -f field -f为取出第几段

echo $PATH | cut -d ':' -f 5 取出PATH里面的内容,以:为分隔号,取出第五个。-c 取出 后边的区间。-c 12-20 取出12到20之间的数据

选取信息 cut跟grep是针对 来分析的 并不是针对整篇信息的

grep [-acinv] [--color=auto] '查找字符串' filename

-i 忽略大小写的不同 -v反向选择 找出显示没有‘ ’内容的哪一行 last | grep -v 'root' 找出不含root的那一行

sort 排序可以排序任何,排序前最好LANG=C来让语系统一。

uniq 将重复的数据仅列出一个显示,

wc [-lwm]  -l 仅列出行 -w 仅列出多少字 -m 多少字符

tee [-a] file -a 累加append 双向重定向 不仅将数据输送到文件并且也输送到屏幕里面

tr [-ds] SET1 -d删除信息中的SET1这个字符,-s替换掉重复的字符,例如:last | tr '[a-z]' '[A-Z] '将last数据中的小写替换成大写。

\r DOS的断行字符.

join [-ti12] file1 file2 将两个文件当中有相同数据的那一行加在一起。

paste [-d] file1 file2 将两行贴在一起 且中间以[tab]键隔开.

expand [-t] file将file里面[tab]替换成多少空格键

split [-bl] file PREFIX -b按大小切割 -l 按照行数切割 加上前导,小文件就会自动以aa bb等后缀.

-减号可以用来替换 stdin与stdout

正则表达式就是处理字符串的方法,它是以行尾单位来进行字符串的处理行为。前提是工具命令要支持这种表示法。

linux在不同语系,对0和1的编码不同,会转换成不同的字符。

[:alnum:] 代表英文大小写字符及数字,即0-9,A-Z,a-z,

[:alpha:] 代表任何英文大小写字符,即A-Z,a-z。

[:blank:] 代表空格键与[tab]按键

[:cntrl:]   代表键盘上面的控制按键,即包括CR,LF,Tab,Del等

[:digit:] 代表数字而已 即0-9

[:graph:] 除了空格符(空格键与tab键)外的其他所有按键

 [:lower:] 代表小写字符 即a-z

[:print:] 代表任何可以被打印出来的字符

[:punct:] 代表标点符号,即“ ;:!?

[:upper:] 代表大写字符 即A-Z

[:space:] 任何会产生空白的字符,包括空格键[Tab] CR等

[:xdigit:]  代表十六进制的数字类型,因此包括0-9,A-F,z-f等。     

alias grep='grep --color=auto'放到~./bashrc里面。

^代表行开头.$代表行尾。

.(小数点):代表一定有一个任意字符的意思

*(星号):代表重复迁移个0到无穷多次的意思,为组合形态,‘OO*’代表第一个O肯定存在,第二个O可有一个或者无穷多个的意思,跟通配符O不同。

sed 也是管道命令 可以进行数据的替换,删除,等扥。

printf 也能格式化输出,$(cat printf.txt)取出文本里面的内容,例如 printf  '\x45\n'。输出16进制 45代表的字符。

awk 将一行数据分成数个“字段”来处理,

diff 文件比较工具 -b 忽略多个空白行 -B忽略空白行的区别  -i 忽略大小写的不同,纯文本比较。

cmp 用字节进行比较的,二进制文件

patch 打补丁,升级

pr 打印准备,加入标题跟页码。

username=${username-root} 如果username没有被设置,那么username为root,如果被设置了,就是username.

username=${username:-root} 如果username没有被设置或者为空字符串,那么username为root,如果被设置了,就是username.

命令替换。等同于`cmd`,shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令

双小括号 (( ))

    ①整数扩展。这种扩展计算是整数型的计算不支持浮点型。((exp))结构扩展并计算一个算术表达式的值,如果表达式的结果为0,那么返回的退出状态码为1,或者 是"假",而一个非零值的表达式所返回的退出状态码将为0,或者是"true"。若是逻辑判断,表达式exp为真则为1,假则为0。
    ②只要括号中的运算符、表达式符合C语言运算规则,都可用在$((exp))中,甚至是三目运算符。作不同进位(如二进制、八进制、十六进制)运算时,输出结果全都自动转化成了十进制。如:echo $((16#5f)) 结果为95 (16进位转十进制)
    ③单纯用 (( )) 也可重定义变量值,比如 a=5; ((a++)) 可将 $a 重定义为6
    ④常用于算术运算比较,双括号中的变量可以不使用$符号前缀。括号内支持多个表达式用逗号分开。 只要括号中的表达式符合C语言运算规则,比如可以直接使用for((i=0;i<5;i++)), 如果不使用双括号, 则为for i in `seq 0 4`或者for i in {0..4}。再如可以直接使用if (($i<5)), 如果不使用双括号, 则为if [ $i -lt 5 ]。
除了用source执行脚本,脚本的执行都是在新开的子进程里面执行的,子进程结束了并不会传回父进程。
test命令 比较强大,-e 文件是否存在,-f是否存在且为文件(file) -d 该文件是否存在且为目录。P380页有详细内容.





原创粉丝点击