Linux常用命令详解

目录

cp 复制命令

tar 压缩命令

split 切分文件命令

scp 数据传输命令

df 查看硬盘空间状态

du 查看指定文件夹

wc 统计命令

cp 复制命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
在linux中怎样用命令完全拷贝一个目录下的所有文件(包括隐藏文件以及文件夹)到另外一个目录下,并且使得被复制的所有文件的属性等完全保持不变? 注意,连原来的文件夹中所有的文件的属性、链接等都不能更改。也就是说,要建立原来文件夹的一份一模一样的拷贝!&n

在linux中怎样用命令完全拷贝一个目录下的所有文件(包括隐藏文件以及文件夹)到另外一个目录下,并且使得被复制的所有文件的属性等完全保持不变?
注意,连原来的文件夹中所有的文件的属性、链接等都不能更改。
也就是说,要建立原来文件夹的一份一模一样的拷贝!

# cp -avx /home/* /mnt/newhome

功能: 复制文件或目录
说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息
参数:
-a 或 --archive 此参数的效果和同时指定"-dpR"参数相同
-b 或 --backup 删除、覆盖目的文件先备份,备份的文件或目录亦建立为符号链接,并指向源文件或目录链接的源文件或目录。假如没有加上这个参数,在复制过程中若遇到符号链接,则会直接复制源文件或目录
-f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
-i 或 --interactive 覆盖文件之前先询问用户
-l 或 --link 对源文件建立硬链接,而非复制文件
-p 或 --preserve 保留源文件或目录的属性,包括所有者、所属组、权限与时间
-P 或 --parents 保留源文件或目录的路径,此路径可以是绝对路径或相对路径,且目的目录必须已经丰在
-r 递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理
-R 或 --recursive 递归处理,将指定目录下的文件及子目录一并处理
-s 或 --symbolic-link 对源文件建立符号链接,而非复制文件
-S <备份字尾字符串> 或 --suffix=<备份字尾字符串> 用"-b"参数备份目的文件后,备份文件的字尾会被加上一个备份字符串。默认的备份字尾符串是符号"~"
-u 或 --update 使用这项参数之后,只会在源文件的修改时间(Modification Time)较目的文件更新时,或是名称相互对应的目的文件并不存在,才复制文件
-v 或 --verbose 显示执行过程
-V <备份方式> 或 --version-control=<备份方式> 指定当备份文件时,备份文件名的命名方式,有以下3种:
1.numbered或t, 将使用备份编号,会在字尾加上~1~字符串,其数字编号依次递增
2.simple或never 将使用简单备份,默认的备份字尾字符串是~, 也可通过-S来指定
3.existing或nil将使用当前方式,程序会先检查是否存在着备份编号,若有则采用备份编号,若无则采用简单备份
-x 或 --one-file-system 复制的文件或目录存放的文件系统,必须与cp指令执行时所处的文件系统相同,否则不复制,亦不处理位于其他分区的文件
--help 显示在线帮助
--sparse=<使用时机> 设置保存希疏文件的时机
--version 显示版本

示例:
.复制文件,只有源文件较目的文件的修改时间新时,才复制文件
cp -u -v file1 file2

.将文件file1复制成文件file2
cp file1 file2

.采用交互方式将文件file1复制成文件file2
cp -i file1 file2

.将文件file1复制成file2,因为目的文件已经存在,所以指定使用强制复制的模式
cp -f file1 file2

.将目录dir1复制成目录dir2
cp -R file1 file2

.同时将文件file1、file2、file3与目录dir1复制到dir2
   cp -R file1 file2 file3 dir1 dir2

.复制时保留文件属性
cp -p a.txt tmp/

.复制时保留文件的目录结构
cp -P /var/tmp/a.txt ./temp/

.复制时产生备份文件
cp -b a.txt tmp/

.复制时产生备份文件,尾标 ~1~格式
cp -b -V t a.txt /tmp

.指定备份文件尾标
cp -b -S _bak a.txt /tmp

tar 压缩命令

分卷压缩

举例:将10G大小的log文件2017.log打包压缩并分割成多个100m的文件

1
2
3
4
5
6
# 分卷压缩gz
# tar zcf - 2017.log |split -d -b 100m - logs.tar.gz.
# 生成文件: logs.tar.gz.00 logs.tar.gz.01
# 分卷压缩bz2
# tar jcf - 2017.log |split -d -b 100m - logs.tar.bz2.
# 生成文件: logs.tar.bz2.00 logs.tar.bz2.01

最后要提醒但是那两个”-”不要漏了,那是tar的ouput和split的input的参数

合并分卷解压缩

1
2
3
4
# 解压gz分卷
# cat logs.tar.gz* | tar zx
# 解压bz2分卷
# cat logs.tar.gz* | tar jx

tar 命令简述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
参数:
-j : 通过bzip2进行压缩\解压文件*.tar.bz2
-z : 通过gzip进行压缩\解压文件*.tar.gz
-c : 新建打包文件,可搭配-v来查看过程中被打包的文件名
-t : 查看打包文件的内容有哪些文件名
-x : 解压打包文件.
-v : 在压缩/解压过程中,显示正在处理的文件名
-f : -f后面接被处理的文件名
-C(大写) : 后接目录
-p : 保留备份数据的原本权限与属性
-P : 保留绝对路径,即允许备份数据中含有根目录存在的目录(危险)
常用:欲压缩或打包的文件或目录(/*)
bzip2压缩命令:tar -jcv -f boot.tar.bz2 /boot
gzip压缩命令 :tar -zcv -f boot.tar.gz /boot
bzip2查看命令:tar -jtv -f /dir/*.tar.bz2
gzip 查看命令:tar -ztv -f /dir/*.tar.gz
bzip2解压缩命令:tar -jxv -f /dir/*.tar.bz2 -C 欲解压缩的目录
gzip解压缩命令 :tar -zxv -f /dir/*.tar.gz 欲解压缩的目录
特殊:
备份重要的系统数据,包括其完整的权限(-p参数): tar -jcvp -f /root/etc.tar.bz2 /etc
只解压压缩文件内的其中一个文件: tar -jxv -f /root/etc.tar.bz2 etc/shadow
打包目录,但不含该目录下的某些文件(--exclude):
tar -jcv -f /root/system.tar.bz2 --exclude=root/etc* --exclude=root/system.tar.bz2 /etc /root
仅备份比某个时刻还要新的文件:
备份 :tar -jcv -f /root/etc.newer.2011.02.16.tar.bz2 –newer-mtime='2011-02-16' /etc/*
查看备份:tar -jtv -f etc.newer.2011.02.16.tar.bz2
注意:在备份文件的时候也备份它的父目录

split 切分文件命令

功能说明:切割文件。
语法:

1
split [--help][--version][-<行数>][-b <字节>][-C <字节>][-l <行数>][要切割的文件][输出文件名

补充说明:split可将文件切成较小的文件,预设每1000行会切成一个小文件。
参数:
-<行数>或-l<行数> 指定每多少行就要切成一个小文件。
-b<字节> 指定每多少字就要切成一个小文件。支持单位:m,k
-C<字节> 与-b参数类似,但切割时尽量维持每行的完整性。
–help 显示帮助。
–version 显示版本信息。
[输出文件名] 设置切割后文件的前置文件名,split会自动在前置文件名后再加上编号。
例子:

1.按100KB的测试文件拆分

1
2
3
# split -b 10k date.file
# ls
date.file xaa xab xac xad xae xaf xag xah xai xaj

件被分割成多个带有字母的后缀文件,如果想用数字后缀可使用-d参数,同时可以使用-a length来指定后缀的长度:

1
2
3
# split -b 10k date.file -d -a 3
# ls
date.file x000 x001 x002 x003 x004 x005 x006 x007 x008 x009

为分割后的文件指定文件名的前缀:

1
2
3
# split -b 10k date.file -d -a 3 split_file
# ls
date.file split_file000 split_file001 split_file002 split_file003 split_file004 split_file005 split_file006 split_file007 split_file008 split_file009

2.按行数拆分

1
# split -l 10 date.file

scp 数据传输命令

语法:

1
2
3
scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
[-l limit] [-o ssh_option] [-P port] [-S program]
[[user@]host1:]file1 [...] [[user@]host2:]file2

参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-1: 强制scp命令使用协议ssh1
-2: 强制scp命令使用协议ssh2
-4: 强制scp命令只使用IPv4寻址
-6: 强制scp命令只使用IPv6寻址
-B: 使用批处理模式(传输过程中不询问传输口令或短语)
-C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
-p:保留原文件的修改时间,访问时间和访问权限。
-q: 不显示传输进度条。
-r: 递归复制整个目录。
-v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
-c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
-F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。
-i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
-l limit: 限定用户所能使用的带宽,以Kbit/s为单位。
-o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式,
-P port:注意是大写的P, port是指定数据传输用到的端口号
-S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。

使用

从远端下载到本地

注意: 秘钥文件权限必须是600

1
2
3
4
格式:
scp -r -i [秘钥文件路径] -P [远端端口] -l [限速速度(kb/s)] [远端用户]@[远端IP]:[远端文件] [本地路径]
例如:
scp -r -v -p -i /home/ubuntu/file/id_rsa_2048 -P 22 -l 1000 [用户名]@[IP]:/home/xxx/windowsfonts /home/ubuntu/file

从本地推送到远端

1
2
3
4
格式:
scp -r -i [秘钥文件路径] -P [远端端口] -l [限速速度(kb/s)] [本地上传文件路径] [远端用户]@[远端IP]:[远端保存路径]
例如:
scp -i /home/ubuntu/file/id_rsa_2048 -P 22 -l 1000 /home/ubuntu/file/TeamCity-2020.1.5.tar.gz [用户名]@[IP]:/home/xxx

即从远端下载数据可以用如下命令

1
echo [秘钥文件密码] | scp -i /home/ubuntu/file/id_rsa_2048 -P 22 -l 1000 /home/ubuntu/file/TeamCity-2020.1.5.tar.gz [用户名]@[IP]:/home/xxx

前提:

设置时区:

1
sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

df 查看硬盘空间状态

df -h

1
2
3
4
5
6
7
8
9
10
11
12
Filesystem      Size  Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 786M 84M 702M 11% /run
/dev/vda1 50G 37G 9.7G 80% /
tmpfs 3.9G 24K 3.9G 1% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
tmpfs 786M 0 786M 0% /run/user/500
/dev/vdb 99G 60M 94G 1% /var/www/Daily_Backup
172.17.0.12:/ 1.1T 498G 563G 47% /var/www/Cloud_CFS
tmpfs 786M 0 786M 0% /run/user/1009

du 查看指定文件夹

参数详解

  • -s:对每个Names参数只给出占用的数据块总数。
  • -a:递归地显示指定目录中各文件及子目录中各文件占用的数据块数。若既不指定-s,也不指定-a,则只显示Names中的每一个目录及其中的各子目录所占的磁盘块数。
  • -b:以字节为单位列出磁盘空间使用情况(系统默认以k字节为单位)。
  • -k:以1024字节为单位列出磁盘空间使用情况。
  • -c:最后再加上一个总计(系统默认设置)。
  • -l:计算所有的文件大小,对硬链接文件,则计算多次。
  • -x:跳过在不同文件系统上的目录不予统计。
  • -h:以K,M,G为单位,提高信息的可读性。

查看指定文件夹大小

sudo du -sh /var/www/

1
511G	/var/www/

查看当前目录大小

du -sh

1
1.8G	.

指定深度

du -h / --max-depth=1

排序

du -h / --max-depth=1|sort -n

前几个

du -h / --max-depth=1|sort -n|head -5

根目录文件夹大小

sudo du -sh /*

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
16M	/bin
751M /boot
4.0K /data
0 /dev
160M /etc
1.8G /home
0 /initrd.img
0 /initrd.img.old
3.5G /lib
4.0K /lib64
16K /lost+found
8.0K /media
4.0K /mnt
47M /opt
0 /proc
199M /root
84M /run
13M /sbin
4.0K /spare
4.0K /srv
0 /sys
1.7G /tmp
3.6G /usr
523G /var
0 /vmlinuz
0 /vmlinuz.old

wc 统计命令

统计文件个数

1
2
ls -lR | grep "^-" |wc -l
ls -lR | grep "^d" | wc -l