1、两个编程中常用到的方法。
basename:取得最后的文件名字
dirname:取得目录名字
cnbjlx24729:/media/packages/apps/Nfc$ basename pre-o-yoshino2/packages/apps/Nfc
Nfc
cnbjlx24729:/media/packages/apps/Nfc$ dirname pre-o-yoshino2/packages/apps/Nfc
pre-o-yoshino2/packages/apps
2、查看文件内容
cat:由第一行开始显示文件内容。
tac:从最后一行开始显示,可以看出 tac 是 cat 的倒着写。
nl:显示的时候,顺道输出行号。
more: 一页一页的显示文件内容。
less:与 more 类似,但是比 more 更好的是,他可以往前翻页。
head: 只看头几行
显示的时候,顺道输出行号tail 只看尾巴几行。
od: 以二进制的方式读取文件内容。
还是那句话,当你记不清一个命令的参数代表什么意思的时候可以命令 --help。
3、touch命令。
touch [-acdmt] 文件
touch 这个指令最常被使用的情况是
建立一个空的文件,
将某个文件日期修订为目前 (mtime 与 atime)时间。
4、Linux权限默认值(umask)。
默认的完全权限:
建立文件时:(-rw-rw-rw-)
建立目录时:(drwxrwxrwx)
然后umask的命令就是在这个基础上再拿掉的权限。
cnbjlx24729:/media/packages/apps/Nfc$ umask
0022
cnbjlx24729:/media/packages/apps/Nfc$ umask -S
u=rwx,g=rx,o=rx
umask 会有四组数字啊,第一组是特殊权限用的.
umask 的数值指的是该默认值需要减掉的权限,所以是前面的022都是减掉的.
重新设定umask是后面直接加数字,不同的用户的umask一般设定的权限也不同。
如:umask 002。就是owner - 0;group - 0;others - 2 就是减去了w的权限。
下面说一下隐藏属性:
chattr (配置文件案隐藏属性)。
chattr [+-=][ASacdistu] 文件或目录名称
选项与参数:
+ :增加某一个特殊参数,其他原本存在参数则不动。
- :移除某一个特殊参数,其他原本存在参数则不动。
= :设定一定,且仅有后面接的参数
常用的参数:
i :它可以让一个文件不能被删除、改名、设定连结也无法写入或新增数据,只有 root 能设定此属性
cnbjlx24729:/media/packages/apps/Nfc$ chattr +i nihao.txt
chattr: Operation not permitted while setting flags on nihao.txt
cnbjlx24729:/media/packages/apps/Nfc$ lsattr
-------------e-- ./nxp
-------------e-- ./HAH
-------------e-- ./AndroidManifest.xml
-------------e-- ./NOTICE
-------------e-- ./nihao.txt
-------------e-- ./Android.mk
-------------e-- ./res
-------------e-- ./src
-------------e-- ./nci
-------------e-- ./assets
-------------e-- ./CleanSpec.mk
-------------e-- ./etc
-------------e-- ./tests
查看隐藏属性:
lsattr [-adR] 文件或目录。
5、SUID、SGID、SBIT
a、
SUID: 数字4代表
为 SUID。
xp022430@cnbjlx24729:/$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 47032 May 17 07:37 /usr/bin/passwd
s 这个标志出现在文件拥有者的 x 权限上时,例如刚刚提到的 /usr/bin/passwd 这个文件的权限
状态::-rwsr-xr-x,此时就被称为 Set UID,简称为 SUID 的特殊权限,
注意这个权限只能出现在owner的
x位置上。
特点:
1)、SUID 权限仅对二进制程序(binary program)有效;
2)、执行者对于该程序需要具有 x 的可执行权限;
3)、本权限仅在执行该程序的过程中有效 (run-time);
4)、 执行者将具有该程序拥有者 (owner) 的权限;
最重要的是第四步,去操作一个具有s的二进制的文件的时候,执行的过程中会暂时获取当前文件owner的
权限。
添加SUID权限
cnbjlx24729:/media/packages/apps/Nfc$ chmod 4777 nihao.txt
cnbjlx24729:/media/packages/apps/Nfc$ ls -l
-rwsrwxrwx 1 xp022430 domain_users 0 May 31 11:03 nihao.txt
b、SGID : 数字2代表SGID。
同理当你设置SGID的时候执行的时候会拥有当前文件的群组的所有的权限,(文件不是有拥有者和群组嘛)
SGID够用在目录上,
当 s 标志在文件拥有者的 x 项目为 SUID。
添加SGID权限
cnbjlx24729:/media/packages/apps/Nfc$ chmod 2777 nihao.txt
cnbjlx24729:/media/packages/apps/Nfc$ ls -l
-rwxrwsrwx 1 xp022430 domain_users 0 May 31 11:03 nihao.txt
c、SBIT :数字1代表SBIT,位于others的x的权限位上。
当用户对于此目录具有 w, x 权限,亦即具有写入的权限时。
当用户在该目录下建立文件或目录时,仅有自
己与 root 才有权力删除该文件。
特别需要注意的:每个位上面可以是大写的S、T。
cnbjlx24729:/media/packages/apps/Nfc$ chmod 7666 nihao.txt
cnbjlx24729:/media/packages/apps/Nfc$ ls -l
-rwSrwSrwT 1 xp022430 domain_users 0 May 31 11:03 nihao.txt
大写的时候表示只有suid、sgid、sbit的权限,对应位置上的x权限是没有的。
此时的权限就是空的意思:
SUID 是表示该文件在执行的时候,具有文件拥有者的权限,但是文件 拥有者都无法执
行了,哪里来的权限给其他
人使用?当然就是空的啦。
也可以用符号:SUID 为 u+s ,而 SGID 为 g+s ,SBIT 是 o+t。
6、which命令。
which 执行命令,看看这个命令放到了哪儿!
cnbjlx24729:/media/packages/apps/Nfc$ which ls
/bin/ls
cnbjlx24729:/media/packages/apps/Nfc$ which find
/usr/bin/find
cnbjlx24729:/media/packages/apps/Nfc$ which cp
/bin/cp
注意:bash 内建的指令是找不到的。
7、能不能读取一个文件的时候一定要注意必要前提的能进入到它所在的目录。
8、文件的三种时间
文档的三种时间
modification time (mtime):
当该文件的内容数据变更时,就会更新这个时间!内容数据指的是文件的内容,而不是文
件的属性或
权限。
status time (ctime):
当该文件的状态 (status)改变时,就会更新这个时间,举例来说,像是权限与属性被更改了,都
会更新
这个时间啊。
access time (atime):
当该文件的内容被取用时,就会更新这个读取时间 (access)。举例来说,我们使用 cat 去读
取
/etc/man_db.conf , 就会更新该文件的 atime 了。
ls命令显示的默认的是mtime
9、如何更改一个目录的名称?
例如由 /home/test 变为 /home/test2。 mv /home/test /home/test2
10、文件系统小结
扇区(Sector)为最小的物理储存单位,且依据磁盘设计的不同,目前主要有 512bytes 与 4K 两种格式;
将扇区组
成一个圆,那就是磁柱(Cylinder);
早期的分区主要以磁柱为最小分区单位,现在的分区通常使用扇区为最小分区
单位(每个扇区都有其号码,
就好像座位一样);
磁盘分区表主要有两种格式,一种是限制较多的 MBR 分区表,一种
是较新且限制较少的 GPT 分区表。
MBR 分区表中,第一个扇区最重要,里面有:(1)主要开机区(Master boot
recor
d
,MBR)及分区表(partition
table), 其中 MBR 占有 446 bytes,而 partition table 则占有 64 bytes。
GPT 分区表除
了分区数量扩充较多之外,支持的磁盘容量也可以超过 2TB。
/dev/sd[a-p][1-128]:为实体磁盘的磁盘文件名;
/dev/vd[a-d][1-128]:为虚拟磁盘的磁盘文件名 ;
第一个是每个磁盘代表一个a、b、c 第二个数字是磁盘上的分区表!
文件操作系统的简单概述 索引式文件系统(indexed allocation)
superblock:记录此 filesystem 的整体信息,包括 inode/block 的总量、使用量、剩余量, 以及文件系统的
格式与相关信息等;
inode:记录文件的属性,一个文件占用一个 inode,同时记录此文件的数据所在的 block 号码;
block:实际记录文件的内容,若文件太大时,会占用多个 block 。
由于每个 inode 与 block 都有编号,而每个文件都会占用一个 inode ,inode 内则有文件数据放置
的 block 号
码。 因此,我们可以知道的是,如果能够找到文件的 inode 的话,那么自然就会知道这
个文件所放置数据的 block
号码, 当然也就能够读出该文件的实际数据了。
原则上,block 的大小与数量在格式化完就不能够再改变了(除非重新格式化);
每个 block 内最多只能够放置
一个文件的数据;
如果文件大于 block 的大小,则一个文件会占用多个 block 数量;
若文件小于 block ,则该 block 的
剩余容量就不能够再被使用了(磁盘空间会浪费)。
系统读取文件时需要先找到 inode,并分析 inode 所记录的权限与用户是否符合,若符合才能够开始实际
读取
block 的内容。
所以说那些如rwx权限、SUID、甚至SeLinux等等,都是在inode中记录的,尤其是block的编码
号,这就导致了,
单个文件的小也是有限制了!
inode 记录 block 号码的区域定义为 12 个直接,一个间接,
一个双间接与一个三间接记录区 图:
11、磁盘相关的一些基础知识
将文件系统与目录树结合的动作我们称为挂载。
挂载点一定是目录,该目录为进入该文件系统的入口。 因此
并不是你有任
何文件系统都能使用,必须要挂载到目录树的某个目录后,才能够使用该文件系统的。
df:列出文件系统的整体磁盘使用量;
du:评估文件系统的磁盘使用量(常用在推估目录所占容量)
xp022430@cnbjlx24729:/media/xp022430/source/projects/pre-o-yoshino2/packages/apps/Nfc$ df
Filesystem 1K-blocks Used Available Use% Mounted on
udev 8160440 4 8160436 1% /dev
tmpfs 1634412 1436 1632976 1% /run
/dev/dm-2 452115016 90638140 338487668 22% /
none 4 0 4 0% /sys/fs/cgroup
none 5120 0 5120 0% /run/lock
none 8172056 648 8171408 1% /run/shm
none 102400 64 102336 1% /run/user
/dev/sda2 984696 137264 797412 15% /boot
/dev/mapper/vg_local-log 967320 89336 811632 10% /var/log
/dev/sda1 497696 3456 494240 1% /boot/efi
/dev/sdb1 961303548 439482024 472967016 49% /media/xp022430/source
hard link:只
是在某个目录下新增一笔档名链接到某 inode 号码的关连记录而已。
所以当你仅仅删除一个
时候,实际的并没有变,但是当你修改一个后都会改!
Symbolic link: 就是在建立一个独立的
文件,而这个文件会让数据的读取指向他 link 的那个文件的档名!由
于只是利用文件来做为指向的
动作, 所以,当来源档被删除之后,symbolic link 的文件会开不了。
lsblk 可以看成 list block device 的缩写,就是列出所有储存装置的意思
xp022430@cnbjlx24729:/media/packages/apps/Nfc$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 465.8G 0 disk
├─sda1 8:1 0 487M 0 part /boot/efi
├─sda2 8:2 0 977M 0 part /boot
└─sda3 8:3 0 464.3G 0 part
├─vg_local-swap (dm-0) 252:0 0 15.9G 0 lvm [SWAP]
├─vg_local-log (dm-1) 252:1 0 976M 0 lvm /var/log
└─vg_local-root (dm-2) 252:2 0 438.2G 0 lvm /
sdb 8:16 0 931.5G 0 disk
└─sdb1 8:17 0 931.5G 0 part /media/xp022430/source
sr0 11:0 1 1024M 0 rom
各个字段的解释
NAME:就是装置的文件名啰!会省略 /dev 等前导目录!
MAJ:MIN:其实核心认识的装置都是透过这两个代码来熟悉的!分别是主要:次要装置代码!
RM:是否为可卸除装置 (removable device),如光盘、USB 磁盘等等
SIZE:当然就是容量啰!
RO:是否为只读装置的意思
TYPE:是磁盘 (disk)、分区槽 (partition) 还是只读存储器 (rom) 等输出
MOUTPOINT:就是前一章谈到的挂载点!
blkid命令: 列出装置的 UUID 等参数,
Linux 会将系统内所有的装置都给予一个独一无二的标识符, 这个标
识符就可以
拿来作为挂载或者是使用这个装置/文件系统之用了。
root@Joey:/home/joey/Desktop# blkid
/dev/sda1: UUID="c76c7e68-a3b9-4bb1-a3c2-9ba095760c4d" TYPE="ext4" PARTUUID="05578685-01"
/dev/sda5: UUID="bedacfeb-34c6-40ee-b0e8-49d6c18e9eec" TYPE="swap" PARTUUID="05578685-05"
/dev/sda6: UUID="1da3eeb4-51ca-430d-96fb-904ad4fe6326" TYPE="ext4" PARTUUID="05578685-06"
分区:MBR 分区表请使用 fdisk命令 分区, GPT 分区表请使用 gdisk命令 分区。
每块硬盘都分为若干个分区,每个分区都有自己的文件系统。Windows为这些文件系统各自指定了一
个字母。
不过 GNU/Linux 使用唯一的树形结构来管理文件,而每个文件系统都挂载于树形结构的某个位置。
Windows 需要有 C: 驱动器一样,GNU/Linux 必须能够将根文件系统挂载于文件树的根(/)上
根结构下的任何目
录都可以作为挂载点,而您也可以将同一文件系统同时挂载于不同的挂载点上。挂载点实际上就是linux中的磁
盘文件系统的入口目录:
这样文件系统才能被访问。
一个可以被挂载的数据通常称为『文件系统, filesystem』而不是分区槽 (partition) 喔!
但是可以吧某个分区代表的硬盘挂载到某个挂载点!挂在上后就是filesystem
swap:
时将内存的程序拿到硬盘中暂放空间。
CPU 所读
取的数据都来自于内存, 那当内存不足的时候,为了
让后续的程序可以顺利的运作,因此在内存中
暂不使用的程序与数据就会被挪到 swap 中了。swap 会
被利用到
的时刻通常就是物理内存不足的情况了。