18个问题的解答
1. Linux系统的结构;
在 Linux 或 Unix 操作系统中,所有的文件和目录都被组织成以一个根节点开始的倒置的树状结构。 文件系统的最顶层是由根目录开始的,系统使用 / 来表示根目录。在根目录之下的既可以是目录,也可以是文件,而每一个目录中又可以包含子目录文件。如此反复就可以构成一个庞大的文件系统。 在Linux文件系统中有两个特殊的目录,一个用户所在的工作目录,也叫当前目录,可以使用一个点 . 来表示;另一个是当前目录的上一级目录,也叫父目录,可以使用两个点 .. 来表示。 . :代表当前的目录,也可以使用 ./ 来表示; .. :代表上一层目录,也可以 ../ 来代表。 如果一个目录或文件名以一个点 . 开始,表示这个目录或文件是一个隐藏目录或文件(如:.bashrc)。即以默认方式查找时,不显示该目录或文件。
2. 什么是shell?shell的作用;
1、shell是操作系统的最外层,是一个用户跟操作系统之间交互的命令解释器。 2、大多数linux默认的shell命令解释器是 bash(/bin/bash) 3、shell独立于内核,是链接内核和应用程序的桥梁,通俗来讲shell是内核周围的外壳 shell脚本是shell命令组成的文件。换一种说法,shell脚本是利用shell的功能所写的一个程序, 这个程序使用纯文本文件将一些shell语法和指令写在里面,让使用者很容易的就能够一个操作执行多个命令。 1、shell可以合并编程语言以控制进程和文件,以及启动和控制其他程序 2、shell能够减少大量的重复输入和交互操作,能够进行批量的处理和自动化完成维护,减轻管理层 的负担
3. Linux用户类型及其用户主目录;
Linux下用户分为3类:超级用户(root)、系统用户、普通用户。 超级用户的用户名为root,它具有一切操作权力,因此为安全起见,建议不要轻易的在root账户下面对文件进行操作。在Linux操作系统的字符界面,root账户的提示符为#,且默认情况下,root用户的UID为0。 系统用户是Linux系统正常工作所必需的内建的用户,一般是用于管理服务所用。系统用户不能用来登陆,如bin、daemon、lp等用户。系统用户的UID一般为1~499,它们的shell为/sbin/nologin。 普通用户是为了让使用者能够使用Linux系统资源而建立的,用户新建的账号一般就是普通账号。在Linux操作系统的字符界面,普通用户的提示符为$,且普通用户的UID默认为1000~60000。 ~在Linux中代表用户主目录 对一般用户,~表示/home/(用户名) 对于root用户,~表示/root 如果要查看~的真实面貌,可以先进入~目录,然后用pwd -P命令查看~的绝对路径 cd ~ pwd -P
4. shell提示符:[用户登录名@主机名 当前目录]#、$ ;
[mozhiyan@localhost ~]$ 这种格式包含了以下三个方面的信息: 启动 Shell 的用户名,也即 mozhiyan; 本地主机名称,也即 localhost; 当前目录,波浪号~是主目录的简写表示法。 对于普通用户,base shell 默认的提示符是美元符号$;对于超级用户(root 用户),Bash Shell 默认的提示符是井号#。该符号表示 Shell 等待输入命令。
5. 输入输出重定向及用户文件描述符;
除了能从键盘输入和输出到屏幕,还应能从文件输入和输出到文件中保存信息,这就改变了原始的输出输出反向,这种改变就是重定向,重定向又分为输入重定向和输出重定向,而输出重定向又分为输出覆盖重定向和输出追加重定向。 文件描述符 在执行一个shell命令是通常会自动打开3个标准文件,如下: 标准输入文件(STDIN,文件描述符为0):默认从键盘输入,也可以与重定向配合指定从文件或命令输入; 标准输出文件(STDOUT,文件描述符为1):默认输出到屏幕,也可以与重定向配合指定输出到文件; 错误输出文件(STDERR,文件描述符为2):默认输出到屏幕,也可以与重定向配合指定输出到文件; STDIN对应/dev/stdin设备,STDOUT对应/dev/stdout设备,STDERR对应/dev/stderr设备; 标准输入:stdin 文件描述符 0 < 、<< 0< 、0<< 标准输入默认就是0,0可以省略不写 标准输入:stdout 文件描述符 1 > 、>> 1>、1>> 标准输出默认就是1,1可以省略不写 错误输出:stderr 文件描述符 2 > 、>> 2>、2>> 错误输出是2,2必须要写 2>&1 和 &符号 ls -l /etc/* fu.txt >>outInfo.txt 2>&1 #表示把标准输出和错误输出信息内容都追加到outInfo.txt文件 ls -l /etc/* fu.txt &>>outInfo.txt #等价于上一条 ls -l /etc/* fu.txt >>outInfo.txt 2>>err.txt #标准输出和错误输出内容分别追加到不同的文件 /dev/null 是一个无底洞,可以把不想要保留的信息丢进这个洞里
command < file 等价于 command 0> file #将文件作为标准输入,即文件作为命令的标准输入,默认就是0,0可以不写 command << delimiter 等价于 command << delimiter #从标准输入中读入,直到遇到delimiter分隔符 command > file 等价于 command 1> file #将命令的标准输出内容覆盖到文件file,标准输入默认就是1,1可以不写 command >> file #命令的标准输出内容追加到文件末尾,默认就是1,1可以不写 command 2> file #命令的错误输出内容覆盖到文件,错误输出必须要写文件描述符2 command 2>> file #命令的错误输出内容追加到文件末尾,错误输出必须要写文件描述符2 command > file 2>&1 # 2>&1意思是把 标准输出和错误输出 都重定向覆盖到 file文件 command &>file #等价于上面一条,把 标准输出和错误输出 都重定向覆盖到 file文件 command >> file 2>&1 # 2>&1意思是把 标准输出和错误输出 都重定向追加到 file文件 command &>> file #等价于上面一条,把 标准输出和错误输出 都重定向追加到 file文件 还可以将标准输出和错误输出方便重定向到不同的文件: command >> file1 2>>file2 # 标准输出重定向追加到 file1文件,错误输出重定向追加到 file2文件 test.txt文件是不存在的 ls /usr/local/apache/conf/ test.txt >>/stdout.txt 2>>stderr.txt #标准输出内容追加到stdout.txt,错误输出内容追加到stderr.txt ls /usr/local/apache/conf/ test.txt &>>/stdout.txt #表示标准输出和错误输出内容都追加到相同文件 ls /usr/local/apache/conf/ test.txt >>/stdout.txt 2>&1 #同上
6. 常见的Linux文件类型及其对应的描述字符;
在Linux中,有一句经典的话叫做一切皆文件”。 文件分类: (1)普通文件(regular):存在于外部存储器中,用于存储普通文件。 (2)目录文件(directory):用于存放目录项,是文件系统管理的重要文件类型。 (3)管道文件(pipe):一种用于进程间通信的特殊文件,也称为命名管道FIFO。 (4)套接字文件(socket):一种用于网络间通信的特殊文件。 (5)链接文件(link);用于间接访问另外一个目标文件,相当于widows快捷方式。 (6)字符设备文件(character):字符设备在应用层的访问结构。 (7)块设备文件(block):块设备在应用层的访问接口。 在linux终端下输入ls -l命令,学习linux每条文件信息的最左边的一个字符即表示了该文件的类别: b:块设备文件 c:字符设备文件 d:目录文件 l:链接文件 p:管道文件 -:普通文件 s:套接字文件
7. Linux的文件目录结构
/boot:存放的启动Linux 时使用的内核文件,包括连接文件以及镜像文件。 /etc:存放所有的系统需要的配置文件和子目录列表,更改目录下的文件可能会导致系统不能启动。 /lib:存放基本代码库(比如c++库),其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。 /sys: 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中 指令集合: /bin:存放着最常用的程序和指令 /sbin:只有系统管理员能使用的程序和指令。 外部文件管理: /dev :Device(设备)的缩写, 存放的是Linux的外部设备。注意:在Linux中访问设备和访问文件的方式是相同的。 /media:类windows的其他设备,例如U盘、光驱等等,识别后linux会把设备放到这个目录下。 /mnt:临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。 临时文件: /run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。 /lost+found:一般情况下为空的,系统非法关机后,这里就存放一些文件。 /tmp:这个目录是用来存放一些临时文件的。 账户: /root:系统管理员的用户主目录。 /home:用户的主目录,以用户的账号命名的。 /usr:用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。 /usr/bin:系统用户使用的应用程序与指令。 /usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。 /usr/src:内核源代码默认的放置目录。 运行过程中要用: /var:存放经常修改的数据,比如程序运行的日志文件(/var/log 目录下)。 /proc:管理内存空间!虚拟的目录,是系统内存的映射,我们可以直接访问这个目录来,获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件来做修改。 扩展用的: /opt:默认是空的,我们安装额外软件可以放在这个里面。 /srv:存放服务启动后需要提取的数据(不用服务器就是空) 在 Linux 或 Unix 操作系统中,所有的文件和目录都被组织成以一个根节点开始的倒置的树状结构。 文件系统的最顶层是由根目录开始的,系统使用 / 来表示根目录。在根目录之下的既可以是目录,也可以是文件,而每一个目录中又可以包含子目录文件。如此反复就可以构成一个庞大的文件系统。 在Linux文件系统中有两个特殊的目录,一个用户所在的工作目录,也叫当前目录,可以使用一个点 . 来表示;另一个是当前目录的上一级目录,也叫父目录,可以使用两个点 .. 来表示。 . :代表当前的目录,也可以使用 ./ 来表示; .. :代表上一层目录,也可以 ../ 来代表。 如果一个目录或文件名以一个点 . 开始,表示这个目录或文件是一个隐藏目录或文件(如:.bashrc)。即以默认方式查找时,不显示该目录或文件。
8. 基本操作命令:ls -al, cat、more、less、cp、rm -r、mv、mkdir、rmdir、cd、pwd,kill;
9. 链接命令ln -s的使用及其链接的作用;
ln [参数][源文件或目录][目标文件或目录] #功能: Linux文件系统中,有所谓的链接(link),我们可以将其视为档案的别名,而链接又可分为两种 : 硬链接(hard link)与软链接(symbolic link),硬链接的意思是一个档案可以有多个名称,而软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。 软链接: 1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式 2.软链接可以 跨文件系统 ,硬链接不可以 3.软链接可以对一个不存在的文件名进行链接 4.软链接可以对目录进行链接 硬链接: 1.硬链接,以文件副本的形式存在。但不占用实际空间。 2.不允许给目录创建硬链接 3.硬链接只有在同一个文件系统中才能创建 注意点: 第一,ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化; 第二,ln的链接又分软链接和硬链接两种,软链接就是ln –s 源文件 目标文件,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,硬链接 ln 源文件 目标文件,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。 ln指令用在链接文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则会把前面指定的所有文件或目录复制到该目录中。若同时指定多个文件或目录,且最后的目的地并非是一个已存在的目录,则会出现错误信息。 必要参数: -b 删除,覆盖以前建立的链接 -d 允许超级用户制作目录的硬链接 -f 强制执行 -i 交互模式,文件存在则提示用户是否覆盖 -n 把符号链接视为一般目录 -s 软链接(符号链接) -v 显示详细的处理过程 详情搜索更多 ln使用方法 实例1:给文件创建软链接 ln -s log2013.log link2013 [root@localhost test]# ll -rw-r--r-- 1 root bin 61 11-13 06:03 log2013.log [root@localhost test]# ln -s log2013.log link2013 [root@localhost test]# ll lrwxrwxrwx 1 root root 11 12-07 16:01 link2013 -> log2013.log -rw-r--r-- 1 root bin 61 11-13 06:03 log2013.log 说明 为log2013.log文件创建软链接link2013,如果log2013.log丢失,link2013将失效 实例2:给文件创建硬链接 ln log2013.log ln2013 [root@localhost test]# ll lrwxrwxrwx 1 root root 11 12-07 16:01 link2013 -> log2013.log -rw-r--r-- 1 root bin 61 11-13 06:03 log2013.log [root@localhost test]# ln log2013.log ln2013 [root@localhost test]# ll lrwxrwxrwx 1 root root 11 12-07 16:01 link2013 -> log2013.log -rw-r--r-- 2 root bin 61 11-13 06:03 ln2013 -rw-r--r-- 2 root bin 61 11-13 06:03 log2013.log 说明 为log2013.log创建硬链接ln2013,log2013.log与ln2013的各项属性相同 实例3:接上面两实例,链接完毕后,删除和重建链接原文件 [root@localhost test]# ll lrwxrwxrwx 1 root root 11 12-07 16:01 link2013 -> log2013.log -rw-r--r-- 2 root bin 61 11-13 06:03 ln2013 -rw-r--r-- 2 root bin 61 11-13 06:03 log2013.log [root@localhost test]# rm -rf log2013.log [root@localhost test]# ll lrwxrwxrwx 1 root root 11 12-07 16:01 link2013 -> log2013.log -rw-r--r-- 1 root bin 61 11-13 06:03 ln2013 [root@localhost test]# touch log2013.log [root@localhost test]# ll lrwxrwxrwx 1 root root 11 12-07 16:01 link2013 -> log2013.log -rw-r--r-- 1 root bin 61 11-13 06:03 ln2013 ---xrw-r-- 1 root bin 302108 11-13 06:03 log2012.log -rw-r--r-- 1 root root 0 12-07 16:19 log2013.log [root@localhost test]# vi log2013.log 2013-01 2013-02 2013-03 2013-04 2013-05 2013-06 2013-07 2013-08 2013-09 2013-10 2013-11 2013-12[root@localhost test]# ll lrwxrwxrwx 1 root root 11 12-07 16:01 link2013 -> log2013.log -rw-r--r-- 1 root bin 61 11-13 06:03 ln2013 -rw-r--r-- 1 root root 96 12-07 16:21 log2013.log [root@localhost test]# cat link2013 2013-01 2013-02 2013-03 2013-04 2013-05 2013-06 2013-07 2013-08 2013-09 2013-10 2013-11 2013-12 [root@localhost test]# cat ln2013 hostnamebaidu=baidu.com hostnamesina=sina.com hostnames=true 说明: 1.源文件被删除后,并没有影响硬链接文件;软链接文件在centos系统下不断的闪烁,提示源文件已经不存在 2.重建源文件后,软链接不在闪烁提示,说明已经链接成功,找到了链接文件系统;重建后,硬链接文件并没有受到源文件影响,硬链接文件的内容还是保留了删除前源文件的内容,说明硬链接已经失效 实例4:将文件链接为另一个目录中的相同名字 ln log2013.log test3 [root@localhost test]# ln log2013.log test3 [root@localhost test]# ll lrwxrwxrwx 1 root root 11 12-07 16:01 link2013 -> log2013.log -rw-r--r-- 1 root bin 61 11-13 06:03 ln2013 -rw-r--r-- 2 root root 96 12-07 16:21 log2013.log [root@localhost test]# cd test3 [root@localhost test3]# ll -rw-r--r-- 2 root root 96 12-07 16:21 log2013.log [root@localhost test3]# vi log2013.log 2013-01 2013-02 2013-03 2013-04 2013-05 2013-06 2013-07 2013-08 2013-09 2013-10[root@localhost test3]# ll -rw-r--r-- 2 root root 80 12-07 16:36 log2013.log [root@localhost test3]# cd .. [root@localhost test]# ll lrwxrwxrwx 1 root root 11 12-07 16:01 link2013 -> log2013.log -rw-r--r-- 1 root bin 61 11-13 06:03 ln2013 -rw-r--r-- 2 root root 80 12-07 16:36 log2013.log [root@localhost test]# 实例5:给目录创建软连接 https://www.jb51.net/LINUXjishu/150570.html
10. 压缩命令:tar
c: 创建文档 t: 列出存档内容 x:提取存档 f: filename 要操作的文档名 v:详细信息 1.打包 打包:是指把文件整合在一起,不压缩 1.将文件打包:tar cf a.tar /etc 2.列出文档内容:tar tf a.tar 3.提取文档内容:tar xf a.tar 2.压缩 压缩:把打包好的文件压缩,便于存储 注:压缩一定加上后缀,便于解压,便于观看 Linux 主要有3种压缩方式 gzip: 压缩速度最快,历史最久,应用最广泛; bzip2: 压缩成的存档文件小,可用性不如gzip; xz: 最新的方式,提供最佳的压缩率。 注:实际中三种情况都可能遇到,所以必须有一定的命名方式 z 用于gzip压缩: filename.tar.gz j 用于bzip压缩: filename.tar.bz2 J 用于xz压缩: filename.tar.x 1.先看看压缩前文件大小:ls -lh 2.gzip压缩:tar zcf a.tar.gz a.tar 3.bzip2缩:tar jcf a.tar.bz2 a.tar 4.xz压缩:tar Jcf a.tar.xz a.tar 5.压缩率对比:xz > bzip2 > gzip (同时压缩率越高,时间也越长) 3. 解压 解压:将压缩好的文件解压打开 1.解压缩文件加一个参数x:tar xf a.tar.gz 2.其他类型解压:tar xf a.tar.bz2 tar xf a.tar.xz
11. vi编辑器的三种基本工作模式及其转换;
1.命令行模式 该模式是进入 vi 编辑器后的默认模式。任何时候,不管用户处于何种模式,按下Esc键即可进入命令模式。 在命令模式下,用户可以输入 vi 命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释。若输入的字符是合法的 vi 命令,则 vi 在接受用户命令之后完成相应的动作。 但需注意的是,所输入的命令并不回显在屏幕上。若输入的字符不是 vi 的合法命令,vi 会响铃报警。 2.文本输入模式 在命令模式下输入插入命令i、附加命令a、打开命令o、修改命令c、取代命令r或替换命令s都可以进入文本输入模式。 在该模式下,用户输入的任何字符都被 vi 当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按下Esc键即可。 3.末行模式 末行模式也称 ex 转义模式。 在命令模式下,用户按:键即可进入末行模式下,此时 vi 会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个:作为末行模式的说明符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。 末行命令执行完后,vi 自动回到命令模式。 模式切换 如果要从命令模式转换到编辑模式,可以输入命令a或者i。 如果需要从文本模式返回,则按下Esc键即可。 在命令模式下输入:即可切换到末行模式,然后输入命令。
12. 使用挂载、卸载命令:mount、umount、fdisk –l;
//mount挂载 mount /dev/cdrom /mnt ------------------------ 挂载本地的光盘 查看挂载的情况:df -h 查看当前磁盘信息命令:sudo fdisk -l //umount卸载 umount /mnt 注意: 当你的当前路径为/mnt下,即在挂载文件的里面时,卸载会失败,提示:Dev is besy.解决办法:退出挂载的目录 当有别的程序正在访问挂载的文件时,也会提示卸载失败,通过 lsof /mnt 查看是哪个进程占用了/mnt,kill -9 $pid ,然后再卸载 使用:umount -l /mnt (-l : 卸载前检查占用该挂载文件的程序并迅速kill掉,以达到快速卸载的目的) fdisk - Partition table manipulator for Linux ,译成中文的意思是磁盘分区表操作工具 fdisk -l 查看硬盘及分区信息 数值说明: Disk /dev/hda: 80.0 GB, 80026361856 bytes 255 heads, 63 sectors/track, 9729 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes 这个硬盘是80G的,有255个磁面;63个扇区;9729个磁柱;每个 cylinder(磁柱)的容量是 8225280 bytes=8225.280 K(约为)=8.225280M(约为);分区序列 引导 开始 终止 容量 分区类型ID 分区类型 fdisk [必要参数][选择参数] 必要参数: -l 列出素所有分区表 -u 与 -l 搭配使用,显示分区数目 选择参数: -s<分区编号> 指定分区 -v 版本信息 菜单操作说明 m :显示菜单和帮助信息 a :活动分区标记/引导分区 d :删除分区 l :显示分区类型 n :新建分区 p :显示分区信息 q :退出不保存 t :设置分区号 v :进行分区检查 w :保存修改 x :扩展应用,高级功能
13. Linux所支持的文件系统类型;
1.ext2 与ext3文件系统 2.swap 文件系统 3.vfat 文件系统 4.NFS文件系统 5.ISO 9660文件系统
14. Linux系统设备的名称;
IDE hd[a-d] SCIS/STAT/USE sd[a-p] 软盘 fd[0-2] 打印机 25针:lp[0-2] USB:usb/lp[0-15] 鼠标 USB:usb/mouse[0-15] PS2:psaux 当前CDROM/DVD cdrom 当前鼠标 mouse 磁带机 IDE:ht0 SCSI:st0
15. 用户帐号信息的配置文件/etc/passwd、/etc/shadow等;
认识/etc/passwd和/etc/shadow 这两个文件可以说是Linux系统中最重要的文件之一。如果没有这两个文件或者这两个文件出了问题,则无法正常登录系统 #解说用户配置文件 /etc/passwd(注:每创建一个用户都会在这个文件里面增加一行记录) [root@localhost ~]# cat /etc/passwd root:x:0:0:root:/root:/bin/bash ....... //上面代码是前一行,下面代码是最后两行(我自己创建的用户),中间这省略的部分是当我们安装完系统之后自动存在的用户。 user1:x:1000:1000::/home/user1:/bin/bash user2:x:1001:1002::/home/user2:/bin/bash 代码说明: 每行记录代表一个用户。每个用户分为7个字段(用:分割为7段) 第一段为用户名(如第一行中的root就是用户名),它代表用户账号的字符串。用户名中的字符可以是大小写字母,数字,减号(不能出现在首位),点或下划线,其他字符不合法。虽然用户名中可以出现点,但不建议使用,尤其是首位。另外,减号不建议使用,容易混淆。 第二段存放的是该账号的口令。这里为什么是x呢?早期的Unix系统口令确实存放在这里,但基于安全因素,后来存放在/etc/shadow中(下面会详细介绍/etc/shadow文件),这里用x代替。 第三段为一个数字,这个数字代表用户标识列,也称为uid(它属于一个组,组id是第四段)。系统就是通过这个数字识别用户身份的。这里的0就是root,也就是说我们可以修改user1用户的uid为0,那么系统会认为root和test为同一个账户。uid的取值范围是0-65535(但实际上已经可以支持到4294967294),0代表超级用户(root)的标识列,Centos7的普通用户标识号从1000开始。 第四段也是数字,表示组标识号,也称为gid。这个字段对应着/etc/group中的一条记录,其实/etc/group和/etc/passwd基本类似。 第五段为注释说明没有实际的意义。通常记录该用户的一些属性,例如姓名,电话,地址等。我们可以使用chfn命令来更改这些信息。 第六段是用户的家目录,当用户登陆时,就处在这个目录下。root的家目录是/root,普通用户的家目录是/home/username。用户家目录是可以自定义的。比如,建议一个普通用户test1,要想让test1的家目录在/data目录下,只要将/etc/passwd文件中对应该用户那行中的本字段修改为/data即可。 第七段为用户的shell。用登录后,要启动一个进程,用来将用户下达的指令传给内核,这就是shell。Linux的shell有sh,sch,ksh,tcsh,bash等多种,而RedHat/CentOS的shell就是bash。查看/etc/passwd文件,该字段中除了/bin/bash,还有很多/sbin/nologin,默认是/bin/bash。 #解说密码配置文件 (注:这个文件是专门用来控制用户的密码的) [root@localhost ~]# cat /etc/shadow |head -n 3 //head -n3 表示前3行数据,|表示管道符,它的作用是把前面的命令的输出在输入给后面的命令。 root:o5XXMECZgVxLG.lh$fQueq1w3ZSgWXQU0kDpjcHYNz6kNOc9ZgZAc3lyouDA1wUM32q9OGkgktV.GmHqQZwxqC27Radb6Ab042In2k.::0:99999:7::: bin:*:17110:0:99999:7::: daemon:*:17110:0:99999:7::: 代码说明:每行记录代表一个用户。每个用户分为9个字段(用:分割为9段) 第一段为用户名,与/etc/passwd对应。 第二段为用户密码,是该账号的真正密码。 !! 代表这个用户没有密码,没有密码说明这个用户不能登录。* 代表这个密码是被锁定的不能用的,也是不能够登录的。这里的密码已经加密,为了防止黑客解密。所以,将该文件属性设置为000,但root账户是可以访问或更改的。使用命令ls -l查看该文件的权限,示例命令如下: [root@localhost ~]# ls -l /etc/shadow ———-. 1 root root 693 10月 25 23:23 /etc/shadow 第三段为上次更改密码的日期,这个数字以1970年1月1日和上次更改密码的日期为基准计算而来的。例如,上次更改密码的日期为2012年1月1日,则这个值就是 365*(2012-1970)+(2012-1970)/4+1=15341。如果是闰年,则有366天。 第四段为要过多少天才可以更改密码,默认是0,即不受限制。 第五段为密码多少天后到期,即在多少天内必须更改密码,例如,这里设置为30,则30天内必须更改一次密码;否则,将不能登录系统。默认是99999,可以理解为永久不更改密码。 第六段为密码到期前的警告期限。若这个值设置成7,则表示当7天后密码过期时,系统就发出警告,提醒用户他的密码将在7天后到期。 第七段为账号失效期限。如果这个值设置成3,则表示密码以及过期,然而用户并没有在到期前修改密码,那么再过3天,这个账号便失效,即锁。 第八段为账号的生命周期,跟第三段一样,这个周期是按距离1970年1月1日算起。它表示,账号在这个日期前可以使用,到期后账号将作废。 第九段作为保留用的,没有什么意义。
16. 用户管理命令:adduser、passwd、userdel、su
一 用户创建命令: # adduser 用户名 # useradd 用户名 1) useradd 与 adduser 的区别 在CentOs系统中: useradd与adduser是没有区别的, 都是创建用户,在/home下自动创建用户目录,没有设置密码,需要使用passwd命令修改密码(修改后才可以登录)。 在Ubuntu下useradd与adduser有所不同 1、useradd在使用该命令创建用户是不会在/home下自动创建与用户名同名的用户目录,而且不会自动选择shell版本,也没有设置密码,这个用户是不能登录的,需要使用passwd命令修改密码。 2、adduser在使用该命令创建用户是会在/home下自动创建与用户名同名的用户目录,系统shell版本,会在创建时会提示输入密码,更加友好。 ''' useradd命令使用格式如下:useradd [参数] 新建用户账号 -d 指定用户登录系统时的主目录,如果不使用该参数,系统会自动在/home目录下建立与用户名同名文件为主目录 -m 自动建立目录 -g 指定用户组 相关说明: Linux每个用户都要有一个主目录,主目录就是第一次登录系统,用户的默认当前目录。 每个用户必须有一个主目录,所以在添加用户的时候,必须要给用户指定一个主目录。 用户的主目录一般要放到根目录的home目录下,用户的主目录要跟用户名相同。 如果在创建用户的时候,不指定组名,系统会自动创建一个和用户名一样的组名 ''' 2) 修改用户密码命令 # passwd 用户名 二 设置用户的密码:passwd 在Unix/Linux中,超级用户可以使用passwd命令为普通用户设置或修改用户口令。用户也可以直接使用该命令来修改自己的口令,而不需要在命令后面使用用户名。 三 删除用户:userdel userdel aaa(用户名) 删除用户,但不会删除用户的主目录。 userdel aaa -r(用户名) 删除用户,同时也删除用户的主目录。 四 切换用户:su su命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。su 后面可以加su - ,su 以及 su - 命令不同之处在于 su - 切换到对应的用户的时候将当前的工作目录自动切换到切换后的用户主目录
17. Linux系统的文件权限及其修改权限的命令;
1、直接查看文件或者文件夹的权限命令:
>>ll
或者
>>ls -l
r代表读取权限,w写权限,x代表执行权限
第一个代表文件类型,-代表是普通文件,d代表是文件夹
权限一共分成3组,3个一组,分别是所有者,所属组,其他人
2.修改文件权限
权限管理命令chmod,全拼:chang permissions mode of a file
语法:chmod [{ugoa}{+-=}{rwx}][文件或目录]
[mode=421][文件或目录]
-R 递归修改
u:所有者,g:所属组,o:其他人,a:所有;
+:添加权限,-减少权限,=直接赋值成这个权限
例如给所有者 添加执行权限
chmod u+x 文件名
可以直接设置多个权限,例如:chmod u+x,g+w 文件名
3.介绍第二种比较常见的数字显示的权限,777,755,这些分别代表什么
权限数字表示:
r -------------4
w ------------2
x -------------1
rwxrw-r--
7 6 4
三个一组,rwx权限分别对应421相加得7,rw-对应42相加得6,r--对应4
(drwxrw-r-- 此处第一个字符d代表文件夹;-rwxrw-r-- 此处第一个字符-代表是普通文件
那么我们来看上面的755代表的是什么权限
7对应4+2+1 rwx
5对应4+1 r-x
那么这个文件的权限就是所有者rwx,所属组r-x,其他人r-x
我们更改权限的时候一般先想好要改成什么,然后对应出数字来直接设置
例如我们要改rw-r------ 对应数字为640
我们还是修改刚刚的文件:chmod -R 640 lxf.log
还可以选择-R 来直接递归修改文件夹lxf内所有文件的权限
删除文件夹:
rm -rf +目录名字
例如删除/data/mysql目录以及其下的文件、文件夹:
rm -rf /data/mysql
删除文件:
例如删除/data/log/error.log这个文件
rm -rf /data/log/error.log
备注:Linux没有回收站,使用rm -rf时一定要小心
#另一篇博客 ls -al,如下所示: 现每一行内容的格式都大差不差,以其中的 documents行为例吧,它是这样的: drwxr-xr-x. 2 root root 6 Sep 17 11:53 documents 第一栏 drwxr-xr-x.就是这个文件的类型与权限。 第一个字符d代表这个文件是个目录。 如果为-则是一个文件。 如果为|则表示为链接文件(link file)。 如果为b则表示为设备文件里面的可供存储的周边设备(可按块随机读写的设备)。 如果是c则表示为设备文件里面的串行端口设备,例如键盘、鼠标。 接下来的字符 rwxr-xr-x.中以三个为一组,且均为 rwx的三个参数的组合。其中: r代表文件可读。 w代表文件可写。 x代表文件可执行。 这三个参数的位置始终保持 rwx顺序不会改变,如果没有某个权限,会出现 -号。字符三个为一组, 第一组代表 文件拥有者具备的权限,第二组代表 相同用户组成员具备的权限,第三组代表 其它用户具备的权限。 第二栏只有一个数字 2,它表示有2个文件名链接到此节点 inode。每个文件都会将它的权限与属性记录到文件系统中的 inode中,不过,使用的目录树是使用文件名来记录,因此每个文件名就会链接到一个 inode,这个属性记录的就是有多少不同的文件名链接到一个相同的 inode号码。 第三栏表示这个文件(或目录)的拥有者账号,如此文件拥有者为 root。 第四栏表示这个文件的所属用户组,此文件所属用户组为 root。 第五栏表示这个文件的容量大小,默认单位为 Bytes,此文件大小为6B。这么小是因为里面没有东西哈哈哈。 第六栏为这个文件的创建日期或者是最近的修改日期。 第七栏就是文件名啦。这七个字段的意义是一定要熟练掌握的。 修改文件权限: 一个文件的属性与权限有很多,我们先介绍几个常用的修改 用户组、拥有者、其他身份的修改权限命令: chgrp:修改文件所属的用户组。 chown:修改文件的拥有者。 chmod:修改文件的权限 修改文件用户组 修改一个文件的用户组很简单,直接使用 chgrp(change group的缩写)即可。要注意的是,要被修改的组名必须存在于 /etc/group文件中才行,否则会产生错误,如果没有该用户组,你可以自己创建一个用户组 chgrp [-R] dirname/finame参数:-R: 这个参数的意思为进行递归修改,也就是说连同子目录下的所有文件都更新成你要改的用户组, 不加这个参数的话仅仅修改你列出的文件。 修改文件拥有者 chown [-R] 账号名称 文件或目录chown [-R] 账号名称:用户组名称 文件或目录-R:递归修改 可以看到方法和 chgrp差不多,不过多了一种使用方法,即这个命令可以顺道把用户组也修改了 修改文件权限 chmod用来修改文件的权限,文件的权限设置方法有两种,一种就是我们见到的 rwx,还可以使用数字来修改权限。其中字母和数字是有对应的关系的,如下: r:4 ---可读 w:2 ---可写 x:1 ---可执行 rwx = 4+2+1= 7 rw = 4+2 = 6 rx = 4+1 = 5 wx = 2+1 = 3 因此如果你设置的权限为 770,那么对应的就是 rwxrwx--- chmod [-R] 权限 文件或目录-R:仍然是递归的意思。 例如现在该文件的权限为 rw-r--r--,意思就是文件拥有者可读可写,用户组成员和其它用户都只读。对应的数字是 644。 假如我想让所有用户都可读可写可执行,那么应该执行 chmod 777 即假如你现在不知道文件的权限,而你现在只想要让 emptyfile这个文件能够让所有人可执行,那么你只需要执行 chmod +x emptyfile即可,这样就给文件加上了可执行权限 如果你想去掉某个权限,使用 -减号就可以了!
18. Linux系统进程的类型
1.交互进程:由一个shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。 2.批处理进程:这种进程和终端没有联系,是一个进程序列。 3.监控进程(也称守护进程):Linux系统启动时启动的进程,并在后台运行。 init是Linux系统操作中不可缺少的程序之一。所谓的init进程,它是一个由内核启动的用户级进程。 内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。所以,init始终是第一个进程(其进程编号始终为1)。 其它所有进程都是init进程的子孙。init进程是不可杀的(即不能通过kill 命令杀掉进程 二.进程状态有: linux上进程有5种状态: 1. 运行(正在运行或在运行队列中等待) 2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生) 4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放) 5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行) ps工具标识进程的5种状态码: D 不可中断 uninterruptible sleep (usually IO) R 运行 runnable (on run queue) S 中断 sleeping T 停止 traced or stopped Z 僵死 a defunct (”zombie”) process 1./usr/sbin/inetd 守护进程为网络提供 Internet 服务管理。 2.Linux下有3个特殊的进程,idle进程(PID=0), init进程(PID=1)和kthreadd(PID=2) 3.常见的进程 (1)idle进程由系统自动创建,运行在内核态.idle进程其pid=0,其前身是系统创建的第一个进程,也是唯一一个没有通过fork或者kernel_thread产生的进程。完成加载系统后,演变为进程调度、交换. (2)init进程由idle通过kernel_thread创建,在内核空间完成初始化后,加载init程序,并最终用户空间创建 .init 进程 (pid = 1, ppid = 0),init进程由0进程创建,完成系统的初始化.是系统中所有其它用户进程的祖先进程. (3) kthreadd进程由idle通过kernel_thread创建,并始终运行在内核空间,负责所有内核线程的调度和管理 .kthreadd (pid = 2, ppid = 0)它的任务就是管理和调度其他内核线程kernel_thread,会循环执行一个kthread的函数,该函数的作用就是运行kthread_create_list全局链表中维护的kthread,当我们调用kernel_thread创建的内核线程会被加入到此链表中,因此所有的内核线程都是直接或者间接的以kthreadd为父进程.python
-
split、join、replace、strip、center
join()
str.join(sequence)
#sequence -- 要连接的元素序列
返回通过指定字符连接序列中元素后生成的新字符串
s1 = "-"
s2 = ""
seq = ("r", "u", "n", "o", "o", "b") # 字符串序列
print (s1.join( seq ))
print (s2.join( seq ))
#输出结果
r-u-n-o-o-b
runoob
replace()
Python replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。
str.replace(old, new[, max])
old -- 将被替换的子字符串。
new -- 新字符串,用于替换old子字符串。
max -- 可选字符串, 替换不超过 max 次
返回字符串中的 old(旧字符串) 替换成 new(新字符串)后生成的新字符串,如果指定第三个参数max,则替换不超过 max 次。
str = "this is string example....wow!!! this is really string";
print str.replace("is", "was");
print str.replace("is", "was", 3);
#输出结果
thwas was string example....wow!!! thwas was really string
thwas was string example....wow!!! thwas is really string
strip()
Python strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
str.strip([chars]); chars -- 移除字符串头尾指定的字符序列。 返回移除字符串头尾指定的字符生成的新字符串。 str = "00000003210Runoob01230000000"; print str.strip( '0' ); # 去除首尾字符 0 str2 = " Runoob "; # 去除首尾空格 print str2.strip(); #输出结果 3210Runoob0123 Runoob
center()
Python center() 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串。默认填充字符为空格。 str.center(width[, fillchar]) width -- 字符串的总宽度。 fillchar -- 填充字符 该方法返回一个原字符串居中,并使用空格填充至长度 width 的新字符串。 >>>str = 'runoob' >>> str.center(20, '*') '*******runoob*******' >>> str.center(20) ' runoob '
split()
str.split(str="", num=string.count(str)).
参数
#str -- 分隔符,默认为所有的空字符,包括空格、换行(n)、制表符(t)等。
#num -- 分割次数。默认为 -1, 即分隔所有。
str = "Line1-abcdef nLine2-abc nLine4-abcd";
print str.split( ); # 以空格为分隔符,包含 n
print str.split(' ', 1 ); # 以空格为分隔符,分隔成两个
#以上实例输出结果如下:
['Line1-abcdef', 'Line2-abc', 'Line4-abcd']
['Line1-abcdef', 'nLine2-abc nLine4-abcd']
txt = "Google#Runoob#Taobao#Facebook"
# 第二个参数为 1,返回两个参数列表
x = txt.split("#", 1)
print x
#以上实例输出结果如下:
['Google', 'Runoob#Taobao#Facebook']
zip() 与 map()
-
于map()它的原型是:map(function,sequence),就是对序列sequence中每个元素都执行函数function操作。
-
zip(),原型是zip(*list),list是一个列表,zip(*list)返回的是一个元组
index() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,该方法与 python find()方法一样,只不过如果str不在 string中会报一个异常。
str.index(str, beg=0, end=len(string))
str()
str() 函数将对象转化为字符串
eval()
eval() 函数用来执行一个字符串表达式,并返回表达式的值。
>>>x = 7
>>> eval( '3 * x' )
21
>>> eval('pow(2,2)')
4
>>> eval('2 + 2')
4
>>> n=81
>>> eval("n + 4")
85
raise()
Python中的raise 关键字用于引发一个异常,基本上和C#和Java中的throw关键字相同,如下所示:
def ThorwErr():
raise Exception("抛出一个异常")
# Exception: 抛出一个异常
ThorwErr()
捕捉到了异常,但是又想重新引发它(传递异常),可以使用不带参数的raise语句即可:
class MuffledCalculator: muffled = False def calc(self,expr): try: return eval(expr) except ZeroDivisionError: if self.muffled: print 'Division by zero is illegal' else: raise
finally
finally子句和try子句联合使用但是和except语句不同,finally不管try子句内部是否有异常发生,都会执行finally子句内的代码。所有一般情况下,finally自己常常用于关闭文件或者在Socket中。
try: print 2/'0' except (ZeroDivisionError,Exception): print '发生了一个异常' finally: print '不管是否发生异常都执行'
类的继承语法
子类继承了父类 如果子类重写了父类的同名方法 ,则调用该方法时,优先使用子类的,(其后依次为第一个父类,第二个父类。。。)但是子类还想使用父类这个同名方法
# 有三种解决方法: # 01: 父类名.同名方法名(self) **多继承 # Master.make_cake(self) # 02: super(子类名, self).同名方法名() # super(Prentice, self).make_cake() # 03: 02的简写 super().同名方法名() * 单继承
yield()
一个带有 yield 的函数就是一个 generator,它和普通函数不同,生成一个 generator 看起来像函数调用,但不会执行任何函数代码,直到对其调用 next()(在 for 循环中会自动调用 next())才开始执行。虽然执行流程仍按函数的流程执行,但每执行到一个 yield 语句就会中断,并返回一个迭代值,下次执行时从 yield 的下一个语句继续执行。看起来就好像一个函数在正常执行的过程中被 yield 中断了数次,每次中断都会通过 yield 返回当前的迭代值。
yield 的好处是显而易见的,把一个函数改写为一个 generator 就获得了迭代能力,比起用类的实例保存状态来计算下一个 next() 的值,不仅代码简洁,而且执行流程异常清晰。
*与 **
1.算术运算 *乘法 **乘方
2.函数形参
>>> def fun(*args, **kwargs):
... print('args=', args)
... print('kwargs=', kwargs)
...
>>> fun(1, 2, 3, 4, A='a', B='b', C='c', D='d')
args= (1, 2, 3, 4)
kwargs= {'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd'}
3.函数实参
#解引用
>>> def fun(data1, data2, data3):
... print("data1: ", data1)
... print("data2: ", data2)
... print("data3: ", data3)
...
>>> args = ("one", 2, 3)
>>> fun(*args)
data1: one
data2: 2
data3: 3
>>> kwargs = {"data3": "one", "data2": 2, "data1": 3}
>>> fun(**kwargs)
data1: 3
data2: 2
data3: one
4.序列解包 (序列解包没有**)
>>> a, b, *c = 0, 1, 2, 3 >>> a 0 >>> b 1 >>> c [2, 3]Linux
常用命令及操作
cat: cat -n /etc/passwd 显示行号
more:(分屏查看)
more +10 /etc/passwd 从第10行
less:(分页查看)
mv:----或----文件
rm:删除文件或目录
rm -r ./mydoc/test 递归删除,非空目录
cp: 复制文件
cp -r test mydoc 递归复制
cp f1{,.orig} 拷贝f1成f1.orig
find:查找文件或目录
find . -name ‘abc* ' find -name 'abc' -o -name 'ht*'
echo:显示输出文字
cd: 切换工作目录 cd .. 父目录 cd ~ 主目录
pwd:当前目录
mkdir:(目录)mkdir mydoc 创建一个空目录 mkdir -p mydoc/FAQ 创建一个目录树
mkdir -p ./test/{abc,bcd}/htdocs 创建/home/zh/test/abc/htdocs 和 /home/zh/test/bcd/htdocs 目录
rmdir:(目录)
ls: -l详情信息,简写ll -a显示隐藏文件 -R递归显示所有文件,包括子目录
-l --full-time 列出完整时间信息
touch:改变文件的时间属性或新建文件
touch newfile touch -t 202002151120 newfile touch -r f1 newfile
clear:清空屏幕
grep:文件内容检索
grep zh /etc/passwd
ls -l | grep '^d' 检索目录文件
ls -l | grep ^[ ^d ] 检索非目录文件
wc:统计行,字,字符数
tree:显示目录树 tree test
yum -y install tree 联网安装tree命令
ln:创建文件链接
ln f1 f1.hardlink 硬链接
ln -s f1 f1.softlink
sort:文件排序
sort -n -k 3 -t ':' /etc/passwd
以第三列进行排序、以':' 作为间隔符
未完待续。。。



