1、描述Linux发行版的系统目录名称命名规则以及用途。
[root@centos7 ~]# pwd /root [root@centos7 ~]# cd / [root@centos7 /]# pwd / [root@centos7 /]# tree -L 1 . ├── bin -> usr/bin ├── boot ├── data ├── dev ├── etc ├── home ├── lib -> usr/lib ├── lib64 -> usr/lib64 ├── media ├── mnt ├── opt ├── proc ├── root ├── run ├── sbin -> usr/sbin ├── srv ├── sys ├── tmp ├── usr └── var 20 directories, 0 files [root@centos7 /]#
系统目录名称命名规则
文件和目录被组织成一个单根倒置树结构 文件系统从根目录下开始,用"/"表示根 文件系统(rootfs): root filesystem 标准Linux文件系统(如:ext4),文件名称大小写敏感,例如:MAIL,Mail, mail, mAiL 以.开头的文件为隐藏文件 路径分隔的/ 文件名最长255个字节 包括路径在内文件名称最长4095个字节 蓝色-->目录绿色-->可执行文件红色-->压缩文件浅蓝色-->链接文件灰色-->其他文件 除了斜杠和NUL,所有字符都有效.但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用 每个文件都有两类相关数据:元数据: metadata,即属性,数据: data,即文件内容
各个目录的作用简介
/boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader,grub)都存放于此目录 /bin:所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序 /sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序 /lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules) /lib64:专用于×86_64系统上的辅助共享库文件存放位置 /etc:配置文件目录 /home/USERNAME:普通用户家目录 /root:管理员的家目录 /media:便携式移动设备挂载点 /mnt:临时文件系统挂载点 /dev:设备文件及特殊文件存储位置 b:block device,随机访问 C:character device,线性访问 /opt:第三方应用程序的安装位置 /srv:系统上运行的服务用到的数据 /tmp:临时文件存储位置 /usr:universal shared,read-only data bin:保证系统拥有完整功能而提供的应用程序 sbin: lib:32位使用 lib64:只存在64位系统 include:C程序的头文件(header files) share:结构化独立的数据,例如doc,man等。 local:第三方应用程序的安装位置 bin,sbin,lib,lib64,etc,share /var:variable data files cache:应用程序缓存数据目录 lib:应用程序状态信息数据 local:专用于为/usr/local下的应用程序存储可变数据 lock:锁文件 log;日志目录及文件 opt:专用于为/opt下的应用程序存储可变数据 run:运行中的进程相关数据,通常用于存储进程pid文件 spool:应用程序数据池 tmp:保存系统两次重启之间产生的临时数据 /proc:用于输出内核与进程信息相关的虚拟文件系统 /sys:用于输出当前系统上硬件设备相关信息虚拟文件系统/selinux:security enhanced Linux,selinux相关的安全策略等信息的存储位置
2、描述文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息?
文件的元数据中包含的信息包括:
File:文件名
Size:文件大小(单位:B)
Blocks:文件所占块个数
IO Block:每个数据块的大小(单位:B)
regular file:普通文件(此处显示文件的类型)
Inode:文件的Inode号,文件的索引节点号
Links:硬链接次数
Access:权限
Uid:(属主id/属主名)
Gid:(属组id/属组名)
Context:文件所在的环境
Access:最近访问时间access time (atime)
Modify:数据改动时间modification time (mtime)
Change:元数据改动时间status time (ctime)
Creat:文件创建时间
查看方法
查看文件元数据的方法:stat + 文件名
修改文件的时间戳信息
每个文件有三个时间戳
acess time 访问时间,atime,读写文件内容的时间
modify time 修改时间,mtime,改变文件内容的时间
change time 改变时间,ctime,文件的元数据改变的时间
修改文件时间戳信息的方法
touch 命令,格式:touch [OPTION] FILE
选项说明:
-a 仅改变 atime和ctime
-m 仅改变 mtime和ctime
-t [[CC]YY]MMDDhhmm[.ss]指定atime和mtime的时间戳
-c 如果文件不存在,则不予创建
范例:
[root@centos7 data]# touch f1.txt [root@centos7 data]# ll total 0 -rw-r--r--. 1 root root 0 Dec 6 19:31 f1.txt [root@centos7 data]# date Sun Dec 6 19:34:31 CST 2020 [root@centos7 data]# vim f1.txt [root@centos7 data]# cat f1.txt a b c [root@centos7 data]# ll total 4 -rw-r--r--. 1 root root 6 Dec 6 19:35 f1.txt [root@centos7 data]# stat f1.txt File: ‘f1.txt’ Size: 6 Blocks: 8 IO Block: 4096 regular file Device: 805h/2053d Inode: 69 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:etc_runtime_t:s0 Access: 2020-12-06 19:35:37.493621756 +0800 Modify: 2020-12-06 19:35:30.604621971 +0800 Change: 2020-12-06 19:35:30.605621971 +0800 Birth: - [root@centos7 data]# chmod +x f1.txt [root@centos7 data]# ll total 4 -rwxr-xr-x. 1 root root 6 Dec 6 19:35 f1.txt [root@centos7 data]# stat f1.txt File: ‘f1.txt’ Size: 6 Blocks: 8 IO Block: 4096 regular file Device: 805h/2053d Inode: 69 Links: 1 Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:etc_runtime_t:s0 Access: 2020-12-06 19:35:37.493621756 +0800 Modify: 2020-12-06 19:35:30.604621971 +0800 Change: 2020-12-06 19:37:47.060617703 +0800 Birth: - [root@centos7 data]# date Sun Dec 6 19:38:15 CST 2020 [root@centos7 data]#
3.总结软连接和硬连接区别,并用实例操作说明。
硬链接和软链接区别总结
1.本质:
硬链接:本质是同一个文件
软链接:本质不是同一个文件
2.跨设备
硬链接:不支持
软链接:支持
3.inode
硬链接:相同
软链接:不同
4.链接数
硬链接:创建新的硬链接,链接数会增加,删除硬链接,链接数减少
软链接:创建或删除,链接数不会变化5.文件夹硬链接:不支持软链接:支持
6.相对路径
硬链接:原始文件相对路径是相对于当前工作目录
软链接:原始文件的相对路径是相对于链接文件的相对路径
7.删除源文件
硬链接:只是链接数减一,但链接文件的访问不受影响
软链接:链接文件将无法访问
8.文件类型
硬链接:和源文件相同
软链接:链接文件,和源文件无关
范例:
[root@centos7 data]# [root@centos7 data]# ll total 4 -rwxr-xr-x. 1 root root 6 Dec 6 19:35 f1.txt [root@centos7 data]# pwd /data [root@centos7 data]# ln f1.txt a.txt [root@centos7 data]# ll total 8 -rwxr-xr-x. 2 root root 6 Dec 6 19:35 a.txt -rwxr-xr-x. 2 root root 6 Dec 6 19:35 f1.txt [root@centos7 data]# ln f1.txt /root/a.txt ln: failed to create hard link ‘/root/a.txt’ => ‘f1.txt’: Invalid cross-device link [root@centos7 data]# ll /tmp total 0 drwx------. 2 root root 6 Dec 6 05:27 vmware-root_582-2722173592 drwx------. 2 root root 6 Dec 6 16:14 vmware-root_585-4021718863 drwx------. 2 root root 6 Dec 6 05:31 vmware-root_592-2689275023 [root@centos7 data]# ln -s /data/f1.txt /tmp [root@centos7 data]# ll /tmp total 0 lrwxrwxrwx. 1 root root 12 Dec 6 19:55 f1.txt -> /data/f1.txt drwx------. 2 root root 6 Dec 6 05:27 vmware-root_582-2722173592 drwx------. 2 root root 6 Dec 6 16:14 vmware-root_585-4021718863 drwx------. 2 root root 6 Dec 6 05:31 vmware-root_592-2689275023 [root@centos7 data]#
4、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。
目录管理命令
ls:列出指定目录下的内容格式:
ls [OPTION]... [FILE]...
-a:显示所有文件包括隐藏文件
-A:显示除.和..之外的所有文件
-l,--long:显示文件的详细属性信息
-h:对文件大小进行单位换算,可能影响精度
-d:查看目录本身而非其内部的文件
-r:逆序显示文件
-R:递归显示文件
示例:ls -lah / --详细显示/目录下的所有文件(包括隐藏文件)
ls -ldh /etc --详细显示/etc目录本身
ls -lhv / --倒序显示/目录下所有文件(包括隐藏文件)
ls -R /etc --递归显示/etc下所有文件
mkdir:创建目录格式:
mkdir [OPTION]... DIRECTORY...
-p:自动按需创建父目录
-m:创建目录时给定权限
示例:mkdir -p /data/test/A/B --在/data目录下递归创建/test/A/B三个目录
mkdir -m 711 -p /data/MODE/A --在/data目录下递归创建MODE/A两个目录同时指定目录A的权限为711
rmdir:删除目录格式:
rmdir [OPTION]... DIRECTORY...
-p:删除目录后如果其父目录为空,则一并删除
示例:rmdir -p /data/test/A --删除A目录后,test目录为空,一并删除
cd:切换目录
示例:cd ..:切换到上级目录
cd ~:切换回自己的家目录
cd -:在上一次目录与当前目录直接来回切换
pwd:显示当前目录
文件管理命令
cp:复制
格式:单源复制:cp [OPTION]... [-T] SOURCE DEST(如果DEST不存在则创建,存在则覆盖)
多源复制:cp [OPTION]... SOURCE... DIRECTORY(DEST必须为directory)
-i:交互式复制,即覆盖前提醒用户确认
-f:强制覆盖目标文件
-r,-R:递归复制目录
示例:cp -if /data/[1-3].txt /data/test --test必须为目录,把三个文件一起复制到test中
cp -r /data /practice --把data目录及目录下的内容一起复制到practice中
mv:剪切
格式:单源复制:mv [OPTION]... [-T] SOURCE DEST(如果DEST不存在则创建,存在则覆盖)
多源复制:mv [OPTION]... SOURCE... DIRECTORY(DEST必须为directory)
-i:交互式复制,即覆盖前提醒用户确认
-f:强制覆盖目标文件
示例:mv -i /data/[1-3].txt /practice --把/data目录下三个txt文件剪切到/practice下
rm:删除
格式:rm [OPTION]... FILE...
-i:交互式复制,即覆盖前提醒用户确认
-f:强制覆盖目标文件
-r,-R:递归处理,将制定目录下的所有文件包括目录一并删除
示例:rm -rf /practice --递归删除/practice目录
文本内容管理命令
cat:正向查看文本内容
格式:cat [OPTION]... [FILE]...
-n:给显示的文本行编号
-E:显示行结束符号$
示例:cat -n /etc/fstab --查看/etc/fatab内容并显示行号
tac:倒叙查看文本内容
格式:tac [OPTION]... [FILE]...
示例:tac /etc/passwd --倒叙查看文本内容
head:显示文本内容,默认显示头10行
格式:head [OPTION]... [FILE]...
-n #:显示文本头#行内容
示例:head -5 /etc/passwd --显示/etc/passwd文件头5行内容
tail:显示文本内容,默认显示后10行
格式:tail [OPTION]... [FILE]...
-n #:显示文本后#行内容
-f:查看文件尾部内容结束后不退出,跟随显示新增的行
示例:tail -8 /etc/passwd --显示/etc/passwd文件后8行内容
more:分屏显示文本内容,每次显示一屏显示完停止
格式:more [options] file [...]
Space键:显示文本下一屏内容
Enter键:只显示文本下一行内容
b键:显示文本上一屏内容
q键:退出
less:分屏显示文本内容,不主动退出
格式:less [options] file [...]
Space键:显示文本下一屏内容
Enter键:只显示文本下一行内容
b键:显示文本上一屏内容
q键:退出
5、复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的 行首的空白字符
[root@centos7 ~]# [root@centos7 ~]# ll /tmp total 0 lrwxrwxrwx. 1 root root 12 Dec 6 19:55 f1.txt -> /data/f1.txt drwx------. 2 root root 6 Dec 6 05:27 vmware-root_582-2722173592 drwx------. 2 root root 6 Dec 6 16:14 vmware-root_585-4021718863 drwx------. 2 root root 6 Dec 6 05:31 vmware-root_592-2689275023 [root@centos7 ~]# ll /etc/profile -rw-r--r--. 1 root root 1819 Apr 1 2020 /etc/profile [root@centos7 ~]# cp /etc/profile /tmp [root@centos7 ~]# ll /tmp total 4 lrwxrwxrwx. 1 root root 12 Dec 6 19:55 f1.txt -> /data/f1.txt -rw-r--r--. 1 root root 1819 Dec 6 20:15 profile drwx------. 2 root root 6 Dec 6 05:27 vmware-root_582-2722173592 drwx------. 2 root root 6 Dec 6 16:14 vmware-root_585-4021718863 drwx------. 2 root root 6 Dec 6 05:31 vmware-root_592-2689275023 [root@centos7 ~]# cat /tmp/profile # /etc/profile # System wide environment and startup programs, for login setup # Functions and aliases go in /etc/bashrc # It's NOT a good idea to change this file unless you know what you # are doing. It's much better to create a custom.sh shell script in # /etc/profile.d/ to make custom changes to your environment, as this # will prevent the need for merging in future updates. pathmunge () { case ":${PATH}:" in *:"$1":*) ;; *) if [ "$2" = "after" ] ; then PATH=$PATH:$1 else PATH=$1:$PATH fi esac } if [ -x /usr/bin/id ]; then if [ -z "$EUID" ]; then # ksh workaround EUID=`/usr/bin/id -u` UID=`/usr/bin/id -ru` fi USER="`/usr/bin/id -un`" LOGNAME=$USER MAIL="/var/spool/mail/$USER" fi # Path manipulation if [ "$EUID" = "0" ]; then pathmunge /usr/sbin pathmunge /usr/local/sbin else pathmunge /usr/local/sbin after pathmunge /usr/sbin after fi HOSTNAME=`/usr/bin/hostname 2>/dev/null` HISTSIZE=1000 if [ "$HISTCONTROL" = "ignorespace" ] ; then export HISTCONTROL=ignoreboth else export HISTCONTROL=ignoredups fi export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL # By default, we want umask to get set. This sets it for login shell # Current threshold for system reserved uid/gids is 200 # You could check uidgid reservation validity in # /usr/share/doc/setup-*/uidgid file if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then umask 002 else umask 022 fi for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do if [ -r "$i" ]; then if [ "${-#*i}" != "$-" ]; then . "$i" else . "$i" >/dev/null fi fi done unset i unset -f pathmunge [root@centos7 ~]# cat /tmp/profile | tr -d " " #/etc/profile #Systemwideenvironmentandstartupprograms,forloginsetup #Functionsandaliasesgoin/etc/bashrc #It'sNOTagoodideatochangethisfileunlessyouknowwhatyou #aredoing.It'smuchbettertocreateacustom.shshellscriptin #/etc/profile.d/tomakecustomchangestoyourenvironment,asthis #willpreventtheneedformerginginfutureupdates. pathmunge(){ case":${PATH}:"in *:"$1":*) ;; *) if["$2"="after"];then PATH=$PATH:$1 else PATH=$1:$PATH fi esac } if[-x/usr/bin/id];then if[-z"$EUID"];then #kshworkaround EUID=`/usr/bin/id-u` UID=`/usr/bin/id-ru` fi USER="`/usr/bin/id-un`" LOGNAME=$USER MAIL="/var/spool/mail/$USER" fi #Pathmanipulation if["$EUID"="0"];then pathmunge/usr/sbin pathmunge/usr/local/sbin else pathmunge/usr/local/sbinafter pathmunge/usr/sbinafter fi HOSTNAME=`/usr/bin/hostname2>/dev/null` HISTSIZE=1000 if["$HISTCONTROL"="ignorespace"];then exportHISTCONTROL=ignoreboth else exportHISTCONTROL=ignoredups fi exportPATHUSERLOGNAMEMAILHOSTNAMEHISTSIZEHISTCONTROL #Bydefault,wewantumasktogetset.Thissetsitforloginshell #Currentthresholdforsystemreserveduid/gidsis200 #Youcouldcheckuidgidreservationvalidityin #/usr/share/doc/setup-*/uidgidfile if[$UID-gt199]&&["`/usr/bin/id-gn`"="`/usr/bin/id-un`"];then umask002 else umask022 fi foriin/etc/profile.d/*.sh/etc/profile.d/sh.local;do if[-r"$i"];then if["${-#*i}"!="$-"];then ."$i" else ."$i">/dev/null fi fi done unseti unset-fpathmunge [root@centos7 ~]#
6.在vim中设置tab缩进为4个字符
Linux系统,打开vim时候发现默认的缩进是8个空格。Vim 启动时,会根据配置文件(.vimrc)来设置 Vim,因此我们可以通过此文件来定制适合自己的 Vim。
Vim 配置文件分为系统配置文件和用户配置文件:
系统配置文件位于 Vim 的安装目录(即全局配置,所有的用户都会执行这个配置)(默认路径为 /etc/.vimrc);
用户配置文件位于主目录 ~/.vimrc,即通过执行 vim ~/.vimrc 命令即可对此配置文件进行合理修改。通常情况下,Vim 用户配置文件需要自己手动创建。
注意,Vim 用户配置文件比系统配置文件的优先级高,换句话说,Vim 启动时,会优先读取 Vim 用户配置文件(位于主目录中的),所以我们只需要修改用户配置文件即可(不建议直接修改系统配置文件)。
范例:
[root@centos7 ~]# [root@centos7 ~]# ll -a total 32 dr-xr-x---. 2 root root 165 Dec 6 19:35 . dr-xr-xr-x. 18 root root 236 Nov 25 06:37 .. -rw-------. 1 root root 1608 Nov 25 06:38 anaconda-ks.cfg -rw-------. 1 root root 1878 Dec 6 08:23 .bash_history -rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout -rw-r--r--. 1 root root 202 Nov 25 07:24 .bash_profile -rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc -rw-r--r--. 1 root root 100 Dec 29 2013 .cshrc -rw-r--r--. 1 root root 0 Dec 6 19:31 f1.txt -rw-r--r--. 1 root root 129 Dec 29 2013 .tcshrc -rw-------. 1 root root 809 Dec 6 19:35 .viminfo [root@centos7 ~]# vim .vimrc [root@centos7 ~]# cat .vimrc set tabstop=4 [root@centos7 ~]#
备注:还有一种临时生效的方式,即在打开的vim文件中,末行模式:set tabstop=4