5 种Linux下 删除除指定文件外的所有文件的方法

本文将会讲述Linux系统下通过rm命令删除除指定文件外的其它所有的文件的5中不同的方法。 当我们在当前目录下或者指定目录下,想删除同类文件或者符合同一模式匹配规则的文件,但需要排除其中的某个或多个文件,只是简单的使用rm命令是无法实现。所以我们需要结合其它的linux命令来实现我们的删除文件操作。
下面我们通过5中不同的方法来介绍删除指定文件外的文件的方法:
方法一: 可以先将需要排除的文件,从当前目录中移动到一个临时目录里,然后执行rm命令将其与的文件删除,最后再将刚才移动走的文件从新拷贝回来。
执行的命令如下:

#mv  保留文件 /tmp
# rm –rf  删除文件
#mv  /tmp/保留文件 .

方法二:使用Linux中的通配符来排除保留文件
我们可以使用Linux系统中的通配符 !来排除指定的文件,
比如我们要删除当前目录下除了fio1.txt文件的所有其它文件, 执行下面的命令:

#rm –i  !(fio1.txt)

命令输出如下:

root@devops:~/osetc# ls
fio1.txt  fio2.txt
root@devops:~/osetc# rm -i !(fio1.txt)
rm:是否删除普通文件 'fio2.txt'? y
root@devops:~/osetc# ls
fio1.txt

如果要删除当前目录下,除fio2.txt 和fio3.txt两个文件外的所有文件,可以执行下面的命令:

#rm -i   !(fio2.txt|fio3.txt)

命令输出如下:

root@devops:~/osetc# ls
fio1.txt  fio2.txt  fio3.txt
root@devops:~/osetc# rm -i !(fio2.txt|fio3.txt)
rm:是否删除普通文件 'fio1.txt'? y
root@devops:~/osetc# ls
fio2.txt  fio3.txt

方法三:  通过结合grep和xargs命令来删除指定文件外的所有文件
在linux里grep命令里有一个-v 的参数, 该参数可以排除通过grep命令输出的特定的文件,这样grep命令输出的其它文件就是需要删除的。 然后将输出结果过通过管道符传给xargs命令,将其删除。比如要删除除fio1.txt 文件的所有其它文件,执行下面命令:

#ls | grep –v fio1.txt | xargs rm

命令输出如下:

root@devops:~/osetc# ls
fio1.txt  fio2.txt  fio3.txt
root@devops:~/osetc# ls | grep -v fio1.txt | xargs rm
root@devops:~/osetc# ls
fio1.txt

方法四:改进方法三, 用find命令来替换ls命令,查找要删除的文件然后通过grep –v在过滤掉需要排除的文件
执行命令如下:

#find ./ | grep –v fio1.txt | xargs rm

方法五:通过fing命令结合xargs 或者其exec参数删除除指定文件外的文件
我们可以通过执行下面的两个find命令组合来删除除指定文件外的所有其它文件,比如要删除除fio1.txt外的所有其它文件,执行命令如下:

# find ./ ! -name fio1.* -exec rm -rf {} \;

或者

#find ./ ! –name fio1.*  | xargs rm –rf

99%的人还阅读了:

Linux unlink命令

本文将会讲述Linux系统下unlink删除文件命令的用法。 Unlink 命令会直接调用linux系统下的unlink系统函数,来删除指定的某一个文件。

Linux unlink 命令格式及参数

命令格式如下:

Unlink {文件名}
Unlink {选项}

Unlink 参数如下:

--help – 显示该命令的帮助信息并退出命令
--version –显示命令的版本信息并退出命令

Unlink命令只有提供了上面的两个参数。

Linux unlink命令实例

1# 删除当前目录下的名为fio.txt 的文件,执行下面的命令:

# unlink fio.txt

命令输出如下:

root@devops:~/osetc# ls
fio1.txt  fio2.txt  fio.txt
root@devops:~/osetc# unlink fio.txt
root@devops:~/osetc# ls
fio1.txt  fio2.txt

上面我提到过,unlink 命令只能同时删除一个文件,当你指定多个文件时,系统会提示错误信息。 如下:

root@devops:~/osetc# unlink fio1.txt fio2.txt
unlink: 额外的操作数 "fio2.txt"
Try 'unlink --help' for more information.
root@devops:~/osetc#

Linux unlink系统函数

Unlink函数会从文件系统中删除一个指定的文件名称。如果名称是文件的最后一个连接,并且没有其它进程将文件打开,名称对应的文件会实际被删除。
Unlink函数用法:

#include
int unlink(const char *pathname);

Unlink函数参数:
pathname:指向需解除连接的文件名。
返回说明:

成功执行时,返回0。失败返回-1,errno被设为以下的某个值
EACCES:权能不足
EFAULT: 内存空间不可访问
EIO:发生输入输出错误
EISDIR:pathname索引的是目录
ELOOP :路径解析的过程中存在太多的符号连接
ENAMETOOLONG:路径名超出可允许的长度
ENOENT:路径名部分内容表示的目录不存在,或者是悬浮的连接
ENOMEM: 核心内存不足
ENOTDIR:路径名的部分内容不是目录
EPERM : 文件系统不支持文件或者目录的解除连接,也有可能是权限步允许
EROFS :文件系统只读

当文件的连接数为0的时候,并且没有任何进程打开这个文件,这个文件的存储数据才会被真正的删除。

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
int main()
{
    int fd;
    char buf[32];
    struct stat buff;
    if((fd=open("temp.txt",O_RDWR|O_CREAT|O_TRUNC,S_IRWXU))<0){
        printf("create file error!\n");
    }
    stat("temp.txt",&buff);
    printf("temp.link=%d\n",buff.st_nlink);
    link("temp.txt","test.txt");
    stat("test.txt",&buff);
    printf("after link the tem.link =%d\n",buff.st_nlink);
    if(unlink("temp.txt")<0){
        printf("unlink error !\n");
    }
    stat("temp.txt",&buff);
    printf("after unlink tem.link=%d\n",buff.st_nlink);
    if(write(fd,"temp",5)<0){
        printf("write wrror!\n");
    }
    if((lseek(fd,0,SEEK_SET))==-1){
       printf("lseek error!\n");
    }
    if((read(fd,buf,5))<0){
        printf("read error!\n");
    }
    printf("%s\n",buf);
    return 0;
}

99%的人还阅读了:

Linux rm 删除命令

当我们在Linux系统下,如果要删除某个特定的文件或者特定目录下的特定文件,那么首先会想到的是Linux系统的系统命令rm。 本文将会对rm删除文件命令的使用方法做详细的介绍,包括rm命令的命令格式,包含的命令选项,并且通过实例来介绍rm命令的不同选项。

Linux rm 命令介绍

rm 命令在英语里就是remove单词的缩写,就是删除的意思, 该命令主要用来删除linux文件系统下的文件。当使用rm命令的递归参数-rf的话,也可用来删除目录文件。
我们可以在命令行下通过rm命令来删除指定的每一个文件。 默认情况下,该命令不会删除目录文件。
Linux rm命令删除文件的处理过程只是删除文件所对应的inode链接,但并不会删除或者清空文件的存储数据,当删除完成后,系统会将该文件的存储空间标记为空闲状态,这样就别的程序就可以将数据写入这个空间里了。 也就是说,当你删除一个文件的时候,文件数据并没有被改变,只是不会再关联到这个文件名了。
因为文件数据本身并没有被销货,所以当rm命令将指向数据区域的指针删除掉后, 该数据就不能再被访问了, 而且也没法注销该删除操作。不像我们在windows系统里, 我们可以去回收站里将删除的文件恢复到以前的存储位置。
注意: 如果你想彻底的将文件数据从磁盘里删掉,我们可以通过使用Linux系统的shred命令将指定文件所在存储数据测试重新覆盖,这样数据就彻底无法再恢复了。

Linux rm 命令格式及参数

rm [参数] {文件名}

参数如下:

-f, –force 强制删除文件, 不做任何删除操作的提示
-I, –interactive  进行交互式的删除操作
-r, -R, –recursive 将对指定目录中的所有目录或子目录进行递归性的删除
-v, –verbose 显示删除操作的详细信息
–help 显示命令的使用帮助信息
-d, 删除空目录文件,rm –d 和rmdir命令的效果是一样的。

对于-I选项,当rm 命令在删除文件的时候,如果指定的文件超过3个话,rm 命令在删除文件前,会做出删除提示。

Linux rm命令删除目录文件

默认情况下,rm命令不会删除目录文件的。 但是如果使用了-r/-R/–recursive 选项的话, rm命令将会删除所有匹配到的文件或者目录。
如果指定的目录是个空目录,那么可以使用rm命令的-d/–dir 参数来删除。
如果需要删除当前目录下的空目录文件fio1,执行下面的命令:

#rm –d  fio1

命令输出如下:

root@devops:~/osetc# rm fio1/
rm: 无法删除'fio1/': 是一个目录
root@devops:~/osetc# rm -d fio1/
root@devops:~/osetc#

如果要删除目录下的所有普通文件或者子目录文件,并不做删除确认提示,可以使用rm命令的-rf选项做递归删除,执行下面命令:

#rm –rf  fio

Linux rm命令删除普通文件

如果要删除当前目录下的普通文件 fio.txt, 当要删除的文件是写保护的,系统会做出删除确认提示,执行下面的命令:

#rm fio.txt

命令输出如下

root@devops:~/osetc# ll
总用量 16
drwxr-xr-x 2 root root 4096 3月  17 22:01 ./
drwx------ 6 root root 4096 3月  15 21:48 ../
-rw-r--r-- 1 root root    5 3月  15 21:24 fio5.txt
-r--r--r-- 1 root root    5 3月  17 22:01 fio.txt
root@devops:~/osetc# rm fio.txt
root@devops:~/osetc#

Linux rm 命令强制删除文件

如果想在删除文件的时候,不想有任何确认提示,那么可以使用rm命令的-f选项,执行下面的命令:

#rm –f fio.txt

命令输出如下:

root@devops:~/osetc# ls
fio5.txt  fio.txt
root@devops:~/osetc# rm -f fio.txt
root@devops:~/osetc# ls
fio5.txt
root@devops:~/osetc#

Linux rm 命令结合通配符删除所有.txt 文件

如果想删除目录下所有的文件名以.txt 结尾的文件,那么可以使用Linux下通配符来匹配要删除的文件,然后结合rm命令进行删除。执行下面的命令:

# rm *.txt

命令输出如下:

root@devops:~/osetc# ls
fio1.txt  fio2.txt  fio3.txt
root@devops:~/osetc# rm *.txt
root@devops:~/osetc# ls
root@devops:~/osetc#

Linux rm 命令交互式删除文件

如果想在删除文件的时候,让系统做出删除文件的确认提示,这样可以做交互式的确认,当输入Y的时候,就进行文件删除,当输入N的时候,文件不会被删除。 可以使用linux rm 命令的-i选项,执行命令如下:

# rm –i fio5. Txt

命令输出如下:

root@devops:~/osetc# ls
fio5.txt
root@devops:~/osetc# rm -i fio5.txt
rm:是否删除普通文件 'fio5.txt'? y
root@devops:~/osetc# ls
root@devops:~/osetc#

Linux rm 命令删除文件时并排除特定的某个文件或某类文件

当我们在删除某类文件的时候,想排除特定的文件,此时如果简单的执行rm命令是无法完成的。 我们需要通过结合其它的Linux命令,比如grep命令来实现。 比如我们先删除目录下的除了fio.txt文件的所有.txt文件,那么可以执行下面的命令:

# rm `ls *.txt|grep –v fio.txt`

命令输出如下:

root@devops:~/osetc# ls
fio1.txt  fio2.txt  fio3.txt
root@devops:~/osetc# rm -i `ls *.txt| grep -v fio1.txt`
rm:是否删除普通文件 'fio2.txt'? y
rm:是否删除普通文件 'fio3.txt'? y
root@devops:~/osetc# ls
fio1.txt

Linux rm命令和unlink命令的不同之处

Linux里rm 命令 和unlink 命令主要功能都是用来删除指定的文件。 但是unlink命令只能同时删除一个文件,而且不能删除目录文件,并且该命令没有任何的附加选项。只是用来通过调用unlink函数来删除指定的一个文件。而在大多数版本的linux系统中的rm命令包含了我们上面介绍的参数,并可以做交互式操作,安全检查,条件删除以及递归操作等。

root@devops:~/osetc# unlink fio1.txt fio2.txt
unlink: 额外的操作数 "fio2.txt"
Try 'unlink --help' for more information.

99%的人还阅读了:

Linux 删除文件

本文将会讲述如何在Linux系统下删除文件的方法,以及如何在命令行下删除某个文件中特定的内容行, 或者删除特定日期创建的文件或者目录。
目录如下:

Linux 删除文件命令

在CentOS,Redhat,或者Ubuntu等类Unix系统下,我们主要用来删除文件或文件夹目录的方法是通过执行rm 命令或者 unlink命令。 下面我们来看删除文件命令rm的用法介绍:
rm 命令是Unix或者Linux系统下的主要用来文件系统中删除文件的命令。 当然,在大多数的系统里, 当我们想删除一个文件的时候,需要当前用对对该文件或者目录有写或者可执行的权限。
rm 命令格式:

rm {文件名}
rm [参数] {文件名}
unlink {文件名}
rm –f –r  {文件名}

 
rm 命令参数:
-f, –force 强制删除文件, 不做任何删除操作的提示
-I, –interactive  进行交互式的删除操作
-r, -R, –recursive 将对指定目录中的所有目录或子目录进行递归性的删除
-v, –verbose 显示删除操作的详细信息
–help 显示命令的使用帮助信息
通常情况下,我们会将-r 和-f来同时使用,这样就可以删除所有指定的文件或者目录,并且没有任何的操作提示信息输出。

Linux 删除单个文件夹或目录

让我们来看一个使用rm命令删除指定文件或者目录的例子, 假如你想删除当前目录下的一个文件名为fio.txt 的文件, 执行下面的命令:

# rm fio.txt

Linux 删除多个文件

如果想通过rm命令同时删除多个文件,可以将多个文件的文件名作为rm命令的参数, 执行下面的命令来删除当前目录下的fio1.txt, fio2.txt, fio3.txt 文件:

# rm fio1.txt  fio2.txt fio3.txt

命令输出如下:

root@devops:~/osetc# ls
fio1.txt  fio2.txt  fio3.txt
root@devops:~/osetc# rm fio1.txt fio2.txt fio3.txt
root@devops:~/osetc# ls
root@devops:~/osetc#

Linux 递归删除特定目录下的所有文件

如果要删除的目录里还包含了多层的子目录或者子目录依旧还有目录,那么如果想删除目录里的所有子目录和文件,这个时候我们需要使用rm命令的-rf参数,比如,如果你想删除当前目录下的fio目录,执行下面的命令:

# rm –rf fio

命令输出如下:

root@devops:~/osetc# ls fio
fio1.txt  fio2.txt  fio3.txt  subfio
root@devops:~/osetc# rm -rf fio
root@devops:~/osetc# ls fio
ls: 无法访问'fio': 没有那个文件或目录
root@devops:~/osetc#

Linux 删除文件并做删除前交互确认

如果你想在删除每个文件的时候,让系统都做出确认删除提示,那么这样可以让你不会错误的删除文件,比如要删除当前目录下的fio1.txt, 执行下面的命令:

# rm –I fio1.txt

命令输出如下:

root@devops:~/osetc# ls
fio1.txt
root@devops:~/osetc# rm -i fio1.txt
rm:是否删除普通文件 'fio1.txt'? y
root@devops:~/osetc# ls
root@devops:~/osetc#

Linux 显示删除文件时的信息

如果你想看到linux系统在删除你指定的文件或目录的时候,显示详细的处理信息,那么可以使用rm命令的-v选项,执行命令如下:

$ rm –v fio1.txt

命令输出如下:

root@devops:~/osetc# ls
fio1.txt
root@devops:~/osetc# rm -v fio1.txt
已删除'fio1.txt'
root@devops:~/osetc# ls
root@devops:~/osetc#

Linux系统下删除空目录文件

如果想删除特定目录下的,那么可以使用linux下的另一个命令rmdir, 执行下面命令:

# rmdir fio
# rmdir fio1

Linux下删除文件里的文件列表中的文件

如果某个文件里包含了很多需要删除的特定的文件路径, 那么我们可以使用rm命令并结合下xargs 命令来进行文件删除操作。
例如要删除当前目录下的fio.txt 文件中的列出的所有文件, 那么可以执行下面的命令:

# xargs rm -v < fio.txt

命令输出如下:

root@devops:~/osetc# cat fio.txt
/root/osetc/fio1/file1.txt
/root/osetc/fio1/file2.txt
/root/osetc/fio1/file3.txt
root@devops:~/osetc# xargs rm -v <fio.txt
已删除'/root/osetc/fio1/file1.txt'
已删除'/root/osetc/fio1/file2.txt'
已删除'/root/osetc/fio1/file3.txt'

注意:当你使用rm命令来删除文件的时候,千万不要运行”rm –rf / “ 命令, 因为这个命令会将linux系统的根目录下的所有文件都删除掉,这样的话,就会导致你的系统挂掉。

Linux删除文件名中以连字符或者减号开头的文件名

如果你想删除某个文件名中包含特殊字符的文件,无法直接使用rm 命令进行文件删除。 这个时候我们需要在rm命令后的加上双连字符,再跟文件名即可。 比如要删除-fio.txt文件,就可以执行下面的命令:

# rm -- -fio.txt

 Linux 通过文件的inode号删除文件

当我们在系统里看到文件名里包含乱码或者特殊字符的文件时候,如果简单的通过rm命令来删除文件的话,会失败的。 这个时候该怎么办? 我们可以通过文件唯一的inode号来进行删除操作。
我们需要结合find命令来根据文件的inode号来进行删除文件操作。
查看文件的inode
在linux系统里可以通过命令ll –i 来查看当前目录下的文件的详细信息,输出信息的第一列就是文件的inode号。 执行下面的命令:

#ll –I

命令输出如下:

root@devops:~/osetc# ll -i
总用量 16
131103 drwxr-xr-x 3 root root 4096 3月  14 22:56 ./
131073 drwx------ 6 root root 4096 3月  14 22:56 ../
262172 drwxr-xr-x 2 root root 4096 3月  14 22:57 fio1/
131106 -rw-r--r-- 1 root root   82 3月  14 22:56 fio.txt
131104 -rw-r--r-- 1 root root    5 3月  15 21:23 fio2.txt
131105 -rw-r--r-- 1 root root    5 3月  15 21:23 fio3.txt
131106 -rw-r--r-- 1 root root    5 3月  15 21:23 fio4.txt
131108 -rw-r--r-- 1 root root    5 3月  15 21:24 fio5.txt

通过find命令的delete参数进行文件删除
从上面的输出中,我们可以看到fio.txt 文件的inode号为131106, 通过执行下面的find命令并结合其-inum 参数来删除文件,执行下面的命令:

#find ./* -inum 131106 –delete

命令输出如下:

root@devops:~/osetc# find ./ -inum 131106 -delete
root@devops:~/osetc# ll -i
总用量 12
131103 drwxr-xr-x 3 root root 4096 3月  15 21:17 ./
131073 drwx------ 6 root root 4096 3月  14 22:56 ../
262172 drwxr-xr-x 2 root root 4096 3月  14 22:57 fio1/
131104 -rw-r--r-- 1 root root    5 3月  15 21:23 fio2.txt
131105 -rw-r--r-- 1 root root    5 3月  15 21:23 fio3.txt
131106 -rw-r--r-- 1 root root    5 3月  15 21:23 fio4.txt
131108 -rw-r--r-- 1 root root    5 3月  15 21:24 fio5.txt

通过find命令的exec参数并结合rm命令进行文件删除操作
我们也可以通过find命令的exec参数并结合rm删除命令来根据文件的inode号做文件的删除,执行下面的命令:

#find ./ -inum 131104 –exec rm –i {} \;

命令输出如下:

root@devops:~/osetc# find ./ -inum 131104
./fio2.txt
root@devops:~/osetc# find ./ -inum 131104 -exec rm -i {} \;
rm:是否删除普通文件 './fio2.txt'? y
root@devops:~/osetc# ll -i
总用量 24
131103 drwxr-xr-x 3 root root 4096 3月  15 21:29 ./
131073 drwx------ 6 root root 4096 3月  14 22:56 ../
262172 drwxr-xr-x 2 root root 4096 3月  14 22:57 fio1/
131105 -rw-r--r-- 1 root root    5 3月  15 21:23 fio3.txt
131106 -rw-r--r-- 1 root root    5 3月  15 21:23 fio4.txt
131108 -rw-r--r-- 1 root root    5 3月  15 21:24 fio5.txt

通过find命令并结合xargs来删除文件
当我们使用find命令查看到指定inode号的文件后,还可以结合xargs命令来进行文件的删除,执行命令如下:

# find ./ -inum 131105 |xargs rm -v

命令输出如下:

root@devops:~/osetc# find ./ -inum 131105
./fio3.txt
root@devops:~/osetc# find ./ -inum 131105 |xargs rm -v
已删除'./fio3.txt'

Linux 删除指定日期之前的文件

如果你想删除指定日期之前的所有的文件,这个时候我们需要通过linux下find命令并结合其-mtime参数进行文件的查找,在通过rm命令对查找到的文件进行删除。
执行下面的命令来查找root目录下十天之前创建或更改过的文件:

root@devops:~/osetc# find /root -mtime +10 -name "mysql-server*"
/root/mysql-server_5.7.20-1ubuntu16.04_amd64.deb-bundle.tar
/root/mysql-server_5.7.20-1ubuntu16.04_amd64.deb

下一步就可以使用rm命令对查找到的文件进行删除,执行下面的命令:

# find /root -mtime +10 -name "mysql-server*"  -exec rm -rf {} \;

当然也可以使用find命令的ctime参数。

Linux 通过rm()函数进行文件的删除

在linux系统里可以通过unlink和rmdir函数来进行文件的删除,但是rmdir函数只能删除空目录文件,所有我们需要新写一个函数来先删除目录文件下的所有文件,使其成为一个空目录,进而调用rmdir函数删除空目录。如果是普通文件的话,就可以通过unlink函数进行删除。 通过新函数rm来判断文件类型,目录文件通过rm_dir函数删除,普通文件通过unlink函数删除。
rm_dir函数如下:
//递归删除目录下的所有文件

int rm_dir(std::string dir_full_path)
{
DIR* dirp = opendir(dir_full_path.c_str());
if(!dirp)
{
return -1;
}
struct dirent *dir;
struct stat st;
while((dir = readdir(dirp)) != NULL)
{
if(strcmp(dir->d_name,".") == 0
|| strcmp(dir->d_name,"..") == 0)
{
continue;
}
std::string sub_path = dir_full_path + '/' + dir->d_name;
if(lstat(sub_path.c_str(),&st) == -1)
{
Log("rm_dir:lstat ",sub_path," error");
continue;
}
if(S_ISDIR(st.st_mode))
{
if(rm_dir(sub_path) == -1) // 如果是目录文件,递归删除
{
closedir(dirp);
return -1;
}
rmdir(sub_path.c_str());
}
else if(S_ISREG(st.st_mode))
{
unlink(sub_path.c_str());     // 如果是普通文件,则unlink
}
else
{
Log("rm_dir:st_mode ",sub_path," error");
continue;
}
}
if(rmdir(dir_full_path.c_str()) == -1)//delete dir itself.
{
closedir(dirp);
return -1;
}
closedir(dirp);
return 0;
}

Rm函数如下:

int rm(std::string file_name)
{
std::string file_path = file_name;
struct stat st;
if(lstat(file_path.c_str(),&st) == -1)
{
return -1;
}
if(S_ISREG(st.st_mode))
{
if(unlink(file_path.c_str()) == -1)
{
return -1;
}
}
else if(S_ISDIR(st.st_mode))
{
if(file_name == "." || file_name == "..")
{
return -1;
}
if(rm_dir(file_path) == -1)//删除目录下的所有文件.
{
return -1;
}
}
return 0;
}

Linux 删除文件后 空间没有释放

当Linux系统下的磁盘的使用空间达到100%后,我们肯定会对文件系统里的某些不用的文件或者比较大的日志文件进行清理,比如我们会删除apache服务的日志文件, 但是当我们通过rm命令删除掉日志文件后, 我们通过df命令查看当前磁盘的可用空间依旧没有变化,这是怎么回事呢? 为什么文件删除后,磁盘空间没有被释放?
磁盘空间没有被释放的原因如下
在Linux文件系统里,当我们通过rm命令将文件删除后,系统只会将文件的链接或者指针删除掉,但是数据并没有被从所占用的磁盘空间清除,而如果之前调用这个文件的进程依旧在运行的话,那么指针也不会被删除,因为该进行依然会写数据到该文件里,所以内核依然会认为该文件没有被删除。 所以当我们再次使用df命令查看磁盘空间的时候,空间使用率依旧没有变化。
磁盘空间没有被释放的解决方法:
其实解决办法很简单,那就是找到调用这个文件的进程,将该进程重新启动或者关闭,比如重新启动HTTP服务。当然还有万能的方法,那就是重启Linux系统。
对于不能重启系统或者进程的情况,我们可以通过对日志文件的写操作,对该文件进行重新覆盖,这样就会清空该文件所占用的存储空间。比如要清空HTTP的日志文件,我们可以执行下面的命令:

#echo “”> /tmp/access.log

Linux 删除文件恢复

通过上面的介绍,我们知道文件通过rm命令删除后,系统只是删除了执行该文件inode链接,但并没有删除文件的数据块。 我们可以通过proc文件系统来恢复删除的文件,因为每一个进程在proc文件系统里都会有一个目录和进程名字,里面会包含一个文件描述符子目录,该进程需要打开的所有文件链接都会在这个目录里。 所以当从文件系统里删除文件后,proc文件系统里依然还有一个inode的引用。
下面我们来演示将恢复删除后的/var/log/syslog 日志文件:
1# 删除日志文件/var/log/syslog, 执行下面的命令:

#rm /var/log/syslog

2# 通过lsof命令来查看进程的文件描述符和相关文件名信息,执行下面的命令:

# lsof | grep /var/log/syslog

命令输出如下:

root@devops:~/osetc# lsof | grep /var/log/syslog
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.
rsyslogd    972                syslog    5w      REG                8,1    24202    1311921 /var/log/syslog (deleted)

从上面的输出中可以看到进程的pid号为972
3# 进入proc文件系统查看进程号为972的文件描述信息,执行命令:

# ll /proc/972/fd/

命令输出如下:

root@devops:~/osetc# ll /proc/972/fd/
总用量 0
dr-x------ 2 root   root    0 3月  15 21:14 ./
dr-xr-xr-x 9 syslog syslog  0 3月  14 22:22 ../
lr-x------ 1 root   root   64 3月  15 21:14 0 -> /dev/null
l-wx------ 1 root   root   64 3月  15 21:14 1 -> /dev/null
l-wx------ 1 root   root   64 3月  15 21:14 2 -> /dev/null
lrwx------ 1 root   root   64 3月  15 21:14 3 -> socket:[13886]
lr-x------ 1 root   root   64 3月  15 21:14 4 -> /proc/kmsg
l-wx------ 1 root   root   64 3月  15 21:14  5 -> /var/log/syslog (deleted)
l-wx------ 1 root   root   64 3月  15 21:14 6 -> /var/log/auth.log
l-wx------ 1 root   root   64 3月  15 21:14 7 -> /var/log/kern.log

从输出里我们可以看到syslog文件的链接信息,可以通过head -5 命令来查看文件内容。

#head -5  /proc/972/fd/5

命令输出如下:

root@devops:~/osetc# head -5 /proc/972/fd/5
Mar 14 22:23:06 devops anacron[998]: Job `cron.daily' terminated
Mar 14 22:23:13 devops gnome-session[1826]: Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
Mar 14 22:27:15 devops anacron[998]: Job `cron.weekly' started
Mar 14 22:27:15 devops anacron[2837]: Updated timestamp for job `cron.weekly' to 2018-03-14
Mar 14 22:27:20 devops anacron[998]: Job `cron.weekly' terminated

4# 执行下面的命令,恢复syslog文件

#cat  /proc/972/fd/5 >/var/log/syslog

命令输出如下:

root@devops:~/osetc# cat /proc/972/fd/5 >/var/log/syslog
root@devops:~/osetc# ls /var/log/syslog
/var/log/syslog

我们可以看到被删除后的syslog文件已经被恢复了。
也可以参考本站的另一篇文章,实现linux系统下的回收站功能,进而更方便的实现删除文件的恢复。


99%的人还阅读了:

CURL命令忽略https请求的SSL证书

在使用wget命令来获取文件的时候,我们可以使用wget命令的 –-no-check-certificate 选项来忽略证书的认证。 那么在执行curl命令是否也可以忽略SSL证书的警告信息呢。
当然是有的,我们可以在执行curl 命令的时候,使用 -k 或者 –insecure 选项,来忽略签名认证的警告。 这样就可以让curl命令执行不安全的SSL连接,进而去获取数据。
命令使用示例如下:
curl -k https://osetc.com
curl --insecure https://www.osetc.com
在php中我们通过curl来实现post 和get请求的时候,也可以忽略SSL证书的验证,大家可以参考下面的代码:
function request_by_curl($url, $post_data = '', $timeout = 30) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    //post提交,否则get
    if ($post_data != '') {
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
    }
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
     curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
     curl_setopt($ch, CURLOPT_HEADER, false);
     //跳过SSL验证
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, '0');
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, '0');
    $file_contents = curl_exec($ch);
    curl_close($ch);
    return $file_contents;
}
函数调用如下:
//$result存储返回的数据
//post
$result = request_by_curl('http://www.xxx.com', 'username=admin&password=123');
//get
 $result = request_by_curl('http://www.xxx.com');

99%的人还阅读了:
Linux:用腻了 wget 或 curl,有什么更好的替代品吗?
Mac OS:终端下使用curl命令下载文件
Ubuntu 下curl安装及使用指南
Linux 下curl命令post传递表单数据

PHP中 “Fata error Call to undefined function curl_init()解决方法

本文主要讲述在Centos/RHEL linux系统下运行php时候遇到的错误 Fatal error: Call to undefined function curl_init() 的解决方法。 当你在配置完成一个LEMP(Linux,Nginx, MySQL, PHP)的web环境后,PHP在运行的时候有可能会在/var/log/nginx/error.log文件里看到下面的错误:

Fatal error: Call to undefined function curl_init()

根据错误的提示,我们可以基本判断curl扩展模块没有安装或者启用,所以接下里我们可以去执行下面的命令来检测php-curl 模块包是否安装。
Centos/RHEL 系统检测php-curl是否安装
执行下面的命令:

$ rpm -qa |grep php-curl

ubuntu 系统检测php-curl是否安装
执行下面的命令:

$ sudo dpkg -l |grep php-curl

 
如果没有安装,我们只需要安装或者开启curl module 扩展包。
Ubuntu下安装支持PHP的CURL扩展模块
执行下面的apt install 命令为php 7.x 安装curl 扩展模块:

$ sudo  apt install php-curl

命令输出如下:

正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列软件包是自动安装的并且现在不需要了:
java-common libappindicator1 libindicator7
使用'apt autoremove'来卸载它(它们)。
将会同时安装下列软件:
php-common php7.0-common php7.0-curl
下列【新】软件包将被安装:
php-common php-curl php7.0-common php7.0-curl
升级了 0 个软件包,新安装了 4 个软件包,要卸载 0 个软件包,有 223 个软件包未被升级。
需要下载 880 kB 的归档。
解压缩后会消耗 4,903 kB 的额外空间。
您希望继续执行吗? [Y/n] y
获取:1 http://mirrors.aliyun.com/ubuntu xenial-proposed/main amd64 php-common all 1:35ubuntu6.1 [10.8 kB]
获取:2 http://mirrors.aliyun.com/ubuntu xenial-proposed/main amd64 php7.0-common amd64 7.0.25-0ubuntu0.16.04.1 [840 kB]
获取:3 http://mirrors.aliyun.com/ubuntu xenial-proposed/main amd64 php7.0-curl amd64 7.0.25-0ubuntu0.16.04.1 [27.4 kB]
获取:4 http://mirrors.aliyun.com/ubuntu xenial-proposed/main amd64 php-curl all 1:7.0+35ubuntu6.1 [1,928 B]
已下载 880 kB,耗时 3秒 (289 kB/s)
正在选中未选择的软件包 php-common。
(正在读取数据库 ... 系统当前共安装有 220903 个文件和目录。)
正准备解包 .../php-common_1%3a35ubuntu6.1_all.deb  ...
正在解包 php-common (1:35ubuntu6.1) ...
正在选中未选择的软件包 php7.0-common。
正准备解包 .../php7.0-common_7.0.25-0ubuntu0.16.04.1_amd64.deb  ...
正在解包 php7.0-common (7.0.25-0ubuntu0.16.04.1) ...
正在选中未选择的软件包 php7.0-curl。
正准备解包 .../php7.0-curl_7.0.25-0ubuntu0.16.04.1_amd64.deb  ...
正在解包 php7.0-curl (7.0.25-0ubuntu0.16.04.1) ...
正在选中未选择的软件包 php-curl。
正准备解包 .../php-curl_1%3a7.0+35ubuntu6.1_all.deb  ...
正在解包 php-curl (1:7.0+35ubuntu6.1) ...
正在设置 php-common (1:35ubuntu6.1) ...
正在设置 php7.0-common (7.0.25-0ubuntu0.16.04.1) ...
Creating config file /etc/php/7.0/mods-available/calendar.ini with new version
…
Creating config file /etc/php/7.0/mods-available/tokenizer.ini with new version
正在设置 php7.0-curl (7.0.25-0ubuntu0.16.04.1) ...
Creating config file /etc/php/7.0/mods-available/curl.ini with new version
正在设置 php-curl (1:7.0+35ubuntu6.1) ...

Centos下安装支持PHP的CURL 模块
在centos或者Redhat系统下,可以通过yum install 命令执行下面的命令来安装curl模块:

$ sudo yum install php-curl

或者执行下面的命令:

$ sudo yum install php-common

安装完php-curl 模块后,需要重启下Apache/Nginx 服务
执行下面的命令:

$ sudo service nginx restart

或者

$ sudo /etc/init.d/nginx restart

对于centos7.x 系统,执行下面命令:

$ sudo systemctl  restart nginx

 
99%的人还阅读了:
Linux:用腻了 wget 或 curl,有什么更好的替代品吗?
Mac OS:终端下使用curl命令下载文件
Ubuntu 下curl安装及使用指南
Linux 下curl命令post传递表单数据
参考地址:https://curl.haxx.se/download.html

Linux 下curl命令post传递表单数据

本文将会讲述如何在linux或者unix系统下使用cURL工具或者命令在命令行下发送post请求传递数据。 比如上传一个文件到远程的服务器的特定目录下。如何通过cURL 命令在linux命令行下创建一个post请求来上传文件。
CURL是一个可以用来从本地传递数据请求到远程服务器的非常好用的工具,可以通过多种协议(http,https,ftp等)从远程web服务器上上传或者下载所需要的文件。 可以通过cURL工具来创建post或者get 请求来创建请求或者测试不同的请求操作。

cRURL 命令post传递参数给相应表单字段

当我们只是需要传递相应的值给表单里的特定字段,我们可以使用cURL命令的–data 或者-d选项,命令格式如下:

curl -d "key=value1&key2=value2" "url"

或者

curl --data "key=value1&key2=value2" "url"

对于上述命令,如果只是通过curl post请求传递一个参数值,那么可以不适用双引号,如果是两个以上的参数就必须使用双引号扩起来。
下面我们来看一个实例:
假如我们想向一个登陆页面传递用户名和密码数据,那么我们来看看如何创建cURL post请求来发送数据。
登陆表单的数据如下:

<form  action="login" method="post">
<input type="text"  name="username"  value="user1"/>
<input type="password"  name="password"  value="123"/>
<button type="submit"  value="登陆" />
</form>

那么可以在linux命令行下执行下面的cURL命令创建一个post请求来传递相应的字段值给表单:

curl -d "username=user1&password=123" "www.test.com/login"

如果需要跟踪做了重定向的表单网页,那么需要使用-L 选项,命令如下:

curl -L -d "username=user1&password=123" "www.test.com/login"

cURL保存当前的cookie数据

如果当前已经进行了登录操作,那么可能我们需要保存下当前已经生产的cookie数据,供其它的请求操作来使用,使用curl命令以及-c 选项进行保存当前的cookie信息:

curl -c cookie -d "username=user1&password=123" "www.test.com/login"

命令执行完成后,会在当前目录下生产一个包含cookie信息的文件。
如果需要使用已有的cookie文件来进行post请求操作,那么需要使用curl 的-b选项,执行命令如下:

curl -L -b cookie -d "key3=value3" "url"

通过cURL命令上传文件

如果需要通过cURL 工具上传某个文件到相应表单,可以使用-F 选项,命令格式如下:

curl -F "data=@filename" "url"

例如你想上传一个文件到远程的服务器表单(http://www.test.com/upload),接收文件的表单参数名为img,那么我们可以执行下面的命令:

curl -F “img=@linux.gif" "http://www.test.com/upload"

如果要同时上传多个文件,可以执行下面的命令:

curl -F "img1=@linux1.gif" -F "img2=@linux2.gif" "http://www.test.com/upload"

PHP中通过cURL建立post请求获取数据

因为PHP支持curl中的库,所有可以在php中模拟curl的post请求来抓取到想要的数据。 下面我们通过curl post方式来打开特定页面并获取页面数据,代码如下:

$url = "http://localhost/test.php";
//curl post请求所需要传递的参数值
$post_data = array ("username" => "user1","key" => "test");
$ch = curl_init(); // curl post 请求操作初始化
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// post数据
curl_setopt($ch, CURLOPT_POST, 1);// post的变量
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);
curl_close($ch);
print_r($output); //打印抓取到的页面数据

通过上面的php程序返回的数据是json格式。
更多关于curl的用法可以参看帮助文档,执行下面命令:

$ man curl

99%的人还阅读了:
Linux:用腻了 wget 或 curl,有什么更好的替代品吗?
Mac OS:终端下使用curl命令下载文件
Ubuntu 下curl安装及使用指南

Ubuntu 下curl安装及使用指南

对于linux用户,可能经常会用到curl工具从远程的服务器上通过http,https, SCP, SFTP,SMB或者其它支持的协议来下载或传输文件。 本文将会讲述如何下载到你需要的curl 程序文件,以及如何在ubuntu系统下安装curl工具,并对curl的一些常用的命令做介绍。

Curl 是什么

CURL是Linux系统下常用的功能强大的网络工具,可以通过多种协议(http,https,ftp等)从远程web服务器上上传或者下载所需要的文件。 我们可以通过curl工具来抓取网页来监控可能会遇到的问题。curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。 curl是利用URL语法在命令行方式下工作的开源文件传输工具。它被广泛应用在Unix、多种Linux发行版中,并且有DOS和Win32、Win64下的移植版本。
curl 工具常用的参数如下

-a/--append 上传文件时,附加到目标文件
-A/--user-agent <string> 设置用户代理发送给服务器
- anyauth 可以使用“任何”身份验证方法
-b/--cookie <name=string/file> cookie字符串或文件读取位置
- basic 使用HTTP基本验证
-B/--use-ascii 使用ASCII /文本传输
-c/--cookie-jar <file> 操作结束后把cookie写入到这个文件中
-C/--continue-at <offset> 断点续转
-d/--data <data> HTTP POST方式传送数据
--data-ascii <data> 以ascii的方式post数据
--data-binary <data> 以二进制的方式post数据
--negotiate 使用HTTP身份验证
--digest 使用数字身份验证
--disable-eprt 禁止使用EPRT或LPRT
--disable-epsv 禁止使用EPSV
-D/--dump-header <file> 把header信息写入到该文件中
--egd-file <file> 为随机数据(SSL)设置EGD socket路径
--tcp-nodelay 使用TCP_NODELAY选项
-e/--referer 来源网址
-E/--cert <cert[:passwd]> 客户端证书文件和密码 (SSL)
--cert-type <type> 证书文件类型 (DER/PEM/ENG) (SSL)
--key <key> 私钥文件名 (SSL)
--key-type <type> 私钥文件类型 (DER/PEM/ENG) (SSL)
--pass <pass> 私钥密码 (SSL)
--engine <eng> 加密引擎使用 (SSL). "--engine list" for list
--cacert <file> CA证书 (SSL)
--capath <directory> CA目录 (made using c_rehash) to verify peer against (SSL)
--ciphers <list> SSL密码
--compressed 要求返回是压缩的形势 (using deflate or gzip)
--connect-timeout <seconds> 设置最大请求时间
--create-dirs 建立本地目录的目录层次结构
--crlf 上传是把LF转变成CRLF
-f/--fail 连接失败时不显示http错误
--ftp-create-dirs 如果远程目录不存在,创建远程目录
--ftp-method [multicwd/nocwd/singlecwd] 控制CWD的使用
--ftp-pasv 使用 PASV/EPSV 代替端口
--ftp-skip-pasv-ip 使用PASV的时候,忽略该IP地址
--ftp-ssl 尝试用 SSL/TLS 来进行ftp数据传输
--ftp-ssl-reqd 要求用 SSL/TLS 来进行ftp数据传输
-F/--form <name=content> 模拟http表单提交数据
-form-string <name=string> 模拟http表单提交数据
-g/--globoff 禁用网址序列和范围使用{}和[]
-G/--get 以get的方式来发送数据
-h/--help 帮助
-H/--header <line>自定义头信息传递给服务器
--ignore-content-length 忽略的HTTP头信息的长度
-i/--include 输出时包括protocol头信息
-I/--head 只显示文档信息
从文件中读取-j/--junk-session-cookies忽略会话Cookie
- 界面<interface>指定网络接口/地址使用
- krb4 <级别>启用与指定的安全级别krb4
-j/--junk-session-cookies 读取文件进忽略session cookie
--interface <interface> 使用指定网络接口/地址
--krb4 <level> 使用指定安全级别的krb4
-k/--insecure 允许不使用证书到SSL站点
-K/--config 指定的配置文件读取
-l/--list-only 列出ftp目录下的文件名称
--limit-rate <rate> 设置传输速度
--local-port<NUM> 强制使用本地端口号
-m/--max-time <seconds> 设置最大传输时间
--max-redirs <num> 设置最大读取的目录数
--max-filesize <bytes> 设置最大下载的文件总量
-M/--manual 显示全手动
-n/--netrc 从netrc文件中读取用户名和密码
--netrc-optional 使用 .netrc 或者 URL来覆盖-n
--ntlm 使用 HTTP NTLM 身份验证
-N/--no-buffer 禁用缓冲输出
-o/--output 把输出写到该文件中
-O/--remote-name 把输出写到该文件中,保留远程文件的文件名
-p/--proxytunnel 使用HTTP代理
--proxy-anyauth 选择任一代理身份验证方法
--proxy-basic 在代理上使用基本身份验证
--proxy-digest 在代理上使用数字身份验证
--proxy-ntlm 在代理上使用ntlm身份验证
-P/--ftp-port <address> 使用端口地址,而不是使用PASV
-Q/--quote <cmd>文件传输前,发送命令到服务器
-r/--range <range>检索来自HTTP/1.1或FTP服务器字节范围
--range-file 读取(SSL)的随机文件
-R/--remote-time 在本地生成文件时,保留远程文件时间
--retry <num> 传输出现问题时,重试的次数
--retry-delay <seconds> 传输出现问题时,设置重试间隔时间
--retry-max-time <seconds> 传输出现问题时,设置最大重试时间
-s/--silent静音模式。不输出任何东西
-S/--show-error 显示错误
--socks4 <host[:port]> 用socks4代理给定主机和端口
--socks5 <host[:port]> 用socks5代理给定主机和端口
--stderr <file>
-t/--telnet-option <OPT=val> Telnet选项设置
--trace <file> 对指定文件进行debug
--trace-ascii <file> Like --跟踪但没有hex输出
--trace-time 跟踪/详细输出时,添加时间戳
-T/--upload-file <file> 上传文件
--url <URL> Spet URL to work with
-u/--user <user[:password]>设置服务器的用户和密码
-U/--proxy-user <user[:password]>设置代理用户名和密码
-v/--verbose
-V/--version 显示版本信息
-w/--write-out [format]什么输出完成后
-x/--proxy <host[:port]>在给定的端口上使用HTTP代理
-X/--request <command>指定什么命令
-y/--speed-time 放弃限速所要的时间。默认为30
-Y/--speed-limit 停止传输速度的限制,速度时间'秒
-z/--time-cond 传送时间设置
-0/--http1.0 使用HTTP 1.0
-1/--tlsv1 使用TLSv1(SSL)
-2/--sslv2 使用SSLv2的(SSL)
-3/--sslv3 使用的SSLv3(SSL)
--3p-quote like -Q for the source URL for 3rd party transfer
--3p-url 使用url,进行第三方传送
--3p-user 使用用户名和密码,进行第三方传送
-4/--ipv4 使用IP4
-6/--ipv6 使用IP6
-#/--progress-bar 用进度条显示当前的传送状态

ubuntu curl 安装

在ubuntu系统下最简单的curl工具安装是通过apt命令或 apt-get 命令, 执行下面的apt命令:

$sudo apt install curl

命令输出如下:

正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列软件包是自动安装的并且现在不需要了:
java-common libappindicator1 libindicator7
使用'apt autoremove'来卸载它(它们)。
将会同时安装下列软件:
libcurl3-gnutls
下列【新】软件包将被安装:
curl
下列软件包将被升级:
libcurl3-gnutls
升级了 1 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 357 个软件包未被升级。
需要下载 138 kB/323 kB 的归档。
解压缩后会消耗 340 kB 的额外空间。
您希望继续执行吗? [Y/n] y
获取:1 http://mirrors.aliyun.com/ubuntu xenial-security/main amd64 curl amd64 7.47.0-1ubuntu2.5 [138 kB]
已下载 138 kB,耗时 0秒 (915 kB/s)
(正在读取数据库 ... 系统当前共安装有 185776 个文件和目录。)
正准备解包 .../libcurl3-gnutls_7.47.0-1ubuntu2.5_amd64.deb  ...
正在将 libcurl3-gnutls:amd64 (7.47.0-1ubuntu2.5) 解包到 (7.47.0-1ubuntu2.2) 上 ...
正在选中未选择的软件包 curl。
正准备解包 .../curl_7.47.0-1ubuntu2.5_amd64.deb  ...
正在解包 curl (7.47.0-1ubuntu2.5) ...
正在处理用于 libc-bin (2.23-0ubuntu9) 的触发器 ...
正在处理用于 man-db (2.7.5-1) 的触发器 ...
正在设置 libcurl3-gnutls:amd64 (7.47.0-1ubuntu2.5) ...
正在设置 curl (7.47.0-1ubuntu2.5) ...
正在处理用于 libc-bin (2.23-0ubuntu9) 的触发器 ...

当然你也可以直接从curl官方下载源码包进行安装,执行下面的wget命令来下载curl源码文件:

wget http://archive.ubuntu.com/ubuntu/pool/main/c/curl/curl_7.52.1.orig.tar.gz

或者直接下载curl的二进制安装包,执行下面命令:

wget http://security.ubuntu.com/ubuntu/pool/main/c/curl/curl_7.52.1-4ubuntu1.4_amd64.deb

Curl 命令GET请求

当curl命令安装完成后,我们:通过执行下面的命令来查看HTTP的header信息:

$curl -I https://www.bing.com

命令输出如下:

HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Content-Length: 119115
Content-Type: text/html; charset=utf-8
Vary: Accept-Encoding
P3P: CP="NON UNI COM NAV STA LOC CURa DEVa PSAa PSDa OUR IND"
Set-Cookie: SRCHD=AF=NOFORM; domain=.bing.com; expires=Thu, 23-Jan-2020 09:16:18 GMT; path=/
Set-Cookie: SRCHUID=V=2&GUID=52B6738D04434E1DA43017741146CB8F&dmnchg=1; domain=.bing.com; expires=Thu, 23-Jan-2020 09:16:18 GMT; path=/
Set-Cookie: SRCHUSR=DOB=20180123; domain=.bing.com; expires=Thu, 23-Jan-2020 09:16:18 GMT; path=/
Set-Cookie: _SS=SID=29B9E200E45061CF08A6E980E5E76063; domain=.bing.com; path=/
Strict-Transport-Security: max-age=10886400; includeSubDomains; preload
X-MSEdge-Ref: Ref A: 1FEEFC982E894C71AEC43DB3ED5118FF Ref B: BJ1EDGE0210 Ref C: 2018-01-23T09:16:18Z
Set-Cookie: _EDGE_S=F=1&SID=29B9E200E45061CF08A6E980E5E76063; path=/; httponly; domain=bing.com
Set-Cookie: _EDGE_V=1; path=/; httponly; expires=Sun, 17-Feb-2019 09:16:18 GMT; domain=bing.com
Set-Cookie: MUID=3D6BD680705A62C12D1DDD0071ED6374; path=/; expires=Sun, 17-Feb-2019 09:16:18 GMT; domain=bing.com
Set-Cookie: MUIDB=3D6BD680705A62C12D1DDD0071ED6374; path=/; httponly; expires=Sun, 17-Feb-2019 09:16:18 GMT
Date: Tue, 23 Jan 2018 09:16:17 GMT

curl显示页面的全部信息

curl -i http://www.osetc.com

命令输出如下:

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload  Upload   Total   Spent    Left  Speed
0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
HTTP/1.1 200 OK
Date: Tue, 23 Jan 2018 09:17:38 GMT
Server: Apache/2.2.22 (Unix) PHP/5.2.17p1
X-Powered-By: PHP/5.2.17p1
Link: <https://www.osetc.com/wp-json/>; rel="https://api.w.org/"
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
<!DOCTYPE html>
<html lang="en-US" class="no-js no-svg">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="profile" href="http://gmpg.org/xfn/11" rel="external nofollow" class="external" >
<script>(function(html){html.className = html.className.replace(/\bno-js\b/,'js')})(document.documentElement);</script>
<title>OSETC 技术网 | 专注于Linux/Unix系统技术</title>
……

 

显示GET请求的解析过程

curl -v http://www.osetc.com

ubuntu curl 下载 文件

如果你想通过curl命令来下载远程服务器上的文件,那么你需要使用-o 选项,将远程文件保存到本地,执行下面的命令:

curl -o fio.html    https://www.osetc.com/archives/20394.html

命令输出如下:

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload  Upload   Total   Spent    Left  Speed
100 90306    0 90306    0     0  64524      0 --:--:--  0:00:01 --:--:-- 64550

上面的命令将会把远程服务器上的20394.html 文件下载到当前目录并保存为 fio.html.
执行下面命令来查看文件是否下载成功:

root@devops-virtual-machine:~# ls fio.html
fio.html

你也可以使用下面的命令来恢复之前断开的curl下载过程,需要使用curl命令的选线组合:-L -O -C -:

curl -L -O -C - https://www.osetc.com/fio.txt

ubuntu curl 上传文件

如果需要通过curl命令来上传文件到远程的web服务器,可以使用curl命令的 -T选项,执行命令如下:

curl -T "{文件1,文件2}“ ftp://www.osetc.com/upload/

99%的人还阅读了:
Linux:用腻了 wget 或 curl,有什么更好的替代品吗?
Mac OS:终端下使用curl命令下载文件
参考地址:https://curl.haxx.se/download.html

ubuntu 14.0 4 / 16.04 多主题美化及安装教程(Numix, Unity,Mac,Win10)

本文主要讲述如何在14.0 4 / 16.04 系统下安装配置其它样式的ubuntu主题,比如:Numix 主题,unity主题,mac主题,win10主题等。

Unity主题介绍

Unity桌面主题是ubuntu 14.04 / 16.04 系统中的默认安装主题,类似于Centos ,oracle linux中的Gnome 主题。Unity 是基于GNOME桌面环境的用户界面, 由Canonical公司开发,主要用于Ubuntu操作系统。
Ubuntu原本使用的是完整的GNOME桌面环境。由于Ubuntu创始人Mark Shuttleworth对用户体验的哲学理念与GNOME团队有不同的理解,从2011年4月的Ubuntu 11.04起,Ubuntu使用Unity作为默认的用户界面,而不采用全新的GNOME Shell。但Ubuntu可通过PPA来安装GNOME Shell 。

Unity Tweak Tool 工具介绍及安装

Unity Tweak Tool 是 Unity 主题桌面里一个配置工具,其目的是按照你的需要改变 unity桌面,例如:Compiz、外观和桌面设置,Unity Tweak Tool 让这些操作都变得简单容易。其从ubuntu 13.04 开始就已经被添加到了ubuntu软件中心。
Unity Tweak Tool 工具安装
安装也很简单,直接执行下面的命令:

$ sudo apt-get install unity-tweak-tool

命令输出如下:

正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列软件包是自动安装的并且现在不需要了:
java-common libappindicator1 libindicator7
使用'apt autoremove'来卸载它(它们)。
下列【新】软件包将被安装:
unity-tweak-tool
升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 230 个软件包未被升级。
需要下载 0 B/376 kB 的归档。
解压缩后会消耗 2,864 kB 的额外空间。
正在选中未选择的软件包 unity-tweak-tool。
(正在读取数据库 ... 系统当前共安装有 185609 个文件和目录。)
正准备解包 .../unity-tweak-tool_0.0.7ubuntu2_all.deb  ...
正在解包 unity-tweak-tool (0.0.7ubuntu2) ...
正在处理用于 gnome-menus (3.13.3-6ubuntu3.1) 的触发器 ...
正在处理用于 desktop-file-utils (0.22-1ubuntu5.1) 的触发器 ...
正在处理用于 bamfdaemon (0.5.3~bzr0+16.04.20160824-0ubuntu1) 的触发器 ...
Rebuilding /usr/share/applications/bamf-2.index...
正在处理用于 mime-support (3.59ubuntu1) 的触发器 ...
正在处理用于 man-db (2.7.5-1) 的触发器 ...
正在处理用于 libglib2.0-0:amd64 (2.48.2-0ubuntu1) 的触发器 ...
正在处理用于 hicolor-icon-theme (0.15-0ubuntu1) 的触发器 ...
正在设置 unity-tweak-tool (0.0.7ubuntu2) ...

安装后的Unity Tweak Tool 工具如下图:
Unity Tweak Tool 工具安装1
 

Ubuntu Numix 主题安装(14.0 4 / 16.04)

Numix 是一个非常受欢迎的项目,Numix 发布的 GTK 主图和图标主题都受到广大 Linux 的喜爱,都非常流行,最近 Numix 宣布将发布一款运行Nitrux S.A的新Linux发行版本。下面我们会介绍Ubuntu 14.04 和 Ubuntu 16.04 下安装并更换当前主题为 Numix 主题和图标。
我们需要使用 Numix 的官方 PPA 来进行安装,执行下面的命令:

$ sudo add-apt-repository ppa:numix/ppa
$ sudo apt-get update
$ sudo apt-get install numix-gtk-theme numix-icon-theme-circle

如果还想安装 Numix 桌面提供的壁纸,执行下面命令:

$ sudo apt-get install numix-wallpaper-*

当我们将 Numix 主题和图标安装完成后,下面就来看看如何更改 Ubuntu 使用 Numix 主题。
更改当前主题为Numix主题和图标
1# 安装 Unity Tweak Tool工具
执行下面命令:

$ sudo apt-get install unity-tweak-tool

2# 打开 Unity Tweak Tool 优化工具,在 GTK + 中选择使用 Numix 主题,并在 Icons 中选择使用 Numix-Circle 系列图标。
更改当前主题为Numix主题和图标1
选好之后就可以用了,下图是更改后的 Ubuntu Numix 主题和图标的样式:
更改当前主题为Numix主题和图标1

Ubuntu mac 主题安装(14.0 4 / 16.04)

1# 更新ubuntu系统
执行下面命令:

$ sudo apt-get update
$ sudo apt-get upgrade

2# 安装unity-tweak-tool
执行下面命令:

$ sudo apt-get install unity-tweak-tool

3# 安装macbuntu 主题

sudo add-apt-repository ppa:noobslab/macbuntu
sudo apt-get update
sudo apt-get install macbuntu-os-icons-lts-v7
sudo apt-get install macbuntu-os-ithemes-lts-v7

卸载命令:

cd /usr/share/icons/mac-cursors && sudo ./uninstall-mac-cursors.sh
sudo apt-get remove macbuntu-os-icons-lts-v7 macbuntu-os-ithemes-lts-v7

4# 将面板上的 ‘Ubuntu Desktop’ 文字替换 ‘Mac’
执行下面的命令:

cd && wget -O Mac.po http://drive.noobslab.com/data/Mac/change-name-on-panel/mac.po
cd /usr/share/locale/en/LC_MESSAGES
sudo msgfmt -o unity.mo ~/Mac.po
rm ~/Mac.po

5# 语言上如果是其他非英语语言,将 /en 做相应修改,比如中文

cd && wget -O Mac.po http://drive.noobslab.com/data/Mac/change-name-on-panel/mac.po
cd /usr/share/locale/ch_ZN/LC_MESSAGES
sudo msgfmt -o unity.mo ~/Mac.po
rm ~/Mac.po

6# 恢复原来的桌面文字命令:

cd && wget -O Ubuntu.po http://drive.noobslab.com/data/Mac/change-name-on-panel/ubuntu.po
cd /usr/share/locale/en/LC_MESSAGES
sudo msgfmt -o unity.mo ~/Ubuntu.po
rm ~/Ubuntu.po

7# 启动器上苹果Logo

wget -O launcher_bfb.png http://drive.noobslab.com/data/Mac/launcher-logo/apple/launcher_bfb.png
sudo mv launcher_bfb.png /usr/share/unity/icons/

恢复图标:

wget -O launcher_bfb.png http://drive.noobslab.com/data/Mac/launcher-logo/ubuntu/launcher_bfb.png
sudo mv launcher_bfb.png /usr/share/unity/icons/

8# 安装docky,可以从Ubuntu软件中心安装。
打开Docky,进行如下设置;
为Docky添加或删除应用
9# 为Docky添加或删除应用:
右键有锁定到docky,执行即锁定。将图标直接拖出去即可删除锁定。
效果如下:
为Docky添加或删除应用
参考:http://www.cnblogs.com/liutongqing/p/7072878.html

Ubuntu Zukimac mac主题

zukimac是一款免费下载可用的 GNOME 外观,新增提供了 GTK 3.10 和 GTK 3.12 支持,也是一款Mac主题。
主题下载地址:
下载Zukimac(add_new_wm_theme)
下载Zukimac for GTK 3.10主题
下载Zukimac for GTK 3.12主题
下面来看下如何来安装主题,将下载的ubuntu主题放在themes目录下。
1# 先下载主题包;
2# 解压主题包;
3# 将解压的主题文件夹拷贝到/usr/share/themes/目录下;
4# 使用 Unity tweak tool 启用新主题。
Ubuntu Zukimac mac主题1
Ubuntu Zukimac mac主题1
图标可选择: Feanza

Ubuntu windows 10 主题安装及下载

下面分享一款类似于windows 10的ubuntu 主题包,下面是安装方法:
1# 先下载主题包;
主题包下载地址为:https://pan.baidu.com/share/init?surl=hrGw6VU  密码: atyc
Ubuntu windows 10 主题下载2
Ubuntu windows 10 主题下载2
图标包地址: https://pan.baidu.com/s/1geQ7TOR  密码:7eqw
Ubuntu iPack
2# 解压主题包;
3# 将解压的主题文件夹拷贝到/usr/share/themes/目录下;
4# 使用 Unity tweak tool 启用新主题。

Ubuntu Flatabulous主题安装

Ubuntu Flatabulous主题1
1#  Flatabulous主题安装,执行下面命令:

$ sudo add-apt-repository ppa:noobslab/themes
$ sudo apt-get update
$ sudo apt-get install flatabulous-theme

2# 安装Flatabulous主题图标
执行命令:

$ sudo add-apt-repository ppa:noobslab/icons
$ sudo apt-get update
$ sudo apt-get install ultra-flat-icons

Ubuntu Flatabulous主题 图标
3# 使用 Unity tweak tool 启用新主题
Ubuntu Flatabulous主题
如果你想下载更多其它的Ubuntu主题,可以从下面的网站中获取:
http://www.ubuntuthemes.org/
ubuntu主题下载
其安装方法和其它主题中的类似。
本文永久链接:https://www.osetc.com/archives/20472.html
 

Ubuntu 14.04 / 16.04 主题美化方法详细介绍

对于那些想要一个易于使用的界面的用户,Ubuntu是一个很好的Linux发行版,并且对于一个Linux新手也可以说是最好的Linux发行版。不过这产生了一些副作用,那就是,对于界面和外观,Canonical公司已经为用户做了很多设定,尤其是Unity桌面环境。
然而这些不是一成不变的。下面是一些关于怎样让你更加舒心地使用Ubuntu的技巧。看过上面的截图中我对Ubuntu的设定,你可以看到我的的Unity桌面,相比于默认设定的桌面有何不同。
Ubuntu 14.04 16.04 主题美化方法详细介绍
下面让我们分步来实现定制Ubuntu桌面。
1# 安装Unity Tweak Tool
在你能对Ubuntu外观做任何有效地修改之前,你不得不安装Unity Tweak Tool。这是一个Unity桌面环境下特殊设置管理软件,并且通过它你可以实现替换系统图标和主题。你可以从Ubuntu软件中心下载该软件,如果你更加偏爱terminal终端的话,你也可以使用下面的命令:

$ sudo apt-get install unity-tweak-tool

如果你正在使用Gnome桌面环境,那么你可能需要尝试Gnome Tweak Tool这款软件。你也可以从Ubuntu软件中心和使用以下命令来安装该软件:

$ sudo apt-get install gnome-tweak-tool

2# 安装GTK主题
对于Ubuntu有很多定制的主题,这些主题可以影响应用和窗口的外观。我正在使用的主题是Numix GTK+。你可以在http://numixproject.org/找到关于Numix主题和图标的更多信息。你可以通过打开终端并输入以下命令来安装Numix主题:

$ sudo add-apt-repository ppa:numix/ppa
$ sudo apt-get update && sudo apt-get install numix-gtk-theme

为了使该主题生效,我们需要打开Unity Tweak Tool,选择“外观标题”下的“主题”选项,然后在“已有主题”一栏中选择该主题。只要相应的软件仓库名字一致,对于其他主题,你可以重复该过程来应用。你可以访问Gnome-Look.org获得更多的主题。另一个和Numix主题很相似的主题是Moka,你可以在http://mokaproject.com/获得更多关于Moka主题的信息。
3# 安装图标
以上截图中使用的图标是来自Numix主题的Numix圆形图标。你可以通过在终端输入以下命令来安装该图标集:

$ sudo apt-add-repository ppa:numix/ppa
$ sudo apt-get update
$ sudo apt-get install numix-icon-theme-circle

为了使该图标集生效,我们需要在Unity Tweak Tool中选择“图标”选项,然后选择该图标集。再一次声明,这个方法对于任何图标集是可行的。Moka也提供给你的桌面带来多彩的、一致性设计的图标集。
4# 安装conky系统监视软件
Conky是一个轻量级桌面系统监视软件。该软件本身是非常简单的,不过它是可定制的,这样一来它就可以显示很多的有用的信息。你可以通过在终端输入以下命令来安装Conky:

$ sudo apt-get install conky conky-all

你将会需要curl这个软件,你可以通过以下这个命令来安装该软件:

$ sudo apt-get install curl

上面截图中使用的conky主题是Harmattan,它可以以15种不同的样式来显示时间、天气、以及系统进程。要安装该主题,你可以从deviantART下载zip文件,然后解压。将.conky-weather文件夹和位于主题文件夹的.conkyrc文件(你可能需要按Ctrl+H来显示这些隐藏文件)移动到你的home文件夹。Conky有很多的主题。尝试这些主题,你所需要做的就是用所要使用主题的.conkyrc文件替换在home文件夹的.conkyrc文件。
5# 安装一些指示器程序
有很多第三方的指示器程序,通过这些程序你可以监视你的桌面信息,例如天气、系统性能等。我所使用的指示器程序相当简单。因为天气和系统性能已经在conky中显示,所以我没有安装这些指示器。不过你可以在终端输入以下命令来安装他们:

$ sudo apt-get install indicator-weather
$ sudo apt-get install indicator-multiload

我所使用的两个指示器程序是大小写指示程序以及触摸板控制器,这是因为我的笔记本没有大小写指示灯和控制触摸板开关的热键。你可以通过以下命令来安装这两个软件:

$ sudo add-apt-repository ppa:tsbarnes/indicator-keylock
$ sudo add-apt-repository ppa:atareao/atareao
$ sudo apt-get update
$ sudo apt-get install indicator-keylock
$ sudo apt-get install touchpad-indicator

你可能需要注销并重新登录来使用这些应用。
6# 通过Compiz设置管理器深度定制你的桌面
如果对于你来说Unity Tweak Tool不够强大,那么你可以尝试Compiz设置管理器.
警告:
如果错误的设置被应用的话,Compiz设置管理器可能会损害到你的系统。所以使用时要格外小心。你可以看到Ubuntu系统中隐藏的各种设置。你可以在Ubuntu软件中心获取该软件或者终端输入以下命令来安装:

$ sudo apt-get install compiz compizconfig-settings-manager compiz-fusion-plugins-extra compiz-fusion-plugins-main compiz-plugins

现在你的Ubuntu桌面变得具有超棒了!所有的这些步骤都有成千上万种选择,所以折腾是无极限的。还在等什么?还不赶紧去享受你的新Ubuntu桌面!via:http://os.51cto.com/art/201406/442093.htm
更多阅读:ubuntu 14.0 4 / 16.04 多主题美化及安装教程(Numix, Unity,Mac,Win10)
本文永久链接:https://www.osetc.com/archives/20467.html