[关闭]
@xxliixin1993 2016-04-20T09:32:00.000000Z 字数 17850 阅读 2323

Linux基础

linux


正则表达式

字符集合表示方式:

表达式 说明
[[:lower:]] 所有的小写字母
[[:upper:]] 所有的大写字母
[[:alpha:]] 所有的字母
[[:digit:]] 所有数字
[[:alnum:]] 所有的字母和数字
[[:punct:]] 所有的标点符号
[[:space:]] 所有的空白字符
[^[:lower:]] 除了小写字母
^[[:lower:]] 以小写字母开头
^[[:space:]]+ 多个空白字符开头
^[^t] 不以字母t开头

字符匹配:

  1. . :匹配任意单个字符
  2. [] : 匹配指定单个字符
  3. [^] : 匹配指定范围外的单个字符,有特殊含义的符号表示自己是要加转译符\

次数匹配:

  1. * : 匹配其前面的字符任意次,可以0
  2. \? : 匹配其前面的字符1次或0
  3. \{m,n\}:匹配其前面的字符最少m次,最多n
  4. 例如\{2\}匹配其前面的字符最少2次,最多无上限,无上限时n可省略
  5. \{0,2\}匹配其前面的字符最少0次,最多2次,m不可省略
  6. .* : 任意长度的任意字符

锚定:

  1. ^:其后面的字符锚定行首
  2. $:其后面的字符锚定行尾

grep命令

使用基本正则表达式定义的模式来过滤文本的命令,贪婪模式(尽可能长的去匹配),部分匹配,显示整行

  1. -i:忽略大小写
  2. -o : 只显示被匹配的字符串
  3. --color:把匹配到的高亮
  4. 可用 alias grep='grep --color' 设置grep别名
  5. -v:显示没有匹配到的行
  6. -v '^$'不显示空白行
  7. -n:在显示匹配文本的那一列之前标示出该列的是多少列
  8. -E:使用扩展表达式
  9. -A :后面加数字,表示列出该行外,还列出后续的n
  10. -B :后面加数字,表示列出该行外,还列出前面的n

Tips:

  1. ^PATTERN$ 用模式匹配整行
  2. ^ab.*c$ ab开头中间有任意并以c结尾的行
  3. ^$ 匹配空白行
  4. ^[[:space:]]$ Tab键也算space 匹配完全空白行
  5. \<:其后面的字符锚定单词首部 [ \b.*\b ==\<.*>\ \> 不等于 \b ]
  6. \>:其后面的字符锚定单词尾部

eqrep:扩展正则表达式

字符匹配:(与grep一致)
. : 匹配任意单个字符
[] : 匹配指定单个字符
[^] : 匹配指定范围外的单个字符

次数匹配:
* : 匹配其前面的字符任意次,可以0次
? : 匹配其前面的字符1次或0次(相比grep不用加)
+ : 匹配其前面的字符至少1次(?+
= grep的*)
{m,n} :匹配其前面的字符最少m次,最多n次(相比grep不用加)

锚定:
^:其后面的字符锚定行首
$:其后面的字符锚定行尾
\< :其后面的字符锚定单词首部
> :其前面的字符锚定单词尾部
(): 分组, 用于反向引用 子表达式 \1,\2,\3....

|:或者,例 a|b 表示 a或者b
C|cat 表示 C或者cat
(C|c)at 表示 Cat或者cat
(cat|Cat)表示cat或Cat

文本名中可用的通配符

  1. * 匹配任意长度的任意字符
  2. ? 匹配任意单个字符;
  3. [] 字符范围,匹配指定字符集合中的任意单个字符;
  4. [a-z]不区分大小写, [0-9], [a-z0-9]
  5. [^]
  6. 字符范围,匹配指定字符集合中的任意单个字符;
  7. [^0-9]:除了0-9
  8. 字符集合表示方式:
  9. [:lower:] 所有的小写字母;
  10. [:upper:] 所有的大写字母;
  11. [:alpha:] 所有的字母;
  12. [:digit:]
  13. 所有数字;
  14. [:alnum:] 所有的字母和数字;
  15. [:punct:] 所有的标点符号;
  16. [:space:] 所有的空白字符;
  17. [^[:lower:]]: 除了小写字母

以$开头的shell脚本的变量

  1. $0 进程的执行名字[basename $0 执行脚本的路径]
  2. $数字 进程的第n个参数值,n=1..9[即位置变量],例$1,$2.....
  3. $* 进程的所有参数,此选项参数可超过9个。
  4. $@ $*类似,但是可以当作数组用
  5. $# 进程的参数个数
  6. $? 执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
  7. $$ 进程的PID(脚本运行的当前进程ID号)
  8. $! 执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)
  9. $- 显示shell使用的当前选项,与set命令功能相同

dd,diff,patch命令

dd命令:
dd if= of= bs= count=

if: 源文件,用于指定数据流来源
of: 目标文件,用于指定数据流存储目标
bs: block size,一次io的数据量
count: 复制多少个bs指定的block

两个设备文件:
/dev/null: bit bucket
/dev/zero:泡泡机,吐零设备

应用1:创建本地回环设备文件:
dd if=/dev/zero of=/PATH/TO/SOMEFILE bs= count=
应用2:备份MBR
dd if=/dev/sda of=/backup/mbr.backup bs=512 count=1
应用3:破坏其MBR
dd if=/dev/zero of=/dev/sda bs=512 count=1

文本比较、补丁制作及打补丁工具:
diff, patch
diff [-u] FILE.old FILE.new > FILE.patch
patch FILE.old < FILE.patch

history命令

保存的条数:HISTSIZE=1000 [用printenv查看环境变量]
持久保存的位置:HISTFILE=~/.bash_history
history 10 显示最近的10个命令
-c 清空命令历史中的命令
-d 135 删除第135位置的命令
-a /PATH/TO/SOMEFILE 保存当前命令历史缓冲区中的命令至指定文件中
-w 保存命令历史到历史文件中[即/root/.bash_history]、
!数字 是执行history输出的第几条命令

man 命令

查看命令手册,命令手册:通常是由程序作者提供的,按照一定格式组织成文本文
件,并压缩后存放在系统上的某位置;/usr/share/man/
许多应用程序都自带文档:/usr/share/doc/下的每个应用程序基本都有
ChangLog[更新日志],INSTALL[安装说明],README[程序说明信息]
命令手册有章节之分:[用whatis可以查看]
1:用户命令
2:系统调用,system call
3:库调用:library call
4: 设备文件:
5: 配置文件:
6:游戏:
7:杂项:
8:管理命令
关键字搜索:
/KEYWORD: 搜索指定关键字,从文件首部向尾部搜索;
?KEYWORD: 搜索指定关键字,从文件尾部向首部搜索;
n: 与搜索方向相同;
N:与搜索方向相反;
手册段落:
NAME:命令的名称及简要说明;
DESCRIPTION:命令功能的详细描述;
OPTIONS:所有选项的相关说明;
SYSNOPSIS:使用格式;
EXAMPLES: 使用示例
FILES:相关的配置文件
SEE ALSO:相关参考

shutdown命令

shutdown [OPTION]... TIME [MESSAGE]
-r: 重启
-h: 关机
-c: 取消关机或重启的操作
TIME:
now 立即
+m: m分钟之后进行,+0
hh:mm: 下个hh:mm关机或重启
poweroff: shutdown -h +0
reboot: shutdown -r +0
正确的关机方法:
1.查看系统的使用状态
先看目前有谁在线,用who命令,再看网络的联机状态,可以执行netstat -a
这个命令,最后看后台的执行程序用ps -aux这个命令
2.将数据同步写入到硬盘中
用sync这个命令[root用户使用时是同步整个系统的程序,而一般用户只同步
自己的程序,最好在关机或重启前多执行几次]
3.通知在线用户关机的时刻
用shutdown命令加选项-h
例: shutdown -h now 立刻关机
shutdown -h 20:25 在今天的20:25会关机
shutdown -h +10 十分钟后关机
shutdown -r +30 'the system will reboot' 30分钟后关机,并向所有用
户显示后面的消息
shutdown -k now 'the system will reboot' 仅发出警告信息,系统并不
会关机

date 和 hwclock命令

Linux系统上可使用两套时间:硬件时钟和软件时钟
date [MMDDhhmm[[CC]YY][.ss]] 软件时钟
+%F: YYYY-MM-DD
+%Y:显示年
+%m:显示月
+%d:显示日

  1. root@ubuntu:~# date +%F
  2. 2016-04-07

hwclock:硬件时钟[cpu上的电池进行的时钟]
-s : hwclock to system 用硬件时钟改写系统时钟
-w : system to hwclock 用系统时钟改写硬件时钟

echo命令

echo [OPTIONS] [STRING]...
-n: 关闭自动换行功能
-e: 启用转义符
\t: tab键
\n: new line
\033[ ##;##;##mSTRING\033[0m 如不加后面的参数直接用m结束;隔开第一位
第一个数字:
3:字体前景色
4:背景色
第二个数字:
颜色:0-7
例:
3#:31前景色为红
4#:41背景色为红
例如:

  1. root@ubuntu:~# echo -e "\033[31;1;42mhello\033[0m";

watch命令

watch [-n #] 'COMMAND'
交互式查看,周期性地执行指定的COMMAND;
-n # : 指明间隔时长;

ls命令

ls: list,显示指定目录下的文件及子目录列表;
ls [OPTION]... [FILE]...
Ls 是ls --color的别名
ll是ls -l --color的别名
常用选项:
-l: 长格式显示文件的详细属性信息;
drwxr-xr-x. 2 root root 4096 Mar 25 03:43 account
左起第一位: 文件类型
文件类型:
-:普通文件
d: directory, 目录文件
l: link, 符号链接文件
b: block, 块设备文件,随机访问设备
c: character, 字符设备文件,线性设备
p: pipe,管道
s: socket, 套接字文件
后面的9位:文件访问权限
r: 读
w: 写
x: 执行
数字:当前文件被硬链接的次数;
属主:当前文件的所有者
属组:当前文件所属的用户组
数字:文件大小,单位为字节
日期时间:当前文件最近一次被修改的时间
-a: 显示所有文件,包括隐藏文件;
-r: 逆序显示;
-R:递归显示;
-d:用于显示目录自身属性
文件内容的类型查看:
file /PATH/TO/FILE

stat命令

stat: 查看文件的状态数据信息
[root@localhost ~]# stat /etc/fstab
File: `/etc/fstab'
Size: 921
Blocks: 8
IO Block: 4096 regular file
Device: fd00h/64768d
Inode: 1179655
Links: 1
Access: (0644/-rw-r--r--) Uid: (0/root) Gid: (0/root)
Access: 2015-03-26 11:08:52.440287424 +0800
Modify: 2015-03-26 10:45:34.039999979 +0800
Change: 2015-03-26 11:08:08.156999044 +0800

时间戳:
Access: 最近一次被访问的时间;
Modify: 最近一次被修改的时间,即文件内容被改变;
Change: 最近一次被改变的时间,即文件属性发生了改变;[不会被人工修改]

TIps:
touch可以改变时间戳
touch [OPTION]... FILE...
-a: 仅改变访问时间
-m: 仅改变修改时间
-t STAMP: 修改指定时间而非当前时间,[[CC]YY]MMDDhhmm[.ss]
-at -mt:
例如

  1. root@ubuntu:~# touch -at 201511011212 bak.sql
  2. root@ubuntu:~# stat bak.sql
  3. 文件:"bak.sql"
  4. 大小:2630 块:8 IO 块:4096 普通文件
  5. 设备:808h/2056d Inode9441049 硬链接:1
  6. 权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
  7. 最近访问:2015-11-01 12:12:00.000000000 +0800
  8. 最近更改:2016-03-17 13:22:26.995060183 +0800
  9. 最近改动:2016-04-07 15:20:56.599333445 +0800
  10. 创建时间:-

wc命令

wc [OPTION]... [FILE]...
-l, --lines: 仅统计行数
-w, --words: 仅统计单词数
-c, --bytes:仅统计字节数

  1. root@ubuntu:~# wc hePc.sh
  2. 2 3 32 hePc.sh
  3. 2 3个单词 32字节

cut sort uniq命令

cut:
cut OPTION... [FILE]...
-d: 指明分隔符
-d' ': 表示以空格为分隔符;
-f#: 指明要保留的字段;
单个:#
离散的多个:#,#,#
连续的多个:#-#

sort: 排序
sort可以直接指定文件
sort [OPTION]... [FILE]...
-r: 逆序;
-f: 忽略字符的大小写;
-t: 指定字段分隔符
-k: 指明分隔以后的字段
-n: 按数值大小排序
分区 Linux基础 的第 18 页-n: 按数值大小排序
sort -t: -f3 -n /etc/passwd
-u: 排序后去重

uniq:相邻重复行才为重复行
-i: 忽略大小写;
-d: 仅显示重复了的行;
-u: 仅显示不曾重复的行;
-c: 去重后显示每行出现了的次数;

I/O重定向

标准输入(stdin):0,键盘
标准输出(stdout):1,监视器
错误输出(stderr):2,监视器
正常输出和错误输出是两个不同的数据流;

错误输出重定向:2>, 2>>
COMMAND 2> ERR_OUTPUT覆盖文件中的内容
COMMAND 2>> ERR_OUTPUT追加在文件数据后

同时定向两种输出数据流:
方法一:
COMMAND > OUT_FILE 2>&1
COMMAND >> OUT_FILE 2>&1
方法二:
COMMAND &> OUT_FILE
COMMAND &>> OUT_FILE

tr命令:
tr [OPTION]... SET1 [SET2]
把输出数据中的,在SET1中的每个字符对应地替换为SET2的每个字符;
-d: 删除在输入的数据流中出现的属于SET1的每个对应的字符;

  1. root@ubuntu:~# echo 'redhat'|tr 'a-z' 'A-Z'
  2. REDHAT

COMMAND << EOF[EOF表示End Of File]
把从输入重定向的内容输出重定向到abc.txt文件中,EOF可以用任意STRING代替,区分大小写

  1. root@ubuntu:~# cat <<EOF
  2. > i am lx
  3. > EOF
  4. i am lx
  5. root@ubuntu:~# cat >abc.txt <<EOF
  6. > abc.txt
  7. > i am lx
  8. > EOF
  9. root@ubuntu:~# cat abc.txt
  10. abc.txt
  11. i am lx

用户、组权限和管理

在任何时候,用户操作计算机无非就是发起进程,因此,进程是用户操作计算机的代理,所以进程在运行时,一定是以发起它的用户的身份在运行,那么进程所能访问的权限就决定于发起它的用户的权限和要访问文件的权限。

权限:

  1. 文件:
    r: 可使用查看工具查看其内容;
    w: 可编辑其内容;[若仅有w,且目录无w,则不能删除文件]
    x: 可将此文件向内核提请启动为进程;

  2. 目录:
    r: 可以使用ls命令列出其内部所有文件或子目录的相关信息;
    w: 在此目录内创建或删除文件;
    x: 可以cd进此目录;

  3. 用户有两类:
    1:管理员:root,UID为0
    2:普通用户:UID为1-65535[2^16]
    系统用户:1-499
    仅用于运行某些服务类进程而存在;一般不用于登录系统;
    普通用户:500+
    交互式登录

  4. 组有两类:
    管理员组:root,GID为0
    普通组:GID为1-65535
    系统组:1-499
    普通组:500+

组的类别:
一个用户可同时属于多个组;当一个用户有多属组时,且他去访问一个文件需要看文件的属组的权限时,用户的多个属组中只要有一个属组不匹配,则无法访问文件,即拒绝优先
私有组:创建用户是如果没有为其指定其所属组,系统会自动为其穿件一个与用户名相同的组
基本组:用户的默认组
附加组、额外组:默认组之外的其他组

管理用户和组命令

  1. useradd -r -s /sbin/nologin 用户名
  2. 添加系统用户xx且不允许登陆

一次用户创建经历的过程:
1、在/etc/group文件中添加一行信息
group:x:gid:user_list
2、在/etc/passwd文件中添加一行信息
account:x:uid:gid:comment:home:shell
3、创建家目录/home/USERNAME
复制/etc/skel目录中的隐藏文件至用户的家目录中
并修改其属主、属组及权限
4、在/etc/shadow创建用户密码及相关属性信息

  1. 全手动创建用户
  2. 1、并编辑/etc/group文件,添加组abc;
  3. # vim /etc/group 在最后加 abc:x:522:
  4. 2、手动编辑/etc/passwd文件新增一行,添加用户abc,其基本组IDabc组的id号;其家目录为/home/abc;
  5. #vim /etc/passwd 在最后加 abc:x:522:522::/home/abc:/bin/bash
  6. 测试:su切换至此用户
  7. 3、手动编辑/etc/shadow文件
  8. 先手动用openssl命令生成MD5的密码,-salt是加杂质
  9. root@ubuntu:~# openssl passwd -1 -salt 12345678
  10. Password:
  11. $1$12345678$j9vX8TpKTDxbX4gACw.5l1
  12. 然后编辑/etc/shadow
  13. abc:$1$12345678$j9vX8TpKTDxbX4gACw.5l1:16520:0:99999:7:::
  14. 4、复制/etc/skel目录为/home/abc,要求修改abc目录的属组和其它用户没有任何访问权限;
  15. 5、修改/home/abc目录及其内部所有文件的属主为abc,属组为abc;
  16. 测试:su切换至此用户

echo 'lixin'|password --stdin userlx

管理用户和组权限命令

  1. drwx------ 34 root root 4096 4 8 10:15 ./
  2. drwxr-xr-x 24 root root 4096 3 25 17:24 ../
  3. -rw-r--r-- 1 root root 16 4 8 10:15 abc.txt
  4. -rw-r--r-- 1 root root 2630 3 17 13:22 bak.sql
  5. -rw------- 1 root root 40545 4 8 10:54 .bash_history
  6. -rw-r--r-- 1 root root 3106 2 20 2014 .bashrc
  7. <div class="md-section-divider"></div>

三类账号:
属主:owner, u
属组: group, g
其它: other, o
所有:all, a

方法一:
八进制

0 000
1 001 --x
2 010 -w-
3 011 -wx
4 100 r--
5 101 r-x
6 110 rw-
7 111 rwx

方法二:

r 4
w 2
x 1
rwx r-x r--
4+2+1 4+0+1 4+0+0
7 5 4

- chmod命令:
操作三类用户的权限:使用八进制数字也可以使用方法二
修改三类用户的权限:chmod 数字[例755] 文件名f
--renference=/某文件的路径 文件A名 :把文件A的权限改为和某文件一样权限
-R: 递归修改
操作指定类别用户的权限:=
u=, g=, o=
ug=, a=
例 chmod u=rwx /home/lx/a.txt
操作某类用户的某位或某些位权限:+|-
u+, g+, o+
u-, g-, o-
例 chmod o+x /home/lx/a.sh

用户配置文件

  1. php5:x:996:996::/home/php5:
  2. php7:x:995:995::/home/php7:
  3. php5.30:x:994:994::/home/php5.30:
  4. <div class="md-section-divider"></div>

对应:

php5 x 996 996 /home/php5
登录名 密码 UID GID 注释 家目录用户默认shell[用户必须有一个合法的可用shell,否则将无法登录系统;合法可用shell:/etc/shells文件中列出]

注意:创建用户时如果没有指定基本组,则useradd会自动为其添加一个与当前用户同名的组;且其GID一
般同UID

  1. lixin:$6$yCLv.usg$G/y.0s/ijx1fJERObsC2Q01jKt7.eDBubEbEC1nTI80M8oT/vV.jjSfYiFPY3kh//IpwdO5rJ2Ne33nfegZXE0:16759:0:99999:7:::
  2. <div class="md-section-divider"></div>
lixin ... 16759 0 99999 7 -- -- --
登录名 加密的密码 上次修改密码到1970.1.1的天数 密码的最小使用期限,0表示不限制 密码的最长使用期限,99999表示不限制 距密码使用期限多久的时候警告一次,0表示不警告 密码非活动期限[到达使用期限后,只能改密码,反之超出这个时间就会锁定];超出非活动期限后,账号将被锁定; 密码有效期至1970.01.01 预留字段

加密方法:
1 对称加密:明文用密钥加密,用相同密钥解密,密钥分发很困难
2 公钥加密/非对称加密:密钥配对,数据用公钥加密,私钥解密[公钥是公开的]加密速度很慢,公钥产生于私钥中很少用于数据加密
3 单项加密:只能从明文产生密文,并不能解密的,常用于验证数据完整性 linux下用md5sum这个命令使用MD5加密

  1. md5:128bit输出[CentOS 5]
  2. sha1:160bit输出
  3. sha256:256bit
  4. sha512:512bit[CentOS 6] [CentOS 7]
  5. <div class="md-section-divider"></div>

特征:
1定长输出
2初始条件的微小改变会带来最终结果的重大改变
3不可逆性
4加密前会在你要加密的明文中加随机数/etc/shadow中的密码格式:8位随机字符$加密后的密码

  1. php5:x:996:
  2. php7:x:995:
  3. php5.30:x:994:
  4. <div class="md-section-divider"></div>
php5 x 996 --
组名 密码 GID 以这个为附加组的用户表 用,隔开

文件特殊权限

安全上下文:

  1. 进程以某用户的身份运行;进程是发起此进程的用户代理,其以对应用户身份完成所需的操作;
  2. 权限匹配模型:
    • 进程的属主,是否是被访问的资源的属主;如果是,则应用属主权限;
    • 否则,查看进程的属主,是否属于被访问资源的属组;如果是,则应用属组权限;
    • 否则,则应用其它权限;

特殊权限:SUID SetUID [4]
展示于文件属主的执行权限位:如果属主本来有执行权限[x],则展示为s;否则,展示为S;
功用:对于一个可执行文件来讲,任何用户运行此程序为进程时,进程的属主不再是发起者本
人,而可执行程序文件自己的属主;【仅对二进制程序有效,不能用在shell脚本上,不能用在
目录上;执行者对于该程序需要具有x权限;SUID仅在执行过程中有效;执行者将具有该程序
所有者的权限】

修改文件SUID权限的方法:
chmod u+|-s FILE...
例 chmod u+s ./a.txt
chmod 4755 ./a.txt

演示过程:
普通用户centos 是没有权限cat /etc/shadow的,但是若/bin/cat文件有SUID则不同;为了避免修改源文件,cp /bin/ cat /var/tmp下,这时用centos用户是不能cat /etc/shadow的,我们用root用户chmod u+s /var/tmp/cat,再用centos用户cat访问/etc/shadow时即可,这时因为centos在执行/var/tmp/cat时,不在用centos自己的身份执行,而是用/var/tmp/cat的所有者root的身份去执行。

特殊权限:SGID SetGID [2]
展示于文件属组的执行权限位:如果属组本来有执行权限[x],则展示为s;否则,展示为S;

功用:当目录属组有写权限,且有sgid权限时,那么所有属于此目录的属组,且以属组身份在此目录新建文件或目录时,新文件或目录的属组不是创建者所属的基本组,而是目录自己的属组;【可以针对目录或文件设置;仅对二进制文件有效;执行者对于该程序需要具有x权限;执行者在执行过程中将会获得其用户组的支持;】

修改目录SGID权限的方法:
chmod g+|-s FILE...
例 chmod g+s ./A/
chmod 2755 ./A/

设置SGID后:
用户若对此目录有r和x时,该用户可以进入该目录;
用户在此目录的有效用户组将会变成该目录的用户组;
用户若对此目录有w时,则用户所创建的目录、文件与此目录的用户组相同;

特殊权限:Sticky Bit[1]
展示于目录其它用户的执行权限位:如果其它用户本来有执行权限[x],则展示为t;否则,展示为T;

功用:对于全局可写,或某组全局可写目录,所有用户都于此目录创建文件或删除自己为属主的那些文件,但不能删除非自己为属主文件或目录;【仅对目录有效,不能用在文件上;当用户对于此目录有w,x权限时,即具有写入权限;当用户在该目录下创建文件或目录时,仅自己和root可以删除文件】

修改目录Sticky权限的方法:
chmod o+|-t DIR...
例 chmod o+t ./A/
chmod 1755 ./A/

Bash基础知识和配置文件

bash是解释型:

  1. bash是交互式shell接口,同时又是程序解释器;
  2. 支持过程式编程,则程序运行依赖于shell的内建命令或当前系统的文件系统路径下存在的可执行程序文件;
  3. 解释器在运行程序时,自行运行为进程,并把各个被调用的命令或解释为内建命令以运行,或解释为外置命令,找到其可执行文件运行为子进程;

bash变量类型:
命令行启动会继承当前shell的环境变量,系统自动执行的脚本即crontab任务不会继承变量

环境变量:对当前shell解释器进程及其子shell有效;对其它shell无效;
export Var_Name=VALUE
用以下的命令可以查看生效的环境变量:

本地变量:只对当前shell解释器进程有效;对其它shell进程无效,包括当前shell的子进程;不同的shell可以使用同一
个变量名;当前shell进程终止,其会被自动销毁;
VARNAME=VALUE
用set可以查看本地变量+环境变量
局部变量:变量仅对某代码片断(通常指函数作用域)有效;
local Var_Name=VALUE
位置参数变量:在脚本代码中,用于实时调用传递给脚本执行时的参数;按其位置进行编号;
2, ...

特殊变量:bash内置的用于保存特殊数据的变量:
$?:用于保存当前shell进程中最近一次执行的命令成功与否的状态,用数字来表示,
0:成功
1-255:失败

撤销变量 :unset VARNAME

注意:
变量名不能使用解释器保留字、只读类型的变量[例UID]
设置变量为“只读”模式:readonly Var_Name,其值不能被修改,且变量不能被销毁;仅能随shell进程终止而结束;

初始化变量
bash是弱类型的编程语言,即一切皆字符串;
但bash也可用declare来声明变量类型:
declare [OPTION] Var_Name=[VALUE]
-i: 整型
-x: 环境变量
-r:只读变量
-a: 数组
-A:关联数组
PATH:/home/centos

bash的配置文件

profile类:为交互式登录shell提供
bashrc类:为非交互式shell提供

profile类:
全局有效:对所有用户均有效
/etc/profile
/etc/profile.d/*.sh
个人有效:仅对某特定用户有效
~/.bash_profile

功用:
1、设定环境变量;
2、运行命令或脚本;
3、开机打印一段话等;

  1. root@ubuntu:/api/cron/statistics# vim /etc/profile.d/start.sh
  2. root@ubuntu:/api/cron/statistics# cat /etc/profile.d/start.sh
  3. echo "hello"
  4. <div class="md-section-divider"></div>

bashrc类型:
全局有效:对所有用户均有效;
/etc/bashrc
个人有效:仅对某特定用户有效;
~/.bashrc

功用:
1、定义本地变量
2、用来定义命令别名
3、定义用户默认的umask

注意:
交互式登录的shell读取配置文件的次序:

/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

非交互式登录的shell读取配置文件及次序:

~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh

挂载命令

注意:
1.在Linux系统上,所有的文件系统必须通过根文件系统的某个分支来访问;
2.单一文件系统不应该被重复挂载在不同的挂载点(目录)中
3.单一目录不应重复挂载多个文件系统
4.作为挂载点的目录理论上应该都是空白目录,不然原来目录下的文件会被隐藏

根文件系统:根是一切文件系统的访问入口,根关联到的分区,有一定的要求:FHS除了根,其余所有的其它文件系统如果想要被访问,都只能够通过“关联”至根文件系统上的某个目录来实现;这种操作即所谓的“挂载”,也即mount;相反动作,即卸载,命令为umount

mount命令:

mount 设备 挂载点

挂载点
1、事先存在;
2、应该使用别的进程未使用的目录;
3、挂载点下原有的文件将被隐藏;

mount [OPTION]... [-t FSTYPE] [-o OPTION] [DEVICE] MOUNT_POINT
命令选项:
-r: 只读挂载
-w: read and write,读写挂载
-t FSTYPE: 被挂载的设备上的文件系统类型;可省略,此时mount会自动使用blkid命令来判断之;
-L LABEL: 以卷标的方式指定要挂载的设备,因此,此时DEVICE必须省;
-U UUID:以UUID的方式指定要挂载的设备,因此,此时DEVICE必须省;
-a: 自动挂载所有的支持自动挂载的设备(/etc/fstab文件中定义的支持自动挂载的设备);
-n: 默认情况下,设备挂载与否的改变结果会被保存于/etc/mtab中一份;-n选项用于变动时不更新此文件
示例:
mount -U dea669ee-e769-46d9-86a8-88925a10278b /data/mydata

-o OPTION,挂载选项[多个时用,隔开 例: -o noatime,exce,acl]:
async:异步写入
sync:同步写入,即使用同步I/O;
atime/noatime:文件或目录在被访问时是否更新其访问时间戳;
diratime/nodiratime:目录在文中时是否更新其访问时间戳;
auto/noauto:设备是否支持mount命令使用-a选项时自动挂载;
dev/nodev:此设备上是否创建设备文件;
exec/noexec:是否允许执行此文件系统上的程序文件;
suid/nosuid:是否支持此设备上的文件上使用suid权限;
remount: 重新挂载;
acl: 支持使用facl;

  1. # mount -o acl
  2. # tune2fs -o acl /dev/DEVICE: 打开acl为默认挂载选项;

ro: 只读
rw: 读写
user/nouser: 是否允许普通挂载此文件系统
所有挂载选项均未指明时,其默认为:
defaults
Use default options: rw, suid, dev, exec, auto, nouser, async, and relatime.

挂载设备配置文件 /etc/fstab

mount -a命令 会自动读取/etc/fstab文件,并自动挂载

  1. #
  2. # /etc/fstab
  3. # Created by anaconda on Fri Feb 27 11:22:36 2015
  4. #
  5. # Accessible filesystems, by reference, are maintained under '/dev/disk'
  6. # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
  7. #
  8. UUID=97c76325-051c-41ad-81d1-f03cc6704be9 / ext4 defaults 1 1
  9. UUID=9c67eccb-7689-412f-83ee-6abb1e59db71 /boot ext4 defaults 1 2
  10. UUID=e827c34a-992a-440f-a9d4-4a4c035974e4 /usr ext4 defaults 1 2
  11. UUID=c7e34fce-f3e1-416e-a821-a2f5d3294af9 /var ext4 defaults 1 2
  12. UUID=b4e8391c-2e0e-4159-a36e-ac52d6e9c448 /www ext4 defaults 1 2
  13. UUID=30b1ffe4-ca9d-4615-940e-2cd7ddd5c2a0 swap swap defaults 0 0
  14. tmpfs /dev/shm tmpfs defaults 0 0
  15. devpts /dev/pts devpts gid=5,mode=620 0 0
  16. sysfs /sys sysfs defaults 0 0
  17. proc /proc proc defaults 0 0
  18. 说明:
  19. 定义开机可自动挂载的文件系统,每行一个:
  20. 6个字段:
  21. (1) 挂载的设备:
  22. 设备文件
  23. LABEL
  24. UUID
  25. 伪文件系统:如sysfs, proc, tmpfs
  26. (2) 挂载点
  27. swap的挂载点仍为swap
  28. (3) 文件系统类型
  29. (4) 挂载选项
  30. defaults表示使用默认挂载选项;
  31. 多个挂载选项间使用逗号分隔;如defaults,acl,noatime
  32. (5) 转储频率[多久备份一次],只有一下三种,一般不备份:
  33. 0:从不备份
  34. 1: 每天备份
  35. 2: 每隔一天备份
  36. (6) 自检次序[大多不自检,可以开机手动自检,mount命令]
  37. 0:不自检
  38. 1:首先自检,通常只有根文件系统可首先自检
  39. 2:次级自检,
  40. ...

查看所有已经挂载设备的方法:

  1. # mount
  2. # cat /etc/mtab
  3. # cat /proc/mounts

umount命令:

umount DEVICE
umount MOUNT_POINT

例:umount /dev/sda5
umount /data/mydata
注意:正在被某进程访问的设备是不可以被卸载的;查看被什么进程所占用:

  1. # lsof MOUNT_POINT
  2. # fuser -v MOUNT_POINT
  3. # fuser -km MOUNT_POINT: 终止正访问挂载点的进程;

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

df [OPTION]... [FILE]...
-l: 仅显示本地文件系统的相关系统;
-h: 单位换算;
-i: 显示inode的使用情况而非磁盘块的;
-T:连同该分区文件系统的名称(例ext4)也列出

du命令:评估文件系统的磁盘使用量(常用于评估文件、目录所占容量)

du 文件或目录名
-s: 统计整个目录及内部所有文件总体大小;
-h: human-readable
du -sh /* 查看/下目录的大小

ifconfig命令

查看接口:
ifconfig [Interface]
-a: 包括未激活状态的所有接口

启用或禁用:ifconfig IFNAME up|down
启用:ifup IFNAME
禁用:ifdown IFNAME

设定IP地址:
ifconfig IFNAME IP/Netmask [up]
注意:CIDR格式的掩码

netstat命令

-r: 显示路由表
-n: numeric,数字显示,不反解IP地址至主机名,不反解端口至服务名;
-t: tcp协议的相关连接
-u: udp协议的相关连接
-l: 显示处于监听状态(即等待别的进程连接访问)[不加l不显示监听的,只显示连接的];
-a: 显示所有连接,对于tcp而言即处于各种状态;
-p: 显示相关连接的关联到的进程的名字及PID;
常用组合:-rn, -tnl, -unl, -tunl, -tan, -tnlp

tar命令

归档和压缩:
-z: gzip
后缀名: .tar.gz
归档并压缩:tar -zcf newfile.tar.gz a.txt b.txt ...
展开归档:tar -zxf newfile.tar.gz
-j: bzip2
后缀名: .tar.bz2
归档并压缩:tar -jcf newfile.tar.bz2 a.txt b.txt ...
展开归档: tar -jxf newfile.tar.bz2
-J: xz
后缀后: .tar.xz
归档并压缩: tar -Jcf newfile.tar.xz a.txt b.txt ...
展开归档: tar -Jxf newfile.tar.xz
注意:展开归档可以直接使用tar -xf,而无须为其指定对应的压缩工具选项;

kill命令

向进程发信号:

kill [-SIGNAL] PID

默认的信号为SIGTERM;
信号表示方式:
(1) 完整名称,例如SIGINT
(2) 简写名称,例如INT
(3) 数据代称,例如2

常用信号:

SIGHUP 1 通知进程重读其配置文件以让新的配置生效,但不用重新启动进程
SIGINT 2 打断正在运行中的进程,相当于键盘组合键Ctrl+c
SIGKILL 9 强行中止正在运行中的进程
SIGTERM 15 安全中止正在运行中的进程
SIGSTOP19 暂停进程
SIGCONT 18 继续运行指定进程

例 kill -15 1521
kill -SIGTERM 1521
kill -TERM 1521

kill相似的一组进程:
killall [-SIGNAL] PROGRAM
例:killall -15 httpd

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注