在Linux中,tar命令常常用来将文件或目录压缩成一个tar包。但是,在实际应用中,我们有时需要在压缩的时候保持原有的文件权限,以保证在后续的操作中文件的功能和安全性不受到影响。本文将会介绍如何使用tar命令来保持文件权限。
成都创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站建设、成都做网站、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的枝江网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
一、什么是tar命令?
tar命令是Linux系统下用于归档文件的指令。它可以将一系列文件打包成一个文件,通常是以tar扩展名结尾的文件,并可选地进行压缩处理。使用tar命令可以更加方便地对多个文件进行管理。
二、tar命令的基本用法
使用tar命令最基本的用法是:
“`bash
tar [-options] filename.tar.gz file1 file2 file3
“`
把文件 file1, file2, file3打包成一个名为filename.tar.gz的文件。
常用的选项有:
* -z:使用gzip进行压缩/解压缩。
* -c:创建一个文档。
* -x:从保存的文档中提取文档。
* -v:显示压缩/解压缩进程。
* -f:指定待处理的文档。
三、如何保护文件权限
默认情况下,tar命令会在压缩时重置文件的权限。如果不想重置,需要使用以下选项:
* -p:保留文件权限。
使用下面的命令可以将文件夹test.tar.gz中的文件及文件夹压缩,并保留文件的权限:
“`bash
tar -zcvfp test.tar.gz test/
“`
这里的选项-z表示将文件压缩成tar包,-c表示创建新的归档文件,-v表示显示处理进度,-f指定归档文件,-p保留文件的权限。
四、如何还原文件权限
在解压缩时,tar命令也会默认重置文件的权限,如果需要保留文件原有的权限,需要加上-p参数。使用下面的命令可以解压缩保留权限的文件:
“`bash
tar -zxvpf test.tar.gz
“`
选项-z表示将文件解压缩出来,-x表示提取文件,-v表示显示处理进度,-f指定归档文件,-p保留文件的权限。
五、
在使用Linux系统中的tar命令进行文件归档时,如果需要保留文件的权限,需要在压缩和解压缩时加上-p参数,这样能够保持文件原有的权限,维护文件的功能和安全性。tar命令是Linux系统中一个十分实用的文件打包工具,我们可以根据不同的情况选择不同的选项来实现想要的操作。
相关问题拓展阅读:
rwx 421
一直以root登陆使用linux的人来说很少有权限被拒这种概念,但某些时候又深受权限拒绝困扰。
知道为什么很多程序中需要使用getuid(),setuid()?为什么以普通权限登陆的用户不能进入/root,为什么在/目录下执行ls -l后可以显示root的信息,但ls /root -al却是权限不够?为什么有些文件夹可以继续创建文件,但就是不能ls?等等,相信看了此文就能明白。
主要是学习笔记,不足之处请指正。
CentOS 5.4 $ uname -a Linux xxx 2.6.18-164.el5xen #1 P Thu Sep 3 04:47:32 EDT 2023 i686 i686 i386 GNU/Linux
一、口令文件1,格式存储文件/etc/passwd,格式如下:root:x:0:0:root:/root:/bin/bash aaa:x:501:501:bj, bj,,:/home/aaa:/bin/bash用户名:加密密码:用户ID:组ID:注释:工作目录:shell:
默认情况是之一行的格式;注释字段可以自行修改,用逗号隔开,如第二行格式,这主要是给finger命令使用时可解析。
可以vi /etc/passwd修改,但为了保证其格式的正确性,请用vipw命令编译此文件。
sh-3.2# finger aaa Login: aaa Name: bj Directory: /home/aaa Shell: /bin/bash Office: bj,Home Phone:Never logged in. No mail. No Plan.
2,编程实例
/*getpwnam_pwuid.c*/ #include #include #include
int main(void)
{ //struct passwd *pwd = getpwnam(“aaa”);struct passwd *pwd = getpwuid(501);if(pwd == NULL)
{ printf(“err.\n”);return 1;}
printf(“name:%s\n”, pwd->pw_name);printf(“passwd:%s\n”, pwd->pw_passwd);printf(“description:%s\n”悄历, pwd->pw_gecos);printf(“uid:%d\n”, pwd->pw_uid);printf(“gid:%d\n”, pwd->pw_gid);printf(“dir:%s\n”, pwd->pw_dir);printf(“shell:%s\n”, pwd->pw_shell);
return 0;}
sh-3.2# gcc getpwnam_pwuid.c -o app sh-3.2# ./app name:aaa passwd:x description:bj, bj,,uid:501 gid:501 dir:启仔搜/home/aaa shell:/bin/bash
二、组文件1,格式存储文戚没件/etc/group,格式如下root:x:0:root bin:x:1:root,bin,daemon aaa:x:501:组名:加密密码:组ID:指向的各用户名
2,改变文件uid和gid.
sh-3.2# pwd /root/study sh-3.2# ls -al -rw-r——r—— 1 root root:23 test.c
chgrp 改变所属组ID,当然只有root权限才可以修改。
sh-3.2# chgrp aaa test.c sh-3.2# ls -al -rw-r——r—— 1 root aaa:23 test.c
这个aaa就是新组名,其在/etc/group中,可以通过adduser aaa自行添加sh-3.2# cat /etc/group root:x:0:root bin:x:1:root,bin,daemon daemon:x:2:root,bin,daemon.
gdm:x:42:sabayon:x:86:plmtest:x:500:aaa:x:501:
chown 改变用户ID或组ID sh-3.2# chown aaa:aaa test.c sh-3.2# ls -al -rw-r——r—— 1 aaa aaa:23 test.c
3,编程实例
/*getgrnam.c*/ #include #include
int main(int argc, char *argv)
{ if(argv == NULL)
{ printf(“input error.\n”);return 1;}
struct group *gp = getgrnam(argv);if(gp == NULL)
{ printf(“err.\n”);return 1;}
printf(“name:%s\n”, gp->gr_name);printf(“psswd:%s\n”, gp->gr_passwd);printf(“gid:%d\n”, gp->gr_gid);
int i;for(i = 0; gp->gr_mem != NULL; i++)
{ printf(“group name:%s\n”, gp->gr_mem);}
return 0;}
sh-3.2# gcc getgrnam.c -o app sh-3.2# ./app bin name:bin psswd:x gid:1 group name:root group name:bin group name:daemon 4,文件权限不细讲了sh-3.2# ls -al总计drwxr-x—— 13 root root:01 . drwxr-xr-x 32 root root:15 ……
-rw-r——r—— 1 root root25 22:33 3.3..tgz -rw—— 1 root root:16 .bash_history -rw-r——r—— 1 root root .bash_logout -rw-r——r—— 1 root root6 .bash_profile -rw-r——r—— 1 root root6 .bashrc drwxrwxrwxusers:16 cflow-1.3 -rw-r——r—— 1 root root20:13 cflow.tar.gz -rw-r——r—— 1 root root6 .cshrc -rwxr-xr-x 1 root root:48 delete_M.sh -rw-r——r—— 1 root root:25 .dir_colors
主要是最左边一列:drwxr-x——10个字符,最左边是文件类型,-默认为普通文件;d:目录文件;l符号链接……
后面9个,3个一组共三组,分别表示所属用户uid的权限;所属组或者附属组gid的权限;其它权限。
三个字符分别是读、写、执行权限读4,写2, 执行1
所以chmod 777 test.c,提升到读、写、执行权限。
5,组权限操作实例此节演示相同组的成员之间共享资源,即不同uid但相同gid的用户共享同一组的资源。
为了方便起见,我同时开了两个终端。
”sh-3.2#”以root权限登陆的shell /bin/sh “”以testa用户登陆的shell
注:下文提到的“用户”是指/etc/passwd里定义的通过终端登陆的用户(此文即以下增加的三个账号名)。
sh-3.2# useradd testa sh-3.2# useradd testb sh-3.2# useradd testc
sh-3.2# tail -f /etc/passwd -n 4 sabayon:x:86:86:Sabayon user:/home/sabayon:/in/nologin testa:x:500:500::/home/testa:/bin/bash testb:x:501:501::/home/testb:/bin/bash testc:x:502:502::/home/testc:/bin/bash
再开一个终端登陆testa,之前那个终端保持。
sh-3.2# su testa $ id uid=500(testa) gid=500(testa) groups=500(testa)
$ ls -al总计 28 drwxr-xr-x 5 root root:52 . drwxr-xr-x 32 root root:15 ……
drwx—— 3 testa testa:56 testa drwx—— 3 testb testb:48 testb drwx—— 3 testc testc:52 testc
$ cd testb bash: cd: testb: 权限不够
通过root修改testb目录权限为770,即当前uid或者gid相同的用户均有读写执行权限。
sh-3.2# cd /home/ sh-3.2# chmod 770 testb
$ ls -al总计 28 drwxr-xr-x 5 root root:52 . drwxr-xr-x 32 root root:15 ……
drwx—— 3 testa testa:56 testa drwxrwx—— 3 testb testb:48 testb (here modify)
drwx—— 3 testc testc:52 testc
$ cd testb bash: cd: testb: 权限不够$ id uid=500(testa) gid=500(testa) groups=500(testa)
此时虽然开放了testb的所属组权限,但用户testa的gid=500(testa) groups=500(testa),它还不属于testb组。
下面修改testa的gid为testb(或者增加其附属组groups值为testb)
sh-3.2# usermod -G testb testa (增加用户testa的附属组testb)
sh-3.2# id testa uid=500(testa) gid=500(testa) groups=500(testa),501(testb)
此时testa终端需要重新登下,使刚才更改生效$ exit exit # su testa $ id uid=500(testa) gid=500(testa) groups=500(testa),501(testb)
$ cd /home/ $ ls -al总计 28 drwxr-xr-x 5 root root:52 . drwxr-xr-x 32 root root:15 ……
drwx—— 3 testa testa:56 testa drwxrwx—— 3 testb testb:48 testb drwx—— 3 testc testc:52 testc $ cd testb $ pwd /home/testb
以上是增加了用户testa的附属组testb,使其对于属于testb组的资源有了访问权限。
下面再使用newgrp切换用户testa的gid.
$ id uid=500(testa) gid=500(testa) groups=500(testa),501(testb)
$ newgrp testb $ id uid=500(testa) gid=501(testb) groups=500(testa),501(testb)
此时testa用户的gid已改为501(testb)。
组之前的关系在文件/etc/group sh-3.2# tail -f /etc/group -n 4 sabayon:x:86:testa:x:500:testb:x:501:testa (最后一列:组内用户列表。即组testb里包含testa,testa属于testb组,大概就这意思吧……)
testc:x:502:
虽然知道控制组关系的文件,但不能直接修改些文件,否则执行newgrp时会出现”抱歉”错误提示。
当然root用户权限是无限制的,它访问文件时不需要进行权限检查。
三、相关系统调用getuid();getgid();int setuid(uid_t uid);int setgid(gid_t gid);
只有超级用户或者需要设置的uid和当前用户的uid一致才可以设置,否则返回-1,置errno = EPERM, errno可以通过strerror()翻译。
其它:$ su testa $ sudo touch aa
testa is not in the sudoers file. This incident will be reported.
以root权限vim /etc/sudoers增加testa ALL=(ALL) ALL
参考:APUE2E,1.8, 4.4, 8.11
linux下文件权限分为四段:drwxrwxrwx
d表示这绝含是一个目录,是一段,有时之一段也可能是l(l表示软连接)也可能没有,就用“-”表示
第二段是所属限,r:4(读取);w:2(写入);x:1(执行),rwx表示所属主用于并槐笑所有权明锋限,第三段和第四段也是一个意思,但第三段表示的是所属组,第四段表示的是其他人,懂了么?
关于linux tar 保持权限的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
香港服务器选创新互联,2H2G首月10元开通。
创新互联(www.cdcxhl.com)互联网服务提供商,拥有超过10年的服务器租用、服务器托管、云服务器、虚拟主机、网站系统开发经验。专业提供云主机、虚拟主机、域名注册、VPS主机、云服务器、香港云服务器、免备案服务器等。
当前文章:如何在Linux中使用tar命令保持文件权限?(linuxtar保持权限)
浏览路径:http://www.shufengxianlan.com/qtweb/news8/308108.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联