Linux文件类型和文件相关命令
文件类型
ll
后可以看到文件详情:
-
:常规文件(内部类型是什么,用file
命令)
d
:directory,目录文件
b
:blobk device,块设备文件,支持以“block”为单位进行随机访问
major number:主设备号,用来表示设备类型,进而确定要加载的驱动程序
minor number:次设备号,用于表示同一类型中的不同设备。
如下图的1,3
、1,5
c
:character device,字符设备文件,支持以”character”为单位进行线性访问
l
:symbolic link,符号链接文件(软连接文件)
p
:pipe,命名管道
s
:socket,套接字文件
路径
绝对路径:以斜线开始的,从/
开始的路径。
/etc/syscofnig/network-scrpits
绝对路径分为两段,dirname和basename:
1
2
3
4
|
[root@centos7 app]# dirname /etc/sysconfig/network-scripts/ifcfg-ens192
/etc/sysconfig/network-scripts
[root@centos7 app]# basename /etc/sysconfig/network-scripts/ifcfg-ens192
ifcfg-ens192
|
相对路径:不以斜线开始的路径。
xxx/yyy
:当前目录下的xxx子目录的yyy子目录.
:当前目录..
:上级目录~
:用户的家目录-
:切换上次输入的目录,和命令配合使用
tips:
-
原理,系统记住上一个工作目录,存储在环境变量OLDPWD
,可以用echo $OLDPWD
查看到。
常用命令:
1. pwd
:显示工作目录
printing working directory
2. cd
:切换目录
change directory
cd
:切换到家目录cd ~
:切换到家目录cd ~USERNAME
:切换到用户USERNAME的家目录cd -
:在上一次所在目录与当前目录来回切换(PWD to OLDPWD)cd ..
:切换到上级目录cd /path/to/directory
切换到一个绝对目录cd path/to/directory
:切换到一个相对目录
3. ls
:列出内容
list(用/var目录做例子)
-a
,--all
:列出所有文件包含隐藏文件-A
,--almost-all
:列出除.
和..
之蛙所有的文件-F
:-F参数在目录名后加了正斜线(/),以方便用户在输出中分辨它们。类似地,它会在可执行 文件(比如上面的my_script文件)的后面加个星号,以便用户找出可在系统上运行的文件。
l
,--long
:长格式信息,列出文件的详细属性,命令可以简写为ll
,alias ll='ls -l --color=auto'
-h
,--human-readable
:size用人类可读的格式表示-d
,--directory
:查看目录本身而非内部的文件详情-r
,--reverse
:反转排序(降序)-R
,--recursive
递归显示(基本不用这个,递归显示用tree
命令更直观)-t
:按修改时间排序
4. cat
:文本文件输出到终端
concatenate
拼接
可以单独cat:cat /etc/issue
可以连接多个文件显示cat /etc/issue /etc/redhat-release
1
2
3
4
5
6
7
8
9
|
[root@CentOS6 app]# cat /etc/issue
CentOS release 6.9 (Final)
Kernel \r on an \m
[root@CentOS6 app]# cat /etc/issue /etc/redhat-release
CentOS release 6.9 (Final)
Kernel \r on an \m
CentOS release 6.9 (Final)
|
参数:
cat -s file
:删除多余的空白行(多行空白行,删除到只剩一行空白行)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
$ cat multi_blanks.txt
line 1
line2
line3
line4
$ cat -s multi_blanks.txt #压缩相邻的空白行
line 1
line2
line3
line4
|
cat -T file
:将制表符显示为^I
用来看脚本里的制表符,通常我们写脚本要避免用制表符,而用多个空格。所以此命令通常用来查询哪里用了制表符。
cat -n file
:显示行号
1
2
3
4
5
6
7
8
9
|
$ cat lines.txt
line
line
line
$ cat -n lines.txt
1 line
2 line
3 line
|
5. tac
: 跟cat
相反,从后面行往前面行输出
stat
查看文件状态
可以看到atime(Access)
、mtime(Modify)
、Ctime(Change)
,还有文件的权限,文件拥有者和拥有组,还有文件大小相关的内容。
1
2
3
4
5
6
7
8
9
10
|
[root@centos7 ~]# stat /etc/issue
File: ‘/etc/issue’
Size: 23 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 134320235 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:etc_t:s0
Access: 2017-05-22 09:07:34.832999490 +0800
Modify: 2016-11-30 02:12:59.000000000 +0800
Change: 2017-05-17 16:53:20.670996867 +0800
Birth: -
|
6. 文件通配符(globbing)
*
:匹配零个或多个字符?
:匹配任何单个字符~
:当前用户家目录~longdream
:用户longdream的家目录~+
:当前工作目录~-
:前一个工作目录[0-9]
:匹配数字范围,匹配一个[a-z]或[A-Z]
:字母,不区分大小写tips:因为不区分大小写,[a-d]代表的就是匹配
AaBbCcDd
中的一个[a-z0-9]
:字母或数字[wang]
:匹配列表中的任何的一个字符,匹配w
或a
或n
或g
[^wang]
匹配列表中的所有字符以外的字符,除了w
、a
、n
、g
只显示隐藏文件:
预定义的字符类:man 7 glob
[:digit:]
:任意数字,相当于0-9
[:lower:]
:任意小写字母
[:upper:]
: 任意大写字母
[:alpha:]
: 任意大小写字母
[:alnum:]
:任意数字或字母
[:blank:]
:水平空白字符
[:space:]
:水平或垂直空白字符
[:punct:]
:标点符号
[:print:]
:可打印字符
[:cntrl:]
:控制(非打印)字符
[:graph:]
:图形字符
[:xdigit:]
:十六进制字符
练习
练习1:显示/var/log
目录下所有以l
开头,以一个小写字母结尾,且中间出现一位任意字符的文件或目录。
练习2:显示/etc
目录下,以任意一位数字开头,且以非数字结尾的文件或目录。
练习3:显示/etc
目录下,以非字母开头,后面跟一个字母及其他任意长度任意字符的文件或目录。
练习4:复制/etc
目录下,所有以m开头,以非数字结尾的文件或目录到/tmp/test
目录。
练习5:复制/usr/share/man
目录下,所有以man开头,后跟一个数字结尾的文件或目录至/tmp/test/man
目录下。
练习6:复制/etc目录下,所有以.conf
结尾,且以m,n,r,p开头的文件或目录到/tmp/conf.d/目录下。
答案:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
ls -d /var/l?[[:lower:]]
ls -d /etc/[0-9]*[^0-9]
ls -d /etc/[^a-z][a-z]*
mkdir /tmp/test
cp -r /etc/m*[^0-9] /tmp/test/
mkdir /tmp/test/man
cp -r /usr/share/man/man[0-9] /tmp/test/man
mkdir /tmp/conf.d
cp -r /etc/[mnrp]*.conf /tmp/conf.d/
|
7. touch
touch [OPTION]... FILE...
-a
:仅改变 atime和ctime
-m
:仅改变 mtime和ctime
-t [[CC]YY]MMDDhhmm[.ss]
:指定atime和mtime的时间戳
-c
:如果文件不存在,则不予创建
9. cp
cp
:copy
cp /etc/fstab /app
:复制单个文件到目录下面。cp /etc/{fstab,issue} /app/dir/
,cp /etc/fstab /etc/bashrc /app/dir/
:复制多个文件到某目录下。cp /etc/fstab /app/1.txt
:复制并覆盖目标文件(没有则创建)。
参数
-f
,--force
:强制覆盖目标文件。-r
,-R
,`--recursive
:递归复制目录 (-r
==-R
)。cp -r /var/log /app/log
-d
:复制符号链接本身,而不是他指向的文件。cp -d /etc/system-release /app
-a
,--archive
:归档,等同于-dr
-p
:复制文件的原来属性,等同于下面的--preserv=[mode,ownership,timestamp]
--preserv[=ATTR_LIST]
mode
:权限ownership
:属主属组timestamp
:时间戳links
:复制链接的源文件xattr
context
all
-v
,--verbose
:看到详细信息
练习:
1) 定义别名命令baketc
,每天将/etc/
目录下所有
文件,备份到/testdir
独立的子目录下,并要求子目 录格式为 backupYYYY-mm-dd
,备份过程可见
2) 创建/testdir/rootdir
目录,并复制/root
下所有 文件到该目录内,要求保留原有权限
解答:
1)
1
|
alias baketc=cp -av /etc/* /testdir/`date -u`
|
2)
1
|
cp -ap /root/* /testdir/rootdir
|
tips: 小技巧 利用通配符来复制:
cp -a /etc/passwd{,.bak}
相当于cp -a /etc/passwd /etc/passwd.bak
10. mv
mv
:move
-f
强制移动或覆盖
移动文件(不在同一目录下),重命名文件(在同一目录下)
移动目录或重命名目录
11. rename
重命名后缀
rename [options] expression replacement file...
选项
1
2
3
4
5
6
7
8
9
10
11
|
EXAMPLES
Given the files foo1, ..., foo9, foo10, ..., foo278, the commands
rename foo foo0 foo?
rename foo foo0 foo??
will turn them into foo001, ..., foo009, foo010, ..., foo278. And
rename .htm .html *.htm
will fix the extension of your html files.
|
1
2
3
4
|
mkdir test
cd text
touch {1,2,3,4,5}.txt
rename -v .txt .txt.bak *.txt
|
rm
rm
: remove
删除文件-i
:interactive,交互式-r
递归删除-f
强制删除
rm -rf /
(5是可以删除根的,6和7是不可以删除的)
我们可以留一个习惯:
不用的文件,不要直接删除,可以用mv
move到某个专用目录(比如都移动到/tmp下)
12. tree
参数:
-d
: 只显示目录-L level
:指定显示的层级数目-P pattern
: 只显示由指定pattern匹配到的路径
13. mkdir、rmdir
mkdir
:make directory
-p
递归创建-v
:verbose,创建目录的详情-m
mode,权限
rmdir
:remove empty directory(只能删除空目录)
练习1:创建test1/x/y1
, test1/x/y2
, test1/x/y1/a
, test1/x/y1/b
练习2: test2目录下面创建a_c
, a_d
,b_c
, b_d
练习3:在test3目录下创建以下目录结构:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
test3
├── bin
├── etc
│ └── sysconfig
│ └── network-scripts
├── sbin
├── usr
│ ├── bin
│ ├── lib
│ ├── lib64
│ ├── local
│ │ ├── bin
│ │ ├── etc
│ │ ├── lib
│ │ └── sbin
│ └── sbin
└── var
├── cache
├── log
└── run
|
练习3:创建/testdir/dir1/x
, /testdir/dir1/y,
/testdir/dir1/x/a
, /testdir/dir1/x/b
, /testdir/dir1/y/a
, /testdir/dir1/y/b
练习4:创建/testdir/dir2/x
, /testdir/dir2/y
, /testdir/dir2/x/a
, /testdir/dir2/x/b
练习5:创建/testdir/dir3
, /testdir/dir4
, /testdir/dir5
, /testdir/dir5/dir6
, /testdir/dir5/dir7
答案:
1
2
3
4
5
6
7
8
9
10
11
12
|
mkdir -pv test1/x/{y1/{a,b},y2}
mkdir -pv test2/{a,b}{c,d}
mkdir -pv test3/{bin,sbin,etc/sysconfig/network-scripts,usr/{bin,sbin,local/{bin,sbin,etc,lib},lib,lib64},var/{cache,log,run}}
mkdir -pv /testdir/dir1/{x,y}/{a,b}
mkdir -pv /testdir/dir2/{x/{a,b},y}
mkdir -pv /testdir/dir{3,4,5/dir{6,7}}
|
14. 延伸
删除大文件的方法(没被释放删除,空间还占用的文件):
实验:
在一个会话下,dd if=/dev/zero of=bigfile bs=1M count=2048
,vim bigfile
,在vim模式下不要退出。
打开另外一个会话窗口,删除文件,结果发现,文件是删除了,但是空间没有释放,因为vim占用着文件。
这时候我们就可以用>
来搞定:
1
2
|
> bigfile3
rm -rf bigfile3
|
>
和>>
开单章讲,在后面的IO和重定向部分。
Linux文件类型和文件相关命令的更多相关文章
- 三、Linux系统中的文件类型和文件扩展名
.sock文件也是一类特殊的文件,这类文件通常用在网络之间进行数据连接,如:我们可以启动一个程序来监听客户端的要求,客户端可以通过套接字来进行通信: linux中的文件类型 文件类型介绍 Linux系 ...
- Linux网络——配置防火墙的相关命令
Linux网络——配置防火墙的相关命令 摘要:本文主要学习了如何在Linux系统中配置防火墙. iptables命令 iptables准确来讲并不是防火墙,真正的防火墙是运行于系统内核中的netfil ...
- Linux 文件类型 ,文件权限
第一个字符段:文件类型.第二个组字符段又分为三段(每三个字符为一段不足用‘-’):文件属性. . drwxrwxrwx . -rwxr-xr-x 第一字符段: 第二字符组段依次为: - :普通文件 ...
- linux 用户、用户组及相关命令(useradd 、passwd、userdel 、groupadd 、groupdel、usermod 、gpasswd 、 id、su)
linux是一个多用户系统,用于权限管理(权限最小化); 相关命令: 7 8 9 10 11 12 13 14 15 useradd passwd userdel groupadd groupdel ...
- ASP.NET应用程序的文件类型及文件夹列表
文件类型: 1. *.aspx文件:这类文件是ASP.NET Web页面,它包括用户接口和隐藏代码. 2. *.ascx文件:这类文件是用户控件.用户控件同Web页面非常相似,但用户不能直接访问用户控 ...
- linux用户权限、系统信息相关命令(待学)
用户权限相关命令 目标 用户 和 权限 的基本概念 用户管理 终端命令 组管理 终端命令 修改权限 终端命令 01.用户和权限的基本概念 1.1 基本概念 用户 是Linux系统工作中重要的一环, 用 ...
- (转)linux下压缩和归档相关命令tar,zip,gzip,bzip2
压缩包也有两种形式,一种是tar.gz包(.tgz包也是这种),一种是tar.bz2包. tar.gz包的解压方法:tar zxvf [PackageName].tar.gz tar.bz2包的解压方 ...
- linux系统状态查看/管理相关命令
系统状态查看命令: w 查看用户 top 系统进程监控 uptime 查看某台服务器运行了多久 htop 更加先进的交互式监控工具(需要安装) iotop 监控并实时显示磁盘IO输入和输出和程序进程( ...
- python根据文件目录、文件类型和文件与当前时间差删除文件
直接贴代码: 删除某个目录下的文件,不遍历木路下文件夹下的文件,根据时间差删除,默认7天 #!/usr/bin/python # -*- coding: gbk -*- import os impor ...
随机推荐
- eclipse搭建简单的web服务,使用tomcat服务
打开eclipse,新建web project, 若本机安装的eclipse版本高,jdk版本低,提示当前版本不适合,解决方法,通过Windows搜索Java,点击配置Java,之后如下图:
- .net代码混淆 .NET Reactor 研究 脚本一键混淆一键发布
.net代码混淆 .NET Reactor 研究 为什么要混淆? .net比较适合快速开发桌面型应用,但缺点是发布出来的文件是可以反编译的,有时候为了客户的安全,我们的代码或者我们的逻辑不想让别人知道 ...
- ios 后台进程弹窗
// http://iphonedevwiki.net/index.php/CFUserNotification // https://kunnan.github.io/2018/05/14/com. ...
- 【Qt开发】QT对话框去掉帮助和关闭按钮 拦截QT关闭窗口的CloseEvent
建了一个对话框,我不想把边框去掉,只想去掉关闭按钮, setWindowFlags(windowFlags()&~Qt::WindowCloseButtonHint&~Qt::Wind ...
- 【python基础学习】---解析多层json,解析xml
1.以豆瓣的API接口为例子,解析返回的json数据 https://api.douban.com/v2/book/1220502 { "rating":{ "max&q ...
- react正常显示html代码、dangerousSetInnerHTML 笔记
const html =`<h1>今天天色很好</h1>` <div dangerouslySetInnerHTML={{__html:html}}></di ...
- 1. centos7 的安装
选择上海时间 我们选择桌面版 选择手动配置分区 选择标准分区 修改主机名 开始安装 设置密码 设置用户名 接下来等待安装完 同样的操作再安装3台机器!!这里不多赘述. 安装完之后就重启 接下来给不同机 ...
- [转帖]深入浅出全面解析RDMA
深入浅出全面解析RDMA 置顶 2018年06月04日 11:36:54 MasterT-J 阅读数 17193更多 所属专栏: RDMA RDMA(RemoteDirect Memory Acc ...
- [转帖]influxdb和boltDB简介——MVCC+B+树,Go写成,Bolt类似于LMDB,这个被认为是在现代kye/value存储中最好的,influxdb后端存储有LevelDB换成了BoltDB
influxdb和boltDB简介——MVCC+B+树,Go写成,Bolt类似于LMDB,这个被认为是在现代kye/value存储中最好的,influxdb后端存储有LevelDB换成了BoltDB ...
- Oracle-DDL 1- 表管理
DDL-数据定义语句: 一.表管理 1.create 创建表-- 必须有创建表的权限和表空间-- 表名必须以字母开头,可以包含数字和符号,不能是系统关键字 /*create table 表名(列名1 ...