任何装置在Linux底下都是档案。
Linux下的目录结构是一层一层读取的,要注意档案权限和目录权限的结合使用。
Linux系统会将系统内所有的档案都记录在一个数据库档案里面。
Linux下的断行字符为$。
Linux文件系统下,文件的权限和属性放在i-node 里面。可用ls -i查看。
一般档案(-)目录档案(d) 连接档(l)
连接档案分为硬链接和软链接。软连接类似于Windows下的快捷方式。
档案与目录的管理的一般操作有显示属性(ls),拷贝(cp),删除档案(rm),移动目录或档案(mv)。
Linux档名的限制:单一档案或者目录的最大容许文件名为255个字节;
(完整文档)包含完整路径和名称及目录的完整档案名为4096个字节。
怎么样区分哪一个是路径名,哪一个是目录名呢,可以通过/ 来判别。
也可以通过basename 和 dirname指令。
basename /etc/sysconfig/network
network #取得档案名称
dirname /etc/sysconfig/network
/etc/sysconfig #取得路径名称
查询使用的distribution使用的是是哪一个Linux标准(Linux standard base)以及一些基本信息。
lsb_release -a
uname -r 实际的核心版本
切换用户 su
su name 只改变当前用户
su - name 改变当前用户,并把工作目录改成name的家目录。
~代表当前用户的家目录 cd ~
~name 代表name的家目录
. 代表当前目录,也可以用./来表示
… 代表上一层目录,也可以用…/来表示
– 代表前一个工作目录
~ 代表当前用户所在的家目录
~name 代表name这个用户所在的家目录
在所有的目录下都存在.和 …这两个目录。
根目录下的当前目录和上层目录是自己。
与目录有关的常用命令:
cd
cd 后面可跟绝对路径或者相对路径。
一进入系统,会在当前用户的家目录。
cd 后面不跟任何参数和 cd ~的功能一样。
pwd
显示目前所在目录
pwd -P 显示出实际的工作目录,不是链接文件本身的目录。
mkdir
–p 可以将目录递归的建立起来。
–m 创建目录时设置相应的文件权限。
mkdir -p test1/test2/test3 #当然这个命令是在已经存在的目录下在建立目录
mkdir -p /home/user/test/test1 #这个是从根目录下开始建立,系统会先建立/home,然后/home/user,依次进行。如果目录已经存在,会报错。
mkdir -m 711 test2
#默认文件权限为755
rmdir
rmdir 不加参数进行目录的删除时候,只能删除空目录,被删除的目录里面不能存在其他的目录和文档。
rmdir -p 路径 来删除上层目录
rmdir -r 目录名 强制删除,删除该目录以及目录下所有的东西
区分
绝对路径:由根目录开始写的文件名和目录名称
相对路径:相对于当前目录的文件名写法
当name不是root时候,家目录/home/name
当name是root时候,家目录/root
LANG=en_US
date
cal
bc
quit 离开bc模式
scale=number number为显示的小数点的位数 scale=3
calender [month] [year] eg: cal 10 2009
Tab 要连按两次
跟在一串指令第一个字后面 命令补全
跟在一串指令第二个字以后 档案补齐
CTRL+c 将运行 的指令进行中断
说明文档所在的目录 /usr/share/doc
文书编辑器 nano nano 1.txt P164
谁在线 who
网络联机状态 netstat -a
背景的执行程序 ps -aux
数据同步 sync
run level 0 关机
run level 3 纯文本
run level 5 图形接口
run level 6 重新启动
更改文件权限与权限
chgrp :改变文档所属群组
被改变的组名必须在/etc/group档案内存中
查看 ls -al filename(-a 显示隐藏档案内容)
ls
ls /etc 显示的是经过排序的文件名以及 蓝色显示目录白色显示档案名。
–time=ctime 输出权限改变时间。
cp
cp 命令不仅可以复制目录或档案,还可以建立连接档(也就是快捷方式)
举例:
指令完成的结果
cp -r dir1 dir2 dir2/dir1
cp -r dir1 dir2/newdir dir2/newdir,将dir1复制到dir2目录下,并更改目录名称
cp -r dir1/dir2 newdir newdir 将dir2复制到当前的工作目录下,并改名。
//下面是对档案进行的操作
cp dir1/file dir2 dir2/file
cp dir1/file dir2/file2 dir2/file2 复制并改名
注意
如果cp命令不加参数进行复制,复制过来的档案文件和原档案权限和属性有出入。解决此类问题可以加入参数-a(完整的复制,相当于-pdr)或者-p。此时,如果-a操作者不是root用户,那么目标文件的拥有者和群组也得不到随意的修改,可能会和原目标文件的这些属性不一样。
如果复制链接文件时,不用参数,复制的是源文件,而不是连接文件属性,需要用-d。
目标档案的拥有者一般是操作指令用户本身。
档案要进行复制,最少要有读的权限。
若 ~/.bashrc 比 /tmp/bashrc 新才复制过来
cp -u ~/.bashrc /tmp/bashrc
将家目录下 .bashrc 及 .bash_history 复制到 /tmp 底下
cp ~/.bashrc ~./bashrc_history /tmp
注意:可以将多个数据放到一个目录中,最后的destination必须是目录。
rm
-f 强制删除,不会出现警告信息。
-i 互动模式,在删除之前询问使用者是否进行动作
-r 递归删除 (不加这个参数,只能删除空目录)
可以和通配符*一起使用。 * 的含义是0到无穷多的任意字符。
删除/tmp 目录下以b打头的档案。
rm -i /tmp/b*
如果要求删除当前目录中以-打头的档案:
rm ./-filename
mv
mv 可以进行移动档案或目录 以及 更名
mkdir test
mv test test1
如果有多个档案来源或者目录进行移动,则destination的目标文件必须是目录。
用途: 测试新旧档案,更改名称。
格式: chgrp name 文件名
chown : 改变文档的拥有者
用户必须要系统中,即在/etc/passwd档案中。
chown user:group file 或者
chown user.group file(去掉user只更改group)
对于目录来说,如果需要的话,要用参数-R
chown -R user:group dirname
chmod : 改变文档的权限
第一种,用数字修改
用vim编辑一个shell文件之后,文件的权限通常是-rw-rw-r–,即664。如果要变为可执行文件,并且不让他人进行修改 -rwxr-xr-x。chmod 755 file。
如果不希望被其他人进行查看 ,则chmod 740 file。
第二种,用身份需改
u,g,o分别代表user,group,other。
a代表所有的身份
+(加入权限)/ -(去掉权限) / =(设定权限)
chmod u=rwx,go=rx filename
档案是含有数据的地方,一般包括文本文件,数据库内容文件,二进制可执行文件等等。在Windows底下一个档案是否具有可执行能力,是由其扩展名决定,例如:.exe , .bat。但是在Linux底下,档案可执行是由x权限决定的。
目录主要记录文件名列表。r表示对该目录有读取权限,可以用ls将目录内容列表出来,不代表可以进入该目录。x表示用户是否可以进入改目录作为工作目录。改变工作目录的命令cd。
要开放目录给任何人浏览时,至少应该给予r和x的权限。
/tmp的目录权限是744,且目录的拥有者为root。
建立目录的命令 mkdir filename
建立空档案 touch
读档案内容 cat
.sh 脚本或批处理文件
*Z, *.tar, *.tar.gz, *.zip, *.tgz 压缩文件
*.html, *.php 网页相关文档
FHS标准
重点在于规范每个特定目录下应该放置什么样的数据
/bin 存放单人维护模式下还能被执行的命令
/boot 存放开机时使用的档案,包括Linux核心档案,开机选单以及开机所需的配置文件等等
/dev 任何装置和接口设备都是以档案的形式存在于这个目录中。
/etc 系统的主要配置文件。例如人员账号密码文件,各种服务的启动项
/home 系统默认的用户家目录
/lib 存放开机时用到的函数库,/lib/modules这个目录存放的是核心相关的模块(驱动程序)
/media 存放的是可移除装置
/mnt 用于暂时挂载
环境变量PATH,PATH前面加上$表示后面接的是变量。显示环境变量:echo $PATH
注意
1.一般的用户的PATH中是不包含sbin这个目录的。
2.每个目录之间是用冒号进行分割开的。每个目录是有顺序之分的。
3.同一个命令有不同的路径,哪一个目录先被查询到,哪一个就会被先执行。
如果普通用户发现该命令没有配置到PATH中,那么我们可以使用绝对路径执行该命令。
如果设置环境变量呢?例如:ls 在/bin/ls中,
PATH="$PATH":/bin
mv 可将档案在不同的目录下进行移动。将/bin/ls 移动到/root中
mv /bin/ls /root 此时移动完的目录下的路径是/root/ls。
档案内容的查询
cat
由第一行开始显示档案内容。
tac
从最后一行开始显示。
nl
添加打印行号。
与cat -n 的区别在于 nl可以将行号做比较多的显示设置,包括位数以及自动补零。
-b 有两种形式:
-b a:无论是否为为空行,同样的也列出行号。与cat -n相同。
-b t : 如果存在空行,空行不要列出行号。(默认)
nl -b a -n rz -w 3 /etc/issue
前面的三条命令是将档案内容全部地显示在屏幕上。more和less命令可以进行翻页。less可以进行向上翻页。
more
more 档案名
less
less 档案名
head
取出档案的前几行。
head [-n number ] 档案。
-n 后面是整数,表示显示档案的前几行,后面跟的是负数,表示显示除了后面number行都显示。
如果不加任何参数,默认表示显示前十行。
head /etc/man.config
head -n 6 /etc/man.config
head -n -10 /etc/man.config
tail
显示出文档的后几行
-n number number前面不加正号表示显示文件后面多少行的内容。
number 前面加+号表示从第number行开始显示一直到结尾。
-f 表示持续监测。结束CTRL + c 。
tail /etc/man.config
tail -n 20 /etc/man.config
tail -n +100 /etc/man.config
tail -f /var/log/messages /var/log/messages可能会随时写入数据,要将写入的数据立刻显示到屏幕上,就可以利用-f选项。
思考
如何显示 /etc/man.config 癿第 11 到第 20 行呢
head -n 20 /etc/man.config | tail -n 10
od
查阅非文本文件的时候会用到。
touch
修改档案时间,建立新档案。
我们常说的文件属性中,mtime最重要。
mtime 当档案内容进行更新时,这个时间就会进行更新。
ctime 当档案的状态发生改变时,就会更新这个时间,比如权限和属性被修改等等。
atime 当档案内容被调用的时候,就会更新读取时间。例如时候cat命令。
我们来复习一下ls命令吧。现在要查看/etc/man.config档案的相关属性。
ls -l /etc/man.config #默认的显示的是mtime
ls -l --time=ctime /etc/man.config
ls -l --time=atime /etc/man.config
简化指令:ll 与ls -l 功能相同。
可以同时输入多个命令,中间用分号隔开。
注意
即使我们把原档案的所有属性进行复制,源文件与目标文件的ctime也可能是不一样的,ctime是不能进行复制的,因为ctime记录了档案近期的状态。
在Linux中,除了rwx权限之外,在Ext2/Ext3文件系统下,我们还可以设定其他的隐藏属性。
umask
档案预设权限。
在档案或目录建立的时候,都会有默认的权限,这个东西就跟umask有关啦。umask就是指定用户建立目录或者档案时候的默认权限值。
查看预设权限的方式有两种:
umask
#result
0022
umask -S
#result
u=rwx,g=rx,o=rx
直接使用umask查询,第一组数字时特殊权限使用的。
用户建立档案的时候,可以没有x权限,但是目录如果要进入必须有x权限。
默认权限:
档案
-rw-rw-rw-
目录
drwxrwxrwx
注意,umask所显示的值,指的是目录或者档案所缺少权限值的总和。
所以我们如何设置默认的权限值?直接umask 数字。例如:umask 002
umask 002
touch test
mkdir dirtest
ll #自行查看结果。回顾,mkdir -m也可以建立想要的权限目录。
思考
假设输入命令umask 003,此时建立的文档和目录的权限值是多少?
文档:(-rw-rw-rw-)-(-------wx)=-rw-rw-r--
目录:(-rwxrwxrwx)-(--------wx)=-rwxrwxr--
总结:
对于目录而言,目录的权限为777-umask设定的值。
对于档案而言,档案的权限为666-umask设定的值。但是要注意,666的档案权限中没有执行权限,所以减去umask的值后,也不具有执行权限。
root的umask默认为022,一般使用者默认为002。
档案的隐藏属性
档案的隐藏属性对于系统的安全起着重要的作用。
chattr 和 lsattr 指令只能在Ext2/Ext3的文件系统上生效。
chattr [±=] [ASacdistu] 档案或者目录名称
配置文件的隐藏属性
lsattr
显示文件或者目录的隐藏属性
档案特殊权限
SUID, SGID, SBIT。
例如:
s 和 t 权限
Set UID
当s标志出现在拥有者x权限上面的时候,就称作是Set UID。那么这个权限有什么作用呢?
1.SUID仅对二进制程序有效
2.执行者对于该程序需要具有x权限
3.本权限仅在执行该程序时有效
4.执行者将拥有程序拥有者的权限
file
查看文件类型。
file ~./bashrc
我们要修改文件或者档案的时候,需要知道其所在的位置,才能进行档案的修改。可优先用whereis或者locate进行查找,如果查找不到,可用find来进行查找。因为whereis或者locate是利用数据库来搜索数据的,所以比较快,而find是搜索实际的硬盘,所以速度比较慢。
whereis
查询特定的文档。
当用which找不到某些指令的时候,可以用档案搜索进行查看。
locate
-i 忽略大小写差异
-r 后面可接正规表示法的显示方式
locate [-ir] keyword
手动更新locate数据库,直接输入updatedb。
updatedb 指令会去读取 /etc/updatedb.conf 这个配置文件的设定,然后再去硬盘里面进行搜寻文件名的动作, 最后就更新整个数据库档案啰!因为updatedb 会去搜寻硬盘,所以弼你执行 updatedb 时,可能会等待数分钟
- updatedb:根据 /etc/updatedb.conf 的设定定去搜寻系统硬盘内的文件名,并更新/var/lib/mlocate 内癿数据库档案;
- locate:依据 /var/lib/mlocate 内的数据库记载,找出用户输入的关键词文名。
find
find [PATH] [option] [action]
PATH是搜索的路径,比如想搜索系统下的文件,就是 find / 参数
例题一:
将过去系统上面24小时之内有变更的档案列出
find / -mtime 0
例题二
搜索系统中不属于任何人的档案
find / -nouser
例题三
搜索名叫passwd的档案
find / -name passwd
例题四
搜寻档案中含有 SGID 或 SUID 或 SBIT 的属性
find / -perm +7000
将上一个例子找出的文件用ls -l显示出来。
find / -perm +7000 -exec ll {} \;
说明
-exec 到;,代表find额外动作开始到结束,中间就是find指令的额外动作
{} 代表find找到的内容结果会被放置在{}的位置上。
;在bash下是由特殊意义的,因此要用反斜杠进行转义
find可以用通配符进行查找。
找/etc下包含http的档案。
find / -name '*http*'
用which查找指令所在的目录
which [-a] command
注解
which查找指令所在的目录是通过PATH变量内的目录查找可执行文件的。
-a 是将PATH目录中可以找到的指令均列举出来。
指令和权限的关系
shell下变量的赋值规则:
使用等号进行赋值,且等号两边不能直接接空格。
变量名只能是英文或者数字,开头字符不能是数字。
如果想要把带有空格的字符串赋给相应的变量,需要单引号或者双引号。
注意 双引号可以保持原有的特性,而单引号引起的内容是一般字符。
若该变量为扩增内容时,则可用 “$变量名称” 或者 ${变量} 累加内容,如下所示:
PATH="$PATH":/home/bin
可以使用\来使特殊字符 变为一般字符。例如:’ 空格等等
取消变量名方法 ,使用unset
unset myname
name="$name"yes
name= ${name}yes
export 可以将变量在子程序中进行显示
在一串指令下达的过程中,反单引号的指令所指的内容将会被先执行,执行的结果作为外部信息传入。