鸿 网 互 联 www.68idc.cn

Linux基础

来源:互联网 作者:佚名 时间:2022-07-19 10:59
完成作业: 第二周 1、总结cp、move命令的用法(要求列出源及目标各种情况的表格) 利用cp(copy)命令可以实现文件或目录的复制 格式: cp [option]...[-T] SOURCE DESTcp [option]...SOURCE DIRECTORYc

完成作业:

第二周

1、总结cp、move命令的用法(要求列出源及目标各种情况的表格)

利用cp(copy)命令可以实现文件或目录的复制

格式:

cp [option]...[-T] SOURCE DEST cp [option]...SOURCE DIRECTORY cp [option]...-t DIRECTORY SOURCE...
  • -i 如果目标已存在,覆盖前提示是否覆盖

  • -n 不覆盖,主要两者顺序

  • -r,-R 递归复制目录及内部的所有内容

  • -a 归档,相当于-dR --preserv=all,常用于备份功能

  • -d --no-dereference --preserv=links 不复制原文件,只复制连接名

  • --preserv[=ATTR_LIST]

    ? mode:权限

    ? ownership:属主属组

    ? timestamp:

    ? links

    ? xattr

    ? context

    ? all

  • -p 等同--preserv=mode,ownership,timestamp
  • -v --verbose
  • -f --force
  • -u --update 只复制源比目标更新文件或目标不存在的文件
  • -b 目标存在,覆盖前先备份,默认形式为filename~,只保留最近的一个备份
  • --backup=numbered 目标存在,覆盖前先备份加数字后缀,形式为filename.~#~,可以保留多个版本
源/目标 不存在 存在且为文件 存在且为目录 一个文件 新建DEST,并将SRC中内容填充至DEST中 将SRC中的内容覆盖至DEST中 注意数据丢失风险!建议用-i选项 在DEST下新建与源文件同名的文件,并将SRC中内容填充至新文件中 多个文件 提示错误 提示错误 在DEST下新建与原文件同名的文件,并将源文件内容复制进新文件中 目录须使用-r选项 创建指定DEST同名目录,复制SRC目录中所有文件只DEST下 提示错误 在DEST下新建与原目录同名的目录,并将SRC中内容复制至新目录中

mv命令移动和重命名文件

同一分区移动数据,速度很快,数据位置没有变化

不同分区移动数据,速度相对慢,数据位置发生了变化

格式:

mv [option]...[-T] SOURCE DEST mv [option]...SOURCE DIRECTORY mv [option]...-t DIRECTORY SOURCE...

常用选项

  • -i 交互式
  • -f 强制
  • -b 目标存在,覆盖前先备份

利用rename可以批量修改文件名

格式:

rename [options] <expression> <replacement> <file>...

范例:

#为所有的conf文件加上.bak后缀: rename 'conf' 'conf.bak' f* #去掉所有的bak后缀: rename '.bak' ' ' *.bak

2、总结IO重定向的类别和区别

标准输入和输出

程序:指令+数据

打开的文件都有一个fd:file descriptor(文件描述符)

Linux给程序提供三种I/O设备

  • 标准输入(STDIN) -0 默认接受来自终端窗口的输入
  • 标准输出(STDOUT)-1 默认输出到终端窗口
  • 标准错误(STDERR)-2 默认输出到终端窗口

通常我们在linux下看到的*控制台(console)*是由几个设备完成的。分别是/dev/ttyN(其中tty0就是/dev/console,tty1,tty2就是不同的*虚拟终端*(virtual console))。通常使用热键ctrl+alt+Fn来在这些虚拟终端之间进行切换。所有的这些tty设备都是由linux/drivers/char/console.c和vt.c对应。*/dev/pts*是*远程登陆*(telnet,ssh等)后创建的控制台设备文件所在的目录。由于可能有好几千个用户登陆,所以/dev/pts其实是动态生成的,不象其他设备文件是构建系统时就已经产生的硬盘节点(如果未使用devfs)

范例:文件描述符

[root@southseal ~]# ll /dev/std* lrwxrwxrwx 1 root root 15 Apr 29 09:23 /dev/stderr -> /proc/self/fd/2 lrwxrwxrwx 1 root root 15 Apr 29 09:23 /dev/stdin -> /proc/self/fd/0 lrwxrwxrwx 1 root root 15 Apr 29 09:23 /dev/stdout -> /proc/self/fd/1 [root@southseal ~]# ll /proc/self/fd/* ls: cannot access '/proc/self/fd/255': No such file or directory lrwx------ 1 root root 64 Apr 29 09:28 /proc/self/fd/0 -> /dev/pts/0 lrwx------ 1 root root 64 Apr 29 09:28 /proc/self/fd/1 -> /dev/pts/0 lrwx------ 1 root root 64 Apr 29 09:28 /proc/self/fd/2 -> /dev/pts/0 lr-x------ 1 root root 64 Apr 29 09:28 /proc/self/fd/3 -> /var/lib/sss/mc/passwd lrwx------ 1 root root 64 Apr 29 09:28 /proc/self/fd/4 -> 'socket:[42991]' lr-x------ 1 root root 64 Apr 29 09:28 /proc/self/fd/5 -> /var/lib/sss/mc/group

I/O重定向redirect

I/O重定向:将默认的输入,输出或错误对应的设备改变,指向新的目标

标准输出和错误重定向

STDOUT和STDERR可以被重定向到指定文件,而非默认的当前终端

格式:

命令 操作符号 文件名

支持操作符号包括:

1> 或 > 把STDOUT重定向到文件 2> 把STDERR重定向到文件 &> 把标准输出和错误都重定向 >& 和上面功能一样,建议使用上面方式

以上如果文件已存在,文件内容会被覆盖

set -C 禁止将内容覆盖已有文件,但可追加,利用 >| 仍可强制覆盖 set +C 允许覆盖,默认

追加

\>> 可以在原有内容基础上,追加内容

把输出和错误重新定向追加到文件

>> 追加标准输出重定向至文件 2>> 追加标准错误重定向至文件

标准输出和错误输出各自定向至不同位置

COMMAND > /path/to/file.out 2> /path/to/error.out

合并标准输出和错误输出为同一个数据流进行重定向

&> 覆盖重定向

&>> 追加重定向

COMMAND > /path/to/file.out 2>&1 (顺序很重要)

COMMAND >> /path/to/file.out 2>&1

合并多个程序

(CMD1;CMD2......)或者{CMD1;CMD2;...;}合并多个程序的STDOUT

范例:标准输出重定向

[root@southseal ~]# ls > /dev/pts/0 #将ls命令输出重定向到/dev/pts/0虚拟终端上 anaconda-ks.cfg Downloads Music Templates windows.txt Desktop initial-setup-ks.cfg Pictures Videos win.txt Documents linux.txt Public windows1.txt [root@southseal ~]# ls /data > /dev/pts/0 #将ls /data命令输出重定向到/dev/pts/0虚拟终端上;/dev/pts/0 表示当前虚拟终端 backup conf f1.txt~ f1.txt.~2~ f3.txt rootdir1 backup2021-04-22 f1.txt f1.txt.~1~ f2.txt rootdir rootdir2

范例:标准错误重定向

[root@southseal ~]# rm /data/f1.log 2> /data/all.log [root@southseal ~]# cat /data/all.log rm: cannot remove '/data/f1.log': No such file or directory

范例:合并多个命令的结果至一个文件中

[root@southseal ~]# ( cal 2009 ; cal 2020 )> all.txt [root@southseal ~]# { ls;hostname; } > /data/all.log

范例:清除大文件

[root@southseal ~]# cat /dev/null > /data/all.log

范例:分别重定向

[root@southseal ~]# ls /data/ /xxx > stdout.log 2> stderr.log

范例:将标准输出和错误都重定向到同一个文件

[root@southseal ~]# ls /data /xxx > /data/all.log 2>&1 [root@southseal ~]# ls /data /xxx 2> /data/all.log 1>&2 [root@southseal ~]# ls /data /xxx &> /data/all.log [root@southseal ~]# ls /data /xxx 2>&1 /data/all.log [root@southseal ~]# ls /data /xxx 2>&1 > /data/all.log1 ls: cannot access '/xxx': No such file or directory

3、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中

tr命令:转换和删除字符

tr [OPTION]... SET1 [SET2]

选项:

-d --delete:删除所有属于第一字符集的字符 -s --squeeze-repeats:把连续重复的字符以单独一个字符表示,即去重 -t --truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符 -c -C --complement:取字符集的补集 \NNN character with octal value NNN (1 to 3 octal digits) \\ backslash \a audible BEL \b backspace \f form feed \n new line \r return \t horizontal tab \v vertical tab [:alnum:] 字母和数字 [:alpha:] 字母 [:blank:] 空格或制表符 [:cntrl:] 控制(非打印)字符 [:digit:] 数字 [:graph:] 图形字符 [:lower:] 小写字母 [:print:] 可打印字符 [:punct:] 标点符号 [:space:] 空白字符 [:upper:] 大写字母 [:xdigit:] 十六进制字符 [root@localhost ~]# cat /etc/issue | tr 'a-z' 'A-Z' > /tmp/issue.out [root@localhost ~]# cat /tmp/issue.out \S KERNEL \R ON AN \M

4、请总结描述用户和组管理类命令的使用方法并完成以下练习:

用户和组管理命令

? 用户管理命令

  • useradd

  • usermod

  • userdel

    组账号维护命令

  • groupadd
  • groupmod
  • groupdel

用户创建

? useradd命令可以创建新的Linux用户

useradd [options] LOGIN

常见选项

-u UID -o 配合-u选项,不检测UID的唯一性 -g GID 指明用户所属基本组,可为组名,也可以GID -c "COMMENT" 用户的注释信息 -d HOME_DIR 以指定的路径(不存在)为家目录 -s SHELL 指明用户的默认shell程序,可用列表在/etc/shells文件中 -G GROUP1[,GROUP2,...] 为用户指明附加组,组需事先存在 -N 不创建私有组做主组,使用users组做主组 -r 创建系统用户Centos6之前ID<500 Centos7以后ID<1000 -m 创建家目录,用于系统用户 -M 不创建家目录,用于非系统用户 -p 指定加密码的密码

范例:

useradd -r -u 48 -g apache -s /sbin/nologin -d /var/www -c "Apache" apache

useradd命令默认值设定由/etc/default/useradd定义

[root@southseal ~]# cat /etc/default/useradd # useradd defaults file GROUP=100 HOME=/home INACTIVE=-1 #对应/etc/shadow文件第7列,即用户密码过期的宽限度 EXPIRE= #对应/etc/shadow文件第8列,即用户账号的有效期 SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes

显示或更改默认设置

useradd -D useradd -D -s SHELL useradd -D -b BASE_DIR useradd -D -g GROUPB

新建用户的相关文件

  • /etc/default/useradd
  • /etc/skel/*
  • /etc/login.defs

批量创建用户

newusers passwd 格式文件

批量修改用户口令

echo username:passwd | chpasswd

用户属性修改

usermod命令可以修改用户属性

格式:

usermod [OPTION] login

常见选项

-u UID:新UID -g GID:新主组 -G GROUP1[,GTOUP2,...[,GROUP]]:新附加组,原来的附加组将会被覆盖,若保留原有,则要同时使用-a选项 -s SHELL:新的默认SHELL -c 'COMMENT':新的注释信息 -d HOME:新家目录不会自动创建,若要创建新家目录并移动源家数据,同时使用-m选项 -l login_name:新的名字 -L:lock指定用户,在/etc/shadow密码栏的增加! -U:unlock指定用户,将/etc/shadow密码栏的!去掉 -e YYYY-MM-DD:指明用户账号过期日期 -f INACTIVE:设定非活动期限,即宽限期

删除用户

userdel 可删除Linux用户

格式:

userdel [OPTION] ... Login

常见选项:

-f,--forec 强制 -r,--remove 删除用户家目录和邮箱

查看用户相关的ID信息

id命令可以查看用户的UID,GID等信息

id [OPTION]...[USER]

常见选项:

-u:显示UID -g:显示GID -G:显示用户所属的组的ID -n:显示名称,需配置ugG使用

创建组

groupadd实现创建组

格式:

groupadd [OPTION]...group_name

常见选项:

-g GID指明GID号:[GID_MIN,GID_MAX] -r 创建系统组,CentOS 6 之前ID<500,Centos 7之前ID<1000

范例:

groupadd -g 48 -r apache

修改组

groupmod组属性修改

格式:

groupmod [OPTION]... group

常见选项:

-n group_name:新名字 -g GID:新的GID

组删除

groupdel可以删除组

格式:

groupdel [OPTIONS] GROUP

常见选项:

-f,--force 强制删除,即使是用户的主组也强制删除

更改和查看组成员

groupmems [options] [action]

常见选项:

-g,--group groupname #更改为指定组(只有root) -a,--add username #指定用户加入组 -d,--delete username #从组中删除用户 -p,--purge #从组中清除所有成员 -l,--list #显示组成员列表

groups可查看用户组关系

格式:

#查看用户所属组列表 groups [OPTION].[USERNAME]...

(1)、创建组distro,其GID为2019;

[root@southseal ~]# groupadd -g 2019 distro [root@southseal ~]# cat /etc/group |grep distro distro:x:2019:

(2)、创建用户mandriva, 其ID号为1005;基本组为distro;

[root@southseal ~]# useradd mandriva -u 1005 -g distro [root@southseal ~]# id mandriva uid=1005(mandriva) gid=2019(distro) groups=2019(distro)

(3)、创建用户mageia,其ID号为1100,家目录为/home/linux;

[root@southseal ~]# useradd mageia -u 1100 -d /home/linux [root@southseal ~]# id mageia uid=1100(mageia) gid=1100(mageia) groups=1100(mageia) [root@southseal linux]# su mageia [mageia@southseal ~]$ pwd /home/linux

(4)、给用户mageia添加密码,密码为mageedu,并设置用户密码7天后过期

#两条命令如果同时写入密码不会写入系统 [root@southseal linux]# echo "mageedu" | passwd --stdin -x 7 mageia [root@southseal linux]# cat /etc/shadow |grep mageia #密码没有写入系统 mageia:!!:18759:0:7:7::: #分开写功能正常实现 [root@southseal linux]# passwd -x 7 mageia [root@southseal linux]# echo "mageedu" | passwd --stdin mageia Changing password for user mageia. passwd: all authentication tokens updated successfully. [root@southseal linux]# cat /etc/shadow |grep mageia mageia:$6$fStq1Oe5LiRoV0Q/$UrClgVBIx4h.eP27ZXkOq.RDY170eTyDk32h9OJ5Zf2gbVuSo9Zv/Y.0.cxwdMUTr3tgLfVJF2b5JIGF8E4aZ0:18759:0:7:7:::

(5)、删除mandriva,但保留其家目录;

[root@southseal ~]# cd /home/ [root@southseal home]# ls mandriva [root@southseal home]# userdel -f mandriva [root@southseal home]# ls mandriva

(6)、创建用户slackware,其ID号为2002,基本组为distro,附加组peguin;

[root@southseal ~]# groupadd peguin [root@southseal ~]# useradd slackware -u 2002 -g distro -G peguin [root@southseal ~]# id slackware uid=2002(slackware) gid=2019(distro) groups=2019(distro),2020(peguin)

(7)、修改slackware的默认shell为/bin/tcsh;

[root@southseal home]# usermod slackware -s /bin/tcsh [root@southseal home]# cat /etc/passwd |grep slackware slackware:x:2002:2019::/home/slackware:/bin/tcsh

(8)、为用户slackware新增附加组admins,并设置不可登陆。

[root@southseal ~]# groupadd admins;usermod slackware -aG admins -L [root@southseal ~]# id slackware uid=2002(slackware) gid=2019(distro) groups=2019(distro),2020(peguin),2021(admins) [root@southseal ~]# cat /etc/shadow |grep slackware slackware:!!:18759:0:99999:7:::

(9)、创建用户user1、user2、user3。在/data/下创建目录test

[root@southseal ~]# cat username.file user1:x:1200:1200::/home/user1:/bin/bash user2:x:1201:1201::/home/user2:/bin/bash user3:x:1202:1202::/home/user3:/bin/bash [root@southseal ~]# newusers username.file [root@southseal ~]# cat /etc/passwd | grep ^user user1:x:1200:1200::/home/user1:/bin/bash user2:x:1201:1201::/home/user2:/bin/bash user3:x:1202:1202::/home/user3:/bin/bash [root@southseal ~]# mkdir -p /data/test [root@southseal ~]# ll -d /data/test drwxr-xr-x 2 root root 6 May 12 13:56 /data/test

(1)、设置目录/data/test属主、属组为user1

[root@southseal ~]# chown user1:user1 /data/test [root@southseal ~]# ll -d /data/test drwxr-xr-x 2 user1 user1 6 May 12 13:56 /data/test

(2)、在目录属主、属组不变的情况下,user2对test及其子目录有读写权限

[root@southseal ~]# setfacl -m u:user2:rw /data/test [root@southseal ~]# getfacl /data/test getfacl: Removing leading '/' from absolute path names # file: data/test # owner: user1 # group: user1 user::rwx user:user2:rw- group::r-x mask::rwx other::r-x

(3)、user1在/data/test目录下创建文件a1.sh, a2.sh, a3.sh, a4.sh,设置所有用户都不可删除1.sh,2.sh文件。

[root@southseal ~]# su - user1 [user1@southseal ~]$ touch /data/test/a{1..4}.sh [user1@southseal ~]$ ll /data/test/ total 0 -rw-rw-r-- 1 user1 user1 0 May 12 14:24 a1.sh -rw-rw-r-- 1 user1 user1 0 May 12 14:24 a2.sh -rw-rw-r-- 1 user1 user1 0 May 12 14:24 a3.sh -rw-rw-r-- 1 user1 user1 0 May 12 14:24 a4.sh [user1@southseal ~]$ chattr -i /data/test/a{1,2}.sh [user1@southseal ~]$ lsattr /data/test/a{1,2}.sh -------------------- /data/test/a1.sh -------------------- /data/test/a2.sh

(4)、清理/data/test目录及其下所有文件的acl权限

[root@southseal user1]# setfacl -R -b /data/test [root@southseal user1]# getfacl /data/test getfacl: Removing leading '/' from absolute path names # file: data/test # owner: user1 # group: user1 user::rwx group::r-x other::r-x [root@southseal user1]# ll -d /data/test drwxr-xr-x 2 user1 user1 58 May 12 14:24 /data/tes
上一篇:温故Linux后端编程(三):线程那些事儿
下一篇:没有了
网友评论
<