序言
当前的形势,.Net已经开源,.Net Core 正在跨平台,可见微软巨人在努力,在改变,在进步,在走向春天。从前被微软供作上帝的.Net从业者,如果不打开心扉面向开源,改变自己,那么很可能在不久的将来,恐英雄无用武之地,可悲可叹,呜呼哀哉!
如今Linux已经是开发者必备技能之一,我们想要了解它,深入它,就不能偷懒,只操作图标按钮完美的界面。我要像微软一样改变,进步,深入,飞翔,与太阳肩并肩。
那么感兴趣者就来跟哥哥装装B,涨涨姿势,敲敲像电视剧里面只有黑客才会懂的,黑色背景下的命令吧。一天一点,重在累积吧,其实Linux的学习也就是一个积沙成塔的过程,前后关联不是很大,学一点会一点,努力吧。
我的Linux目标
我的目标很简单,就是用命令操作Linux系统,像操作Windows一样简单,直观。
前提:0、不知道什么是Linux的请点击网页顶部右上方的X。1、装个Linux系统,我装的是CentOS7,不会装系统的也请点击网页右上角的X。2、你要自己能够进入系统中,不要自己都登录,连接不上(好尴尬啊,也X吧)!
接下来我会写几篇关于linux的博文,里面的命令我建议初学者不要只看,不练,要看着敲着,用心记着,记不着啦,就常回来看看。
始于cd,ls命令
好啦,步入正题,我使用的linux连接工具为xshell,mRemoteNG,对两款工具不做介绍啦,你可以百度一下,实在不会入左上方群。
进入之后,便是上面的界面黑乎乎一片,对于初学者也可能是一片懵逼,犹如狗拿刺猬,那么不要急,我们先来看下人生中的第一个linux命令:ls 与 cd 。
首先你先使用下面的cd命令:
[root@localhost ~]# 这个是当前用户的用户文件夹主目录
[root@localhost /]# 这个是整个系统的根目录
紧接着输入ls命令展示出一下结果。
那么这些文件都装载啦什么东东,为什么要放在根目录下,接下来我们对此做个详解。
ls,cd命令的语法与参数使用方法:http://man.linuxde.net ,不能偷懒哦,要敲敲, 你才能学好,多敲才能记住的。
Linux的文件种类,扩展名
在linux中,任何设备都是文件,就连数据通信接口也有专门的文件负责。所以我们要搞清楚linux下的文件有哪些?哪些作用?
首先我们这样输入命令,如下:
乱七八糟的都是什么呢?我拿dev这个文件夹做为示例分解下:
1、文件类型
普通文件:就是我们一般的文件,他在linux中按照文件内容大致分文3种。
- 纯文本文件(ASCII):内容直接被我们读到,如数字,字母等,几乎我们可以设置读写的文件都是这一种,他可以通过cat命令打开,直接查看内容。
- 二进制文件(binary):linux唯一可以识别执行的文件,在系统中可执行文件就是这种格式,例如:刚刚执行的cat就是一个二进制文件。
- 数据格式文件(data):程序在运行过程中读取的特定格式文件,就是数据文件,比如:用户登录的用户数据记录在/var/log/wtmp这个数据格式文件中。比较明显的特征使用last可以读出来,cat读时是乱码。
块(block)设备文件:为一些存储数据,以体统随机访问的接口设备,如硬盘,软盘等,可以随机的在硬盘的不同块读写,可以看看/dev/sda
字符(character)设备文件:一些串行端口的接口设备,如键盘、鼠标等。这些设备的特征就是“一次性读取”的,不能够截断输出。例如:鼠标只能滑动到一个地方而不能跳到另外一个地方。
套字节(sockets):这种文件类型用于在网络上的数据连接。
管道(FIFO,pipe):fifo,first-in-first-out,主要解决多个程序同事访问一个文件所造成的错误问题。
目录(directory):就是目录。
连接文件(link):类似windows系统中的快捷键。
2、文件权限r-xr-xr-x
- 缩写字母的意义:x:可执行,r:可读,w:可写,-占位。
- 123:拥有者权限,456:用户组用户权限,789:其他用户权限。
- 特征顺序为rwx。
3、连接数:表示有多少文件名连接到此节点。
4、文件名
- linux中没有像windows中所谓的扩展名。但是为啦方便认识还是要有写扩展名的习惯。
文件长度限制,一般不要超过255个字符就好。
- 文件命名限制,最好避免*?><;&|、\'"(){}
文件目录结构
当你打开linux系统之后,输入命令:cd \ 进入根目录之后,再ls会显示出如下目录结构
那么这些目录都有存放些什么文件,我们的文件又该以何种规范来存放呢?
Linux目录结构标准:FHS(Filesystem Hierarchy Standard)标准
为什么要使用一个标准呢?很简单,就是让用户和厂商有个共同的认识与约束,不至于各自为政,把linux系统的目录搞的乱七八糟,东西随便放,那我们的学习成本就很大啦。
关于FHS网上有很多介绍,FHS根据多去的经验也一直在持续改版(http://www.pathname.com/fhs/),FHS根据文件系统使用的频繁情况,是否允许用户随意改动,将目录定义成4种交互作用的形态,如下:
- 可分享的:可以分享给其他系统挂载使用的目录。
- 不可分享的:仅与自身机器有关,不适合分享给其他主机的。如自己机器上运行的设备文件或者与程序有关的socket文件。
- 不变的:不会经常变动的数据,如说明文件,函数库,主机服务配置文件等。
- 可变动的:经常会改变的数据,如登录文件,新闻组等。
根目录与根目录下的文件夹存放说明
根目录是整个系统最重要的一个目录,因为所有的目录都是由它衍生出来,而且根目录也与开机,还原,系统修复等操作有关。
由于系统开机需要特定的开机软件、内核文件、开机所需要的程序、函数库等文件数据,若系统出现异常时,根目录也要有能够修复文件系统的程序。由此可见根目录的重要性,所以FHS建议,根目录不要放在非常大的分区内,因为越大防止的文件越多,出错的几率也越大,性能也越不好,所以,根目录应该越小越好,且应用程序所安装的软件最好不要与根目录放在一个分区内。
由此我们来说说下面的文件都是什么,又怎么放置才好。
其实,FHS标准对根目录的定义仅有如下的目录数据。
其中有5个目录不可与根目录分开放在不同的分区。这5个目录分别为:etc,bin,dev,lib,sbin。
那么除啦以上的文件夹之外,还有一些linux系统中也非常重要的目录如下:
/dev目录:
- hd[a-t]:IDE设备
- sd[a-z]:SCSI设备
- fd[0-7]:标准软驱
- md[0-31]:软raid设备
- loop[0-7]:本地回环设备
- ram[0-15]:内存
- null:无限数据接收设备,相当于黑洞
- zero:无限零资源
- tty[0-63]:虚拟终端
- ttyS[0-3]:串口
- lp[0-3]:并口
- console:控制台
- fb[0-31]:framebuffer
- cdrom => /dev/hdc
- modem => /dev/ttyS[0-9]
- pilot => /dev/ttyS[0-9]
- random:随机数设备
- urandom:随机数设备
/etc目录
- /etc/rc,/etc/rc.d,/etc/rc*.d : 启动、或改变运行级时运行的scripts或scripts的目录。
- /etc/passwd: 用户数据库,其中的域给出了用户名、真实姓名、家目录、加密的口令和用户的其他信息。
- /etc/fstab :启动时mount -a命令(在/etc/rc 或等效的启动文件中)自动mount的文件系统列表。Linux下,也包括用swapon -a启用的swap区的信息。
- /etc/group :类似/etc/passwd ,但说明的不是用户而是用户组。
- /etc/inittab :init 的配置文件,设定系统启动时init进程将把系统设置成什么样的runlevel 。
- /etc/issue getty 在登录提示符前的输出信息.通常包括系统的一段短说明或欢迎信息内容由系统管理员确定。
- /etc/motd: Message Of The Day,成功登录后自动输出内容由系统管理员确定,经常用于通告信息,如计划关机时间的警告。
- /etc/mtab: 当前安装的文件系统列表.由scripts初始化,并由mount 命令自动更新,需要一个当前安装的文件系统的列表时使用,例如df 命令。
- /etc/shadow: 在安装了影子口令软件的系统上的影子口令文件.影子口令文件将/etc/passwd 文件中的加密口令移动到/etc/shadow 中,而后者只对root可读这使破译口令更困难.
- /etc/login.defs: login 命令的配置文件。
- /etc/printcap: 类似/etc/termcap ,但针对打印机语法不同。
- /etc/profile , /etc/csh.login , /etc/csh.cshrc :登录或启动时Bourne或C shells执行的文件,这允许系统管理员为所有用户建立全局缺省环境。
- /etc/securetty: 确认安全终端,即哪个终端允许root登录.一般只列出虚拟控制台,这样就不可能(至少很困难)通过modem或网络闯入系统并得到超级用户特权。
- /etc/shells: 列出可信任的shell.chsh 命令允许用户在本文件指定范围内改变登录shell.提供一台机器FTP服务的服务进程ftpd 检查用户shell是否列在 /etc/shells 文件中,如果不是将不允许该用户登录.
- /etc/sysconfig :网络配置相关目录
- /etc/DIR_COLORS: 设定颜色
- /etc/HOSTNAME: 设定用户的节点名
- /etc/NETWORKING: 只有YES标明网络存在
- /etc/host.conf: 文件说明用户的系统如何查询节点名
- /etc/hosts: 设定用户自已的IP与名字的对应表
- /etc/hosts.allow: 设置允许使用inetd的机器使用
- /etc/hosts.deny: 设置不允许使用inetd的机器使用
- /etc/hosts.equiv: 设置远端机不用密码
- /etc/inetd.conf: 设定系统网络守护进程inetd的配置
- /etc/inetd.pid :inetd这个进程的进程id
- /etc/hosts.lpd :设定远端有哪些节点可以使用本机的打印机
- /etc/gateways: 设定路由器
- /etc/protocols: 设定系统支持的协议
- /etc/named.boot: 设定本机为名字服务器的配置文件
- /etc/named.pid: 本机上运行的名字服务器的进程id
- /etc/networks :设定网络的配置文件
- /etc/resolv.conf :设定系统的名字服务器
- /etc/services: 设定系统的端品与协议类型和提供的服务
- /etc/exports: 设定NFS系统用的
- /etc/NNTP_INEWS_DOMAIN: 设置新闻服务器的配置文件
- /etc/nntpserver: 设置用户使用的新闻服务器的地址
- /etc/XF86Config: X Window的配置文件
- /etc/hostid: 系统独有的一个硬件id
- /etc/at.deny: 设置哪些用户不能使用at命令
- /etc/bootptab: 给MAKEDEV程序设定各种不同的设备驱动文件的格式
- /etc/makedev.cfg: 同DEVINFO一样给MAKEDEV使用的设置文件
- /etc/diphosts: 设置拔号服务器的用户名和口令
- /etc/slip.hosts,/etc/slip.login: 设定SLIP的配置文件
- /etc/fastboot: 使用shutdown -f产生的,重启系统要查这个文件
- /etc/fstab: 记录开机要mount的文件系统
- /etc/ftpaccess: FTP服务器的一些配置
- /etc/ftpconversions: 设定在FTP时使用的过滤器的位置
- /etc/ftpusers: 设定不能使用FTP服务的用户
- /etc/ld.so.cache: 查找系统动态链接库的缓存
- /etc/ld.so.conf: 系统动态链接库的路径
- /etc/lilo.conf lilo:的配置文件
- /etc/magic: 给file命令使用的
- /etc/aliases :给sendmail使用的设置别名的文件
- /etc/sendmail.st: 设置sendmail的
- /etc/motd: 超级用户发布通知的地方
- /etc/organization: 存放用户的名字和组织
- /etc/pnpdevices: 列出支持的Plug&Play设备
- /etc/snooptad: 监控用户的屏幕,监听的终端列表
- /etc/sudoers: 可以sudo命令的配置文件
- /etc/syslog.conf: 系统记录程序syslogd的配置文件
- /etc/utmp: 目前在用系统的用户信息
- /etc/wtmp: 同utmp差不多,只是它累加
- /etc/nologin: 系统在shutdown时不希望用户登录就产生这个文件
- /etc/termcap: 设置系统终端信息的
- /etc/ttys: 设定系统的终端类型
- /etc/gettydefs: getty_ps的定义文件
- /etc/yp.conf: NIS的配置文件
- /etc/mtools.conf: 设定mtools程序的参数
- /etc/fdprm: 设定格式化软盘的参数
- /etc/login.access: 控制用户登录权限的文件
/proc目录
- /proc/cmdline: 加载 kernel 时所下达的相关参数,查阅此文件,可了解系统是如何启动。
- /proc/cpuinfo: 本机的 CPU 的相关资讯,包含时脉、类型与运算功能等
- /proc/devices: 这个文件记录了系统各个主要装置的主要装置代号,与 mknod 有关。
- /proc/filesystems: 目前系统已经加载的文件系统。
- /proc/interrupts: 目前系统上面的 IRQ 分配状态。
- /proc/ioports: 目前系统上面各个装置所配置的 I/O 位址。
- /proc/kcore: 这个就是内存的大小,但是不要读他。
- /proc/loadavg: 还记得 top 以及 uptime 吧?没错,上头的三个平均数值就是记录在此。
- /proc/meminfo: 使用 free 列出的内存资讯,在这里也能够查阅到。
- /proc/modules: 目前我们的 Linux 已经加载的模块列表,也可以想成是驱动程序。
- /proc/mounts: 系统已经挂载的数据,就是用 mount 这个命令呼叫出来的数据。
- /proc/swaps: 到底系统挂加载的内存在哪里?使用掉的 partition 就记录在此啦。
- /proc/partitions: 使用 fdisk -l 会出现目前所有的 partition 吧?在这个文件当中也有纪录。
- /proc/pci: 在 PCI 汇流排上面,每个装置的详细情况,可用 lspci 来查阅。
- /proc/uptime: 就是用 uptime 的时候,会出现的资讯。
- /proc/version: 核心的版本,就是用 uname -a 显示的内容。
- /proc/bus/*: 一些汇流排的装置,还有 U盘 的装置也记录在此。
/usr目录
依据FHS的基本定义/usr里面放置的数据属于可分享不可变动的。usr是UNIX Software Resource的缩写,也就是“UNIX操作系统软件资源”所放置的目录,而不是用户数据,不要跟user扯上关系。它相当于windows系统中的c:\windows与c:program files这两个目录的综合体。刚装完系统时,这个目录占用的硬盘容量最多。因为几乎所有的应用程序都安装在这里,本地安装的程序和其他东西放在/usr/local下。
- /usr/etc: 存放配置文件。
- /usr/games: 存放游戏和教学文件。
- /usr/include: c/c++等程序语言的头文件与包含文件放置处,当我们以tarball方式(*.tar.gz的方式安装软件)安装某些数据时,会使用到里面的许多包含文件。开发和编译应用程序所需要的头文件。
- /usr/share:放置共享文件的地方,在这个目录下放置的数据几乎是不分硬件架构均可读取的数据,因为几乎都是文本文件。如/usr/share/man:在线帮助文件,/usr/share/doc:软件杂项的文件说明,zoneinfo:与时区相关的文件。
- /usr/bin: 绝大部分用户可使用的命令都放在这里。有些命令在/bin(是否与开机过程有关) 或/usr/local/bin 中。
- /usr/sbin :根文件系统不必要的系统管理命令,例如多数服务程序。
- /usr/share/man , /usr/share/info , /usr/share/doc: 手册页、GNU信息文档和各种其他文档文件。
- /usr/lib: 包含各应用软件的函数库,目标文件,以及不被一般用户惯用的执行文件或脚本。某些软件会提供一些特殊的命令来进行服务器的设置,这些命令也不会经常被系统管理员操作,那就被放在这个目录下。
- /usr/local:管理员在本机自己安装自己下载的软件,建议安装到此目录。该目录也具有bin,etc,include,lib。
- /usr/src: 存放程序的源代码,linux内核的源代码存放在/usr/src/kernels。
/var目录
usr是安装时占用大量的硬盘容量,而var则是在系统运行后才会慢慢占用硬盘的容量。因为var目录主要针对常态性变动的文件,比如,缓存,登录文件,以及某些软件运行所产生的文件,包括程序文件(lock file,run file)。
- /var/catman:当要求格式化时的man页的cache.man页的源文件一般存在/usr/man/man* 中;有些man页可能有预格式化的版本,存在/usr/man/cat* 中.而其他的man页在第一次看时需要格式化,格式化完的版本存在/var/man 中,这样其他人再看相同的页时就无须等待格式化了. (/var/catman 经常被清除,就象清除临时目录一样.)
- /var/lib:系统正常运行时要改变的文件。
- /var/local,/usr/local:中安装的程序的可变数据(即系统管理员安装的程序).注意,如果必要,即使本地安装的程序也会使用其他/var 目录,例如/var/lock 。
- /var/lock:锁定文件.许多程序遵循在/var/lock 中产生一个锁定文件的约定,以支持他们正在使用某个特定的设备或文件.其他程序注意到这个锁定文件,将不试图使用这个设备或文件。
- /var/log:各种程序的Log文件,特别是login (/var/log/wtmp log所有到系统的登录和注销) 和syslog (/var/log/messages 里存储所有核心和系统程序信息. /var/log 里的文件经常不确定地增长,应该定期清除。
- /var/run:某些程序或者服务启动后,会将他们的pid放置在这个目录下。保存到下次引导前有效的关于系统的信息文件.例如, /var/run/utmp 包含当前登录的用户的信息。
- /var/spool:放置一些队列数据,就是排队等待其他程序使用的数据。这些数据被使用后通常都会被删除。例如,系统收到新信件会放置到/var/spool/mail中,用户收下后,该信件原则上时会被删除。信件如果暂时寄不出去会被放到/var/spool/mqueue中,等到被送出去就被删除。如果是工作排程数据,就会被放置到/var/spool/cron目录中。
- /var/tmp 比/tmp:允许的大或需要存在较长时间的临时文件。 (虽然系统管理员可能不允许/var/tmp 有很旧的文件.)
- /var/cache:应用程序本身运行过程中会产生的一些暂存文件。
LIUNX系统的目录树,如下:
Linux系统中文件的压缩打包功能
压缩:是一种通过特定的算法来减小计算机文件大小的机制(百度百科下)。
打包:将多个文件放入一个文件中,最终以一个文件的形式存在。
Linux系统中常见的压缩命令有三种:compress , gzip , bzip2 。
- compress:这个压缩命令仅存在古老的unix机器上,是一个很古老的压缩方式,被gzip所取代,gzip也可以解压commress的压缩文件。所以我这里不做过多介绍,有需求的朋友可以:http://man.linuxde.net/compress 我这里给一个截图如下:
- gzip:这个压缩命令在目前来说算是最常见的,它可以解开compress\zip\gzip等软件所压缩的文件。有9个压缩等级,1最快压缩比最差,9最慢压缩比最好,默认为6。使用zcat命令可以查看读取compress与gzip的压缩文件。对文本的压缩率可达到:60%-70%,可配合tar使用。
- bzip:如果说gzip是用来取代compress的,那么bzip就是为了取代gzip而存在的。他的压缩率竟然比gzip还要好,可配合tar使用。
gzip的常用用法:
语法:gzip 参数 文件名
参数:
-c:将压缩的数据输出到屏幕上,可通过数据重定向来处理。
-d:解压的参数
-t:可以用来检验一个压缩文件的一致性,看看文件是否有错误。
-v:可以显示出源文件/压缩文件的压缩比信息。
-#:压缩等级,1-9。
常用的语句:压缩:gzip -v filename ,解压:gzip -d filename 。 查看文本压缩文件:zcat 文件名。
bzip2的常用用法:
语法:bzip2 参数 文件名
参数:
-c:将压缩过程中产生的数据输出到屏幕上
-d:解压缩
-k:保留源文件,而不会删除原始文件
-z:压缩
-v:显示出源文件/压缩文件的压缩比等信息。
-#:与gzip相同,1-9压缩比的参数,1最快,9最佳。
常用的语句:压缩:bzip2 -z filename ,解压:bzip2 -d filename 。查看压缩文本:bzcat filename.bz2
tar打包命令
以上三种压缩解压只能针对单文件执行,那么如果将多个文件合并到一个大文件中,怎么做到呢?那就要用tar这个命令。tar不止这么多,它还支持gzip/bzip2在打包的同时对文件进行压缩。由于这tar使用过于广泛,就连windows中的WinRAR也支持.tar.gz文件名的解压缩。
语法:打包与压缩:tar [-j|-z] [cv] [-f 新建的文件名] filename 解压缩: tar [-j|-z] [xv] [-f 新建的文件名] [-C 目录]
参数:
-c:新建打包文件,可搭配-v来查看过程中被打包的文件名
-t:查看打包文件的内容含有那些文件名,重点在查看文件
-x:解压缩或解打包的功能,可搭配-C在特定目录解开。特别留意的是,-c,-t,-x不可同时出现在一串命令中。
-j:通过bzip2的支持进行压缩或解压。
-z:通过gzip的支持进行压缩或解压。
-v:在压缩或解压的过程中,将正在处理的文件名称显示出来。
-f filename:-f后面要接被处理的文件名。建议-f单独写一个参数。
-C 目录:这个参数在解压时,若要在特定目录解压缩,可以使用这个参数。
.tar.bz2 格式常用的语法
解压: tar jxvf filename.tar.bz2 , 压缩: tar jcvf filename.tar.bz2 要压缩的文件
.tar.gz 格式常用的语法
解压:tar zxvf filename.tar.gz ,压缩: tar zcvf filename.tar.gz 要压缩的文件
总结
接下来是大家最喜欢的总结内容啦,内容有三,如下:
1、希望能关注我其他的文章。
2、博客里面有没有很清楚的说明白,或者你有更好的方式,那么欢迎加入左上方的2个交流群,我们一起学习探讨。
3、你可以忘记点赞加关注,但千万不要忘记扫码打赏哦。