权重7以上的网站,本周国内重大新闻十条,怎么用手机做软件,网站开发工程师面试试题1 Linux概述
Linux 是一套免费使用和自由传播的类 Unix 操作系统#xff0c;是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心…1 Linux概述
Linux 是一套免费使用和自由传播的类 Unix 操作系统是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想是一个性能稳定的多用户网络操作系统。今天各种场合都有使用各种 Linux 发行版从嵌入式设备到超级计算机并且在服务器领域确定了地位通常服务器使用 LAMPLinux Apache MySQL PHP或 LNMPLinux Nginx MySQL PHP组合。
2 Linux系统目录结构 以下是对这些目录的解释 /bin bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。 /boot 这里存放的是启动 Linux 时使用的一些核心文件包括一些连接文件以及镜像文件。 /dev dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备在 Linux 中访问设备的方式和访问文件的方式是相同的。 /etc etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。 /home 用户的主目录在 Linux 中每个用户都有一个自己的目录一般该目录名是以用户的账号命名的如上图中的 alice、bob 和 eve。 /lib lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。 /lostfound 这个目录一般情况下是空的当系统非法关机后这里就存放了一些文件。 /media linux 系统会自动识别一些设备例如U盘、光驱等等当识别后Linux 会把识别的设备挂载到这个目录下。 /mnt 系统提供该目录是为了让用户临时挂载别的文件系统的我们可以将光驱挂载在 /mnt/ 上然后进入该目录就可以查看光驱里的内容了。 /opt opt 是 optional(可选) 的缩写这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。 /proc proc 是 Processes(进程) 的缩写/proc 是一种伪文件系统也即虚拟文件系统存储的是当前内核运行状态的一系列特殊文件这个目录是一个虚拟的目录它是系统内存的映射我们可以通过直接访问这个目录来获取系统信息。 这个目录的内容不在硬盘上而是在内存里我们也可以直接修改里面的某些文件比如可以通过下面的命令来屏蔽主机的ping命令使别人无法ping你的机器 echo 1 /proc/sys/net/ipv4/icmp_echo_ignore_all/root 该目录为系统管理员也称作超级权限者的用户主目录。 /sbin s 就是 Super User 的意思是 Superuser Binaries (超级用户的二进制文件) 的缩写这里存放的是系统管理员使用的系统管理程序。 /selinux 这个目录是 Redhat/CentOS 所特有的目录Selinux 是一个安全机制类似于 windows 的防火墙但是这套机制比较复杂这个目录就是存放selinux相关的文件的。 /srv 该目录存放一些服务启动之后需要提取的数据。 /sys 这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。 sysfs 文件系统集成了下面3种文件系统的信息针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。 该文件系统是内核设备树的一个直观反映。 当一个内核对象被创建的时候对应的文件和目录也在内核对象子系统中被创建。 /tmp tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。 /usr usr 是 unix shared resources(共享资源) 的缩写这是一个非常重要的目录用户的很多应用程序和文件都放在这个目录下类似于 windows 下的 program files 目录。 /usr/bin 系统用户使用的应用程序。 /usr/sbin 超级用户使用的比较高级的管理程序和系统守护程序。 /usr/src 内核源代码默认的放置目录。 /var var 是 variable(变量) 的缩写这个目录中存放着在不断扩充着的东西我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。 /run 是一个临时文件系统存储系统启动以来的信息。当系统重启时这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录应该让它指向 run。
3 关机 正确的关机流程为sync shutdown reboot halt。关机指令为shutdown 你可以man shutdown 来看一下帮助文档。 sync 将数据由内存同步到硬盘中。shutdown 关机指令你可以man shutdown 来看一下帮助文档。例如你可以运行如下命令关机shutdown –h 10 ‘This server will shutdown after 10 mins’ 这个命令告诉大家计算机将在10分钟后关机并且会显示在登陆用户的当前屏幕中。shutdown –h now 立马关机shutdown –h 20:25 系统会在今天20:25关机shutdown –h 10 十分钟后关机shutdown –r now 系统立马重启shutdown –r 10 系统十分钟后重启reboot 就是重启等同于 shutdown –r nowhalt 关闭系统等同于shutdown –h now 和 poweroff4 文件
4.1 更改文件基本属性 在 Linux 中我们可以使用 ll 或者 ls –l 命令来显示一个文件的属性以及文件所属的用户和组 [rootwww /]# ls -l
total 64
dr-xr-xr-x 2 root root 4096 Dec 14 2012 bin
dr-xr-xr-x 4 root root 4096 Apr 19 2012 boot在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等。 当为 d 则是目录当为 - 则是文件若是 l 则表示为链接文档(link file)若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置)若是 c 则表示为装置文件里面的串行端口设备例如键盘、鼠标(一次性读取装置)。 接下来的字符中以三个为一组且均为 rwx 的三个参数的组合。其中 r 代表可读(read)、 w 代表可写(write)、 x 代表可执行(execute)。 要注意的是这三个权限的位置不会改变如果没有权限就会出现减号 - 而已。 对于文件来说它都有一个特定的所有者也就是对该文件具有所有权的用户。同时在Linux系统中用户是按组分类的一个用户属于一个或多个组。文件所有者以外的用户又可以分为文件所属组的同组用户和其他用户。因此Linux系统按文件所有者、文件所有者同组用户和其他用户来规定了不同的文件访问权限。在以上实例中mysql 文件是一个目录文件属主和属组都为 mysql属主有可读、可写、可执行的权限与属主同组的其他用户有可读和可执行的权限其他用户也有可读和可执行的权限。对于 root 用户来说一般情况下文件的权限对其不起作用。 chgrp更改文件属组 chgrp [-R] 属组名 文件名参数选项 -R递归更改文件属组就是在更改某个目录文件的属组时如果加上-R的参数那么该目录下的所有文件的属组都会更改。 chown更改文件属主也可以同时更改文件属组 chown [–R] 属主名 文件名
chown [-R] 属主名属组名 文件名chmod更改文件9个属性 Linux文件属性有两种设置方法一种是数字一种是符号。 数字设置方法 Linux 文件的基本权限就有九个分别是 owner/group/others(拥有者/组/其他) 三种身份各有自己的 read/write/execute 权限。我们可以使用数字来代表各个权限各权限的分数对照表如下 r:4w:2x:1 每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的例如当权限为 -rwxrwx— 分数则是 owner rwx 421 7group rwx 421 7others — 000 0 所以等一下我们设定权限的变更时该文件的权限数字就是 770。变更权限的指令 chmod 的语法是这样的 chmod [-R] xyz 文件或目录选项与参数 xyz : 就是刚刚提到的数字类型的权限属性为 rwx 属性数值的相加。-R : 进行递归(recursive)的持续变更以及连同次目录下的所有文件都会变更 举例来说如果要将 .bashrc 这个文件所有的权限都设定启用那么命令如下 [rootwww ~]# ls -al .bashrc
-rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc
[rootwww ~]# chmod 777 .bashrc
[rootwww ~]# ls -al .bashrc
-rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc符号设置方法 可以使用 u, g, o 来代表三种身份的权限。 此外 a 则代表 all即全部的身份。读写的权限可以写成 r, w, x也就是可以使用下表的方式来看 如果我们需要将文件权限设置为 -rwxr-xr– 可以使用 chmod urwx,grx,or 文件名 来设定: # touch test1 // 创建 test1 文件
# ls -al test1 // 查看 test1 默认权限
-rw-r--r-- 1 root root 0 Nov 15 10:32 test1
# chmod urwx,grx,or test1 // 修改 test1 权限
# ls -al test1
-rwxr-xr-- 1 root root 0 Nov 15 10:32 test1而如果是要将权限去掉而不改变其他已存在的权限呢例如要拿掉全部人的可执行权限则 # chmod a-x test1
# ls -al test1
-rw-r--r-- 1 root root 0 Nov 15 10:32 test14.2 文件内容查看 cat由第一行开始显示文件内容 语法 cat [-AbEnTv]选项与参数 -A 相当於 -vET 的整合选项可列出一些特殊字符而不是空白而已-b 列出行号仅针对非空白行做行号显示空白行不标行号-E 将结尾的断行字节 $ 显示出来-n 列印出行号连同空白行也会有行号与 -b 的选项不同-T 将 [tab] 按键以 ^I 显示出来-v 列出一些看不出来的特殊字符 检看 /etc/issue 这个文件的内容 [rootwww ~]# cat /etc/issue
CentOS release 6.4 (Final)
Kernel \r on an \mtactac与cat命令刚好相反文件内容从最后一行开始显示可以看出 tac 是 cat 的倒着写如 [rootwww ~]# tac /etc/issueKernel \r on an \m
CentOS release 6.4 (Final)nl显示行号 语法 nl [-bnw] 文件选项与参数 -b 指定行号指定的方式主要有两种 -b a 表示不论是否为空行也同样列出行号(类似 cat -n) -b t 如果有空行空的那一行不要列出行号(默认值)-n 列出行号表示的方法主要有三种 -n ln 行号在荧幕的最左方显示 -n rn 行号在自己栏位的最右方显示且不加 0 -n rz 行号在自己栏位的最右方显示且加 0 -w 行号栏位的占用的位数。 实例一用 nl 列出 /etc/issue 的内容 [rootwww ~]# nl /etc/issue1 CentOS release 6.4 (Final)2 Kernel \r on an \mmore一页一页翻动 [rootwww ~]# more /etc/man_db.config
#
# Generated automatically from man.conf.in by the
# configure script.
#
# man.conf from man-1.6d
....(中间省略)....
--More--(28%) 重点在这一行喔你的光标也会在这里等待你的命令在 more 这个程序的运行过程中你有几个按键可以按的 空白键 (space)代表向下翻一页Enter 代表向下翻『一行』/字串 代表在这个显示的内容当中向下搜寻『字串』这个关键字:f 立刻显示出档名以及目前显示的行数q 代表立刻离开 more 不再显示该文件内容。b 或 [ctrl]-b 代表往回翻页不过这动作只对文件有用对管线无用。 less一页一页翻动以下实例输出/etc/man.config文件的内容 [rootwww ~]# less /etc/man.config
#
# Generated automatically from man.conf.in by the
# configure script.
#
# man.conf from man-1.6d
....(中间省略)....
: 这里可以等待你输入命令less运行时可以输入的命令有 空白键 向下翻动一页[pagedown]向下翻动一页[pageup] 向上翻动一页/字串 向下搜寻『字串』的功能?字串 向上搜寻『字串』的功能n 重复前一个搜寻 (与 / 或 ? 有关)N 反向的重复前一个搜寻 (与 / 或 ? 有关)q 离开 less 这个程序 head取出文件前面几行 语法 head [-n number] 文件 选项与参数 -n 后面接数字代表显示几行的意思 [rootwww ~]# head /etc/man.config默认的情况中显示前面 10 行若要显示前 20 行就得要这样 [rootwww ~]# head -n 20 /etc/man.configtail取出文件后面几行 语法 tail [-n number] 文件 选项与参数 -n 后面接数字代表显示几行的意思-f 表示持续侦测后面所接的档名要等到按下[ctrl]-c才会结束tail的侦测 [rootwww ~]# tail /etc/man.config
# 默认的情况中显示最后的十行若要显示最后的 20 行就得要这样
[rootwww ~]# tail -n 20 /etc/man.config5 目录 ls (列出目录) 在Linux系统当中 ls 命令可能是最常被运行的。 语法 [rootwww ~]# ls [-aAdfFhilnrRSt] 目录名称
[rootwww ~]# ls [--color{never,auto,always}] 目录名称
[rootwww ~]# ls [--full-time] 目录名称选项与参数 -a 全部的文件连同隐藏文件( 开头为 . 的文件) 一起列出来(常用)-d 仅列出目录本身而不是列出目录内的文件数据(常用)-l 长数据串列出包含文件的属性与权限等等数据(常用) 将家目录下的所有文件列出来(含属性与隐藏档) [rootwww ~]# ls -al ~cd (切换目录) cd是Change Directory的缩写这是用来变换工作目录的命令。 语法 cd [相对路径或绝对路径]
#使用 mkdir 命令创建 runoob 目录
[rootwww ~]# mkdir runoob#使用绝对路径切换到 runoob 目录
[rootwww ~]# cd /root/runoob/#使用相对路径切换到 runoob 目录
[rootwww ~]# cd ./runoob/# 表示回到自己的家目录亦即是 /root 这个目录
[rootwww runoob]# cd ~# 表示去到目前的上一级目录亦即是 /root 的上一级目录的意思
[rootwww ~]# cd ..接下来大家多操作几次应该就可以很好的理解 cd 命令的。 pwd (显示目前所在的目录) pwd 是 Print Working Directory 的缩写也就是显示目前所在目录的命令。 [rootwww ~]# pwd [-P]选项与参数 -P 显示出确实的路径而非使用连结 (link) 路径。 实例单纯显示出目前的工作目录 [rootwww ~]# pwd
/root 显示出目录啦实例显示出实际的工作目录而非连结档本身的目录名而已。 [rootwww ~]# cd /var/mail 注意/var/mail是一个连结档
[rootwww mail]# pwd
/var/mail 列出目前的工作目录
[rootwww mail]# pwd -P
/var/spool/mail 怎么回事有没有加 -P 差很多
[rootwww mail]# ls -ld /var/mail
lrwxrwxrwx 1 root root 10 Sep 4 17:54 /var/mail - spool/mail
# 看到这里应该知道为啥了吧因为 /var/mail 是连结档连结到 /var/spool/mail
# 所以加上 pwd -P 的选项后会不以连结档的数据显示而是显示正确的完整路径啊mkdir (创建新目录) 如果想要创建新的目录的话那么就使用mkdir (make directory)吧。 语法 mkdir [-mp] 目录名称选项与参数 -m 配置文件的权限喔直接配置不需要看默认权限 (umask) 的脸色-p 帮助你直接将所需要的目录(包含上一级目录)递归创建起来 实例请到/tmp底下尝试创建数个新目录看看 [rootwww ~]# cd /tmp
[rootwww tmp]# mkdir test 创建一名为 test 的新目录
[rootwww tmp]# mkdir test1/test2/test3/test4
mkdir: cannot create directory test1/test2/test3/test4:
No such file or directory 没办法直接创建此目录啊
[rootwww tmp]# mkdir -p test1/test2/test3/test4加了这个 -p 的选项可以自行帮你创建多层目录 实例创建权限为 rwx–x–x 的目录。 [rootwww tmp]# mkdir -m 711 test2
[rootwww tmp]# ls -l
drwxr-xr-x 3 root root 4096 Jul 18 12:50 test
drwxr-xr-x 3 root root 4096 Jul 18 12:53 test1
drwx--x--x 2 root root 4096 Jul 18 12:54 test2上面的权限部分如果没有加上 -m 来强制配置属性系统会使用默认属性。 如果我们使用 -m 如上例我们给予 -m 711 来给予新的目录 drwx–x–x 的权限。 rmdir (删除空的目录) 语法 rmdir [-p] 目录名称选项与参数 **-p **从该目录起一次删除多级空目录 删除 runoob 目录 [rootwww tmp]# rmdir runoob/将 mkdir 实例中创建的目录(/tmp 底下)删除掉 [rootwww tmp]# ls -l 看看有多少目录存在
drwxr-xr-x 3 root root 4096 Jul 18 12:50 test
drwxr-xr-x 3 root root 4096 Jul 18 12:53 test1
drwx--x--x 2 root root 4096 Jul 18 12:54 test2
[rootwww tmp]# rmdir test 可直接删除掉没问题
[rootwww tmp]# rmdir test1 因为尚有内容所以无法删除
rmdir: test1: Directory not empty
[rootwww tmp]# rmdir -p test1/test2/test3/test4
[rootwww tmp]# ls -l 您看看底下的输出中test与test1不见了
drwx--x--x 2 root root 4096 Jul 18 12:54 test2利用 -p 这个选项立刻就可以将 test1/test2/test3/test4 一次删除。 不过要注意的是这个 rmdir 仅能删除空的目录你可以使用 rm 命令来删除非空目录。 cp (复制文件或目录) cp 即拷贝文件和目录。 语法: [rootwww ~]# cp [-adfilprsu] 来源档(source) 目标档(destination)
[rootwww ~]# cp [options] source1 source2 source3 .... directory选项与参数 **-a**相当於 -pdr 的意思至於 pdr 请参考下列说明(常用)**-d**若来源档为连结档的属性(link file)则复制连结档属性而非文件本身**-f**为强制(force)的意思若目标文件已经存在且无法开启则移除后再尝试一次**-i**若目标档(destination)已经存在时在覆盖时会先询问动作的进行(常用)**-l**进行硬式连结(hard link)的连结档创建而非复制文件本身**-p**连同文件的属性一起复制过去而非使用默认属性(备份常用)**-r**递归持续复制用於目录的复制行为(常用)**-s**复制成为符号连结档 (symbolic link)亦即『捷径』文件**-u**若 destination 比 source 旧才升级 destination 用 root 身份将 root 目录下的 .bashrc 复制到 /tmp 下并命名为 bashrc [rootwww ~]# cp ~/.bashrc /tmp/bashrc
[rootwww ~]# cp -i ~/.bashrc /tmp/bashrc
cp: overwrite /tmp/bashrc? n n不覆盖y为覆盖rm (移除文件或目录) 语法 rm [-fir] 文件或目录选项与参数 -f 就是 force 的意思忽略不存在的文件不会出现警告信息-i 互动模式在删除前会询问使用者是否动作-r 递归删除啊最常用在目录的删除了这是非常危险的选项 将刚刚在 cp 的实例中创建的 bashrc 删除掉 [rootwww tmp]# rm -i bashrc
rm: remove regular file bashrc? y如果加上 -i 的选项就会主动询问喔避免你删除到错误的档名 mv (移动文件与目录或修改名称) 语法 [rootwww ~]# mv [-fiu] source destination
[rootwww ~]# mv [options] source1 source2 source3 .... directory选项与参数 -f force 强制的意思如果目标文件已经存在不会询问而直接覆盖-i 若目标文件 (destination) 已经存在时就会询问是否覆盖-u 若目标文件已经存在且 source 比较新才会升级 (update) 复制一文件创建一目录将文件移动到目录中 [rootwww ~]# cd /tmp
[rootwww tmp]# cp ~/.bashrc bashrc
[rootwww tmp]# mkdir mvtest
[rootwww tmp]# mv bashrc mvtest将某个文件移动到某个目录去就是这样做 将刚刚的目录名称更名为 mvtest2
[rootwww tmp]# mv mvtest mvtest26 磁盘管理 df命令检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间目前还剩下多少空间等信息。 语法 df [-ahikHTm] [目录或文件名]选项与参数 -a 列出所有的文件系统包括系统特有的 /proc 等文件系统 -k 以 KBytes 的容量显示各文件系统 -m 以 MBytes 的容量显示各文件系统 -h 以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示 -H 以 M1000K 取代 M1024K 的进位方式 -T 显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出 -i 不用硬盘容量而以 inode 的数量来显示 实例 1 将系统内所有的文件系统列出来 [rootwww ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hdc2 9920624 3823112 5585444 41% /
/dev/hdc3 4956316 141376 4559108 4% /home
/dev/hdc1 101086 11126 84741 12% /boot
tmpfs 371332 0 371332 0% /dev/shm在 Linux 底下如果 df 没有加任何选项那么默认会将系统内所有的 (不含特殊内存内的文件系统与 swap) 都以 1 Kbytes 的容量来列出来 实例 2 将容量结果以易读的容量格式显示出来 [rootwww ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hdc2 9.5G 3.7G 5.4G 41% /
/dev/hdc3 4.8G 139M 4.4G 4% /home
/dev/hdc1 99M 11M 83M 12% /boot
tmpfs 363M 0 363M 0% /dev/shm实例 3 将系统内的所有特殊文件格式及名称都列出来 [rootwww ~]# df -aT
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/hdc2 ext3 9920624 3823112 5585444 41% /
proc proc 0 0 0 - /proc
sysfs sysfs 0 0 0 - /sys
devpts devpts 0 0 0 - /dev/pts
/dev/hdc3 ext3 4956316 141376 4559108 4% /home
/dev/hdc1 ext3 101086 11126 84741 12% /boot
tmpfs tmpfs 371332 0 371332 0% /dev/shm
none binfmt_misc 0 0 0 - /proc/sys/fs/binfmt_misc
sunrpc rpc_pipefs 0 0 0 - /var/lib/nfs/rpc_pipefs实例 4 将 /etc 底下的可用的磁盘容量以易读的容量格式显示 [rootwww ~]# df -h /etc
Filesystem Size Used Avail Use% Mounted on
/dev/hdc2 9.5G 3.7G 5.4G 41% / duLinux du 命令也是查看使用空间的但是与 df 命令不同的是 Linux du 命令是对文件和目录磁盘使用的空间的查看还是和df命令有一些区别的这里介绍 Linux du 命令。 语法 du [-ahskm] 文件或目录名称选项与参数 -a 列出所有的文件与目录容量因为默认仅统计目录底下的文件量而已。-h 以人们较易读的容量格式 (G/M) 显示-s 列出总量而已而不列出每个各别的目录占用容量-S 不包括子目录下的总计与 -s 有点差别。-k 以 KBytes 列出容量显示-m 以 MBytes 列出容量显示 实例 1 只列出当前目录下的所有文件夹容量包括隐藏文件夹: [rootwww ~]# du
8 ./test4 每个目录都会列出来
8 ./test2
....中间省略....
12 ./.gconfd 包括隐藏文件的目录
220 . 这个目录(.)所占用的总量直接输入 du 没有加任何选项时则 du 会分析当前所在目录里的子目录所占用的硬盘空间。 实例 2 将文件的容量也列出来 [rootwww ~]# du -a
12 ./install.log.syslog 有文件的列表了
8 ./.bash_logout
8 ./test4
8 ./test2
....中间省略....
12 ./.gconfd
220 .实例 3 检查根目录底下每个目录所占用的容量 [rootwww ~]# du -sm /*
7 /bin
6 /boot
.....中间省略....
0 /proc
.....中间省略....
1 /tmp
3859 /usr 系统初期最大就是他了啦
77 /var通配符 * 来代表每个目录。 与 df 不一样的是du 这个命令其实会直接到文件系统内去搜寻所有的文件数据。
7 vi/vim 基本上 vi/vim 共分为三种模式分别是命令模式Command mode输入模式Insert mode和底线命令模式Last line mode。 这三种模式的作用分别是 命令模式用户刚刚启动 vi/vim便进入了命令模式。此状态下敲击键盘动作会被Vim识别为命令而非输入字符。比如我们此时按下i并不会输入一个字符i被当作了一个命令。 以下是常用的几个命令 i 切换到输入模式以输入字符。x 删除当前光标所在处的字符。: 切换到底线命令模式以在最底一行输入命令。 若想要编辑文本启动Vim进入了命令模式按下i切换到输入模式。命令模式只有一些最基本的命令因此仍要依靠底线命令模式输入更多命令。 输入模式在命令模式下按下i就进入了输入模式。 在输入模式中可以使用以下按键 字符按键以及Shift组合输入字符ENTER回车键换行BACK SPACE退格键删除光标前一个字符DEL删除键删除光标后一个字符方向键在文本中移动光标HOME/END移动光标到行首/行尾Page Up/Page Down上/下翻页Insert切换光标为输入/替换模式光标将变成竖线/下划线ESC退出输入模式切换到命令模式 底线命令模式在命令模式下按下:英文冒号就进入了底线命令模式。底线命令模式可以输入单个或多个字符的命令可用的命令非常多。 在底线命令模式中基本的命令有已经省略了冒号 q 退出程序w 保存文件 按ESC键可随时退出底线命令模式。 按键说明第一部分一般模式可用的光标移动、复制粘贴、搜索替换等 移动光标的方法h 或 向左箭头键(←)光标向左移动一个字符j 或 向下箭头键(↓)光标向下移动一个字符k 或 向上箭头键(↑)光标向上移动一个字符l 或 向右箭头键(→)光标向右移动一个字符如果你将右手放在键盘上的话你会发现 hjkl 是排列在一起的因此可以使用这四个按钮来移动光标。 如果想要进行多次移动的话例如向下移动 30 行可以使用 “30j” 或 “30↓” 的组合按键 亦即加上想要进行的次数(数字)后按下动作即可[Ctrl] [f]屏幕『向下』移动一页相当于 [Page Down]按键 (常用)[Ctrl] [b]屏幕『向上』移动一页相当于 [Page Up] 按键 (常用)[Ctrl] [d]屏幕『向下』移动半页[Ctrl] [u]屏幕『向上』移动半页光标移动到非空格符的下一行-光标移动到非空格符的上一行n那个 n 表示『数字』例如 20 。按下数字后再按空格键光标会向右移动这一行的 n 个字符。例如 20 则光标会向后面移动 20 个字符距离。0 或功能键[Home]这是数字『 0 』移动到这一行的最前面字符处 (常用)$ 或功能键[End]移动到这一行的最后面字符处(常用)H光标移动到这个屏幕的最上方那一行的第一个字符M光标移动到这个屏幕的中央那一行的第一个字符L光标移动到这个屏幕的最下方那一行的第一个字符G移动到这个档案的最后一行(常用)nGn 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu)gg移动到这个档案的第一行相当于 1G 啊 (常用)nn 为数字。光标向下移动 n 行(常用)搜索替换/word向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串就输入 /vbird 即可 (常用)?word向光标之上寻找一个字符串名称为 word 的字符串。n这个 n 是英文按键。代表重复前一个搜寻的动作。举例来说 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串则按下 n 后会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话那么按下 n 则会向上继续搜寻名称为 vbird 的字符串N这个 N 是英文按键。与 n 刚好相反为『反向』进行前一个搜寻动作。 例如 /vbird 后按下 N 则表示『向上』搜寻 vbird 。使用 /word 配合 n 及 N 是非常有帮助的可以让你重复的找到一些你搜寻的关键词:n1,n2s/word1/word2/gn1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串并将该字符串取代为 word2 举例来说在 100 到 200 行之间搜寻 vbird 并取代为 VBIRD 则 『:100,200s/vbird/VBIRD/g』。(常用):1,$s/word1/word2/g 或 :%s/word1/word2/g从第一行到最后一行寻找 word1 字符串并将该字符串取代为 word2 (常用):1,$s/word1/word2/gc 或 :%s/word1/word2/gc从第一行到最后一行寻找 word1 字符串并将该字符串取代为 word2 且在取代前显示提示字符给用户确认 (confirm) 是否需要取代(常用)删除、复制与贴上x, X在一行字当中x 为向后删除一个字符 (相当于 [del] 按键) X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用)nxn 为数字连续向后删除 n 个字符。举例来说我要连续删除 10 个字符 『10x』。dd剪切游标所在的那一整行(常用)用 p/P 可以粘贴。nddn 为数字。剪切光标所在的向下 n 行例如 20dd 则是剪切 20 行(常用)用 p/P 可以粘贴。d1G删除光标所在到第一行的所有数据dG删除光标所在到最后一行的所有数据d$删除游标所在处到该行的最后一个字符d0那个是数字的 0 删除游标所在处到该行的最前面一个字符yy复制游标所在的那一行(常用)nyyn 为数字。复制光标所在的向下 n 行例如 20yy 则是复制 20 行(常用)y1G复制游标所在行到第一行的所有数据yG复制游标所在行到最后一行的所有数据y0复制光标所在的那个字符到该行行首的所有数据y$复制光标所在的那个字符到该行行尾的所有数据p, Pp 为将已复制的数据在光标下一行贴上P 则为贴在游标上一行 举例来说我目前光标在第 20 行且已经复制了 10 行数据。则按下 p 后 那 10 行数据会贴在原本的 20 行之后亦即由 21 行开始贴。但如果是按下 P 呢 那么原本的第 20 行会被推到变成 30 行。 (常用)J将光标所在行与下一行的数据结合成同一行c重复删除多个数据例如向下删除 10 行[ 10cj ]u复原前一个动作。(常用)[Ctrl]r重做上一个动作。(常用)这个 u 与 [Ctrl]r 是很常用的指令一个是复原另一个则是重做一次 利用这两个功能按键你的编辑嘿嘿很快乐的啦.不要怀疑这就是小数点意思是重复前一个动作的意思。 如果你想要重复删除、重复贴上等等动作按下小数点『.』就好了 (常用)第二部分一般模式切换到编辑模式的可用的按钮说明 进入输入或取代的编辑模式i, I进入输入模式(Insert mode) i 为『从目前光标所在处输入』 I 为『在目前所在行的第一个非空格符处开始输入』。 (常用)a, A进入输入模式(Insert mode) a 为『从目前光标所在的下一个字符处开始输入』 A 为『从光标所在行的最后一个字符处开始输入』。(常用)o, O进入输入模式(Insert mode) 这是英文字母 o 的大小写。o 为在目前光标所在的下一行处输入新的一行 O 为在目前光标所在的上一行处输入新的一行(常用)r, R进入取代模式(Replace mode) r 只会取代光标所在的那一个字符一次R会一直取代光标所在的文字直到按下 ESC 为止(常用)上面这些按键中在 vi 画面的左下角处会出现『–INSERT–』或『–REPLACE–』的字样。 由名称就知道该动作了吧特别注意的是我们上面也提过了你想要在档案里面输入字符时 一定要在左下角处看到 INSERT 或 REPLACE 才能输入喔[Esc]退出编辑模式回到一般模式中(常用)第三部分一般模式切换到指令行模式的可用的按钮说明 指令行的储存、离开等指令:w将编辑的数据写入硬盘档案中(常用):w!若文件属性为『只读』时强制写入该档案。不过到底能不能写入 还是跟你对该档案的档案权限有关啊:q离开 vi (常用):q!若曾修改过档案又不想储存使用 ! 为强制离开不储存档案。注意一下啊那个惊叹号 (!) 在 vi 当中常常具有『强制』的意思:wq储存后离开若为 :wq! 则为强制储存后离开 (常用)ZZ这是大写的 Z 喔如果修改过保存当前文件然后退出效果等同于(保存并退出)ZQ不保存强制退出。效果等同于 :q!。:w [filename]将编辑的数据储存成另一个档案类似另存新档:r [filename]在编辑的数据中读入另一个档案的数据。亦即将 『filename』 这个档案内容加到游标所在行后面:n1,n2 w [filename]将 n1 到 n2 的内容储存成 filename 这个档案。:! command暂时离开 vi 到指令行模式下执行 command 的显示结果例如 『:! ls /home』即可在 vi 当中察看 /home 底下以 ls 输出的档案信息vim 环境的变更:set nu显示行号设定之后会在每一行的前缀显示该行的行号:set nonu与 set nu 相反为取消行号
8 yum yum Yellow dog Updater, Modified是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。基于 RPM 包管理能够从指定的服务器自动下载 RPM 包并且安装可以自动处理依赖性关系并且一次安装所有依赖的软件包无须繁琐地一次次下载、安装。yum 提供了查找、安装、删除某一个、一组甚至全部软件包的命令而且命令简洁而又好记。 yum 语法 yum [options] [command] [package ...]**options**可选选项包括-h帮助-y当安装过程提示选择全部为 “yes”-q不显示安装的过程等等。**command**要进行的操作。**package**安装的包名。 yum常用命令 列出所有可更新的软件清单命令yum check-update 更新所有软件命令yum update 仅安装指定的软件命令yum install package_name 仅更新指定的软件命令yum update package_name 列出所有可安裝的软件清单命令yum list 删除软件包命令yum remove package_name 查找软件包命令yum search 清除缓存命令: yum clean packages: 清除缓存目录下的软件包yum clean headers: 清除缓存目录下的 headersyum clean oldheaders: 清除缓存目录下旧的 headersyum clean, yum clean all ( yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的 headers
9 apt aptAdvanced Packaging Tool是一个在 Debian 和 Ubuntu 中的 Shell 前端软件包管理器。apt 命令提供了查找、安装、升级、删除某一个、一组甚至全部软件包的命令而且命令简洁而又好记。apt 命令执行需要超级管理员权限(root)。 apt 语法 apt [options] [command] [package ...]**options**可选选项包括 -h帮助-y当安装过程提示选择全部为yes-q不显示安装的过程等等。**command**要进行的操作。package安装的包名。 apt 常用命令 列出所有可更新的软件清单命令sudo apt update 升级软件包sudo apt upgrade 列出可更新的软件包及版本信息apt list --upgradeable 升级软件包升级前先删除需要更新软件包sudo apt full-upgrade 安装指定的软件命令sudo apt install package_name 安装多个软件包sudo apt install package_1 package_2 package_3 更新指定的软件命令sudo apt update package_name 显示软件包具体信息,例如版本号安装大小依赖关系等等sudo apt show package_name 删除软件包命令sudo apt remove package_name 清理不再使用的依赖和库文件: sudo apt autoremove 移除软件包及配置文件: sudo apt purge package_name 查找软件包命令 sudo apt search 列出所有已安装的包apt list --installed 列出所有已安装的包的版本信息apt list --all-versions
10 同步命令
scpscp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。
语法
scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
[-l limit] [-o ssh_option] [-P port] [-S program]
[[user]host1:]file1 [...] [[user]host2:]file2参数说明
-1 强制scp命令使用协议ssh1-2 强制scp命令使用协议ssh2-4 强制scp命令只使用IPv4寻址-6 强制scp命令只使用IPv6寻址-B 使用批处理模式传输过程中不询问传输口令或短语-C 允许压缩。将-C标志传递给ssh从而打开压缩功能-p保留原文件的修改时间访问时间和访问权限。-q 不显示传输进度条。-r 递归复制整个目录。-v详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接验证和配置问题。-c cipher 以cipher将数据传输进行加密这个选项将直接传递给ssh。-F ssh_config 指定一个替代的ssh配置文件此参数直接传递给ssh。-i identity_file 从指定文件中读取传输时使用的密钥文件此参数直接传递给ssh。-l limit 限定用户所能使用的带宽以Kbit/s为单位。-o ssh_option 如果习惯于使用ssh_config(5)中的参数传递方式-P port注意是大写的P, port是指定数据传输用到的端口号-S program 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。
用法示例
# 复制当前主机的fyq文件夹到远程主机上的/media/目录下
scp -r /media/fyq F192.168.10.1:/media/
# 也可以同时操作两台远程主机
scp -r F192.168.10.1:/media/fyq F192.168.10.2:/media/rsync 是一个常用的 Linux 应用程序用于文件同步。它可以在本地计算机与远程计算机之间或者两个本地目录之间同步文件但不支持两台远程计算机之间的同步。它也可以当作文件复制工具替代cp和mv命令。它名称里面的r指的是 remotersync 其实就是“远程同步”remote sync的意思。与其他文件传输工具如 FTP 或 scp不同rsync 的最大特点是会检查发送方和接收方已有的文件仅传输有变动的部分默认规则是文件大小或修改时间有变动。
安装
# Ubuntu
sudo apt-get install rsync # Red Hat/CentOs
sudo yum install rsync # Arch Linux
sudo pacman -S rsync使用参数 -r-r表示递归即包含子目录。 # 本机使用 rsync 命令时可以作为cp和mv命令的替代方法将源目录拷贝到目标目录。-r表示递归即包含子目录。注意-r是必须的否则 rsync 运行不会成功。source目录表示源目录destination表示目标目录。
rsync -r source destination
# 有多个文件或目录需要同步
rsync -r source1 source2 destination -a-a参数可以替代-r除了可以递归同步以外还可以同步元信息比如修改时间、权限等。由于 rsync 默认使用文件大小和修改时间决定文件是否需要更新所以-a比-r更有用。 # 目标目录destination如果不存在rsync 会自动创建。执行命令后源目录source被完整地复制到了目标目录destination下面即形成了destination/source的目录结构。
rsync -a source destination
# 如果只想同步源目录source里面的内容到目标目录destination则需要在源目录后面加上斜杠。
rsync -a source/ destination -n如果不确定 rsync 执行后会产生什么结果可以先用-n或--dry-run参数模拟执行的结果。上面命令中-n参数模拟命令执行的结果并不真的执行命令。-v参数则是将结果输出到终端这样就可以看到哪些内容会被同步。 rsync -anv source/ destination–delete默认情况下rsync 只确保源目录的所有内容明确排除的文件除外都复制到目标目录。它不会使两个目录保持相同并且不会删除文件。如果要使得目标目录成为源目录的镜像副本则必须使用--delete参数这将删除只存在于目标目录、不存在于源目录的文件。 rsync -av --delete source/ destination –exclude有时我们希望同步时排除某些文件或目录这时可以用--exclude参数指定排除模式。 # 排除所有txt文件
rsync -av --exclude*.txt source/ destination
或者
rsync -av --exclude *.txt source/ destination
# rsync 会同步以“点”开头的隐藏文件如果要排除隐藏文件可以这样写--exclude.*
rsync -av --exclude.* source/ destination
# 如果要排除某个目录里面的所有文件但不希望排除目录本身可以写成下面这样。
rsync -av --exclude dir1/* source/ destination
# 多个排除模式可以用多个--exclude参数。
rsync -av --exclude file1.txt --exclude dir1/* source/ destination
# 多个排除模式也可以利用 Bash 的大扩号的扩展功能只用一个--exclude参数。
rsync -av --exclude{file1.txt,dir1/*} source/ destination
# 如果排除模式很多可以将它们写入一个文件每个模式一行然后用--exclude-from参数指定这个文件。
rsync -av --exclude-fromexclude-file.txt source/ destination –include--include参数用来指定必须同步的文件模式往往与--exclude结合使用。 # 上面命令指定同步时排除所有文件但是会包括 TXT 文件。
rsync -av --include*.txt --exclude* source/ destination -a,–archive-a、--archive参数表示存档模式保存所有的元数据比如修改时间modification time、权限、所有者等并且软链接也会同步过去。 –append--append参数指定文件接着上次中断的地方继续传输。 –append-verify--append-verify参数跟--append参数类似但会对传输完成后的文件进行一次校验。如果校验失败将重新发送整个文件。 -b,–backup-b、--backup参数指定在删除或更新目标目录已经存在的文件时将该文件更名后进行备份默认行为是删除。更名规则是添加由--suffix参数指定的文件后缀名默认是~。 –backup-dir--backup-dir参数指定文件备份时存放的目录比如--backup-dir/path/to/backups。 –bwlimit--bwlimit参数指定带宽限制默认单位是 KB/s比如--bwlimit100。 -c,–checksum-c、--checksum参数改变rsync的校验方式。默认情况下rsync 只检查文件的大小和最后修改日期是否发生变化如果发生变化就重新传输使用这个参数以后则通过判断文件内容的校验和决定是否重新传输。 --delete参数删除只存在于目标目录、不存在于源目标的文件即保证目标目录是源目标的镜像。 -e参数指定使用 SSH 协议传输数据。 --exclude参数指定排除不进行同步的文件比如--exclude*.iso。 --exclude-from参数指定一个本地文件里面是需要排除的文件模式每个模式一行。 --existing、--ignore-non-existing参数表示不同步目标目录中不存在的文件和目录。 -h参数表示以人类可读的格式输出。 -h、--help参数返回帮助信息。 -i参数表示输出源目录与目标目录之间文件差异的详细情况。 --ignore-existing参数表示只要该文件在目标目录中已经存在就跳过去不再同步这些文件。 --include参数指定同步时要包括的文件一般与--exclude结合使用。 --link-dest参数指定增量备份的基准目录。 -m参数指定不同步空目录。 --max-size参数设置传输的最大文件的大小限制比如不超过200KB--max-size200k。 --min-size参数设置传输的最小文件的大小限制比如不小于10KB--min-size10k。 -n参数或--dry-run参数模拟将要执行的操作而并不真的执行。配合-v参数使用可以看到哪些内容会被同步过去。 -P参数是--progress和--partial这两个参数的结合。 --partial参数允许恢复中断的传输。不使用该参数时rsync会删除传输到一半被打断的文件使用该参数后传输到一半的文件也会同步到目标目录下次同步时再恢复中断的传输。一般需要与--append或--append-verify配合使用。 --partial-dir参数指定将传输到一半的文件保存到一个临时目录比如--partial-dir.rsync-partial。一般需要与--append或--append-verify配合使用。 --progress参数表示显示进展。 -r参数表示递归即包含子目录。 --remove-source-files参数表示传输成功后删除发送方的文件。 --size-only参数表示只同步大小有变化的文件不考虑文件修改时间的差异。 --suffix参数指定文件名备份时对文件名添加的后缀默认是~。 -u、--update参数表示同步时跳过目标目录中修改时间更新的文件即不同步这些有更新的时间戳的文件。 -v参数表示输出细节。-vv表示输出更详细的信息-vvv表示输出最详细的信息。 --version参数返回 rsync 的版本。 -z参数指定同步时压缩数据。
远程同步 rsync 除了支持本地两个目录之间的同步也支持远程同步。它可以将本地内容同步到远程服务器。 # 将本地内容同步到远程服务器。
rsync -av source/ usernameremote_host:destination
# 将远程内容同步到本地。
rsync -av usernameremote_host:source/ destination
# 早期 rsync 不使用 SSH 协议需要用-e参数指定协议后来才改的。所以下面-e ssh可以省略。
sync -av -e ssh source/ userremote_host:/destination
# 如果 ssh 命令有附加的参数则必须使用-e参数指定所要执行的 SSH 命令。
rsync -av -e ssh -p 2234 source/ userremote_host:/destination 除了使用 SSH如果另一台服务器安装并运行了 rsync 守护程序则也可以用rsync://协议默认端口873进行传输。具体写法是服务器与目标目录之间使用双冒号分隔::。 rsync -av source/ 192.168.122.32::module/destination
# 注意上面地址中的module并不是实际路径名而是 rsync 守护程序指定的一个资源名由管理员分配。
# 如果想知道 rsync 守护程序分配的所有 module 列表可以执行下面命令。
rsync rsync://192.168.122.32
# rsync 协议除了使用双冒号也可以直接用rsync://协议指定地址。
rsync -av source/ rsync://192.168.122.32/module/destination z增量备份 rsync 的最大特点就是它可以完成增量备份也就是默认只复制有变动的文件。除了源目录与目标目录直接比较rsync 还支持使用基准目录即将源目录与基准目录之间变动的部分同步到目标目录。具体做法是第一次同步是全量备份所有文件在基准目录里面同步一份。以后每一次同步都是增量备份只同步源目录与基准目录之间有变动的部分将这部分保存在一个新的目标目录。这个新的目标目录之中也是包含所有文件但实际上只有那些变动过的文件是存在于该目录其他没有变动的文件都是指向基准目录文件的硬链接。 # --link-dest参数用来指定同步时的基准目录。
rsync -a --delete --link-dest /compare/path /source/path /target/path
# 上面命令中--link-dest参数指定基准目录/compare/path然后源目录/source/path跟基准目录进行比较找出变动的文件将它们拷贝到目标目录/target/path。那些没变动的文件则会生成硬链接。这个命令的第一次备份时是全量备份后面就都是增量备份了。11 ps
12 lsof
13 netstat
14 awk