什么是shell
shell是核心程序kernel之外的指令解析器,是一个程序,同时是一种命令语言和程序设计语言。
shell是命令解析器,用户输入命令,它去解析。
shell类型 ash、bash、ksh、csh、tcsh
cat /etc/shells 看系统下的shell
echo $SHELL 看当前用户运行的shell
程序在shell中运行
ls命令执行过程分析
shell中可以运行子shell
/bin/csh 退出子shell
linux下默认的shell是bash
bash特点,快速(上下键);tab键盘自动补齐;自动帮助功能help
存取权限与安全
简介: 文件和目录的权限(-rwxr—r–)
setuid(suid/guid) (chmod u+s g+s file)
chown和chgrp(chown user file/chgrp group file)
umask (umask nnn) (文件创建时的缺省权限位)
文件和目录的权限(-rwxr–r–)
ls –lh
d-目录 –一般文件 –l快捷方式 –c字符设备 –b块设备 s-socket设备文件 –p管道文件
drwxr-xr-x 2 test test 4096 Jun 23 08:07 cppsocket1
drwxr-xr-x 8 test test 4096 Jun 23 08:08 cppsocket2
drwxr-xr-x 9 test test 4096 Jun 18 12:32 gcc
-rw-r--r-- 1 test test 59827 Jun 23 08:11 gcc_mk_gdb.tar.gz
chmod 改变文件或目录的权限位
Linux文件的三种身份和四种权限,三种身份分别为:
u:文件的拥有者
g:文件所属的群组
o:其他用户
对于每个身份,又有四种权限,分别为:
r:读取文件的权限(read)
w:写入文件的权限(write)
x:执行的权限(execute)
s:特殊权限
1.chmod以数字形式改变文件权限
chmod 755 test.sh
将755换算成字符形式,为rwxr-xr-x,
2.chmod以字符形式改变文件权限
chmod +x test.sh
setuid(suid/guid)(chmod u+s, g+s file)
chown和chgrp(chown use file/chgrp group file)
chown改变文件、目录所在的用户和用户组
chgrp改变文件、目录所在的用户和用户组
chown [-R] owner myfile
chown owner.group myfile
chown .group myfile //注意有个点
chgrp [-R] group myfile
权限掩码umask
umask是chmod配套的,总共为4位(gid/uid,属主,组权,其它用户的权限),不过通常用到的是后3个,例如你用chmod 755 file(此时这文件的权限是属主读(4)+写(2)+执行(1),同组的和其它用户有读和执行权限)
umask的作用
默认情况下的umask值是022(可以用umask命令查看),此时你建立的文件默认权限是644(6-0,6-2,6-2),建立的目录的默认权限是755(7-0,7-2,7-2),可以用ls -l验证一下哦 现在应该知道umask的用途了吧,它是为了控制默认权限,不要使默认的文件和目录具有全权而设的
修改umask值
知道了umask的作用后,你可以修改umask的值了,例如:umask 024则以后建立的文件和目录的默认权限就为642,753了
将umask值保存到环境文件
若要长期修改umask的值,可以把它写进/etc/profile或~/.profile或~/.bash_profile中,大家应该知道这几个文件是干什么用的吧。
umask — 文件 — 目录
0 —— 6 —— 7
1 —— 5 —— 6
2 —— 4 —— 5
3 —— 3 —— 4
4 —— 2 —— 3
5 —— 1 —— 2
6 —— 0 —— 1
7 —— 0 —— 0
ls –lda 命令只查看目录
umask的配置
/etc/profile($HOME/.profile $HONME/.bash_profile)
软硬连接
文件的符合链接(ln [-s] source_path target_path)
硬连接
软连接
硬链接:新建的文件是已经存在的文件的一个别名,当原文件删除时,新建的文件仍然可以使用.
软链接:也称为符号链接,新建的文件以“路径”的形式来表示另一个文件,和Windows的快捷方式十分相似,新建的软链接可以指向不存在的文件.
下面详细介绍一下硬链接和软连接之间的区别.
1.硬链接和原来的文件没有什么区别,而且共享一个 inode 号(文件在文件系统上的唯一标识);而软链接不共享 inode,也可以说是个特殊的 inode,所以和原来的 inode 有区别。(ls -l 结果的第二列是文件的硬连接数,即inode节点的链接数)
2.若原文件删除了,则该软连接则不可以访问,而硬连接则是可以的。
3.由于符号链接的特性,导致其可以跨越磁盘分区,但硬链接不具备这个特性.
4.不能对目录创建硬链接,但可以创建软链接
shell脚本
使用shell脚本的原因
功能强大
节约时间
shell脚本基本元素
#!/bin/bash
#shell脚本
mytext="hello world"
echo $mytext;
注意初学者易犯错误:
1) 第一行#不是注释 其他#都是注释;
2) echo $mytextA;写错现象;
3) 写错现象#!bin/bash
4) 脚本如果没有执行权限 chmod 111 01hello.sh,如何办
5) chmod u+x 01hello.sh chmod u-x 01hello.sh
shell脚本运行方式
./01shell.sh $PATH
shell特性
一、 alias 别名
. 查看本用户下的alias配置
[test@localhost ~]$ alias
alias l.='ls -d .* --color=tty'
alias ll='ls -l --color=tty'
alias ls='ls --color=tty'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[test@localhost ~]$
自定义别名: alias ll = ‘ls -alh’
alias ll = ‘ls –I –color=tty’
cat $HOME/.bashrc 在这个用户下配置着alias命名的配置
二、命令替换
ls `cat myfile` –alh
通过单反引号,把’cat myfile’的内容输出 传给ls命名
注意反单引号,在键盘的~符号的下方。也就是在键盘左上角 ESC键的下边
三、后台处理
什么是后台nohup commond &
一个终端可以同时运行多个程序
nohup tar –cvf 111.tar.gz & 可以同时运行多个大文件压缩
jobs –l 可以查看后台正在运行的命令
四、管道
把一个命令的输出作为另外一个命令的输入
ls -l| sort; ls | sort
五、重定向
< 输入 >输出
与管道相关,可以改变程序运行的输入来源和输出地点
sort< myfile.txt
sort<myfile.txt >myfile+sort.txt
六、模式匹配
假设一个字符串如下:
str=”aa.bb.cc.bb.ee.bin”
去头,从开头去除最短匹配前缀: echo ${str#*.} #bb.cc.bb.ee.bin
去头,从开头去除最长匹配前缀: echo ${str##*.} #bin
去尾,从结尾去除最短匹配后缀: echo ${str%.*} #aa.bb.cc.bb.ee
去尾,从结尾去除最长匹配后缀: echo ${str%%.*} #aa
删除第一个与”bb”匹配的字符串: echo ${str/bb} #aa..cc.bb.ee.bin
删除所有与”bb”匹配的字符串: echo ${str//bb} #aa..cc..ee.bin
将第一个”bb”替换成”gg”: echo ${str/bb/gg} #aa.gg.cc.bb.ee.bin
将所有的”bb”替换成”gg”: echo ${str//bb/gg} #aa.gg.cc.gg.ee.bin
假设一个字符串如下:
str=”aa bb cc bb ee bin”
将str以空格分割:取得第1部分:
取得第1部分:echo $str | awk '{print $1}' #aa
取得第2部分:echo $str | awk '{print $2}' #bb
取得第6部分:echo $str | awk '{print $6}' #bin
七、特殊字符
双引号(“”):用来使shell无法认出空格、制表符和其他大多数特殊字符,比如:建立一个带空格的文件touch “wang bao ming”。
单引号(‘):用来使shell无法认出所有特殊字符。
反引号(`):用来替换命令
反斜杠():用来使shell无法认出的特殊字符,使其后的字符失去了特殊的含义,转义字符。eg:创建带空格文件名 touch my\ file
分号(;):允许在一行上放多个命令。mv 1.txt 2.txt; mv 2.txt 3.txt;
&:命令后台执行
括号():创建成组的命令
大括号{}:创建命令块。
竖杠(|):管道标示符
< > &:重定向表示符
* ? [ ] !:表示模式匹配
$:变量名的开头
#:表示注释(第一行除外)
空格、制表符、换行符:当做空白