LinuxNote

Linux 进阶

权限管理

一个文件或者目录有三种权限r/w/x
文件或者目录所归属的三类用户
- u: 属主
- g: 属组
- o: other
- a: all

常见命令

  1. chown:改变文件属主(只有管理员可以使用此命令)
chown USERNAME file, ...
-R: 修改目录及其内部文件的属主
--reference=/path/to/somefile file,...

还可以使用此命令来同时修改属主属组

chown USERNAME:GROUPNAME file, ...
chown :GROUPNAME file, ... #只修改属组
  1. chgrp:改变属组
chgrp GROUPNAME file, ...
-R: 修改目录机器内部文件的属主
--reference=/path/to/somefile file,...
  1. chmod: 修改文件的权限

可以改变三类用户的权限

chmod MODE file, ...
-R
--reference=/path/to/somefile file

修改某类用户或某些类用户的权限

chmod 用户类型(u,g,o,a)=rwx file
chmod g=r,o=w file
chmod go=rw file
chmod g=rx, o= file

修改某类用户的某些位的权限

#chmod ugoa +- MODE file, ...
chmod u-x file
chmod u+x,g-x file
chmod a-x file, chmod -x file #三类用户同时改变某位权限

掩码

umask:
666-umask //文件
777-umask //目录
默认文件不能具有执行权限,如果有则在权限上加1
例如,如果umask为023,则新建文件的权限为666-023=643,但由于不能具有执行文件,则生成的文件权限为644
对应生成的目录权限为777-023=754

掩码修改后,每次登录shell后,被重置为002,why?

站在用户登录的角度来说,SHELL的类型:

登录式shell
- 正常通过某终端登录
- su -USERNAME
- su -l USERNAME
非登录式shell
- su USERNAME
- 图形终端打开命令窗口
- 自动执行的shell脚本

bash的配置文件
全局配置

    /etc/profile, /etc/profile.d/*.sh, /etc/bashrc

个人配置

    ~/.bash_profile, ~/.bashrc

作用范围越小,越最终生效

profile类的文件:
1. 设定环境变量
2. 运行命令或脚本

bashrc类的文件:
1. 设定本地变量
2. 定义命令别名

登录式shell如何读取配置文件?

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

非登录式shell如何配置文件?

~/.bashrc –> /ect/bashrc –> /etc/profile.d/*.sh

重定向

系统有多个输入输出设备,需要指定默认的输入输出设备

默认输入设备 键盘 标准输入 STDIN 0
默认输出设备 显示器 标准输出 STDOUT 1
默认错误输出设备 显示器 标准出错 STDERR 2

I/O 重定向

模式: 覆盖 > <

模式: 追加 >> <<

错误输出 2> 2>>

重定向标准输出或错误输出至同一个文件 &>

为防止对现存文件的覆盖操作,可以使用set -C来禁止对已存文件的覆盖行为,在此设置下可以使用 >| 来强制覆盖。
可以使用 set +C 来开启对已存文件的覆盖行为

<<: Here Document. 以该<<之后的字符为结束符, 作为输入。

cat << END
>hello world
>END
#以上代码将返回hello world

管道

命令tee可以将输入既显示在标准输入,同时存放在文件中

echo "hello world." | tee /tmp/hello.out

正则表达式

grep, egrep, fgrep.

grep: 根据模式搜索文本,并将符合模式的文本行显示出来。
pattern: 文本字符和正则表达式的元字符组合而成的匹配条件。

grep [options] PATTERN file
        -i #忽略大小写
        --color
        -v #只显示没有被匹配的行
        -o # 只显示被模式匹配到的字符串
        -E  # 使用扩展的正则表达式
        -A num #显示匹配到的行后面的num行
        -B num #显示匹配到的行前面的num行
        -C num #显示上下num行




正则表达式(Regular Expression, REGEXP):

元字符:
. : 表示任意单个字符
[]: 匹配指定范围内的任意单字符
[^]: 匹配指定范围外的任意单字符
字符集合: [:digit:], [:lower:], [:upper:], [:alnum:], [:space:], [:punct:]

grep ‘[[:digit:]]$’ file 以数字结尾的行
字符个数的元字符:
* : 匹配其前面的字符任意次
a*b 可以匹配 b, ab, aab, aaab, 可以匹配任何以b结尾的行
a.*b 可以匹配 a开头b结束的任意长度的任意字符串: acccb, adddb, amngfb

\?: 匹配其前面的字符1次或者0次:

a\?b 可以匹配acb, ccab, aaab, mnb grep ‘a\?b’ test.txt

{m,n}:匹配其前面的字符至少m次,至多n次, 如果没有上限,则可以省略n;如果至少为0,可以写为0,但不可以省略

{1,} , 匹配至少1次
{0, 1}, 匹配至多1次

位置锚定
^: 该字符之后的任意内容必须出现在行首
$: 此字符前面的内容必须出现在行尾
^$: 空白行

以字符开始字符结束,期间没有特殊字符的组合称为单词

\< 或者 \b:其后面的任意字符必须作为单词首部出现
> 或者 \b:其后面的任意字符必须作为单词尾部出现

\

扩展正则表达式

字符匹配
.
[]
[^]

次数匹配
*:
?:
+:匹配其前面的字符至少一次
{m,n} # 省略了反斜线

位置锚定
^
$
\<
\>

分组
(): 分组
\1, \2, \3, ...

或者
|: 表示or   例如C|cat表示匹配C字符或者cat单词

快速grep表达式, 不支持正则表达式,仅以字符匹配

shell 编程

编译器,解释器
编译语言: 机器语言、汇编语言、高级语言
静态语言:编译型语言

强类型(变量)
事先转换成可执行格式
C/C++/JAVA/C#

动态语言:解释型语言, on the fly

弱类型,
边解释边执行
eg. PHP/SHELL/Python/Perl/lua

面向过程:shell, C
面向对象:JAVA, Python, perl, C++

bash 变量类型

环境变量
局部变量
位置变量
特殊变量
  • 本地变量
    VARNAME=VALUE: 作用域为整个bash进程
  • 局部变量
    local VARNAME=VALUE:作用域为当前代码段
  • 环境变量: 作用域为当前shell进程及其子进程:
    export VARNAME=VALUE

**命令行中启动的脚本会继承当前shell环境变量
系统子佛那个执行的脚本(非命令行启动)就需要自定义所需的各环境变量。**

  • 位置变量
    $1, $2, …

  • 特殊变量
    $?:上一个命令的执行状态的返回值。

撤销变量
unset VARNAME

查看当前shell中的变量:
set

查看当前shell中的环境变量
printenv
env
export
都可以

可以定义变量多个值

ANIMALS=pig;
ANIMALS=$ANIMALS:goat
ANIMALS=$ANIMALS:sheep
#ANIMALS=pig:goat:sheep

引用变量
${VARNAME}, 括号有时可省略

bash中如何实现条件判断?
条件测试类型
整数测试
字符测试
文件测试
条件测试的表达式

[ expression ]
[[ expression ]]
test expression

整数比较:
-eq 测试两个整数是否相等: 比如 Aeq B
-ne 测试两个整数是否不等:不等,为真;相等为假
-gt 测试一个数是否大于另一个数:大于为真,否则为假
-lt 测试一个数是否小于另一个数:小于为真,否则为假
-ge 小于或等于
-le 小于或等于

命令间的逻辑关系
逻辑与:如果第一个为假,则不做第二的判断,直接为假;相反,如果第一个条件为真,则执行第二个语句
逻辑或:如果第一个为真,则不做第二个判断,直接为真;相反,如果第一个条件为假,则执行第二个语句

例如如果A不等于B,则执行某个程序

[ $A -eq $B ] && echo "Equal" || echo "Not Equal"
#如果A==B,则不执行echo,如果不等,则会echo
if statement; then
    statement1
    statement2
else
    statement3
    statement4
fi

“”与”的区别在于,如果“”中存在$VARNAME,将使用VARVALUE来替换它;相反”不会解析变量值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值