共有4个符号来表示linux系统中的标准输入输出.请问0,1,2,分别代表什么含义?
标准输入即STDIN,在/dev/stdin,一般指键盘输入,shell里代号是0标准输出STDOUT,在/dev/stdout,一般指终端(terminal),就是显示器,shell里代号是1标准错误STDERR,在/dev/stderr也是指终端(terminal),不同的是,错误信息送到这里shell里代号是2
一般面试linux都问什么问题?
平时用的不多的或者确实本身就有点模糊的,非常感谢面试官的解释,这里记录下:
文件权限4755的涵义=文件权限中s/S的意义?
chmod是Linux下设置文件权限的命令,后面的数字表示不同用户或用户组的权限。
一般是三个数字:
第一个数字表示文件所有者的权限
第二个数字表示与文件所有者同属一个用户组的其他用户的权限
第三个数字表示其它用户组的权限
权限分为三种:读(r=4),写(w=2),执行(x=1)。综合起来还有可读可执行(rx=5=4+1)、可读可写(rw=6=4+2)、可读可写可执行(rwx=7=4+2+1)。
所以,chmod755设置用户的权限为:
1.文件所有者可读可写可执行
2.与文件所有者同属一个用户组的其他用户可读可执行
3.其它用户组可读可执行
chmod4755与chmod755的区别在于开头多了一位,这个4表示其他用户执行文件时,具有与所有者相当的权限。
文章Linux中的文件特殊权限中通过实例很好地解释了这里的4的含义:
先看个实例,查看你的/usr/bin/passwd与/etc/passwd文件的权限
#ls-l/usr/bin/passwd/etc/passwd
-rw-r--r--1rootroot154908-1913:54/etc/passwd
-rwsr-xr-x1rootroot229842007-01-07/usr/bin/passwd
众所周知,/etc/passwd文件存放的各个用户的账号与密码信息,/usr/bin/passwd是执行修改和查看此文件的程序,但从权限上看,/etc/passwd仅有root权限的写(w)权,可是为什么每个用户都可以直接调用/usr/bin/passwd来写/etc/passwd从而达到修改自己的密码呢?注意这里的s代替了x(-rwsr-xr-x1rootroot229842007-01-07/usr/bin/passwd),这里的s使得其他的用户执行/usr/bin/passwd时具有与ownerroot相当的权限。
这里的4或s是特殊的文件权限,其实s可以用在user或group,还有另一种特殊权限t:
再看个实例,查看你的/tmp目录的权限
#ls-dl/tmpdrwxrwxrwt6rootroot409608-2211:37/tmptmp目录是所有用户共有的临时文件夹,所有用户都拥有读写权限,这就必然出现一个问题,A用户在/tmp里创建了文件a.file,此时B用户看了不爽,在/tmp里把它给删了(因为拥有读写权限),那肯定是不行的。
有t特权的目录下的文件或目录只有owner和root才可以删除和修改,其他的人即使有写权限也不能删除。
如何设置以上特殊权限:
setuid:chmodu+sxxx
setgid:chmodg+sxxx
stickbit:chmodo+txxx
或者使用八进制方式,在原先的数字前加一个数字,三个权限所代表的进制数与一般权限的方式类似,如下:
suidguidstickbit
111
所以:
suid的二进制串为:100,换算十进制为:4
guid的二进制串为:010,换算十进制:2
stickbit二进制串:001,换算十进制:1
于是也可以这样设:
setuid:chmod4755xxx
setgid:chmod2755xxx
stickbit:chmod1755xxx
最后,在一些文件设置了特殊权限后,字母不是小写的s或者t,而是大写的S和T,那代表此文件的特殊权限没有生效,是因为你尚未给它对应用户的x权限.
硬链接和软连接的大小?
通过下面的测试,硬链接与源文件是相同的inode节点,指向相同的文件,肯定是相同的大小;软连接可以理解为文件内容中存储了源文件的地址或路径,所以有自己的大小。
$mkdirmytest
$cdmytest
$echo"AAAAAAAAAAAAAAAAA">hello
$lnhellohello2
$ln-shellohello3
$ls-lia
总计16
5764989drwxrwxr-x2aaaaaa409611-2516:03.
5566272drwx------23aaaaaa409611-2516:02..
5765068-rw-rw-r--2aaaaaa1811-2516:03hello
5765068-rw-rw-r--2aaaaaa1811-2516:03hello2
5765116lrwxrwxrwx1aaaaaa511-2516:03hello3->hello
$echo"BBBBBBBBBBB">>hello
$ls-lia
总计16
5764989drwxrwxr-x2aaaaaa409611-2516:03.
5566272drwx------23aaaaaa409611-2516:02..
5765068-rw-rw-r--2aaaaaa3011-2516:04hello
5765068-rw-rw-r--2aaaaaa3011-2516:04hello2
5765116lrwxrwxrwx1aaaaaa511-2516:03hello3->hello
如何设置当前用户新建文件或目录的默认权限?
umask用来定义新建文件或目录的默认权限,新的目录的权限为777-umask设置的值,新建文件的权限为666-umask设置的值。若要长期修改umask的值,可以把它写进/etc/profile或~/.profile或~/.bash_profile中。
$umask
0002
$umask-S
u=rwx,g=rwx,o=rx
$mkdiraa
$touchbb
$ls-la
总计12
drwxrwxr-x3aaaaaa409611-2516:20.
drwx------23aaaaaa409611-2516:20..
drwxrwxr-x2aaaaaa409611-2516:20aa
-rw-rw-r--1aaaaaa011-2516:20bb
$umask022
$mkdiraa2
$touchbb2
$ls-la
总计16
drwxrwxr-x4aaaaaa409611-2516:29.
drwx------23aaaaaa409611-2516:20..
drwxrwxr-x2aaaaaa409611-2516:20aa
drwxr-xr-x2aaaaaa409611-2516:29aa2
-rw-rw-r--1aaaaaa011-2516:20bb
-rw-r--r--1aaaaaa011-2516:29bb2
find.-name"filename"中的filename为啥必须加引号?但是ls中不需要?
find
ls......
因为这里的"filename"其实是表达式中的一个pattern,所以必须要加“”来组织shell的解析。例如find.-name"aa*"-execrm{}。
如何快速地将远程机器上的共享目录下的所有文件拷贝到本地供只读使用?
如果不拷贝,简单地mount到本地目录。但是这里是要求拷贝到本地,所以这里可以使用softlink来将对文件的拷贝时间变为固定值。具体可以使用cp的-s参数。
Linux中文件路劲可以用空格吗?
windows中用双引号就可以了,linux中用加空格来表示。
mkdirmyfolder(中间有2个空格)
cdmyfolder/
linux分区的含意是什么,如何理解?
swap是交换分区,/是根分区是系统文件系统的最顶层,其他分区是挂载在/的一个目录下/boot是启动分区里面有启动文件/var是数据分区,主要放置一些数据,如数据库,日志,网站,ftp文件等/home是普通用户家目录所在位置,放置用户的文件配置/usr一般是软件包的可执行程序,链接库等等