学习资源来自:www.magedu.com
学习记录过程中难免出现错误,如有发现,还望大神们指出。
file:检查文件类型
示例:file /root
可执行二进制文件的存储格式:
Windows:PE
Linux:ELF
文件系统是内核的主要功能之一,主要目的是实现本机上的某一个分区上的文件管理的,文件系统一般而言对于磁盘来说是以分区为单位进行交互的,在整个系统上,所有的文件系统都必须同属于整个系统级别的root.
rootfs:根文件系统,对于Linux系统而言,每一个文件都必须是根文件系统下的某一个路径,都必须要
通过根文件系统才能访问。
整个文件系统分为目录和文件,除了目录都是文件,所有的文件都存储在目录中,所有的文件都能通过目录查找到。
FHS:文件系统层级标准,规定Linux发行版应该创建一些目录用于存储特定的文件,所以无论redhat、suse还是debian基本上都会有这些目录,而且文件也都是近似的。
ls /:查看整个文件系统上根目录下的所有第一级子目录。
/boot(redhat5):系统启动相关文件,如initrd(ramfs-redhat6)、vmlinuz —— 这两个文件是操作系统启动时主要用到的内核以及暂时性的小型linux,以及grub(bootloader)—— 引导加载器
/dev:设备文件 —— linux重要思想:一切皆文件
一个设备需要有设备文件才能被linux所访问
设备文件类型:
块设备:可以实现随机访问的设备,按数据块为单位。
线性设备:实现线性访问,按字符为单位 —— 鼠标,显示器
设备号:主设备号(major)和次设备号(minor)
/etc:配置文件(系统上大多数程序的配置文件)存放的位置。
/home:用户的家目录,每一个用户的家目录通常默认为/home/USERNAME
/root:管理员的家目录(不建议使用root用户直接登录)
/lib:库文件(库不是可执行文件——没有执行入口,不能单独执行)
静态库:.a —— 程序直接包含库文件,便于程序单个文件管理
动态库:.so(shared object) —— 程序和库文件是独立的,多个程序可以使用同一个库文件,有利于减少内存的占用。
/lib/modules:内核模块文件
/media:挂载点目录 ,移动设备,比如:U盘、光盘等。
/mnt:挂载点目录 ,额外的临时文件,比如:第二块硬盘
挂载的过程:把某个设备跟当前文件系统上的某个目录建立关联的过程
/misc:杂项
/opt:可选目录,早期的第三方程序安装目录
/proc(与调优和系统的性能数据的监控有关):伪文件系统,内核的映射文件,大多数文件都是内核中的可调参数或者内核的工作统计数据。例如:网卡接收和发送了多少个数据包的统计数据
/sys(调优——修改磁盘调度队列):伪文件系统,跟硬件设备相关的属性映射,通常用于实现硬件设备的管理,尤其是像硬盘这样的存储设备。
伪文件系统:关机后目录里面是空的,开机后目录里就会有映射文件。
/tmp:临时文件系统(/var/tmp),存放公共的、可以被其他用户查看到的临时文件,每隔一个月自动清理。每个人都可以在里面创建文件,但每个人只能删除自己的文件,不能删除别人的文件。
/var:可变化的文件,例如:缓存、锁文件、日志文件、用户邮件的转存位置……
/bin(binary):可执行文件,所有的命令都在这个路径下——用户命令
/sbin:管理命令
/usr(universal shared read-only):全局的共享的只读文件,存放只读文件
/usr/bin
/usr/sbin
/usr/lib
/usr/local(并不是必须的):第三方软件的安装路径
/usr/local/bin
/usr/local/sbin
/usr/local/lib
文件命名规则:
1、文件名长度不能超过255个字符;
2、不能使用/当文件名,—— 其一、/是用来当根的,其二、/在整个路径中作为路径分隔符
3、严格区分大小写
相对路径:相对于当前位置而开始的文件查找路径。
绝对路径:由根开始的文件查找路径。
目录管理:列出目录内容、显示目录、切换目录、创建目录、删除目录
ls:列出目录内容
cd:切换目录
pwd:显示当前目录
mkdir:创建空目录 /root/x/y/z —— 创建目录是z
-p:自动补充缺失的父目录
-v(verbose):详细信息 —— mkdir -pv /root/m/n/q
tree:查看目录树
示例:ls
mkdir x
ls
mkdir x/y
mkdir x/y/z
tree x
在同一目录下同时创建多个目录
mkdir -pv /mnt/test/x/m /mnt/test/y
||
mkdir -pv /mnt/test/{x/m,y} —— 花括号展开(命令行展开)
在/mnt/test2/下创建目录:
mkdir -pv /mnt/test2/{a_b,a_c,d_b,d_c}
||
mkdir -pv /mnt/test2/{a,d}_{b,b} —— (a+d)(b+c)=ab+ac+db+dc
删除目录:rmdir (remove directory) —— 只能删除空目录以及一脉相承的目录(-p)
示例:rmdir /mnt/test2 —— 无法删除test2目录
rmdir /mnt/test2/a_b —— 删除成功
rmdir -p /mnt/test2/a_c —— a_c删了,test2未删除
tree x
rmdir -p /root/x/y/z —— x,y,z都被删除
文件管理:创建、删除、查看、编辑……
文件创建和删除:—— Linux下文件和目录是不能重名的,Windows下也是(Windows下创建的任何文件都是有后缀的)。
touch:创建文件
示例:touch a
ls
file a
mkdir a —— 失败
mkdir x
touch x.doc —— 成功
man touch —— touch是用来修改文件的时间戳的,默认如果文件不存在就自动创建文件。
man stat —— stat显示文件或文件系统的状态信息
stat a
date
touch a
stat a —— 时间戳全部改变
ls
touch -c c —— 如果文件不存在,不创建文件
ls
改变文件时间戳:
-a 只改变访问时间
-m 只改变修改时间
touch -a a —— 访问时间和改变时间改变,修改时间未改变
touch -m a —— 最近一次的修改时间和改变时间改变,访问时间未改变
按指定时间修改:-t 年月日小时分钟.秒钟
touch -m -t 201212121212 a
stat a
创建文件,也可以使用文件编辑器 —— nano
示例:
nano hello
This is a test file
根据提示保存文件 —— ctrl+o回车
退出 —— ctrl+x
ls -lh
file hello
删除文件:rm —— 管理员下,rm是rm -i 的别名,防止误删文件
\rm —— 取消交互式信息
-i:交互式,提示交互信息 —— 是否真的要删除
-f:强制删除
-r:递归删除目录
rm -rf:强制递归删除目录,没有提示
管理员权限下绝对不能执行的命令!!:rm -rf / —— 删除根目录及根目录下的所有文件(所有数据都没了!)
所以不到万不得已的时候,尽可能不使用管理员直接登录。
示例:
rm hello
y
ls -l
type rm —— rm是rm -i 的别名
rm a
n
\rm a —— 在命令前加\,表示不使用别名,使用命令自身的意思(只对有别名的命令有意义)
ls
\ls
type ls —— ls 是 ls --color=tty 的别名
tree /mnt/test2
rm -rf /mnt/test2
ls /mnt
文件的复制和移动:
文件的复制:
cp: copy,只能复制一个文件到一个文件或多个文件到一个目录,管理员下是cp -i的别名。
cp file1 file2 file3:只有file3是目标
cp SRC DEST —— 源文件SRC复制到目标文件DEST
-r:复制目录及目录中的文件(递归复制)
-i:交互式,提示交互信息
-f:强行复制
-p:复制文件时保留这个文件原有的属主、数组、权限、以及时间戳。
-a:保留文件原有的所有属性——归档复制,常用于备份
-L:复制链接里的文件
-P:复制链接自身
示例:
cp /etc/passwd /tmp/ —— 把passwd这个文件以同样的文件名复制到tmp目录下(目标是一个已经存在的目录)
cp /etc/passwd /tmp/test
—— 如果test不存在,则将passwd复制到tmp上并重命名为test
如果test存在
test是文件:则提示是否覆盖
test是个目录:把passwd这个文件以同样的文件名复制到test目录下
源有多个,则目标一定是目录(tmp下没有abc文件):
cp /etc/passwd /etc/issue /etc/inittab /tmp/abc —— 提示abc不是目录无法执行
源只有一个,则目标可以不是目录(tmp下没有abc文件):
cp /etc/inittab /tmp/abc —— 将inittab复制到tmp并重命名为abc。
复制目录:
cp /etc/init.d/ /tmp/ —— 失败,cp默认不能复制目录
cp -r /etc/init.d/ /tmp/hello
hello不存在:将把init.d复制到tmp下并命名为hello
hello存在并是个目录:将把init.d复制到hello下并命名为init.d
hello存在并是个文件:确认覆盖后将创建成一个hello的链接文件(指向当前文件的链接文件),当前目录下并没有这个文件,所以这个操作是错误的,覆盖不了。
su - student
cd /tmp
cp /etc/inittab /tmp/stu.inittab
ls /tmp
ls -l /tmp/stu.inittab
exit
cd /tmp
ls -l
cp stu.inittab root.inittab
ls -l
cp -p stu.inittab root.inittab.2
ls -l —— 比较root.inittab和root.inittab.2的不同
cp /etc/rc /tmp —— rc是一个链接
ls -l /tmp —— 复制的是链接指向的文件
cp -L /etc/rc /tmp/rc.2 —— 复制的是链接里的文件
ls -l /tmp
cp -P /etc/rc /tmp/rc.3 —— 保持链接
ls -l /tmp
cp /etc/{passwd,inittab,rc.d/rc.sysinit} /tmp/ —— 复制三个文件到目录tmp下
移动文件的移动(剪切):
mv: move,可以直接操作文件和目录,管理员下是mv -i的别名。
mv SRC DEST 和copy一样只有最后一个是目标
mv -t DEST SRC —— 命令的另一种书写方式
示例:
cp /tmp/root.inittab /var/tmp/abc
file /var/tmp/abc
mv /tmp/hello/ /var/tmp/abc —— 失败,不能用目录去覆盖一个非目录文件
cd /var/tmp
pwd
ls
mv abc mn —— 相对路径(源文件和目标文件的路径一致,那么mv操作就是重命令)
ls
cd /tmp
pwd
ls
mv hello hi
ls
另一个复制文件命令(不能复制目录):install
-d DIRECOTRY … :创建目录
SRC DEST:复制文件
-t DIRECTORY SRC…
-m:指定权限
示例:
install -d /tmp/{install.1,install.2} —— 在tmp目录下创建两个目录
ls /tmp
install /etc/passwd /var/tmp/install.filed1
ls /var/tmp
ls -l /var/tmp/ —— 复制过来的passwd有执行权限
ls /etc/passwd -l —— 源文件并没有执行权限
file /etc/rc.d/
install /etc/rc.d/ /var/tmp —— 不允许复制目录
ls /var/tmp