目录

目录与文件管理

mkdir

mkdir,make directory(创建空目录)

  • -m,创建目录同时设置权限
  • -p,递归创建新目录
  • -v,显示创建目录的过程

-p 示例

# 父目录不存在也会被创建
mkdir -p /test/dir1

# 同时创建两个目录
mkdir -p /test/{dir1,dir2}

rmdir

rmdir xxx,删除xxx目录,不过只能删空的目录,无法删除嵌套目录,换句话说就是目录里不能有任何文件和其他目录

ls,list的简写用于列出目录:

  • -l(--long),以长格式显示属性
  • -h,为文件大小添加单位(显示文件大小带上大小单位)
  • -a,显示目录下所有文件(包含. .. 以.开始的隐藏文件)
  • -A,与-a相同,但是不显示.与..
  • -R,递归显示目录中的内容(会显示子目录中的内容)
  • -r,逆序显示目录内容(默认用ls查看会以26个字母的顺序进行排列,用-r刚好相反)
  • -i,打印这个file的index node值
  • -d,只列出目录

ls

ls -l 文件属性详解

-rw-r--r--. 1 root root 1648 oct 14 14:16 initial-setup-ks.cfg 

第一位:

  • -,代表普通文件(file)
  • d,代表目录(directory)
  • b,块设备(block)比如硬盘、u盘等
  • c,字符设备(char)键盘鼠标打印机等
  • s,套接字文件(socket)用于进程之间的通信
  • p,命名管道(pipe)
  • l,符号链接文件(symolic link file)

第二到十位:权限位(rwx:读写执行)

  • 234位,文件属主权限(owner 所有者)
  • 567位,文件属组权限(group 所属组)
  • 8 9 10位,其他用户权限(other 其他非本群组用户)

.:文件或目录中使用了SELinux content属性是一个点,如果用了ACL(访问控制列表)是+

1:代表文件硬链接的次数

第一个root:代表文件属主(owner)

第二个root:代表文件属组(group)

1648:文件的 byte 大小

oct 14 14:16,文件最后被访问的时间戳(stat 命令查看文件时间戳),文件的时间戳:

  • Access,访问的时间戳
  • Modify,文件被修改时间戳(修改文件数据:添加删除数据等)
  • Change,文件被更改时间戳(更改文件属性)

initial-setup-ks.cfg:文件名

在shell里输入外部命令他们是如何查找到的?

环境变量:内存中的命名空间
PATH变量:存放系统命令路径,以冒号隔开。
查看PATH变量:

PATH.png

如果在以上路径中没有找到相关命令(该命令是外部命令),提示用户command not found,一个命令在以上多个路径中存在,系统会按照从前往后的顺序查找,找到即停止向后查找。

hash 查看命令缓存及命中率(一个命令如果执行成功就记录下执行成功的次数与路径,下次查找就优先查找,查找缓存的速度比重新搜索的速度快)

hits.png

tree

tree,以树状格式列出目录的内容。(tree = ls -R 显示样式不同)

cd

cd,切换目录(change directory),cd 不加选项,切换当前用户的宿主目录:

  • -,返回到上一次的工作路径
  • ~username,切换到username用户的宿主目录,不指定用户名就是当前用户

pwd

pwd,打印当前所在的工作目录(print working directory)

file

file,查看文件类型,在 Windows 是用拓展名识别文件类型,Linux 就要靠 file 命令,任何文件都可以用 file 查看。

语法:file [options] [args]

常用选项:

  • -b,显示结果时,不显示文件名
  • -c,显示执行file命令的执行过程(file是如何去判断文件类型),便于排错或分析file命令执行过程
  • -i,输出MIME类型的字符串
  • -z,显示压缩文件的内容
  • -L,查看软连接对应文件的类型
  • -f,查看文件中文件名的类型

    du

du -h,查看文件大小

cat

查看文本文件内容

cat,一次查看文件所有内容(跳到文件结尾)

语法:cat [options] [args]

常用选项:

  • -n,显示文件内容同时显示行号,包括空行
  • -b,和-n功能相同,但不包括空行
  • -S,当文件中有多个空行时,合并为一个空行
  • -E,在显示内容时,结尾添加$符号

新建新文件:

cat > new_file_name << EOF //EOf:end of file
        > 内容1
        > 内容2
        > 内容3
        > EOF #结束书写

向现有文件中追加数据:

cat >> file_name << EOF
        >内容1
        >内容2
        >内容3
        >EOF

把多个文件的内容合并到一个文件:

cat file1 file2 > new_file_name

tac,与 cat 显示相反,第一行在下面最后一行在上面

more

more,可以翻页查看文本文件内容,more +num file_name 可以从 num 行开始查看内容。

在使用时一些快捷操作方便查找内容:

  • enter键,向下翻一行
  • space键,向下翻一屏
  • Ctrl+B,向上翻一屏
  • Ctrl+F,向下翻一屏
  • =,显示当前行号
  • vi,调用编辑器
  • !command,调用shell执行命令
  • q,退出more命令

less

less,可以翻页查看文本文件内容:

  • -N,显示行号

阅读文件时有些操作可以方便找寻数据:

  • enter 键,向下翻一行
  • space 键,向下翻一屏
  • PageDown 键,向下翻一屏
  • PageUp 键,向上翻一屏
  • ↑ ↓ 键,向上/向下翻一行
  • /word:在该文件中向下查找 word 关键字
    • n 键,查找下一个
    • N 键,查找上一个
  • ?word,在该文件中向上查找 word 关键字
  • :e FilePath,查看下一个文件
    • :p,返回上一个文件
    • :n,返回下一个文件
  • !command,在阅读模式中可以直接执行命令,把对应 command 替换成实际命令即可。

head 默认查看文本文件的前10行

  • -n,查看文件前n行

tail

tail 默认查看文本文件的后10行

  • -n,查看文本文件的后n行
  • -f,动态查看文本文件内容,如动态查看日志: tail -f /var/log/messages,也就是说日志内容改变会在你使用命令的的窗口实时显示

结合 headtail 可以查看指定行数内容,比如 100 行内容我想查看第 20 行到 40 行的内容怎么办?思路是先用 head -n 40 显示前 40 行,再用 tail -n 20 查看最后 20 行这样就能达到目的。

head -n 40 1.txt | tail -n 20

文件传输

rz 上传文件到服务器

sz 下载文件到本机

wget 下载文件

scp 可以上传和下载。

# 将本机 file 用 userName 用户登录到 host 主机,将文件传输到 Absolute Path 中。
scp file userName@host:[Absolute Path]

# 使用 userName 用户登录到 host 主机,将 Absolute Path 文件下载到当前用户家目录
scp userName@host:[Absolute Path] ~/

使用 scp

scp [-P Port] <FilePath> <UserName>@<Host>:<要上传的目标目录>

这里给出示例。

ubuntu@ip-172-26-7-83:~$ scp -P 22 ./smb.conf root@81.70.14.219:/1.conf
The authenticity of host '81.71.13.219 (81.71.13.219)' can't be established.
ECDSA key fingerprint is SHA256:HJzqBD2kx6c9w6wkJ2Gb1g0wjfRJ/Rtz0O7Maadd2yU.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '81.71.13.219' (ECDSA) to the list of known hosts.
root@81.71.13.219's password: 
smb.conf                                                          100% 1733    18.9KB/s   00:00

使用 scp 将本机当前目录 smb.conf 配置文件,传输到目标 81.71,13.219 主机根目录下,并重新命名为 1.conf(不指定名称,就会以源文件名命名)。如果目标主机默认 SSH 端口不是 22 可以用 -P 选项指定。

登录目标机器,查看根目录文件存在。

Connecting to 81.71.13.219:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

WARNING! The remote SSH server rejected X11 forwarding request.
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Tue Feb 14 15:49:29 2023 from 223.104.40.108
[root@VM-24-2-centos ~]# ls /
1.conf  bin  boot  data  dev  etc  home  lib  lib64  log  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

复制与移动

cp,复制文件或目录(copy)

语法:cp [options] [src_file] [des_file]

  • -f,强制(forece)复制文件或目录不进行提示
  • -r,递归复制目录
  • -s,为某个文件创建符号链接(软连接),而不是复制文件
  • -b,覆盖已有的文件前,对目标文件进行备份,在原有文件后面加上~
  • -l,为文件创建硬链接,而不是复制文件
  • -p,复制文件时保留文件的原有属性
  • -d,当复制软连接文件时,把目标文件或目录也会创建为软连接,并指向最原始的文件
  • -i,覆盖目标文件前询问,这是默认操作,相当于 cp = cp -i

mv 用于移动(move)或重命名文件和目录,当原位置和目标位置是同一目录时是重命名,当原位置和目标位置不是同一目录时是移动:

  • -b,移动前先对源文件进行备份
  • -f,强制覆盖
  • -i,覆盖目标文件前询问
  • -t,将多个文件移动同一个目录,目标目录在前面,后面跟文件。mv -t [directory] file1 file2 ...

创建与删除文件

rm,删除(remove)文件或目录,与上面 rmdir 的区别是,这个可以删除嵌套目录,来多少删多少:

  • -d,删除单一的空目录(与rmdir功能相同)
  • -f,强制删除
  • -i,删除前进行询问
  • -r,递归删除整个目录,可以删除非空的目录
  • -v,显示命令执行过程

touch,创建新文件或修改文件时间戳

  • -a,只改变访问时间(access),touch -a file_name 会将现在的系统时间写入
  • -d,使用指定时间戳创建新文件,而不是使用系统时间 touch -d "03:00 am" file_name 只能更改过去的时间,改变的是 access 与 change 时间戳
  • -c,不创建文件
  • -t,使用指定格式时间戳创建新文件,而不是使用系统时间
  • -f,解决与 BSD 系列 Unix 系统兼容性
  • -m,只更改变动(modify)时间 touch -m file_name

查找

which,查看命令所在的绝对路径

type -a,完全可以替代 which

whereis 查看命令所在的路径,源代码,帮助信息文件所在目录

  • -b,只查看文件所在的位置,等同于 which
  • -m,只查看 man 目录下的帮助文件
  • -s,支持看源代码所在的位置

locate file_name,查找文件命令。非实时性(模糊匹配),根据自己的数据库查找文件,CentOS 每天更新一次数据库或者 updatedb 手动更新,locate 命令默认是不安装的需要通过 yum -y install mlocate 安装完 locate 后生成 /var/lib/mlocate 目录来存放数据库 /var/lib/mlocate/mlocate.db

根文件系统

Linux文件类型

  • 普通文件
    • 纯文本文件(ASCII),配置文件
    • 二进制文件(binary file),命令
    • 数据格式文件(data),/var/log/wpmp
  • d,目录文件
  • l,链接文件(软链接文件,类似于 Windows 快捷方式)
  • 设备文件(存放在 /dev 中)
    • b,block块设备
    • c,character字符集设备,一次性读取,按顺序读取
    • s,socket 套接字文件,通常用在网络上数据连接: IP:PROT
    • p,管道,特殊的文件类型,解决多个程序同时访问一个文件所造成的错误问题

file 查看Linux中文件类型
语法:file [options] file_name

Linux文件名限制:

  1. 单个文件或目录名称不能超过255个字符
  2. 文件名中不能包含特殊字符(/ . - +等)

FHS 标准(filesystem hierarchy standard)

Linux 中每个目录都有用意,其实是约定每个目录的作用,避免更换使用其他 Liunx 发行版本时增加学习时间成本,也是为了更好的协同开发。

/ #根文件文件系统(rootfs:root file system )。
/bin #二进制,存放一些命令
/boot #存放启动和内核相关文件
/dev #存放设备(硬件)文件
/etc #存放应用程序配置文件
/home #普通用户的家(宿主)目录,默认为/home/USERNAME
/lib和/lib64 #存放系统开机时需要用到的函数库及/bin和/sbin命令调用的函数库
    /lib/modules #存放内核相关的模块(驱动程序等)
/media和/mnt #挂载点,/media挂载移动设备    /mnt挂载临时设备
/opt #第三方软件存放目录(用户自行安装的软件存放处),现在一般安装到/usr/local下
/proc #为文件系统,数据存放在内存中,存放关于进程的相关信息
/root #管理员的家(宿主)目录
/sbin #存放管理员使用的命令
/srv #service缩写,存放服务数据目录,如可以把www服务的网页放到该目录
/tmp #存放临时文件,所有用户都可以访问创建文件,但是每个用户只能删除自己的文件,大约每个月自动清空一次,或者是重启时清空。
/sys #为文件系统,存放在内存中,记录内核相关的信息,包括目前加载内核模块和内核检测到的硬件设备等
/usr #UNIX SOFTWARTE RESOURCE:存放安装的应用程序
    /usr/bin #普通用户使用的命令(和/bin区别为是否与开机有关)
    /usr/sbin #网络服务器命令,secret binary 的缩写。
    /usr/share #存放共享文件目录(在线帮助文件,杂项,时区文件等)
    /usr/include #存放头文件
    /usr/src #释放源代码目录
/var #vary的缩写,存放经常变动的文件,如日志、mail等。
    /var/cache #存放应用程序运行时产生的缓存文件
    /var/lib #程序运行时,不要使用的数据文件的存放目录
    /var/lock #设备或资源一次只能被一个应用程序使用,如果多应用程序使用会产生错误,因为要为设备或资源上锁(存放锁文件)
    /var/log #存放日志目录(系统,用户登录,服务等)
    /var/mail #存放个人电子邮件(系统报警产生邮件信息等)
    /var/run #存放应用程序运行时PID文件(进程号.pid结尾)
    /var/spool #存放队列数据,排队等待其他用户程序使用的数据,数据通常使用完成后会被删除

FHS规定 /etc/bin/dev/lib/sbin 这五个目录必须要和根目录位于同一文件系统(不可以为这些目录建立独立分区)。

df,显示文件系统信息

  • -T,显示文件系统类型,
  • -h=--human-readable,会加上 size 单位
  • -l,是local本地磁盘,不会显示远程磁盘

查看日期

date 查看操作系统时间

  • -u,显示 UTC 时间
  • -s,设置时间,例如 -s "20:20:20"
  • +%Y-%m-%d,格式化时间

cal,查看日历

uptime,查看系统运行的总时间

参考资料

最近更新:

发布时间:

摆哈儿龙门阵