Linux - 常用命令与根文件系统
目录
目录与文件管理
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变量:
如果在以上路径中没有找到相关命令(该命令是外部命令),提示用户command not found
,一个命令在以上多个路径中存在,系统会按照从前往后的顺序查找,找到即停止向后查找。
hash
查看命令缓存及命中率(一个命令如果执行成功就记录下执行成功的次数与路径,下次查找就优先查找,查找缓存的速度比重新搜索的速度快)
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
head
默认查看文本文件的前10行
- -n,查看文件前n行
tail
tail
默认查看文本文件的后10行
- -n,查看文本文件的后n行
- -f,动态查看文本文件内容,如动态查看日志: tail -f /var/log/messages,也就是说日志内容改变会在你使用命令的的窗口实时显示
结合 head
和 tail
可以查看指定行数内容,比如 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文件名限制:
- 单个文件或目录名称不能超过255个字符
- 文件名中不能包含特殊字符(/ . - +等)
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
,查看系统运行的总时间
参考资料
最近更新:
发布时间: