Linux学习笔记(二)

24、shell是在内核之上的应用程序(application),bash(Bourne again shell)是linux下默认的shell。【type [-tpa] 命令名】查看该命令是否为内置命令。

25、变量

linux中变量与c中含义类似,以“$”开头引导一个变量,常用于代表一个路径。

echo $变量名】查看该变量内容;当显示结果为空白,可能是该变量没有定义或者定义为空字符串””

可直接“变量名=    ”来新建并定义变量——空格要放在“”或者‘’中(单引号和双引号要成对出现,单个出现无效),或用“\”转义字符;反单引号“`命令`”或$(命令)来优先执行某一命令,作为其外部命令的参数;如cd/lib/modules/`uname -r`进入内核版本所在目录;对变量直接追加内容:变量=“$变量 新内容”(空格可以没有),或变量=“$变量”新内容。

echo 后跟字符串可以标准输出该字符串(可加引号,可不加——不加引号无法处理转移字符,还需加上参数-e才能识别转移字符

【echo “字符串”> 文件名】可以将字符串写入该文件。

exoprt 变量名】将该变量作为环境变量可使在其他子进程中使用。

unset 变量名】取消变量。

在使用变量名时,前面加$。

envset、export可列出所有环境变量,set还可列出自定义变量。常见的环境变量有PATH、HOME(主文件夹)、LANG、HISTSIZE(记录的历史命令条数)、RANDOM(产生0-32767的随机数)。其他变量PS1(命令提示符)、$(shell的进程process ID)、?(上一命令执行后返回的回传码,0表示执行成功,其他数字代表不同的错误)。

read [-pt] 变量名】可以从键盘输入变量值:-p后加提示语“input please…”,-t加时间表示在指定时间内输入。

declare[-aipxr] 变量名】声明变量类型:-a即array数组类型,var[index]=;-i(integer)指定变量为整型数据,所以当声明一个变量为i时,赋值时有算术表达式,可其最终值为表达式的算术值,否则系统默认为字符型;-x等于export,+x表示将环境变量(全局变量)改为自定义变量(局部变量);-r(readonly)声明为只读,即该变量不可更改;-p查看变量数据类型。在查看数组时以${数组}的方式读取——另有typeset命令与declare功能相似。

P315:变量内容比较长时,可通过${变量名#|##关键字}的方式从头开始删除关键字;或${变量名%|%%关键字}从尾开始删除关键字#或%表示删除最短数据,##或%%表示删除最长数据。替换:${变量名/|//旧字符串/新字符串};/只替代一地个旧字符串,//替代全部符合的字符串。另有“-”、“+”、“?”、“=”等替换符号(P316)

26、alias与history

alias(别名)可以设置命令别名,简化命令(尤其简化参数)。

alias 别名=’原命令’】例如aliasclr=‘clear’。unalias取消别名。

history n】查看近n条历史命令记录。历史记录在注销后才写入~./bash_history文件中,【history -w】可强制立刻写入historyfile中。!n可以执行第n条(记录中的)命令。

27、命令执行顺序:在一个bash中执行某一命令(如ls),系统先alias在找到内置(builtin),再由$PATH找到/bin下对应的指令。直接ls与/bin/ls执行结果有所不同。ls是ls--color=auto的alias,对字体颜色有设定,而/bin/ls则字体颜色没设定。

28、登录bash时分loginshell和non-login shell两者加载的文件有所不同。ctrl+alt+t出来的是图形终端,属于非登录终端(non-login shell),退出时用exit即可,tty1-6才是loginshell,注销用logout。自定义变量、命令别名在注销后会消失,需写入对应文件才可一直有效。将命令别名或者全局变量写入~/.bashrc,再【source ~/.bashrc】(或重启)即可生效(关机后仍在)。

29、通配符与特殊符号

* 代表0到无穷多个任意字符;

?代表一定有任意一个字符——???表示有三个任意字符

[]代表有一个中括号内的任意一个字符,[abcd]即表示有abcd中任意一个字符;

[-],如[0-9]表示0-9直接任意一个字符;

[^]表示不含括号内所包含字符;

有# $ :|(管道)等特殊符号P328

30、数据流重定向

    输出信息很重要需要记录到文件;程序后台运行中不想输出信息干扰屏幕正常输出;已知错误的忽略(2>/dev/null)等情况用到重定向!

所谓数据流重定向就是将原本standardoutput(stdout)和standard error(stderr)显示在屏幕上的正确或错误的信息传送对文件或设备中。

标准输入(stdin):代码0,<或<<;

标准输出(stdout):代码1,>或>>;

标准错误输出(stderr):代码2,2>或2>>;

>或>>后跟文件名或设备。>表示覆盖,>>累加到文件中(文件可自动建立)。

一个命令执行结果可能同时存在正确和错误信息。如find /home -name .bashrc  .bashrc属用户所有,/home下有多个用户,只能查找出目前用户下的.bashrc,其他用户的.bashrc会出现权限错误。此时可以用重定向将正确和错误的信息分别写进不同的文件:

【find /home -name.bashrc > list_R 2> list_W】

可以将不必要的错误信息写入/dev/null(垃圾桶黑洞设备)中。

当要将正确和错误信息同时写入一个文件时,使用2>&1 或&>。若直接>a 2>a stdout和stderr都直接送往文件a ,a文件会被打开两遍,由此导致stdout和stderr互相覆盖 (信息交叉写入文件,造成次序混乱) 。

输入重定向是将原本需要由键盘输入的数据改由文件内容代替。

【cat > 新文件名】可以新建文件并从键盘出入数据,ctrl+d结束输入。此时可以

【cat > 新文件名 < 已存在文件】将已存在文件写入新建的文件中。<<是结束输入的意思。

【cat > 新文件名 << “eof”】从键盘输入数据,当输入“eof”时结束输入——等同于ctrl+d

tee可实现双向 重定向,即可以将数据显示在屏幕上,同时保存到文件中:

【tee [-a] file】-a表示累加写入。tee是管道命令可以跟在“|”也可直接加文件

31、命令执行判断依据: ;&&  ||

“;”隔开两个命令,可以一次执行。

“&&”和“||”是根据前一命令执行的回传码$?来决定要不要执行后一命令

cmd1&&cmd2——cmd1执行成功(即$?=0),则执行cmd2;

cmd1||cmd2——cmd1执行不成功,则执行cmd2;

例如:【ls /tmp/abc ||mkdir /tmp/abc && touch /tmp/abc/test】

先判断是否存在/tmp/abc目录,若不存在则建立该目录,最后建立test文件——test文件必定会建立,当目录存在时,$?会直接传到&&

若cmd1成功则cmd2,否则cmd3:cmd1&& cmd2 || cmd3——&& 、||顺序要搞清楚,cmd2、cmd3通常是一定可以执行成功的命令,若是cmd1 ||cmd2 && cmd3,当cmd1不成功,cmd2会执行且返回0,则cmd3也会执行。

32、管道命令

管道(pipe)命令是能处理stdout的命令,对stderr则予以忽略,管道命令必须能够接收来自前一个命令的数据(stdout)成为stdin继续处理——前后命令之间用“|”隔开。

选取命令:cut grep

选取命令是对信息以“行”的方式处理的,而不是以段落为对象:

【| cut -d ‘分隔字符‘-f 段号】信息中重复出现的字符可以视作分隔符,如$PATH中以“:”分割路径,可以以“:”作为分隔字符cut,并标出段号,在-f选出第几段显示。

【| cut -c 字符范围】选取第n1到第n2之间的字符,或n-即从n到改行结尾——信息有多行则对每一行都处理。

【| grep [-acinvAB] ‘要查找的字符串‘ [文件名]】grep对信息查找关键字,并将那一行都输出。-i忽略大小写;-n显示行号;-A和-B后跟数字,分别是after和before,显示关键字所在行的前或后几行;-v是反选,即没有关键字的那几行。grep也可以不跟在“|”后面,而直接对一个文件查找。其实“|”就是前面的命令产生的stdout即作为文件名(stdin)使用了,cut也是如此,可以对文件直接cut。

排序命令:sort uniq wc 对结果排序

【sort[-fktn] [file or stdin]】跟选取命令一样,可以跟在“|”后(stdin),也可独立队文件操作(file)。-f忽略大小写,-t分隔符(默认是tab建)-k由-t分割后的区间序号,-n按数字排序(默认是文字)。

【uniq [-ic]】可将重复的数据合并成一个显示;

【wc [-lwm]计算输出信息的行数、字数、字符数。

33、字符转换命令

tr [-ds]SET1 SET2…】tr只能跟在“|”后使用,将信息中SET1这个字符用SET2替换。-d将信息中SET1这个字符串删除,-s也是替换,但会将相邻重复的字符合并。

col [-xb]】-x将tab键换成对等的空格键;过滤掉所有的控制字符,包括RLF和HRLF。

join[-ti12] file1 file2】将两个文件合并并且将“第一字段”相同的数据合并在一行中,-t分隔符,-i忽略大小写,-1、-2表示第一/二个文件的第几个字段参与合并。例如/etc/paswd和/etc/shadow的第一字段(以“:”作为分隔符)都是账户信息,join两个文件,可以将同一账户的信息合并在一起——在使用join前,先将两个文件都sort一下。

paste [-d]file1 file2…】将多个文件复制在一起,并且将相同的字段以-d的分隔符分隔(默认为tab键)。file写成“-”,表示stdin,即跟在“|”后面。在管道命令中经常会将前一个命令的stdout作为后面的stdin,某些命令需要用到文件名来处理,该stdout或stdin可用“-”来代替。即“-”也能表示stdout以代替原本必须用文件的地方,此时表示数据不存放到文件而是标准输出。

expand [-t]】将tab键自定义的转化成若干个空格键(默认是8个)。

34、切割命令split

split [-bl]file PREFIX】将一个较大的文件切割成小文件。-b按文件大小切割,-l按行数切割,PREFIX是前导字符,即分割出来的小文件都以该字符串开头,后跟aa、ab、ac……依次命名。

35、参数代换:xargs

xargs[-0pen] command】xargs可以读入stdin的数据,并且以空格符或断行符进行分辨,将stdin的数据分隔成为command的参数,即xargs为其后所跟的命令提供必要的参数。因为很多命令不支持管道命令,通过“| xargs”使得cmd可以应该前面命令产生的stdin!

例如【cut -d ‘:’ -f 1/etc/passwd | xargs finger】将/etc/passwd中账户名提取后成为finger的参数来获得账户相关说明。

36、正则表达式

正则表达式就是用一些特殊字符,用以查找、替换、删除一行或多行文字字符。正则表达式要配合上工具程序(grep、vi、sed、awk)才能达到功能。正则表达式是一个字符或和元字符组合成的字符集,它们匹配(或指定)一个模式。字符即普通字符(例如字符 a 到 z),元字符即特殊字符(例如字符 ^ $ *)。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

语系对正则表达式有影响,中文与英文编码存在差异,一般令LANG=C

正则表达式与通配符是不同两个东西,正则表达式要用’  ’包裹起来!

(1)grep配合前面提到的通配符([] ^等)进行选取,还可配合其他一些特殊字符:

[:alnum:] 表示A-Z、a-z、0-9;

[:alpha:] 表示A-Z、a-z;

[:digit:] 表示0-9;           使用时还要在外面加[],即[[:alnum:]]

[:upeer:] 表示A-Z;

[:lower:] 表示a-z;

关键字在行首时,可以用“^关键字”,表示查找在行首的关键字(“^在[]内表示取反,[]外则是行首”);

关键字在行尾时,可以用“关键字$”,表示查找在行尾的关键字。linux下以“$”结尾,故“$”可以表示行尾,“^$”则表示空白行。windows下的结尾是^M$,主要文件的格式。查找关键字时若是特殊符号,注意用转义字符!

“.”在正则表达式中代表一定有一个任意字符——与通配符中?相同。

“*”表示重复前一字符0到无穷多次,如o*表示有空字符或一个及以上o的字符串;

oo*表示一个及以上o的字符串——*前有n(>=0)个相同的字符,表示重复n-1个该字符。

则“.*”表示0个或多个任意字符。在确定正则表达式前现将其内容翻译出来,如g*g的内容是0个或多个g再加上一个g,故其内容了为g,gg,ggg……这样不易出错。

“{}”用来限定重复前一字符的次数{n}表示重复n次(当字符重复>n次也会被查找出来,只是后面的字符不color),{n,m}表示重复n-m次。由于{}在shell中有特殊意义,因此在正则表达式中应转义’重复字符\{n\}’。若要找出恰好重复n次的字符串,还需对其前面添加限制,限制其前后不能是该字符。

(2)sed 能对数据进行替换、删除、新增、选取特定行等行为。

sed[-nefri] action】                                 

参数:

action:[n1[,n2]]function(指定行数和功能)

-n与action中p一起使用,对处理过的行予以输出 (不加n会输出全部)

p(print)打印指定行

-e在命令模式下输出结果(可以省略-e)当一个sed跟两个即以上的动作时,每个动作前加-e才行!

d(delete)删除指定的行

-f直接将sed动作写入一个文件内,-f filename可以执行文件内的sed动作

c,将指定行替换成后接的字符串

-r支持sed动作的扩展正则表达式语法

i(insert),在指定行上一行插入字符串

-i直接对文件操作,即操作结果影响文件实际内容

a(add),后接字符串,在指定当前行的下一行添加字符串。

 

s替换指定的字符串(而非行)’s/old/new/g’

①    动作要包裹在‘’中,要插入需转移的符号时,也要用‘’包裹,如插入单引号‘\’’;

②    $代表最后一行;

③    a、i可以同时插入多行:’n1astring1 \ [Enter]string2\ [Enter]string3…’在shell中\[Enter]会变成\>,即换行了——每个字符串后需跟“\”;

④    ’s/要替换的字符串/新的字符串/g’,g也是一个action(可以不加),“/”可以用“#”代替,是分隔字符串的作用。s针对字符串操作,而不是整行!

⑤    删除空白行【sed ’/^$/d’】

⑥    -i对文件直接操作,对于存有大量数据的文件用vi编辑就不方便了,用sed更好。

另外还有扩展正则表达式,用到不同的工具程序(grep->egrep,sed -r即可)。“+”(重复一个或一个以上前一字符)、“?”(重复0个或1个前一字符)、“|”(表示“或”,可同时写多个RE来丰富条件)、“()”(查找组字符串)、“()+”这些扩展的特殊符号。

37、文件格式化

printf格式化打印:【printf ‘打印格式’ 实际内容】

与C中的用法相似,%s(string)表示字符输出,%i(integer)整数,%f(float)%m.nf表示共m位,小数点后n位(小数点本身占一位)。

\r回车,\n换行,\t水平的tab键,\v垂直的tab键,\x将后接的十六进制数字转化成字符输出(ASCII码)。

例如【printf ‘%10s %5i%5i 8.2%f \n’ $(cat a.txt)】printf后跟的不是文件名而是实际的内容,故如果直接加文件名会将文件名视为要打印的内容,其本身不是管道命令故需要先将文件里的内容读出来,用$()包裹——子命令。%s是不固定长度的,加上数字后就固定长度了,并统一将有效的字符靠右排。

awk针对行中的段进行处理【awk ‘条件类型1{action1} 条件类型2{action2}’filename】

①    awk对每行根据空格键或tab键分段(一段即一列),$0表示整行,$1/$2/$3表示第一/二/三字段,每一行的段数可能不一样,所以要注意数据原先的排列;

②    awk常与printf连用,由于awk的action有’’包裹,而单引号与双引号都必须成对出现,printf中的打印格式出变量以外的文字都要用双引号“”包裹,最外侧用{}。

{printf 字段1 “输出间隔符”字段2…}(输出间隔符如”\t” 或其他字符,但必须用“”)

{printf “输出格式”字段1字段2字段3…}(输出格式“%10s”,格式与字段键必须用,隔开!)

③    awk有内置变量。NF:每一行拥有的段数;NR:当前awk所处理的行号;FS目前分隔符类型,默认是空格键,该变量用来设定分隔符FS=””;或者用-F 来改变默认的分隔符

④    条件类型是指条件判断(if),通过逻辑运算,在特定的情况下执行action。如果NR==1(第一行执行){action1},对NR>=2(第二行开始执行){action2}。也可以使用if(NR==1),此时if放在{}内。action里可以对FS赋值,如以“:”作为分隔符:{FS=“:”},但这样的设定从第二行开始的,即第一行还是以空格作为分隔符,此时加上关键字BEGIN {FS=“:”}可以从一行开始。

⑤    在action中可以设置多个命令,包括定义变量!命令之间用“;”隔开或换行(由于没有输入’,不会视为输入结束,直接按回车即可。)

38、文件比较工具

diff [-bBi]file1 file2】,file可以是-,即sdtin——以“行”为单位比较两个文件的不同。

-b忽略连续的多处空白;-B忽略空白行;-i忽略大小写;

diff也可以比较两个目录下的差异——比较两个完全不相干的文件得不到结果(没有意义)。

cmp [-ls]file1 file2】以“字节”为单位比较两个文件的差异。默认情况下只显示第一个不同所在的行和第几个字节处。-l-s查看P367笔记。

通常,使用 cmp 命令比较非文本文件,使用 diff 命令比较文本文件。

【diff -Naur oldfilenewfile > 补丁文件】比较新旧文件的不同并将差异写成补丁文件(.patch结尾)在软件更新时常用。

patch -pN< patch_file】更新旧文件,N为要删减的目录(从左删减)。若当前目录与patch_file相同,-p0即可。

patch -R-pN < patch_file】还原被更新的文件。

另有pr命令可以显示文件页码、文件时间和标题。

39、linux账号与用户组

每个用户登录至少会取得两个ID,一个是用户ID(UID),一个是用户组ID(GID)。系统对每一个账号记录的其实ID号,账号名称与之对应,若修改UID号则不能正常登录。

/etc/passwd管理用户UID/GID;/etc/shadow管理密码相关数据。

/etc/passwd的各项内容意义,例如root:x:0:0:root:/root:/bin/bash

root :       x :    0:

账号名称   密码 UID 0表示系统管理员,若将其他账号的UID也改为0,则具有root权限;

0:    root:            /root:                /bin/bash

GID  用户信息说明    账号所在主文件夹    指定shell的类型

/etc/shadow各项意义详见p404-p405,密码是经过加密的,/etc/passwd 中x指的是记录在/etc/shadow的密码。

/etc/group 中各项意义,如bin:x:1:root,bin,daemon。前三个分别是组名、密码、GID,第四个指此用户组支持的账号,如bin组支持root,bin,daemon三个用户。

账号所在用户组分初始用户组(initial group)和有效用户组(effective group)。/etc/passwd中GID即该账户的初始用户组,当用户登录系统时,立刻拥有该组的权限。

将某账户添加至某群:【usermod -G 组名 用户名】,也可以由组管理员gpasswd实现。

groups】可显示当前登录的账户被哪些组支持。第一个显示的组即当前所在的组(即有效用户组),当前在什么组,创建的文件就属于什么组。

用【newgrp 组名】更换有效用户组——必须是支持的组。这一过程是以另一个shell来完成的,所process ID会改变,exit即可回到原来的shell。

40、账号管理

新增用户【useradd [-u UID] [-g 初始用户组][-m/M强制生成/不生成用户主文件夹][-d 主文件绝对路径][-s shell][-r创建系统账号][-e 账号失效日期]账号名】

若不加任何参数【useradd 账号名】,centos、Ubuntu下会默认创建一个与用户名相同的用户组,并分配相应的UID、GID。centos下回默认创建/home/账号名的主文件夹,Ubuntu则不会,除非-m(但在/etc/passwd中会显示其在home下有文件夹)!UID、GID的默认选择由/etc/login.defs中UID_MIN、GID_MIN决定(也决定了系统账号和可登陆账号的分界id)。新建的账号下的默认文件则由/etc/skel/*决定。Ubuntu下建出来的用户将是默认“三无”用户:一无Home Directory,二无密码,三无系统Shell。

对创建的账户设置失效日期,密码失效日期等对于临时账户有帮助。

系统账号是系统运行必备的,用来进行运行系统所需服务的权限设置,创建系统账号不会默认创建主文件夹。【useradd -D】可查看创建账号默认的参数。

上面的创建用户未能设置密码,是不可登录的。【passwd [-l/-u] 账号】可设置密码。

当root身份登录时【passwd 账号】可设置或修改任何账号密码;任何身份登录,直接passwd即修改当前账号密码。[-l/-u]是lock或unlock一个账号,其实密码无效从而无法登录(封号)。在某些版本的linux系统中可以使用【| passwd --stdin账号】数据流重定向的方法设置账号密码,这样对新建大量账号时很方便,如定一个变量为其学号,每个账号登录密码为其学号,在其第一次登录时必须修改密码可用下面的chage。(Ubuntu不支持centos支持。此时可以试用chpasswd命令(p444、p448案例),该命令支持stdin)

另外设置密码修改、密码失效等(/etc/shadow中的参数)。

chage [options] 账号名】设置详细的密码参数【chage -l 帐号名】可获得账号详细密码参数。

usermod [-d修改主文件夹][-l修改用户名][-g/G修改初始/次要(添加)用户组] username】【usermod -l newname oldname】用户在登录时无法修改,需先注销(或杀死进程,参考第28条)。

userdel [-r] 账号名】删除账号。已登录的账号无法删除,可以先将其注销(kill进程)或强制【userdel -r -f 账号】-r是连同主文件夹一起删除,-f是强制。

finger [username]】获取账户信息;

chfn [username]】修改账户说明信息;

id [username]】显示跟该账户相关的id,包括UID GID以及此账号支持的用户组id。

 

groupadd [-g gid][-r]用户组名】添加用户组,-r表示添加系统用户组(gid受GID_MIN限制)。

groupmod [-g gid][-n groupname]用户组名】修改group参数

groupdel [groupname]】被删除的用户组必须不是某个用户的初始用户组,否则不能删除,除非先将该用户删除或更改该用户的初始用户组。

【root @...# gpasswd [-A user1指定user1为改组管理员] [-M user2,..同时添加user2到改组]groupname】

【user1@...$gpasswd -a/-d usernamegroupname】将用户移入或移出改组(由管理员操作)

41、ACL

ACL是针对单一用户、单一文件或目录来进行r、w、x权限的设置。例如某用户组指定组外的另一个用户可以进入该组查看文件,而不能删除或修改文件。

系统通常会默认对文件系统启动ACL支持(若没有这mount p424)。

setfacl [-m  ACL参数] 目标文件名】:对目标文件添加相关参数,根据用户类型的不同分为用户(u)、用户组(g)、有效权限(m--mask)。

【setfacl -m u:用户名:权限 目标文件名】权限即rwx

【setfacl -m g用户组名:权限 目标文件名】

【setfacl -m m:权限 目标文件名】有效权限即实际的权限,用户或用户组所设置的权限要在有效权限内才实际有效!

要对一个目录下的文件操作,首先得取得对目录的操作权限!故目标文件名通常是目录,但仅对目录添加ACL权限还不能被目录下文件继承该权限,还需针对文件设置。但如【setfacl -m d:u:用户名:权限 目标文件名】可以让这个目录下的文件和子目录继承权限。

getfacl filename】查看文件ACL权限,用ll查看被设置的文件其权限属性后有“+”。

【setfacl -b filename】删除全部ACL权限。

42、su与sudo

   linux开机登录时只能以普通用户身份登录!

   su用来切换账号,若【su -m/-p [用户名]】则可保留前一用户的环境变量【su -/-l 用户名】则以login-shell登录。su无法切换到系统账号,因为系统账号的shell是/usr/sbin/nologin

su -c “命令”】以root身份仅执行一次命令,需输入root密码

sudo本来只有root可用使用,但在/etc/sudoers配置文件中设置可以使用sudo命令的用户或用户组后,其他用户也可使用sudo。普通用户在使用sudo时需输入的密码是该用户的密码而不是root密码。

root@..【sudo -u 普通用户名 命令】可以用root以普通用户的身份执行命令,如创建文件,则该文件的owner、group都是该普通用户。但普通用户应对操作目录拥有权限。

visudo 命令专门查看/etc/sudoers,以修改此文件。可以是单一用户、整用户组添加使用sudo的权限。还可以指定某用户特定的某几个可用的命令,而不是全部的命令(P432)。

普通用户【sudo su -】输入自己的密码可以变成root!

ulimit来显示可创建的文件大小、cpu使用时间等。另外可以在/etc/security/limits.conf文件中修改等多限制,如限制一个用户组同时可登录的用户数。

43、linux主机上的用户信息传递

wwho可以查看目前登录主机的用户及相关信息(登录时间、ip地址、tty端口号等)。

last查看系统建立以来所有登录过主机的记录,lastlog查看所有用户最近登录的时间。

write 用户账号 [用户又在tty端口号]】一个用户可以发给另一个在线的用户即时信息,回车、crl+d结束输入。若用户不想接收其他用户的信息(因为可能会打断该用户正在进行的工作),可【mesg n】(n即no),可抵挡一般用户write来的信息,但对root无效。解开【mseg y】(y=yes)即可。wall(write all)可以发给所有在线用户。

mail username @localhost-s “邮件标题”】可以给不在线发送邮件,用户登录时mail一下就可查看邮件。mail直接编辑邮件内容时不易更改,可以用数据流重定向<,从已编辑好的文本中传入【mail username @localhost -s “邮件标题”< filename】。若是在同一主机上的用户之间mail,可以不用@localhost。

42、手动创建用户

手动创建用户即直接对/etc/passwd等相关文件编辑,再配合pwckpwconvgpwconv指令将/etc/passwd 与/etc/shadow(获取对应的组文件)对应起来。

pwck是对比/etc/passwd 与/etc/shadow的差异。具体步骤参见《鸟哥》p445。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值