1、常见文件管理命令分类
1)文件内容查看(cat、tca、more、less、head、tail)
2)文件字符替换(tr、sed、awk等)
3)文件创建、移动、复制和删除(touch、mv、cp、scp、rm)
4)文件权限修改(chown,chmod,chgrp)
5)文件元数据查看和文件属性(stat、file)
6)文件查找(find、locate)
文件内容查看
cat
使用方式:cat <file1>[file2…]
查看文件内容全文
[root@localhost ~]# cat anaconda-ks.cfg #version=DEVEL # System authorization information auth --enableshadow --passalgo=sha512 # Use CDROM installation media cdrom # Use graphical install graphical # Run the Setup Agent on first boot firstboot --enable
tac
使用方式:tac <file1>[file2…]
查看文件内容全文(逆向显示)
[root@localhost ~]# tac anaconda-ks.cfg %end %addon com_redhat_kdump --enable --reserve-mb='auto' %end kexec-tools @core
more
more <file1>[file2…]
以当前终端大小为单位显示文件内容。如果当前终端不能全部显示,则显示第一页内容,使用空格键进行翻页,q键退出。
[root@localhost ~]# more anaconda-ks.cfg #version=DEVEL # System authorization information auth --enableshadow --passalgo=sha512 # Use CDROM installation media cdrom # Use graphical install graphical # Run the Setup Agent on first boot firstboot --enable # Keyboard layouts keyboard --vckeymap=us --xlayouts='us' # System language lang en_US.UTF-8 # Network information network --bootproto=dhcp --device=eno16777736 --onboot=off --ipv6=auto network --hostname=localhost.localdomain # Root password rootpw --iscrypted $6$KI37O.HrF6QsdogV$FarNU1T5m7MJU7AZL66Dsr8YtEBmj9YeXYg8.lbUWAIo0osZcfGNgO7KiKyTRboAbHGNuA42EKfJ2s66hHIR30 # System timezone timezone America/New_York --isUtc --More--(68%)
less
less <file1>[file2…]
以当前终端大小为单位显示文件内容。如果当前终端不能全部显示,则显示第一页内容,使用空格键进行翻页,可使用方向键进行上下进行行级翻动、使用Pageup,PageDown按键进行页面翻动,q键退出。
[root@localhost ~]# less anaconda-ks.cfg #version=DEVEL # System authorization information auth --enableshadow --passalgo=sha512 # Use CDROM installation media cdrom # Use graphical install graphical # Run the Setup Agent on first boot firstboot --enable # Keyboard layouts keyboard --vckeymap=us --xlayouts='us' # System language lang en_US.UTF-8 # Network information network --bootproto=dhcp --device=eno16777736 --onboot=off --ipv6=auto network --hostname=localhost.localdomain # Root password rootpw --iscrypted $6$KI37O.HrF6QsdogV$FarNU1T5m7MJU7AZL66Dsr8YtEBmj9YeXYg8.lbUWAIo0osZcfGNgO7KiKyTRboAbHGNuA42EKfJ2s66hHIR30 # System timezone timezone America/New_York --isUtc :
head
head [-n] <file1>
显示文件的前几行,不加参数默认显示头10行,-n参数指定显示n行。
[root@localhost ~]# head anaconda-ks.cfg #version=DEVEL # System authorization information auth --enableshadow --passalgo=sha512 # Use CDROM installation media cdrom # Use graphical install graphical # Run the Setup Agent on first boot firstboot --enable # Keyboard layouts
tail
tail [-n|f] <file1>
显示文件的后几行,不加参数默认显示后10行,-n参数指定显示n行,-f显示后10行后不退出持续显示新增加的内容。
[root@localhost ~]# tail anaconda-ks.cfg %packages @^minimal @core kexec-tools %end %addon com_redhat_kdump --enable --reserve-mb='auto' %end
文件字符替换(tr、sed、awk等)
tr
tr [option] [set1] [set2]
option
-c或–complerment 取代所有不属于第一字符集([set1])的字符
-d或–delete 删除所有属于第一字符集([set1])的字符
-s或–squeeze-repeats 把连续重复的字符单独一个字符表示
-t或–truncate-set1 先删除第一字符集比第二符集多出的字符
不加参数时,使用第二字符集中的字符替代第一字符集中的字符使用较多的是 [a-z] [A-Z] 替换文本中的字母的大小写
注:tr 命令不能直接操作文件故需要将文件内容读取后通过管道 | 或者使用输入重定向 < 输出给tr命令,tr命令也不会直接修改原文件。
特殊字符集
[:space:] 所有空白字符
[:alnum:]:字母和数字
[:alpha:]:字母 (包含大小写)
[:cntrl:]:控制(非打印)字符
[:digit:]:数字
[:graph:]:图形字符
[:lower:]:小写字母
[:print:]:可打印字符
[:punct:]:标点符号
[:space:]:空白字符
[:upper:]:大写字母
[:xdigit:]:十六进制字符
示例1:删除anaconda-ks.cfs中的字母
[root@localhost ~]# tr -d [:alpha:] < anaconda-ks.cfg #= # -- --=512 # # # -- # --= --='' # _.-8 # --= --=16777736 --= --6=
示例2 将anaconda-ks.cfs中的字母替换成大写
root@localhost ~]# tr [a-z] [A-Z] < anaconda-ks.cfg #VERSION=DEVEL # SYSTEM AUTHORIZATION INFORMATION AUTH --ENABLESHADOW --PASSALGO=SHA512 # USE CDROM INSTALLATION MEDIA CDROM # USE GRAPHICAL INSTALL GRAPHICAL # RUN THE SETUP AGENT ON FIRST BOOT FIRSTBOOT --ENABLE # KEYBOARD LAYOUTS KEYBOARD --VCKEYMAP=US --XLAYOUTS='US' # SYSTEM LANGUAGE LANG EN_US.UTF-8 # NETWORK INFORMATION NETWORK --BOOTPROTO=DHCP --DEVICE=ENO16777736 --ONBOOT=OFF --IPV6=AUTO NETWORK --HOSTNAME=LOCALHOST.LOCALDOMAIN # ROOT PASSWORD ROOTPW --ISCRYPTED $6$KI37O.HRF6QSDOGV$FARNU1T5M7MJU7AZL66DSR8YTEBMJ9YEXYG8.LBUWAIO0OSZCFGNGO7KIKYTRBOABHGNUA42EKFJ2S66HHIR30 # SYSTEM TIMEZONE TIMEZONE AMERICA/NEW_YORK --ISUTC # SYSTEM BOOTLOADER CONFIGURATION BOOTLOADER --APPEND=" CRASHKERNEL=AUTO" --LOCATION=MBR --BOOT-DRIVE=SDA AUTOPART --TYPE=LVM # PARTITION CLEARING INFORMATION CLEARPART --NONE --INITLABEL %PACKAGES @^MINIMAL @CORE KEXEC-TOOLS %END %ADDON COM_REDHAT_KDUMP --ENABLE --RESERVE-MB='AUTO' %END 123123
sed命令和awk命令使用比较复杂,在此不提。
文件创建、移动、复制和删除
文件创建
touch [option] <filename1> [filename2]
创建一个普通的空文件
option
-a 修改文件的change time
-m 修改文件的modify time
-d或–date=STRING 创建时文件使用字符串指定的时间而非当前时间
-r或–reference=FILE 创建文件时使用引用文件的时间而非当前时间
-t STAMP 或–time=WORD 使用指定时间而非当前时间
示例1 创建文件 123.txt
[root@localhost ~]# touch 123.txt [root@localhost ~]# ll 123.txt -rw-r--r-- 1 root root 0 Jan 30 18:17 123.txt
示例2 修改文件的change time
[root@localhost ~]# stat 123.txt File: ‘123.txt’ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: fd00h/64768d Inode: 68046578 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2017-01-30 18:17:01.353846432 -0500 Modify: 2017-01-30 18:17:01.353846432 -0500 Change: 2017-01-30 18:17:01.353846432 -0500 Birth: - [root@localhost ~]# touch 123.txt [root@localhost ~]# stat 123.txt File: ‘123.txt’ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: fd00h/64768d Inode: 68046578 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2017-01-30 18:18:10.357844376 -0500 Modify: 2017-01-30 18:18:10.357844376 -0500 Change: 2017-01-30 18:18:10.357844376 -0500 Birth: -
文件移动
mv
mv [option] file1 file2
移动file1 到file2位置,在同一目录使用mv时是重命名效果,如移动的到的目录有同名文件将会覆盖已有文件。
option
-i 移动时如果有同名文件提示是否覆盖(默认选项)
-f 移动时如果有同名文件直接覆盖
实例:
[root@localhost ~]# mv anaconda-ks.cfg /usr/local/ [root@localhost ~]# ls /usr/local/ anaconda-ks.cfg bin etc games include lib lib64 libexec sbin share src
文件删除
rm
rm [option] <filename>[filename_n]
删除单个、多个文件或目录。
option(常用)
-r 递归删除
-f 强制删除
示例:删除文件anaconda-ks.cfg.1
[root@localhost ~]# ls anaconda-ks.cfg anaconda-ks.cfg.1 [root@localhost ~]# rm -rf anaconda-ks.cfg.1 [root@localhost ~]# ls anaconda-ks.cfg
文件复制
cp
cp [option] file1 file2
复制文件或目录,如果复制到的目录有同名文件将会覆盖掉该文件
option(常用)
-i 覆盖前提示是否覆盖(默认选项)
-f 强制覆盖没有提示信息
-R|r 递归复制目录
-d 复制符号链接本身而非符号链接指向的源文件
-p 复制时同时复制源文件的权限
示例:复制文件anaconda-ks.cfg为anaconda-ks.cfg.1
[root@localhost ~]# cp anaconda-ks.cfg anaconda-ks.cfg.1 [root@localhost ~]# ls anaconda-ks.cfg anaconda-ks.cfg.1
scp
scp [option] file1 username@address:/path/file2
跨系统复制文件或目录
option
-r 递归复制目录
[root@localhost ~]# scp anaconda-ks.cfg root@192.168.241.10:/root/anaconda-ks.cfg.1 The authenticity of host '192.168.241.10 (192.168.241.10)' can't be established. ECDSA key fingerprint is 64:d4:58:c7:00:70:f0:98:2d:76:9c:fb:ed:ef:5c:6f. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.241.10' (ECDSA) to the list of known hosts. root@192.168.241.10's password: Permission denied, please try again. root@192.168.241.10's password: anaconda-ks.cfg
文件权限修改
linux系统中相对于文件有三种身份分别是 文件属主,文件属组和其他(既不是文件属主也不是文件属组)
修改文件的属主
chown [option] username[:groupname] file
option
-R 递归处理目录下的所有目录或文件
示例:修改文件 anaconda-ks.cfg的属主为ftp
[root@localhost ~]# chown ftp anaconda-ks.cfg [root@localhost ~]# ll 总用量 8 -rw-------. 1 ftp root 1116 11月 1 22:58 anaconda-ks.cfg
修改文件的属组
chgrp [option] groupname file
option
-R 递归处理目录下的所有目录或文件
示例1:修改文件 anaconda-ks.cfg的属组为ftp
[root@localhost ~]# chgrp ftp anaconda-ks.cfg [root@localhost ~]# ll 总用量 8 -rw-------. 1 ftp ftp 1116 11月 1 22:58 anaconda-ks.cfg
示例2:修改文件 anaconda-ks.cfg的属组为ftp
[root@localhost ~]# chown :ftp anaconda-ks.cfg [root@localhost ~]# ll 总用量 8 -rw-------. 1 ftp ftp 1116 11月 1 22:58 anaconda-ks.cfg
linux系统中有3种权限读(r) 、写 (w)、执行(x),这三种权限转换成8进制对应的数字为 4 2 1
文件的权限修改
chown
chown [option] MODE file1
修改文件的属主,属组,或其他权限
option
-r 递归修改
示例:修改文件 anaconda-ks.cfg属组权限为读写执行
[root@localhost ~]# ll 总用量 8 -rw-------. 1 ftp ftp 1116 11月 1 22:58 anaconda-ks.cfg -rw-------. 1 root root 1116 12月 6 20:52 anaconda-ks.cfg.1 [root@localhost ~]# chmod g+rwx anaconda-ks.cfg [root@localhost ~]# ll 总用量 8 -rw-rwx---. 1 ftp ftp 1116 11月 1 22:58 anaconda-ks.cfg
文件元数据查看和文件属性
stat
stat [option] file
查看文件的元数据
option
-f 查看文件在文件系统中的信息
示例:显示文件anaconda-ks.cfg的文件所在文件系统信息和元数据信息
[root@localhost ~]# stat -f anaconda-ks.cfg 文件:"anaconda-ks.cfg" ID:80300000000 文件名长度:255 类型:xfs 块大小:4096 基本块大小:4096 块:总计:4926720 空闲:4686159 可用:4686159 Inodes: 总计:19717120 空闲:19689072 [root@localhost ~]# stat anaconda-ks.cfg 文件:"anaconda-ks.cfg" 大小:1116 块:8 IO 块:4096 普通文件 设备:803h/2051d Inode:67404352 硬链接:1 权限:(0670/-rw-rwx---) Uid:( 14/ ftp) Gid:( 50/ ftp) 环境:system_u:object_r:admin_home_t:s0 最近访问:2016-12-06 20:36:13.086316361 +0800 最近更改:2016-11-01 22:58:52.158040304 +0800 最近改动:2016-12-06 21:26:25.225548862 +0800 创建时间:-
file
file [option] filename
查看文件属性类型
option
-L 查看软连接文件对应的源文件类型
示例:查看文件anconda-ks.cfg
[root@localhost ~]# file anaconda-ks.cfg anaconda-ks.cfg: ASCII text
文件查找
locate
locate [option] pattern
基于 /var/lib/slocate/slocate.db内的数据查找系统中的匹配关键字的文件或目录(使用update命令可更新该数据库)
option
-b 只查找基名匹配的文件或目录
示例:查找文件名中包含anac的文件或目录
[root@localhost ~]# locate -b anac /etc/anacrontab /etc/cron.hourly/0anacron /etc/selinux/targeted/modules/active/modules/anaconda.pp /root/anaconda-ks.cfg /usr/sbin/anacron /usr/share/anaconda
find
find [options] [查找起始路径] [查找条件] [找到后的操作]
实时查找当前系统中匹配的文件或目录(此命令较为复杂,此刻只做简单示范)
示例:查找文件名中包含anac的文件或目录
[root@localhost ~]# find / -name anac* /root/anaconda-ks.cfg
命令执行返回值
linux中命令执行后的状态返回值保存在bash的$?变量中,可在命令执行后执行echo $? 命令来查看该值。
示例,查看上一个命令的命令执行返回值
[root@localhost ~]# find / -name anac* /root/anaconda-ks.cfg [root@localhost ~]# echo $? 0
该值为0 命令执行成功
1 命名执行错误
127 命令不存在
命令行展开
linux命令行中可使用{}对列表进行承载,并将其展开为多个路径
示例1:创建/tmp目录下的:a_c, a_d, b_c, b_d
[root@localhost ~]# mkdir /tmp/{a,c}_{b,d} [root@localhost ~]# ls /tmp/ a_b a_d c_b c_d
示例2 :创建/tmp/mylinux目录下的:
mylinux/
├── bin
├── boot
│ └── grub
├── dev
├── etc
│ ├── rc.d
│ │ └── init.d
│ └── sysconfig
│ └── network-scripts
├── lib
│ └── modules
├── lib64
├── proc
├── sbin
├── sys
├── tmp
├── usr
│ └── local
│ ├── bin
│ └── sbin
└── var
├── lock
├── log
└── run
[root@localhost ~]# mkdir -p /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,user/local/{bin,sbin},var/{lock,log,run}} [root@localhost ~]# tree /tmp/mylinux/ /tmp/mylinux/ ├── bin ├── boot │ └── grub ├── dev ├── etc │ ├── rc.d │ │ └── init.d │ └── sysconfig │ └── network-scripts ├── lib │ └── modules ├── lib64 ├── proc ├── sbin ├── sys ├── tmp ├── user │ └── local │ ├── bin │ └── sbin └── var ├── lock ├── log └── run
命令别名使用
alias
linux中可使用alias定义一个命令的别名,常用来讲一个复杂命名用一个简单别名的方式进行使用,此方法定义的别名只在当前shell中生效,如果需要在全局或者重启服务器依然生效需要将该命令声明为环境变量并写入/etc/bashrc 中。
alias new_name='command option'
示例:给命令 ls -al 定义一个别名 lsl
[root@localhost ~]# alias lsl='ls -ll' [root@localhost ~]# lsl total 28 -rwxr-xr-x 1 root root 271 Dec 24 11:18 1.sh -rw-r--r-- 1 root root 72 Dec 24 12:00 2.sh -rw-r--r-- 1 root root 90 Dec 24 12:08 3.sh -rw-r--r-- 1 root root 0 Feb 1 15:54 4 -rwxr-xr-x 1 root root 135 Dec 24 12:22 4.sh -rw-------. 1 root root 932 Oct 27 18:30 anaconda-ks.cfg -rw-r--r-- 1 root root 465 Dec 24 12:19 fstab -rw-r--r-- 1 root root 1040 Dec 24 12:19 passwd1
命令执行结果引用
linux中有两种方式可直接引用命令执行结果
1、 在反引号中执行命令 `command`
2、$(command)
示例:显示当前用户家目录的文件
[root@localhost ~]# echo `ls` 1.sh 2.sh 3.sh 4 4.sh anaconda-ks.cfg fstab passwd1 [root@localhost ~]# echo $(ls) 1.sh 2.sh 3.sh 4 4.sh anaconda-ks.cfg fstab passwd1
linux系统中的时间
date
用于显示当前系统的时间
date "+option"
option
%Y : 完整年份 (0000-9999)
%m : 月份 (01-12)
%d : 日 (01-31)
%H : 小时(00-23)
%M : 分钟(00-59)
%T : 直接显示时间 (24 小时制)
%S : 秒(00-60)
%s : 时间戳(从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数)
示例:在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。
[root@localhost ~]# touch /tmp/tfile-$(date "+%Y-%m-%d-%H-%M-%S") [root@localhost ~]# ls /tmp/ tfile-2017-02-01-16-59-50
bash中的特殊符号
linux中有一些特殊符号在使用中有特殊意义
* 通配符,代表任意字符(0到多个)
? 通配符,代表一个字符
# 注释
/ 跳转符号,将特殊字符或通配符还原成一般符号
| 分隔两个管线命令的界定
; 连续性命令的界定
~ 用户的根目录
$ 变量前需要加的变量值
! 逻辑运算中的"非"(not)
/ 路径分隔符号
>, >> 输出导向,分别为"取代"与"累加"
' 单引号,不具有变量置换功能
" 双引号,具有变量置换功能
` quote符号,两个“中间为可以先执行的指令
() 中间为子shell的起始与结束
[] 中间为字符组合
[:space:] 所有空白字符
[:alnum:]:字母和数字
[:alpha:]:字母 (包含大小写)
[:cntrl:]:控制(非打印)字符
[:digit:]:数字
[:graph:]:图形字符
[:lower:]:小写字母
[:print:]:可打印字符
[:punct:]:标点符号
[:space:]:空白字符
[:upper:]:大写字母
[:xdigit:]:十六进制字符
[^] 对中间字符组合取反
{} 中间为命令区块组合
示例1:显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录。
ls -d /var/l*[[:digit:]]*[[:lower:]] /var/l2a
示例2:显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。
[root@localhost ~]# ls /etc/[0-9]*[^0-9] /etc/12d
示例3:显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录。
[root@localhost ~]# ls /etc/[^[:alpha:]][[:alpha:]]* /etc/5a2345 /etc/5awww
示例4:复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。
[root@localhost ~]# cp -a /etc/p*[^[:digit:]] /tmp/mytest1/ [root@localhost ~]# ls /tmp/mytest1/ pam.d passwd passwd- pki plymouth pm popt.d postfix ppp prelink.conf.d printcap profile profile.d protocols python
示例5:复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录
[root@localhost ~]# cp -a /etc/*.d /tmp/mytest2 [root@localhost ~]# ls /tmp/mytest2 bash_completion.d depmod.d init.d modules-load.d prelink.conf.d rc2.d rc6.d statetab.d xinetd.d binfmt.d dnsmasq.d ld.so.conf.d my.cnf.d profile.d rc3.d rc.d sudoers.d yum.repos.d chkconfig.d dracut.conf.d logrotate.d pam.d rc0.d rc4.d rsyslog.d sysctl.d cron.d grub.d modprobe.d popt.d rc1.d rc5.d rwtab.d tmpfiles.d
示例6:复制/etc/目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中。
[root@localhost ~]# cp -a /etc/[l,m,n]*.conf /tmp/mytest3 [root@localhost ~]# ls /tmp/mytest3 ld.so.conf libaudit.conf libuser.conf locale.conf logrotate.conf man_db.conf mke2fs.conf nsswitch.conf
原创文章,作者:胡安慧,如若转载,请注明出处:http://www.178linux.com/67294