Linux系统之sodu用户切换,rsync文件传输,find文件查找串讲
目录:
(一)sodu用户切换
(二)Linux和Linux之间互相传输文件
(三)Linux和Windows之间互相传输文件
(四)find文件查找
(五)其他查找工具
成都网站建设哪家好,找创新互联公司!专注于网页设计、成都网站建设、微信开发、微信小程序、集团成都企业网站定制等服务项目。核心团队均拥有互联网行业多年经验,服务众多知名企业客户;涵盖的客户类型包括:成都宣传片制作等众多领域,积累了大量丰富的经验,同时也获得了客户的一致称扬!
(一)sodu用户切换
(1.1)我们在系统中切换用户时候,是必须要知道对方的密码才可以切换的,但是很多时候root密码不可能让每个人都知道。为了解决这个问题,可以使用root用户去设置哪些用户拥有执行哪些命令的权限,而对应的用户使用“sudo”命令进行用户切换。
(1.2)我们在vms002主机上进行操作,我们使用root用户打开/etc/sudoers配置文件,其中配置文件的格式可以参考图1-2。
# gedit /etc/sudoers
(1.3)由于/etc/sudoers文件中的内容已经比较多了,我们可以在/etc/sudoers.d/目录中进行编辑,而/etc/sudoers配置文件则会将/etc/sudoers.d/目录中的文件作为自己的一部分(图1-3),表示的是jerry用户在vms002.example.com主机上执行mount和umount命令的时候,将会按照root用户的权限进行执行(图1-4)。
# gedit /etc/sudoers.d/jerry
(1.4)此时我们发现在没有创建/etc/sudoers.d/jerry文件之前我们使用jerry用户是无法执行mount挂载命令的,接着我们编辑/etc/sudoers.d/jerry文件允许jerry用户执行mount和umount命令,此时我们登录式切换到jerry用户后,使用sudo命令发现已经可以正常的使用mount挂载命令了(图1-5)。注意:我们在使用jerry用户执行sudo命令的时候,需要执行一次jerry用户的密码,系统保存密码默认为5分钟,如果需要清除保存的密码我们可以使用“sudo -k”命令(图1-6)。
# sudo mount /dev/cdrom /mnt/
# sudo -k---清除系统保存的密码
# sudo -l---列出系统中所有允许执行的权限信息
(1.5)如果我们希望jerry用户在执行mount或者umount命令的时候不需要执行密码,则可以加上“NOPASSWD”参数,表示当jerry用户在vms002.example.com主机上执行mount和umount命令的时候,会按照root用户的权限执行命令,并且不需要输入密码信息(图1-8)。此时我们执行的时候会发现jerry用户直接执行了mount命令,并且挂载成功了(图1-9)。
(1.6)如果我们希望jerry用户能够按照root用户的权限执行所有命令,则我们可以使用“ALL”参数,表示所有命令都是按照root用户的权限进行执行(图1-10),此时我们使用“sudo -i”命令便可以切换到管理员root下,执行所有的命令了(图1-11)。
# sudo -i---切换到管理员权限
(1.7)一般我们可以将sudo和网络用户进行和配合使用,例如我们有一台目录服务主机存放的都是账户信息,还有多台成员服务器,当网络用户的服务搭建好之后,例如现在我们有一个tom网络用户,一般情况下我们是可以从任意一台成员服务器使用tom网络用户名登录到系统中的。而现在我们在sudo的配置文件中设置,vms001主机上tom用户登录时可以执行的相关权限,其他成员服务器主机上使用tom用户登录时都没有任何的权限,这样就可以很好的进行权限的管理了。
(二)Linux和Linux之间互相传输文件
(2.1)在系统中有时候我们需要传输一些小文件或者一些零散的文件,此时我们需要一些传输的工具进行文件传输,通常在Linux系统和Linux系统之间传输文件的工具主要有scp和rsync两种工具可以使用,这两种工具都是基于ssh服务建立起来的工具。
(2.2)scp使用方法
(2.2.1)首先我们来了解scp工具,scp工具的语法如下:“scp -选项 /path2/file remoteIP:/path3”,表示将当前主机下目录中的文件拷贝到远端主机下的目录中。
(2.2.2)我们尝试将vms001主机上的hosts文件拷贝到vms002主机的/opt/目录下,我们可以按照如下的方式操作,发现可以正常的将vms001主机的文件拷贝传送到vms002主机上了(图2-3)。
# scp /etc/hosts vms002:/opt/
(2.2.3)接着我们在vms001主机上切换到tom用户,然后同样尝试将/etc/hosts文件拷贝到vms002主机的/opt/目录中,我们发现并不能拷贝传送文件成功,这是由于我们在vms001主机上我们没有指定用户名,所以此时默认使用的是当前的用户名tom传送文件(图2-4),查询/opt/目录的权限信息,我们发现目录中其他用户并没有可写的权限,因此我们是无法拷贝传送文件成功的(图2-5)。而当我们指定使用root用户传输到vms002主机的/opt目录下(图2-6),此时我们发现在vms002主机的/opt目录可以正常的查看到hosts文件了(图2-7)。
# useradd tom---创建一个tom用户
# echo redhat | passwd --stdin tom---给tom用户创建密码
# ls -ld /opt/---查看opt目录的权限
(2.2.4)接着我们在vms001主机上先会生成一个不需要输入密码的密钥对(图2-8),然后将公钥对从vms001主机拷贝到vms002主机上,此时我们发现从vms001主机可以直接连接到vms002主机而不用输入密码(图2-9),同时我们从vms001主机传送/etc/hosts文件到vms002主机时,也是不需要输入密码就可以传输成功的(图2-10)。
# ls .ssh/
# ssh-keygen -N ""---生成一个不需要输入密码的密钥对
# ssh-copy-id vms002---将公钥对从vms001主机拷贝到vms002主机上
# scp /etc/hosts vms002:/opt/---将vms001主机的文件拷贝到vms002主机上
(2.2.5)现在我们的需求是将当前vms001主机的/boot目录下的文件拷贝到vms002主机的/opt目录下,此时我们可以使用scp -r递归的方式将目录中的文件进行拷贝(图2-11),此时我们在vms002主机上看到/opt目录下已经产生了一个boot目录了(图2-12)。
# scp -r /boot/ vms002:/opt/
(2.2.6)我们也是可以反过来操作的,即可以把远端主机的文件拷贝到本地的,例如我们把vms002主机上的vms002.txt文件拷贝到vms001主机上,此时我们发现vms001主机上可以看到vms002.txt的文件了。
# scp vms002:~/vms002.txt .---将vms002主机上的文件拷贝到本地
(2.3)rsync使用方法
(2.3.1)rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。其中rsync的语法为:“rsync -选项 /path2/file remoteIP:/path3”,表示将当前主机的文件拷贝到远端主机的目录中。
(2.3.2)我们尝试将/etc/hosts文件拷贝到vms002主机的/opt目录,此时我们发现vms002主机上便已经有了vms001主机上的hosts文件了(图2-16)。
# rsync /etc/hosts vms002:/opt/---将/etc/hosts文件拷贝到vms002主机的/opt目录
(2.3.3)如果我们想要将vms001主机的/boot/目录下的所有文件都拷贝到vms002主机的/opt目录下,则可以使用rsync -r命令(图2-17),注意此处我们使用的是“/boot/”表示的是boot目录下的所有的文件。此时我们在vms002主机上发现/opt目录下已经存在了boot目录中的所有的文件了(图2-18)。
# rsync -r /boot/ vms002:/opt/---将/boot/目录下的所有文件都拷贝到vms002主机的/opt目录下
(2.3.4)如果我们希望将vms001主机的/boot/目录和目录下的所有文件整体拷贝到vms002主机的/opt目录下(图2-19),注意此处我们使用的是“/boot”表示的是将目录及目录下文件作为一个整体进行拷贝,此时在vms002主机上发现/opt目录下已经产生了一个boot目录了,且boot目录中也有vms001传输过来的所有文件了(图2-20)。
# rsync -r /boot vms002:/opt/
(2.3.5)如果我们希望对文件的时间、属主、属组等所有信息都进行统一的拷贝传输,此时我们可以使用rsync -a命令实现这样的需求。
# rsync -a /boot vms002:/opt/
(2.3.6)有时候为了可以更好的使用rsync的服务,我们也可以使用图形化界面的工具grsync,常见的grsync版本为grsync-1.2.4-3.el7.nux.x86_64.rpm软件包。
(三)Linux和Windows之间互相传输文件
(3.1)lrzsz使用方法
(3.1.1)在Linux和Windows系统之间进行文件传输,通常我们是有很多小的工具可以使用的,例如我们常见的lrzsz,我们首先要确保在服务器上已经安装了lrzsz,如果我们使用的是图形化界面的安装方式,则lrzsz默认是已经安装好了的;如果我们使用的是最小化安装系统的方式,则是没有默认安装lrzsz工具的。
(3.1.2)我们可以在vms001主机上输入rz命令,这样就可以将Windows主机上的文件传输到Linux系统了。
(3.1.3)如果我们希望将Linux系统的文件传输到Windows主机时,我们可以在vms001主机使用sz命令,便可以实现这个需求。
# sz vms002.txt
(3.1.4)我们需要知道的是lrzsz工具是可以通过xshell、secureCRT等工具连接到服务器上的,但是如果我们使用的是putty客户端时,则是不支持使用lrzsz工具的。
(3.2)一般来说我们上面使用的lrzsz是用来传输小文件比较便捷的,如果我们想要传输大文件一般是不建议使用lrzsz的。此时我们可以使用xshell客户端提供的工具,我们可以点击“新建文件传输”或者是通过快捷键“Ctrl+Alt+F”便可以将工具打开,此时我们便可以使用非常快的速率传输大文件了。
(3.3)有时候我们也可以使用其他的一些工具实现Linux和Windows系统之间的文件传输,例如WinSCP 或者FileZilla,也是可以实现我们的需求的。
(四)find文件查找
(4.1)一般我们使用find命令进行文件的查找,find命令的格式为:“find 目录 -属性 值”,其中如果没有指明目录则默认是在当前目录下进行查询,其中属性主要包括:name、iname、user、group、nouser、nogroup、uid、gid、size、mtime、mmin、type、perm
(4.2)接着我们在vms002主机上创建一个rh224目录,然后创建相关的文件,并给创建的文件设置对应的属主和属组信息。
# chown jerry aa---修改aa的属主为jerry
# chown jerry.jerry bb---修改bb的属主和属组为jerry
# chown .users cc---修改cc的属组为users
# chown 101.users dd---修改dd的属主为101属组为users
# chown .103 ee---修改ee的属组为103
(4.3)如果我们想在系统中找到名字为lwang的文件,则可以使用“-name”参数;如果我们希望在查询名字的时候忽略大小写,则可以使用“-iname”参数。
# find / -name lwang---找到名字为lwang的文件,则可以使用“-name”参数
# find / -iname lwang---查询名字的时候忽略大小写,则可以使用“-iname”参数
(4.4)如果我们想要查询属主为jerry用户的文件,则可以使用“-user”参数;如果我们想要查询属组为jerry的文件,则可以使用“-group”参数查询。
# find -user jerry---查询属主为jerry用户的文件
# find -group jerry---查询属组为jerry用户的文件
(4.5)因为jerry用户的uid为1000,如果我们想要查询uid为1000的文件,则可以使用“-uid”参数;如果我们想要查询gid为1000的文件,则可以使用“-gid参数”
# find -uid 1000---查询uid为1000的文件
# find -gid 1000---查询gid为1000的文件
(4.6)如果想要查询没有所属主的文件,则可以使用“-nouser”参数;如果想要查询没有所属组的文件,则可以使用“-nogroup”参数。
# find -nouser---查询没有所属主的文件
# find -nogroup---查询没有所属组的文件
(4.7)如果我们想要查询属主和属组都是jerry用户的文件,则我们可以使用“-a”参数进行连接,表示两个条件都要同时满足;而如果我们想要查询属主是jerry或者属组是jerry用户的文件,则可以使用“-o”参数,表示所有的条件只要有一个满足,都是符合条件的。
# find -user jerry -a -group jerry---查询属主和属组都是jerry用户的文件
# find -user jerry -o -group jerry---查询属主是jerry或者属组是jerry用户的文件
(4.8)接着我们在vms002主机上重新创建如下的7个文件,如果我们希望查询文件大小正好等于3M的文件,则直接使用“3M”即可,如果我们希望查询大于3M的所有文件则可以使用“+3M”参数,此时我们便可以根据文件的大小size进行查询。
# rm -rf [a-z]*---删除rh224目录中的所有文件
# dd if=/dev/zero of=file1 bs=1M count=1---创建一个1M的文件file1
# find -size 3M---查询文件大小正好为3M的文件
# find -size +3M---查询文件大小大于3M的所有文件
# find -size +3M -o -size 3M---查询文件大小大于且等于3M的所有文件
(4.9)我们还可以根据文件的时间属性进行查询,我们可以查询创建的文件的时间间隔为1天的文件,创建的文件的时间间隔大于1天的文件,创建的文件的时间间隔小于1天的文件。
# find -mtime 1---查询所创建的文件的时间间隔为1天的
# find -mtime +1---查询所创建的文件的时间间隔大于1天的
# find -mtime -1---查询所创建的文件的时间间隔小于1天的
(4.10)我们还可以通过mmin参数以分钟的精度查询文件的创建时间状态。
# find -mmin 44---查询文件的创建时间为44分钟的
# find -mmin -44---查询文件的创建时间少于44分钟的
# find -mmin +44---查询文件的创建时间超过44分钟的
(4.11)我们还可以通过文件的类型type进行查询,我们先在系统中创建一个目录rh224,再创建一个软连接从file6文件连接指向lwang文件(图4-15)。我们知道在查询文件属性的时候“d”参数表示目录文件,“-”表示的普通文件,“l”表示的软连接,“b”表示的是块设备及block文件,“c”表示的是字符设备。如果我们想要查询一个块设备类型的文件,则可以使用“-b”参数,如果我们想查询一个普通类型的文件设备,则可以使用“-f”参数(图4-16)。
# ln -s lwang file6---创建一个软连接,file6连接到lwang文件上
# find -type b---查询块设备类型的文件
# find -type f---查询普通文件类型的设备
(4.12)我们也可以通过权限perm来进行查询,例如我们现在设计一个权限ugo=364(图4-17),同时我们将file1文件的权限设置为364,然后我们查询当前目录下权限完全符合364设置的所有文件,此时发现所有文件中只有file1文件是符合权限要求的(图4-18)。
# chmod 364 file1---修改file文件的权限为364
# find -perm 364---查询当前目录下权限完全符合364设置的所有文件
# find -perm +364
(4.13)我们将权限至少为364的文件都挑选出来,因此发现file1、file2、file6三个文件是符合要求的。
# find -perm -364---查询的权限可以比364的权限多,但是不可以少
(4.14)我们可以使用/364表示只要文件的ugo三个权限中有任意一个位置的权限含于我们查询的364三个位置上的一个权限,那么此文件就是符合要求的。此时我们发现除了lwang的权限是不符合要求的,其他的文件都是符合要求的。
# chmod 200 file3---将file3文件设置为200
# chmod 004 file4---将file4文件设置为004
# chmod 020 file5---将file5文件设置为020
# chmod 411 lwang---将lwang文件设置为411
# find -perm /364---查询ugo三个权限中有任意一个位置的权限含于我们查询的364三个位置上的一个权限的文件
(4.15)如果我们想查询对应的文件的属性,可以使用xargs命令进行操作,将查询出的file开头的文件通过xargs参数传递给ls命令,此时便可以查看查找出来的文件的属性信息了(图4-21)。同时我们也可以使用xargs参数执行删除的操作(图4-21-1)。
# find -name "file*" | xargs ls -l---查询file开头的所有文件的属性
# touch file{1..10}---创建10个file开头的文件
# find -name "file*" | xargs rm -rf---将file开头的文件全部删除
(4.16)第二种方式我们也可以使用“-exec”命令查看查询出来的文件的属性信息,通过使用“-exec”将查询出来的file开头的所有文件全部删除。
# find -name "file*" -exec rm -rf {} \;---将查询出来的file开头的所有文件全部删除
(4.17)如果我们当前目录中除了文件还有目录,并且目录下还包含子文件夹,那么此时我们在执行“# find -name lwang”的命令时,会自动的到子文件夹中做递归查询。如果现在我们并不想做深层的查询,只希望是做1层的查询,此时我们可以使用“# man find”进行查询,然后查找“maxdepth”关键字即可。递归查找
# find -maxdepth 1 -name lwang---在当前目录的第一层查找文件名为lwang的文件
(五)其他查找工具
(5.1)在Linux系统中我们还有其他的常用工具用来进行查询操作,例如which命令,我们想要查询date命令具体是在哪个路径下执行的,则可以使用“# which date”进行查询。
# which date---查询date命令具体是在哪个路径
# which vim
# which ifconfig
(5.2)我们还可以使用locate命令,例如我们想要查询系统中关于ceph关键字的所有文件信息,我们可以使用“# locate ceph”命令,此时我们可以查询出系统中关于ceph关键字的所有文件信息(图5-2)。但是我们如果在系统中临时创建一个文件ceph.txt,此时我们发现并不能搜索到新创建的文件(图5-3),这是由于locate命令在查询的时候使用的是一个数据库中的信息,而这个数据库是在一周左右更新一次,所以此时我们搜索刚刚创建的文件的时候是查询不到任何信息的,此时我们需要做的就是更新数据库即可,此时我们发现已经可以搜索到刚刚创建的根目录下的ceph.txt文件了(图5-4)。
# locate ceph---查询系统中关于ceph关键字的所有文件信息
# updatedb---更新数据库
(5.3)有时候我们在使用locate命令的时候,很容易和locale命令混淆,因为它们长得太像了像双胞胎一样。其中locale命令是来设置我们系统的默认编码的。我们在xshell中使用ssh登录的时候,系统的编码是UTF-8,因此我们必须要保证ssh客户端的编码和系统编码保持一致,否则就会出现乱码的问题。
(5.4)例如我们在打开浏览器的时候,当前系统默认是使用“LANG=zh_CN.UTF-8”即中文打开的,但是我们想要以美式英语的方式打开,此时我们可以使用在执行firefox命令之前使用LANG命令指明美式英语编码即可(图5-7)。如果我们想修改系统默认的编码,则应该在/etc/locale.conf配置文件中进行修改(图5-8)。
注意:在RHEL 6系统中,系统的默认编码是在/etc/sysconfig/i18n文件中进行配置的。
# LANG=en-us firefox &---使用美式英语的方式打开浏览器
# cat /etc/locale.conf
—————— 本文至此结束,感谢阅读 ——————
本文题目:Linux系统之sodu用户切换,rsync文件传输,find文件查找串讲
文章起源:http://cdiso.cn/article/peedpo.html