对于新学一个东西来说,任何人都是新手。最好的学习方式就是先知道他是什么,能干什么。也要参考一些先行者的思路,学习路线。然后最主要的就是要自己去深入的思考~~!!!!,一定要自己去思考!
先来看看百度百科的解释:
Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux有上百种不同的发行版,如基于社区开发的debian、archlinux,和基于商业开发的Red Hat Enterprise Linux、SUSE、Oracle Linux等。
Linux不仅系统性能稳定,而且是开源软件。其核心防火墙组件性能高效、配置简单,保证了系统的安全。在很多企业网络中,为了追求速度和安全,Linux不仅仅是被网络运维人员当作服务器使用,甚至当作网络防火墙,这是Linux的一大亮点
Linux具有开放源码、没有版权、技术社区用户多等特点,开放源码使得用户可以自由裁剪,灵活性高,功能强大,成本低。尤其系统中内嵌网络协议栈,经过适当的配置就可实现路由器的功能。这些特点使得Linux成为开发路由交换设备的理想开发平台。
一个小故事:
linux不同于编程语言,编程语言主要是思想,而linux则更注重实操,所以对于Linux的学习过程,个人感觉实操会更多一点,本人以前也干过开发,做开发的时候可能一天1000行代码,但是也可能是一天纯粹梳理思路,或者找bug,有时候因为一个版本问题的bug可能需要2天甚至更多来解决。但是好歹用基础编程语言工具就可以解决很多问题,而且在有基础之后很少会有没有思路的情况。也可以说几乎所有的问题,在你对他的基础有了一定的了解之后都是可以有迹可循的,但是linux的体系太过庞大了!!,以致于我一直处于一个经常发现问题了,但是没有解决思路的情况(甚至是在一些繁多的的文件中匹配一个字符串都要用shell脚本,事后发现:哦~原来有更加简单的解决办法,是的就是grep工具,哈哈)。于是,再后来我才改变了自己对于linux的学习思路,不能满足与简单的现状,要去寻找更多的工具,看看有没有更加快捷的,方便的解决方案,实际上,这个基本素养,这应该是一个优秀的程序员的基本素养
简单说就是: 先对linux有一个简单的,整体的认知,去了解他的一些基础概念,先在心里种下一颗春天的种子,他就会自然而然的去发芽长大,以至于在后面的学习过程中在接触到这些知识的时候,会变得非常容易接受,甚至会觉得:哦~~,本来就应该是这样的。这样会有一个事半功倍的效果。(概念—特性(特点)—细节(知识点)—总结)
首先明确一点:在linux中一切都是文件,就像java中一切都是对象一样。(比如说你的cpu,磁盘,用户,命令等,都是以文件的形式体现在操作系统上)明确好这点后,理解一些难点的时候,会让你可以很轻易的跨过一些槛。
大致路线:(千万不要死记硬背,知道这个命令是干嘛的,然后在使用的时候可以使用help现场查,这样用的多了之后,自然而然就记住了)
1:Linux基础知识、基本命令(起源、组成、常用命令如cp、ls、file、mkdir等常见操作命令)
这些命令都有非常多的参数,并不建议一个个死记硬背,太多了,还会记错。要先去知道这些大命令是解决什么
问题的,在用的时候可以用help去查看他们的使用方法,或者百度也可以
2:Linux用户及权限基础
3:Linux系统进程管理进阶
4:Linux高效文本、文件处理命令(vim、grep、sed、awk、find等命令)
笔者在工作中经常用到grep和find,其次是sed、awk和vim。
5:shell脚本入门(将重复的事情交给电脑自己去做,大幅提高效率)
shell脚本,又称“万能胶”。在建立、管理、部署、安装实体服务器机器的时候,嘿嘿,这可就是神器了,如果
没有shell脚本我可能一天都搞不定一台服务器的安装部署配置(本公司是有自己的塔式服务器,也有云端的阿
里云和华为云的服务器),但是有了shell脚本,我可以一天搞定3.5台,这还是在一次只能搞一台,而且还是机
械硬盘的情况下的速度,中间还会出一些问题。。。。。
笔者刚刚接触Linux的时候用的是CentOS6.5。后来在工作中改用ubuntu的16.04LTS 。(这个问题可能比较仁者见仁智者见智)
但是笔者后来也尝试将16.04升级到了18版本,但是出了问题。尝试了几次之后都有问题,换回16.04之后问题解决。可能是由于18版本相对于16版本变了不少东西,所以引发的问题,但是16.04还是一个很稳定的版本的。可以经得住考验。嘿嘿
前面的百度百科中也说了,Linux有上百种不同的发行版,如基于社区开发的debian、archlinux,和基于商业开发的Red Hat Enterprise Linux、SUSE、Oracle Linux等。不同发行版的命令可能会有少许的区别。比如CentOS中的yum源和ubuntu中的apt-get。当然,大多数的命令、工具还是通用的。
还会有如下区别:
在安装软件的时候会有这样的区别,比如.deb主要在debian和ubuntu ; .rpm 主要用在Linux Red Hat Fedora SUSE 等等上。这个要注意一下
我第一次听说这句话,是从任正非先生的口中听说,当时华为刚刚被制裁不久。由于无法自己造芯片而被限制。当时听到这句话只是觉得很有力量,非常扎实。后来才知道,哦~原来是我们的基础工业研究力度还是不够大,而被卡了脖子。。。其实这个学习也是一样的,不应该追求短平快的方便的工具,而是要打造最牢固的基础才能造出最高的大厦。嗨,我们领导最爱说的一句话就是:基础不牢,地动山摇。哈哈,确实是的。
1:查看文件或目录权限: ls -l 或者
ll 加文件名或者目录名字
d是目录; -是普通文件; l是链接; b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
drwxrwxr-x 2 gobills gobills 4096 6月 10 16:12 ./
drwxr-xr-x 14 gobills gobills 4096 6月 10 16:12 ../
-rw-rw-r-- 1 gobills gobills 0 6月 10 16:12 hhh
-rw-rw-r-- 1 gobills gobills 0 6月 10 16:12 test
2:修改文件或文件夹权限:
chmod 全称 change permissions mode of a file
语法: chmod [{ugoa}{+-=}{rwx}] [文件或目录]
[mode=421] [文件或目录]
-R 递归修改
u:所有者, g:所属组,o:其他人,a:所有;
+:添加权限,-减少权限,=直接赋值成这个权限
例如: chmod -R o+w test1
chmod o+r hhh.txt
3:新建用户和用户组:
新建用户组: groupadd sharegroup
也可以指定用户组id: groupadd -g 111 sharegroup 新建用户组并指定用户组sharegroup 的ID为111
新建用户: (当然,也可以指定用户的id ,这个一百度一大堆,哈哈)
adduser shareuser1 //新建shareuser1用户
passwd shareuser1 //给shareuser1用户设置密码
新建用户时,同时将其增加到组内,如果单独新建用户,则会建一个同名的组
sudo useradd -g root bbb
sudo useradd -g groupname username
将已有用户加到组内 :
usermod -aG groupname username (这个会把用户从其他组中去掉)
usermod -a groupname username
注意:::::::::::::::::!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
linux 里面对文件的读写执行和目录的读写执行是有区别的:
权限 文件 文件夹
r 读 查看文件内容 列出文件夹内容
w 写 修改文件内容 可以在文件夹创建删除文件内容
x 执行 执行文件 可以进入文件夹
4:更改文件所有者命令:Linux chown 命令
命令用于设置文件所有者和文件关联组的命令。
利用 chown 将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户 ID,组可以是组名或者
组 ID,文件是以空格分开的要改变权限的文件列表,支持通配符。 。
语法格式: chown [-cfhvR] [--help] [--version] user[:group] file...
user : 新的文件拥有者的使用者 ID
group : 新的文件拥有者的使用者组(group)
-c : 显示更改的部分的信息
-f : 忽略错误信息
-h :修复符号链接
-v : 显示详细的处理信息
-R : 处理指定目录以及其子目录下的所有文件
--help : 显示辅助说明
--version : 显示版本
实例:
sudo chown root hhd
sudo chown root:root hhd #第一个是用户,第二个是组
chown -R root:root * #将当前前目录下的所有文件与子目录的拥有者皆设为 runoob,群体的使用者 runoobgroup:
chown :529 hhd #把 hhd 的关联组设置为 529 (关联组ID),不改变所有者: