文件相关常用命令示例
cd /home #进入 '/ home' 目录'
cd .. #返回上一级目录
cd ../.. #返回上两级目录
cd #进入个人的主目录
cd ~user1 #进入个人的主目录
cd - #返回上次所在的目录
pwd #显示工作路径
ls #查看目录中的文件
ls -F #查看目录中的文件
ls -l #显示文件和目录的详细资料
ls -a #显示隐藏文件
ls *[0-9]* #显示包含数字的文件名和目录名
tree #显示文件和目录由根目录开始的树形结构(1)
lstree #显示文件和目录由根目录开始的树形结构(2)
mkdir dir1 #创建一个叫做 'dir1' 的目录'
mkdir dir1 dir2 #同时创建两个目录
mkdir -p /tmp/dir1/dir2 #创建一个目录树
rm -f file1 #删除一个叫做 'file1' 的文件'
rmdir dir1 #删除一个叫做 'dir1' 的目录'
rm -rf dir1 #删除一个叫做 'dir1' 的目录并同时删除其内容
rm -rf dir1 dir2 #同时删除两个目录及它们的内容
mv dir1 new_dir #重命名/移动 一个目录
cp file1 file2 #复制一个文件
cp dir/* . #复制一个目录下的所有文件到当前工作目录
cp -a /tmp/dir1 . #复制一个目录到当前工作目录
cp -a dir1 dir2 #复制一个目录
ln -s file1 lnk1 #创建一个指向文件或目录的软链接
ln file1 lnk1 #创建一个指向文件或目录的物理链接
touch -t 0712250000 file1 #修改一个文件或目录的时间戳 - (YYMMDDhhmm)
file file1 outputs the mime type of the file as text
iconv -l #列出已知的编码
iconv -f fromEncoding -t toEncoding inputFile > outputFile creates a new from the given input file by assuming it is encoded in fromEncoding and converting it to toEncoding.
find . -maxdepth 1 -name *.jpg -print -exec convert "{}" -resize 80x60 "thumbs/{}" \; batch resize files in the current directory and send them to a thumbnails directory (requires convert from Imagemagick)
vi或vim命令
vi编辑器有三种模式,命令行模式、编辑模式、底行模式。
vi 文件名进入命令行模式,Insert进入编辑模式,编辑完成Esc退出编辑模式,:wq进入底行模式并保存修改,:q直接退出保存。这个命令使用非常频繁,我们会专门用一个专题来介绍该命令。
dos2unix命令
dos2unix命令用于将纯文本文件从DOS或者Mac格式转换为Unix。DOS下的文本文件是以\r\n作为换行符,而Unix下的文本文件是以\n作为换行符。
默认系统是没有安装这个命令,需要用户自行安装:
[root@centos7 ~]# dos2unix test.txt
-bash: dos2unix: command not found
#CentOS/RHEL 安装
[root@centos7 ~]# yum install -y dos2unix
#Debian/Ubuntu 安装
[root@centos7 ~]# apt-get install dos2unix
语法格式
dos2unix [选项] [文件]
dos2unix [OPTION] [FILE]
选项说明
-k #输出文件的日期不变
-q #安静模式
-V #查看版本
-c #转换模式,模式有:ASCII, 7bit, ISO, Mac, 默认是:ASCII。
-o #写入到源文件
-n #写入到新文件
应用举例
最简单的用法
[root@centos7 ~]# dos2unix test.txt
dos2unix: converting file test.txt to Unix format ...
一次转换多个文件(注:也可以加上 -o 参数,也可以不加,效果一样)
[root@centos7 ~]# dos2unix test.txt mingongge.file
dos2unix: converting file test.txt to Unix format ...
dos2unix: converting file mingongge.file to Unix format ...
[root@centos7 ~]# dos2unix -o test.txt mingongge.file
dos2unix: converting file test.txt to Unix format ...
dos2unix: converting file mingongge.file to Unix format ..
转换时保持源文件不变(默认是直接修改源文件),可以使用 -n 参数
[root@centos7 ~]# ll test.txt
-rw-r--r-- 1 root root 140 Jan 16 11:32 test.txt
[root@centos7 ~]# dos2unix -n test.txt dos_test.txt
dos2unix: converting file test.txt to file dos_test.txt in Unix format ...
[root@centos7 ~]# ll test.txt
-rw-r--r-- 1 root root 140 Jan 16 11:32 test.txt
[root@centos7 ~]# ll dos_test.txt
-rw-r--r-- 1 root root 140 Jan 16 11:34 dos_test.txt
如果要保持文件时间戳不变,加上 -k 参数
[root@centos7 ~]# ll
total 21892
-rw-r--r-- 1 root root 140 Jan 16 11:34 dos_test.txt
-rw-r--r-- 1 root root 0 Jan 16 11:32 mingongge.file
drwxr-xr-x 3 root root 210 Jan 16 10:19 testdir
-rw-r--r-- 1 root root 140 Jan 16 11:32 test.txt
[root@centos7 ~]# dos2unix dos_test.txt
dos2unix: converting file dos_test.txt to Unix format ...
[root@centos7 ~]# ll
total 21892
-rw-r--r-- 1 root root 140 Jan 16 11:36 dos_test.txt
-rw-r--r-- 1 root root 0 Jan 16 11:32 mingongge.file
drwxr-xr-x 3 root root 210 Jan 16 10:19 testdir
-rw-r--r-- 1 root root 140 Jan 16 11:32 test.txt
#可以看出默认是改变了文件的时间戳信息
[root@centos7 ~]# dos2unix -k test.txt
dos2unix: converting file test.txt to Unix format ...
[root@centos7 ~]# dos2unix -k dos_test.txt mingongge.file
dos2unix: converting file dos_test.txt to Unix format ...
dos2unix: converting file mingongge.file to Unix format ...
[root@centos7 ~]# ll
total 21892
-rw-r--r-- 1 root root 140 Jan 16 11:36 dos_test.txt
-rw-r--r-- 1 root root 0 Jan 16 11:32 mingongge.file
drwxr-xr-x 3 root root 210 Jan 16 10:19 testdir
-rw-r--r-- 1 root root 140 Jan 16 11:32 test.txt
cp命令
cp命令用来复制文件或目录。cp命令用来将一个或多个文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。
语法格式
cp [选项] [源文件或目录] [目标文件或目录]
cp [option] source destination
cp [option] source directory
选项说明
-a:#此参数的效果和同时指定"-dpR"参数相同;
-d:#当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;
-f:#强行复制文件或目录,不论目标文件或目录是否已存在;
-i:#覆盖既有文件之前先询问用户;
-l:#对源文件建立硬连接,而非复制文件;
-p:#保留源文件或目录的属性;
-R/r:#递归处理,将指定目录下的所有文件与子目录一并处理;
-s:#对源文件建立符号连接,而非复制文件;
-u:#使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件;
-S:#在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀;
-b:#覆盖已存在的文件目标前将目标文件备份;
-v:#详细显示命令执行的操作。
应用实例
1. 复制文件
# b.txt不存在,创建b.txt文件
cp /usr/app/a.txt /usr/mingongge/b.txt
# b.sh不存在,创建b.sh文件,类似改名功能
cp /usr/app/a.txt /usr/mingongge/b.sh
# abc不存在,创建abc文件
cp /usr/app/a.txt /usr/mingongge/abc
2. 将目录/usr/app中的以s开头的所有.x结尾的文件复制到目录/usr/mingongge中。
$ cp -i /usr/app s*.x /usr/mingongge
3. cp命令复制文件时,如果在目标目录下有同名文件时,我们需要通过输入Y来进行确认操作。
# 复制目录mmm下所有到/MMM目录下,这时如果/MMM目录下有和mmm同名的文件,需要按Y来确认,且会略过mmm目录下的子目录。
$cp mmm/* /MMM
# 也需要输入Y来确认操作,但是没有忽略子目录。
$cp -r mmm/* /MMM
# 也需要输入Y来确认操作,并且把mmm目录以及子目录和文件属性也传递到了/MMM。
$cp -r -a mmm/* /MMM
# 不会提示需要输入Y来确认操作、传递了目录属性、没有略过目录。
$\cp -r -a mmm/* /MMM
cp命令复制说明
如果源是一个文件,目标也是一个文件,则会覆盖这个目标文件
如果源是一个文件,目标文件不存在,则创建新文件
如果源是一个文件,目标是一个目录,则直接复制此文件到目标目录下
如果源是多个文件,目标是一个文件,复制失败
如果源是多个文件,目标是目录,则直接复制所有文件到目标目录下
如果源是多个文件,目标目录不存在,复制失败
如果源是一个目录,目标是一个文件且存在,复制失败
如果源是一个目录,目标是目录不存在,则会创建新目录
如果源是一个目录,目标是目录且存在,则会复制源目录至目标目录中,成为子目录,且保持原名
scp命令
scp命令是secure copy命令的简写,用于不同主机之间复制文件。
scp命令常用于在Linux系统下两个不同主机之间传输文件,其功能与cp命令相似,但是不同是,cp命令只能用于在本机环境下传输或复制拷贝文件,scp命令可以跨越不同主机,而scp传输文件是加密的。
scp 它使用ssh进行数据传输,并使用与ssh相同的身份验证并提供相同的安全性,scp 会要求输入密码或其它方式(设置SSH密钥)以进行身份验证。
语法格式
scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
[-l limit] [-o ssh_option] [-P port] [-S program]
[[user@]host1:]file1 ... [[user@]host2:]file2
选项说明
-1 #指定使用ssh协议版本为1
-2 #指定使用ssh协议版本为2
-3 #指定两个主机之间的副本通过本地主机传输
-4 #指定使用ipv4
-6 #指定使用ipv6
-B #使用批处理模式
-C #使用压缩模式传输文件
-F #使用指定的ssh配置文件
-i identity_file #从指定文件中读取传输时使用的密钥文件
-l #宽带限制
-o #使用的ssh选项
-P #远程主机的端口号
-p #保留文件的最后修改时间,最后访问时间和权限模式
-q #不输出复制进度信息
-r #以递归方式复制
-S program #指定加密传输时所使用的程序
-v #显示传输过程的详细信息
应用举例
1)从远程服务器复制到本地服务器
#复制文件
scp root@192.168.1.2:/download/soft/nginx.tar.gz /download/soft/
#复制目录
scp -r root@192.168.1.2:/app/soft/mongodb /app/soft/
2)以mingongge用户身份将远程主机mingongge.com上的/home/mingongge/backup.tar.gz 文件传送到当前工作目录下,并将传输限制为每秒 80 KB
scp -l 80 mingongge@mingongge.com:/home/mingongge/backup.tar.gz
#也可以写成如下
scp -l 80 mingongge@mingongge.com:/home/mingongge/backup.tar.gz ./
3)使用指定的端口号传输文件
scp -P 9999 root@192.168.1.2:/download/soft/nginx.tar.gz /download/soft/
4)查看详细的传输过程
[root@centos7 ~]# scp -v root@192.168.1.100:/root/nginxWebUI-1.3.5.jar /root/download/
Executing: program /usr/bin/ssh host 192.168.1.100, user root, command scp -v -f /root/nginxWebUI-1.3.5.jar
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 58: Applying options for *
debug1: Connecting to 192.168.1.100 [192.168.1.100] port 22.
debug1: Connection established.
debug1: permanently_set_uid: 0/0
debug1: key_load_public: No such file or directory
debug1: identity file /root/.ssh/id_rsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /root/.ssh/id_rsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /root/.ssh/id_dsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /root/.ssh/id_dsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /root/.ssh/id_ecdsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /root/.ssh/id_ecdsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /root/.ssh/id_ed25519 type -1
debug1: key_load_public: No such file or directory
debug1: identity file /root/.ssh/id_ed25519-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.4
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.4
debug1: match: OpenSSH_7.4 pat OpenSSH* compat 0x04000000
debug1: Authenticating to 192.168.1.100:22 as 'root'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: curve25519-sha256
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
debug1: kex: curve25519-sha256 need=64 dh_need=64
debug1: kex: curve25519-sha256 need=64 dh_need=64
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:GqOqgdhVZyEtg/wSM8l5YB+Y6GO8K3Ii7OFsKW9R2n0
The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ECDSA key fingerprint is SHA256:GqOqgdhVZyEtg/wSM8l5YB+Y6GO8K3Ii7OFsKW9R2n0.
ECDSA key fingerprint is MD5:cc:4b:7d:b6:59:0f:77:83:a9:a5:32:70:4e:87:0d:41.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.100' (ECDSA) to the list of known hosts.
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_EXT_INFO received
debug1: kex_input_ext_info: server-sig-algs=<rsa-sha2-256,rsa-sha2-512>
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Next authentication method: gssapi-keyex
debug1: No valid Key exchange context
debug1: Next authentication method: gssapi-with-mic
debug1: Unspecified GSS failure. Minor code may provide more information
No Kerberos credentials available (default cache: KEYRING:persistent:0)
debug1: Unspecified GSS failure. Minor code may provide more information
No Kerberos credentials available (default cache: KEYRING:persistent:0)
debug1: Next authentication method: publickey
debug1: Trying private key: /root/.ssh/id_rsa
debug1: Trying private key: /root/.ssh/id_dsa
debug1: Trying private key: /root/.ssh/id_ecdsa
debug1: Trying private key: /root/.ssh/id_ed25519
debug1: Next authentication method: password
root@192.168.1.100's password:
debug1: Authentication succeeded (password).
Authenticated to 192.168.1.100 ([192.168.1.100]:22).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: network
debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8
debug1: Sending command: scp -v -f /root/nginxWebUI-1.3.5.jar
Sending file modes: C0644 36196329 nginxWebUI-1.3.5.jar
Sink: C0644 36196329 nginxWebUI-1.3.5.jar
nginxWebUI-1.3.5.jar 100% 35MB 12.1MB/s 00:02
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: client_input_channel_req: channel 0 rtype eow@openssh.com reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
debug1: fd 1 clearing O_NONBLOCK
Transferred: sent 12604, received 36237992 bytes, in 4.3 seconds
Bytes per second: sent 2916.1, received 8384212.5
debug1: Exit status 0
touch命令
touch命令可以创建文件,touch命令也可以用来修改文件时间戳。如果该文件不存在,则创建具有该名称的空文件。
与文件关联的时间戳
Access time #上次读取文件的时间,简称atime
Modification time #最后一次修改文件的内容,简称mtime
Change time #上次更改文件的元数据(称为“状态”)。状态信息包括文件的权限及其时间戳。每当文件发生任何事件时,其状态的至少一个元素都会更改,并且其ctime将设置为当前系统时间。简称ctime
atime和mtime是文件状态元数据的一部分。因此,当更改文件的atime(-a)或mtime(-m)时,其ctime会自动设置为当前时间。无法手动设置 ctime。
命令语法
touch [选项] [文件名]
touch [option] [filename]
选项说明
-a:或--time=atime或--time=access或--time=use #只更改读取时间
-c:或--no-create #不建立任何文件
-d:<时间日期> #更改文件的修改时间,使用指定的日期时间,而非现在的时间
-h,--no-dereference #如果file是符号链接并且指定了此选项,则touch将修改符号链接的时间戳,而不是其引用的文件。 如果未指定此选项,则在进行修改之前触摸将取消引用符号链接。此选项意味着-c:如果文件不
存在,则不会创建任何内容。
-f:#此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题;
-m:或--time=mtime或--time=modify #只更该变动时间;
-r:<参考文件或目录> #把指定文件或目录的日期时间,统统设成和参考文件或目录的日期时间相同;
-t:<日期时间> #使用指定的日期时间,而非现在的时间;
--help: #在线帮助;
--version: #显示版本信息。
应用举例
1. 创建一个名为abc.txt的文件
touch abc.txt
2.指定文件时间与参考文件相同
touch -r
3. 更改文件为指定的时间
touch -t 201608012234.55[yyyymmddhhmm.ss] abc.txt
4.创建一个名为temp的文件
touch temp
5.复制文件访问时间,把另一个文件的访问时间直接赋予到新创建的文件上
[root@centos7 testdir]# touch -r testfile filetest
[root@centos7 testdir]# ls -l
total 0
-rw-r--r-- 1 root root 0 Feb 25 2021 filetest
-rw-r--r-- 1 root root 0 Feb 25 2021 testfile
6.修改文件的atime与mtime
[root@centos7 testdir]# touch -d "25 Feb" testfile
[root@centos7 testdir]# ls -l
total 0
-rw-r--r-- 1 root root 0 Feb 25 2021 testfile
7.如果创建文件时,此文件存在,则会修改这个文件的其访问,修改和更改时间(atime,mtime和ctime)设置为当前系统时间。
[root@centos7 testdir]# date
Sat Jan 2 07:57:00 EST 2021
[root@centos7 testdir]# touch testfile
[root@centos7 testdir]# ls -l
total 0
-rw-r--r-- 1 root root 0 Jan 2 07:57 testfile
ln命令
ln命令用于创建链接文件,ln命令默认是创建硬链接,创建软链接则需要加上-s选项
ln 源文件 目标文件 创建硬链接文件
ln -s 源文件 目标文件 创建软链接文件
硬链接文件是指通过索引节点来进行链接,在Linux系统中多个文件同时指向同一个索引节点,这种情况下的文件被称为硬链接文件。
软链接文件也称做符号链接(同Windows系统中快捷方式)。实际上它是一个文本文件,文本文件里存储着指向源文件链接的位置信息。
命令格式
ln [选项] [链接文件名]
ln [OPTION] [LINKNAME]
选项说明
-b #创建备份文件
-f #强行删除任何已存在的目标文件
-i #覆盖现有文件前先询问用户
-s #给一个文件创建软链接
-v #打印每个链接文件的名称
--help #打印帮助信息后退出
--version #打印版本信息后退出
应用举例
#在当前目录中创建硬链接
[root@centos7 testdir]# ln test2.txt test3
[root@centos7 testdir]# ls -li test*
50342754 -rw-r--r-- 2 root root 6 Jan 16 02:47 test2.txt
50342754 -rw-r--r-- 2 root root 6 Jan 16 02:47 test3
#从结果可以看出硬链接文件与源文件的inode号一样
#在当前目录中创建软链接
[root@centos7 testdir]# ln -s test2.txt test4
[root@centos7 testdir]# ls -li test*
50342754 -rw-r--r-- 2 root root 6 Jan 16 02:47 test2.txt
50342754 -rw-r--r-- 2 root root 6 Jan 16 02:47 test3
50342753 lrwxrwxrwx 1 root root 9 Jan 16 03:57 test4 -> test2.txt
#从结果可以看出,软链接与源文件的inode号不一样
#创建源文件test2.txt的软件链接文件名为test3,如果test3存,则将其改名为test3~
[root@centos7 testdir]# ln -s -b test2.txt test3
[root@centos7 testdir]# ls -li test*
50342754 -rw-r--r-- 2 root root 6 Jan 16 02:47 test2.txt
50342767 lrwxrwxrwx 1 root root 9 Jan 16 04:06 test3 -> test2.txt
50342754 -rw-r--r-- 2 root root 6 Jan 16 02:47 test3~
50342753 lrwxrwxrwx 1 root root 9 Jan 16 03:57 test4 -> test2.txt
split命令
在 Linux 系统下使用 split 命令进行大文件切割很方便
命令语法
-a: #指定输出文件名的后缀长度(默认为2个:aa,ab...)
-d: #指定输出文件名的后缀用数字代替
-l: #行数分割模式(指定每多少行切成一个小文件;默认行数是1000行)
-b: #二进制分割模式(支持单位:k/m)
-C: #文件大小分割模式(切割时尽量维持每行的完整性)
split [-a] [-d] [-l <行数>] [-b <字节>] [-C <字节>] [要切割的文件] [输出文件名]
使用实例
# 行切割文件
$ split -l 300000 users.sql /data/users_
# 使用数字后缀
$ split -d -l 300000 users.sql /data/users_
# 按字节大小分割
$ split -d -b 100m users.sql /data/users_
帮助信息
# 帮助信息
$ split --help
Usage: split [OPTION]... [FILE [PREFIX]]
Output pieces of FILE to PREFIXaa, PREFIXab, ...;
default size is 1000 lines, and default PREFIX is 'x'.
With no FILE, or when FILE is -, read standard input.
Mandatory arguments to long options are mandatory for short options too.
-a, --suffix-length=N generate suffixes of length N (default 2) 后缀名称的长度(默认为2)
--additional-suffix=SUFFIX append an additional SUFFIX to file names
-b, --bytes=SIZE put SIZE bytes per output file 每个输出文件的字节大小
-C, --line-bytes=SIZE put at most SIZE bytes of records per output file 每个输出文件的最大字节大小
-d use numeric suffixes starting at 0, not alphabetic 使用数字后缀代替字母后缀
--numeric-suffixes[=FROM] same as -d, but allow setting the start value
-e, --elide-empty-files do not generate empty output files with '-n' 不产生空的输出文件
--filter=COMMAND write to shell COMMAND; file name is $FILE 写入到shell命令行
-l, --lines=NUMBER put NUMBER lines/records per output file 设定每个输出文件的行数
-n, --number=CHUNKS generate CHUNKS output files; see explanation below 产生chunks文件
-t, --separator=SEP use SEP instead of newline as the record separator; 使用新字符分割
'\0' (zero) specifies the NUL character
-u, --unbuffered immediately copy input to output with '-n r/...' 无需缓存
--verbose print a diagnostic just before each 显示分割进度
output file is opened
--help display this help and exit 显示帮助信息
--version output version information and exit 显示版本信息
The SIZE argument is an integer and optional unit (example: 10K is 10*1024).
Units are K,M,G,T,P,E,Z,Y (powers of 1024) or KB,MB,... (powers of 1000).
CHUNKS may be:
N split into N files based on size of input
K/N output Kth of N to stdout
l/N split into N files without splitting lines/records
l/K/N output Kth of N to stdout without splitting lines/records
r/N like 'l' but use round robin distribution
r/K/N likewise but only output Kth of N to stdout
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Full documentation at: <http://www.gnu.org/software/coreutils/split>
or available locally via: info '(coreutils) split invocation'
cat命令
cat命令用来连接文件内容并打印输出到标准设备上,所以,它常常被用来查看显示文件的内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用。
功能使用
1)显示一个文件的全部内容,cat file_name
2)创建一个文件,cat > file_name
3)合并文件,将几个文件合并到一个文件,cat file1 file2 > file
命令格式
cat [OPTION] FILE
或者我们可以描述为
cat [-AbeEnstTuv] [--help] [--version] fileName
cat file1 从第一个字节开始正向查看文件file1的内容
选项说明
-A, --show-all #等价于 -vET
-b, --number-nonblank #对非空输出行编号,和 -n 相似,只不过对于空白行不编号。
-e #等价于 -vE
-E, --show-ends #在每行结束处显示 $
-n, --number #对输出的所有行编号,由1开始对所有输出的行数编号
-s, --squeeze-blank #有连续两行以上的空白行,就代换为一行的空白行
-t #与 -vT 等价
-T, --show-tabs #将跳格字符显示为 ^I
-u #(被忽略)
-v, --show-nonprinting #使用 ^ 和 M- 引用,除了LFD和TAB之外
使用示例
# 把 textfile1 和 textfile2 的文档内容加上行号(空白行不加)之后将内容附加到 textfile3 文档里
cat -b textfile1 textfile2 >> textfile3
# 清空 /etc/test.txt 文档内容
cat /dev/null > /etc/test.txt
1.输出文件内容
#把 textfile1 的文档内容加上行号后输入 textfile2 这个文档里
cat -n textfile1 > textfile2
[root@localhost ~]# cat abc.txt #输出文件全部内容
1111111111
2222222222
3333333333
[root@localhost ~]# cat -n abc.txt #输出全部内容,并显示行号
1 1111111111
2
3
4 2222222222
5
6 3333333333
[root@localhost ~]# cat -E abc.txt #以$结束
1111111111$
$
$
2222222222$
$
3333333333$
[root@localhost ~]# cat -s abc.txt #超过二个空行,合并成一个
1111111111
2222222222
3333333333
[root@localhost ~]# cat -ns abc.txt #合并空行,加行号
1 1111111111
2
3 2222222222
4
5 3333333333
2. 从键盘录入内容到文件,回车是保存,退出Ctrl+z
[root@localhost ~]# cat > abc.tx
111111111111111
2233445566778899
0126459fdfdfdkffffkfkfkfkfdkfdkdfkk
^Z
[4]+ Stopped cat > abc.tx
3. 合并文件
[root@localhost ~]# cat abc.tar.gz_?? > abc.tar.gz
#可以用cat命令将多个压缩包合并成一个
4. 追加文件内容
[root@localhost ~]# cat abc.txt
aa
aabb
bbcc
[root@localhost ~]# cat abc.doc
111111111111
222222222222
[root@localhost ~]# cat abc.txt >> abc.doc #将abc.txt内容添加到abc.doc内容后
[root@localhost ~]# cat abc.doc
111111111111
222222222222
aa
aabb
bbcc
5.插入多行内容
[root@localhost ~]# cat >> abc.doc <<EOF
# 将你所要输入的内容插入到文件中,输入EOF即为结束插入,EOF也可以使用其它字符替代。
> 111111111111
> 222222222222
> aa+aabb-bbcc
> EOF
# 插入内容完结后
[root@localhost ~]# cat abc.doc
111111111111
222222222222
aa+aabb-bbcc
6.清空文件内容
[root@localhost ~]# cat abc.doc
111111111111
222222222222
aa+aabb-bbcc
[root@localhost ~]# cat /dev/null > abc.doc
[root@localhost ~]# cat abc.doc
tac命令
tac是cat命令倒过来,用于按相反顺序逐行连接和打印文件内容。
tac [filename]
从最后一行开始反向查看一个文件的内容,tac与cat命令刚好相反,文件内容从最后一行开始显示,可以看出 tac是cat的倒着写。这对于检查按时间顺序排列的日志文件很有用(例如),其中文件的最后一行包含最新的信息。
语法格式
tac [OPTION] ... [FILE] ...
选项说明
-b #在之前而不是之后连接分隔符
-r #将分隔符作为基础正则表达式(BRE)处理
-s #使用STRING作为分隔符代替默认的换行符
--help #显示帮助信息并退出
--version #显示版本信息并退出
应用举例
反向输出一个文件,从最后一行开始到第一行(与cat对比显示)
[root@centos7 ~]# tac test.txt
This is also also a test line
This is also a test line
This is also a test line
This is a test line
This is a test line
This is a test line
[root@centos7 ~]# cat test.txt
This is a test line
This is a test line
This is a test line
This is also a test line
This is also a test line
This is also also a test line
文件描述符
在Linux中0 1 2是一个文件描述符
名称 | 代码 | 操作符 | Java中表示 | Linux下文件描述符(Debian为例) |
---|---|---|---|---|
标准输入(stdin) | 0 | <或<< | System.in | /dev/stdin -> /proc/self/fd/0 -> /dev/pts/0 |
标准输出(stdout) | 1 | >,>>,1>或1>> | System.out | /dev/stdout -> /proc/self/fd/1 -> /dev/pts/0 |
标准错误输出(stderr) | 2 | 2>或2>> | System.err | /dev/stderr -> /proc/self/fd/2 -> /dev/pts/0 |
# 下面两种写法等价
echo "hello" > t.log
echo "hello" 1> t.log
2>&1含义
这个描述符的含义是将标准错误输出重定向到标准输出,符号>&是一个整体,不可分开,分开后就不是上述含义了。比如有些人可能会这么想:2是标准错误输入,1是标准输出,>是重定向符号,那么"将标准错误输出重定向到标准输出"是不是就应该写成"2>1"就行了?是这样吗?如果是尝试过,你就知道2>1的写法其实是将标准错误输出重定向到名为"1"的文件里去了,写成2&>1也是不可以的。