##Linux基础篇
前言:
“对未来最大的慷慨 就是把一切献给现在”
——阿尔贝-加缪
很庆幸我依然拥有着想象的能力 只是单单想象是不够的 人往往都是不知足的 而且盲目乐观 所以想象中的未来 大都比现在的正在前行的自己所能达到的那个目的地更加美好 可我的想象是那么动人 让我怎么舍得不向之奔跑 这种结局与目标之前的差距 大概只有按着加缪的这句话 才能使其缩小
偶尔也会迷茫 有朋友告诉我 如果有一天你发现自己不再迷茫 那说明你成功了 起码正在过着令自己满意的生活 也许未来的不可知 是我们前进的原动力 写在这里 共勉
一、目录结构
#linux一切皆文件的设计思想 /bin: #bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。 /boot: #这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。 /dev: #该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。 /etc:#这个目录用来存放所有的系统管理所需要的配置文件 /home:#用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。 /lib:#这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。 /lost+found:#这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。 /media:linux #系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。 /mnt:#系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。 /opt:#这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。 /proc:#是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。 这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器: echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all /root:#该目录为系统管理员,也称作超级权限者的用户主目录。 /sbin:#超级用户的二进制文件,这里存放的是系统管理员使用的系统管理程序。 /srv:#该目录存放一些服务启动之后需要提取的数据。 /sys:#这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。 /tmp:#tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。 /usr:#usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。 /usr/bin:#系统用户使用的应用程序。 /usr/sbin:#超级用户使用的比较高级的管理程序和系统守护程序。 /usr/src: #内核源代码默认的放置目录。 /var: #var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。 /run:#是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
1)/etc/目录
特定主机系统范围内的配置文件
/etc/sysconfig/network-script/ifcfg-eth0 #网卡配置文件 /etc/hostname҅ #系统主机名配置文件 /etc/resolv.conf # dns客户端配置文件 /etc/hosts҅ #本地域名解析配置文件 /etc/rc /etc/rc.d #/etc/rc*.d 启动、或改变运行级时运行的scripts或scripts的目录. /etc/hosts #本地域名解析文件 /etc/resolv.conf #DNS服务器配置 /etc/fstab #开机自动挂载系统,所有分区开机都会自动挂载 /etc/inittab #设定系统启动时Init进程将把系统设置成什么样的runlevel及加载相关的启动文件配置 /etc/exports #设置NFS系统用的配置文件路径 /etc/init.d/ #这个目录来存放系统启动脚本 /etc/profile #全局系统环境配置变量 /etc/issue #认证前的输出信息,默认输出版本内核信息 /etc/motd #设置认证后的输出信息 /etc/mtab #当前安装的文件系统列表.由scripts初始化,并由mount 命令自动更新.需要一个当前安装的文件系统的列表时使用,例如df 命令 /etc/group #类似/etc/passwd ,但说明的不是用户而是组. /etc/passwd #用户数据库,其中的域给出了用户名、真实姓名、家目录、加密的口令和用户的其他信息. /etc/shadow #在安装了影子口令软件的系统上的影子口令文件.影子口令文件将/etc/passwd 文件中的加密口令移动到/etc/shadow 中,而后者只对root可读.这使破译口令更困难. /etc/sudoers #可以sudo命令的配置文件 /etc/syslog.conf #系统日志参数配置 /etc/shells #列出可信任的shell.chsh 命令允许用户在本文件指定范围内改变登录shell.提供一台机器FTP服务的服务进程ftpd 检查用户shell是否列在/etc/shells 文件中,如果不是将不允许该用户登录. /etc/opt/ #/opt/的配置文件 /etc/skel/ #默认创建用户时,把该目录拷贝到家目录下
2)/dev/目录
#/dev目录下的设备文件 /dev/cdrom 和 /dev/sr0҅ #系统光盘镜像设备 /dev/null #黑洞设备 /dev/random #生成随机数的设备 /dev/zero # 不断产生数据 /dev/pts/0 #虚拟的bash shell 终端,提供给远程用户使用 0代表第一个终端,1代表第二个终端 /dev/stderr #错误输出 /dev/stdin҅ #标准输入 /dev/stdout #标准输出
二、文件的时间
#linux文件有三种时间,用stat命令查看:stat 加文件名 #访问时间:atime,使用cat查看内容。 #修改时间:mtime,修改内容。 #改变时间:ctime,修改改内容,修改权限等属性,凡是有改动都会变。
三、文件的类型
#方式一
ls -l 文件名 //看第一个字符 文件类型 - 普通文件(文本文件,二进制文件,压缩文件,电影,图片。。。) d 目录文件(蓝色) b 设备文件(块设备)存储设备硬盘,U盘 /dev/sda, /dev/sda1 c 设备文件(字符设备)打印机,终端 /dev/tty1, /dev/zero s 套接字文件 p 管道文件 l 链接文件(淡蓝色) 相当于windows的快捷方式 - rw-r--r-- 1 root root 0 11月 22 05:13 a.txt #例:文件类型 权限 硬链接个数 所有者 所属组 大小 修改时间 文件名
#方式二
[root@web01 ~]# file a.txt # file命令 a.txt: empty
四、路径
#绝对路径示例 touch /home/alice/file1 touch ~alice/file2 #相对路径示例 touch ../file3 touch file4 touch abc/file5
五、文件管理(创建,复制,移动,删除)
1)创建文件
touch file.txt #无则创建 有则修改时间 touch /home/file1.txt touch file{1..20} touch Ego{n,N}.txt #等同于Egon.txt EgoN.txt
2)创建目录
mkdir dir1 mkdir /home/dir2 /home/dir3 mkdir -v /home/{dir6,dir7} mkdir -p /home/dir8/111/222 #递归创建
3)复制
cp 源文件 目标文件 cp -v install.log /home/dir1 cp -v install.log /home/dir1/aaa.txt cp -r /etc /home/dir1 cp install.log /home/dir2 cp anaconda-ks.cfg !$ cp anaconda-ks.cfg /home/dir2 cp -r /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/passwd /etc/grub.conf /etc/hosts .
4)移动
# mv file2 /home/dir3 # mv file4 file5 #重命名
5)删除
rm -rf dir -r 递归删除 #也用于删除目录 -f 强制不提示 -v 打印过程
六、查看文件内容
(cat less more head tail grep) more #翻页查看 cat -n #显示行号 -A #包括控制字符/换行符 head -2 #默认头10行 指定2行 tail -1 #默认后10行 指定后1行 tail -f /var/log/messages #实时监测文件的尾部 grep #针对文件内容进行过滤 # grep 'root' /etc/passwd # grep --color '^root' /etc/passwd grep --color 'bash$' /etc/passwd /etc/hosts /etc/sysconfig/network /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/passwd /etc/shadow /etc/group /etc/grub.conf /etc/resolv.conf /var/log/messages #系统的日志文件 =============================================================================== dos2unix #将windows格式的文件转成unix格式 unix2dos #将Unix格式的文件系统转换winowns格式
七、修改文件内容(VIM)
1)VIM概念
什么是vim?:vim可以理解为windows下面的文本编辑器比如记事本word文档
它的主要用途是:它可以执行输出,删除,查找,替换,块操作的众多文本操作,而且可以根据自己的需求对文本进行编辑。
为何要用vim? :主要可以用来修改配置,以及编写脚本
vi与vim的区别 :vi不显示高亮颜色语法,vim显示高亮语法,其他功能没有什么区别
2)vim的四种模式
vim编辑器的四种模式:命令模式====>编辑模式====>可视化模式====>末行模式
#模式之间的转换:编辑文件进入命令模式=》按i a o进入编辑模式=》ctrl加v进入可视化模式=》按shift :进入末行模式。按esc返回命令模式 。保存编辑的文件或退出进入末行模式w q wq q! x wq!
3)命令模式
光标定位=> 上下左右键 或 h j k l 键 在光标所在的当前行移动光标 :$行尾 0行首 gg 将光标定位到行首 G 将光标定位到行尾 如;3G是将光标定位到地3行 yy 复制 以行为单位 如:3yy就是复制3行 p 当前光标的下一行粘贴 大P当前光标的上一行进行粘贴 D 从光标处删除到行尾 d 删除 dd删除光标所在的当前行 3dd 删除3行 x 删除光标所在的字符 u 恢复 R 进入替换模式 ctrl -r 执行上一步操作 shift+M 将光标移动到当前页面的中间 shift+L 将光标移动到当前页面的行尾 shift+H 将光标移动到当前页面的行首
4)插入模式
进入到插入模式: i a o s I A O s (这几个进入插入模式的区别) i :在光标所在字符前开始插入 a :在光标所在字符后开始插入 o :在光标所在行的下面另起一新行插入 s :删除光标所在的字符并开始插入 I :在光标所在行的行首开始插入 如果行首有空格则在空格之后插入 A :在光标所在行的行尾开始插入 O :在光标所在行的上面另起一行开始插入 S :删除光标所在行并开始插入
5)可视模式
按ctrl+v 进入可视化模式
1,添加加多行注释:
前提:注释的行需要整齐排列
先将光标移动到首行的开头位置
在命令模式,按ctrl+v
上下键选中第一列
shift+i,然后输入#
连续按两下ESC
2,取消多行注释:
注释的行需要整齐排列
在命令模式,按ctrl+v
上下键选中#号
按下d
7)末行模式
w 保存 q 退出 wq 保存并退出(相当与把文件存入or写入磁盘) w! 强制保存 q! 不保存并退出 wq! 强制保存退出 x 保存并退出
8)查找替换
查找替换 :% s/root/yang/g : %表示全文 g表示全局替换 %等同于1,$ #尾部加g的作用 :不加g只替换每行的第一个,加g为全局替换 :4,9 s/^#// :4-9行的开头#号替换为空 : ,8 s/root/yang/ : 从当前行到第8行 :5,10 s/.*/#&/ 5-10前加入#字符 #w 存储当前文件 :w /tmp/aaa.txt 另存为/tmp/aaa.txt :1,3 w /tmp/2.txt #r读入文件 :r /etc/hosts 读入文件到当前行后 :5 r /etc/hosts 读入文件到第5行后
9)设置环境
#临时设置: :set nu 设置行号 当次显示行——临时 :set ic 不区分大小写 :set nonu 取消设置行号 :set noic #永久的环境:修改vim环境配置文件 /etc/vimrc 影响所有系统用户 vim /etc/vimrc ~/.vimrc 影响某一个用户 # vim ~/.vimrc 新建文件也可以 set ic set nu
10)同时编辑多个文件
vim -o 文件1 文件2 #水平分割 vim -O 文件1 文件2 #垂直分割 #Ctrl + ww 切换 vim -p /etc/hosts /etc/grub.conf 使用 ^Pgup, ^PgDn 切换
11)文件内容对比
#相同文件之间差异对比,通常用与对比修改前后的差异
diff #文件对比
vimdiff #以vim方式打开两个文件对比,高亮显示不同的内容
patch 命令
12)vim执行过程
#1,vim 打开文件 a.txt
#2,进入编辑模式编辑文件
#3,编辑文件的时候vim会自动创建一个临时文件 ( .a.txt.swp )隐藏文件
#4,编辑完成,vim会自动删除临时文件
#5,退出,修改成功
八、文件查找
查看命令所属文件 # which ls
一些命令的路径都被配置到了环境变量PATH里了 # echo $PATH
#语法:
find [options] [path...] [expression]
1)按文件名查找
[root@localhost ~]# find /etc -name "ifcfg-eth0" [root@localhost ~]# find /etc -iname "ifcfg-eth0" # -i 忽略大小写 [root@localhost ~]# find /etc -iname "ifcfg-eth*"
2)按文件大小找
[root@localhost ~]# find /etc -size +3M # 大于3M [root@localhost ~]# find /etc -size 3M [root@localhost ~]# find /etc -size -3M [root@localhost ~]# find /etc -size +3M -ls # -ls找到后的处理动作
3)按时间找(atime、mtime、ctime)
[root@localhost ~]# find /etc -mtime +3 # 修改时间超过3天 [root@localhost ~]# find /etc -mtime 3 # 修改时间等于三天 [root@localhost ~]# find /etc -mtime -3 #修改时间3天以内
4)按文件属主、属组找
[root@localhost ~]# find /home -user egon #所有者 [root@localhost ~]# find /home -group it #所属组 [root@localhost ~]# find /home -user egon -o -group it [root@localhost ~]# find /home -nouser # [root@localhost ~]# find /home -nogroup # [root@localhost ~]# find /home -nouser -o -nogroup
5)按文件类型
[root@localhost ~]# find /dev -type f #普通文件 [root@localhost ~]# find /dev -type d #目录 [root@localhost ~]# find /dev -type l #链接 [root@localhost ~]# find /dev -type b #块设备 [root@localhost ~]# find /dev -type c #字符设备 [root@localhost ~]# find /dev -type s #套接字 [root@localhost ~]# find /dev -type p #管道
6)根据inode号查找
[root@localhost ~]# find / -inum 1811
7)按文件权限
[root@localhost ~]# find . -perm 644 -ls [root@localhost ~]# find . -perm -644 -ls [root@localhost ~]# find . -perm -600 -ls [root@localhost ~]# find /sbin -perm -4000 -ls # set uid [root@localhost ~]# find /sbin -perm -2000 -ls # set gid [root@localhost ~]# find /sbin -perm -1000 -ls # sticky
8)找道后处理的动作
-print -ls -delete -exec -ok [root@localhost ~]# find /etc -name "ifcfg*" -print # 必须加引号 [root@localhost ~]# find /etc -name "ifcfg*" -ls [root@localhost ~]# find /etc -name "ifcfg*" -exec cp -rvf {} /tmp \; #非交互 [root@localhost ~]# find /etc -name "ifcfg*" -ok cp -rvf {} /tmp \; # 交互 [root@localhost ~]# find /etc -name "ifcfg*" -exec rm -rf {} \; [root@localhost ~]# find /etc -name "ifcfg*" -delete #
9)find结合xargs
[root@localhost ~]# find . -name "egon*.txt" |xargs rm -rf [root@localhost ~]# find /etc -name "ifcfg-eth0" |xargs -I {} cp -rf {} /var/tmp [root@localhost ~]# find /test -name "ifcfg-ens33" |xargs -I {} mv {} /ttt [root@localhost ~]# find /ttt/ -name "ifcfg*" |xargs -I {} chmod 666 {}