0.写在前面:
这篇文章主要写给 Linux 初学者的,文章中会分享给初学者应该着重掌握的一些东西,这些内容都是本人从事 Linux 工作多年的心得体会,相信会帮初学者更快的掌握 Linux 的相关使用技能,后续作者会系统化地更新linux相关初级,中级,高级,终级篇系列文章。并且会在每个篇幅,章节给出学习意见。
本系列学完目标:
- 小白,大学生学完可以满足日常linux相关开发
- 普通运维/开发查漏补缺,提升技能,开发经验
学linu的初衷?
从事于 IT 相关工作的同学,应该都或多或少的了解一些linux系统。其实,随着互联网行业的不断发展,大家已经每时每刻都在使用着linux系统,Linux早已渗透进我们生活中的每个角落,我们生活中使用的一切软件系统基本都是基于linux操作系统在运行。
包括那些火热的技术,比如云计算、虚拟化、容器、大数据、人工智能,几乎都是基于 Linux 技术的,那些平台系统,电商、团购、社交、新闻、快递,都是部署在服务器端,也几乎都是基于 Linux 技术的。
在编程的世界中,Linux 依然成为主流,如果你想要从事编程相关的工作,不论是前端、后端、运维、还是测试,Linux 都是你必须掌握技能,只有了解了 Linux ,你才可能成为合格的软件工程师。
1.常用的linux发行版本(了解)
如果你的学习目标是为了以后能在工作中使用,下面两个系统学习最适合:
一、RedHat(红帽)
官方网站:https://www.redhat.com/zh(红帽中国官方 )
二、CentOS
官方网站:https://www.centos.org/(CentOS官方)
中文站:https://www.centoschina.cn/(CentOS中文站)
这两个系统其实是一样的,红帽是正版,CentOS是重新编译后的红帽;想从事运维工作的童鞋,学会使用这两个系统,基本就无问题了。在中国市场,CentOS比红帽多,因为开源嘛!红帽呢因为售后比较贵,使用的企业不多,大多数是银行、国企使用,私企基本上都是CentOS.
三,Ubuntu
Ubuntu作为Linux发行版中的后起之秀,Ubuntu 在短短几年时间里便迅速成长为从Linux初学者到实验室用计算机/服务器都适合使用的发行版。那么Ubuntu和Centos的区别是哪?如何选择?
如果是作为服务器的话,这一点是CentOS更胜一筹,虽然它们同样是开源,免费。CentOS它的源码是来自由商业服务器Red Hat Enterprise Linux。有很多公司都是用CentOS来代替商业版的Red Hat Linux,同时它的稳定性也是值得信赖的。而Ubuntu的开发目的是为了使个人电脑变得简单易用,虽然也提供相应的企业服务器,不过专业的还是CentOS。当前其他版本也有很多,可以忽略吧。
推荐一个适合学习linux的网站:linux公社
2. Linux 的内核结构
(1)用户空间:用户空间中又包含了用户的应用程序,C库
(2)内核空间:内核空间包括,系统调用,内核,以及与平台架构相关的代码
尖叫提示:普通用户了解即可,专业linux开发,运维需要了解深入些。
3. Linux 系统的安装部署
Linux的系统安装在这里就不多做赘述了,具体的安装步骤具体可以自行百度,也可以参考这篇文章:https://zhuanlan.zhihu.com/p/41940739 整体比较简单。
尖叫提示:普通用户了解即可,专业linux运维,需要熟练掌握,生产实际部署都是模块化部署,专业工具同时装几十台,配置几十台机器。后续运维系列会告诉大家如何系统化,批量化安装部署配置系统。
4. Linux 系统的登录
一般工作环境中,我们都是在Windows下远程连接Linux的ssh客户端进行登录访问linux 服务器,此时我们就需要借助像Xshell,SecureCRT 这样的终端模拟器软件,两个软件使用起来也很方便,下面给出了一些可以学习参考的链接:
Xshell 的安装和使用详情:https://www.xshellcn.com/xsh_column/lianjie-linux.html
SecureCRT的安装和使用详情:https://blog.csdn.net/Haiyang_Duan/article/details/53302378
5. Linux 系统重启
进入linux系统之后,会出现终端命令行界面,此时我们可以在命令行操作我们想要执行的命令。
**新手严重告警:切勿使用 rm -rf ***
关机命令:shutdown -h now(立刻进行关机)
halt(立刻进行关机)
poweroff(立刻进行关机)
重启命令:shutdown -r now(现在重新启动计算机)
reboot(现在重新启动计算机)
区别:shutdown -h now和shutdown -r now必须是root用户或者具有root权限的用户才能使用,而halt和reboot是Linux系统中的任何用户都可使用,不需要root权限。
尖叫提示:普通用户了解即可,实际除了你自己的本地虚拟机可以不停重启外,生产环境机器一般不会重启,一般都是重启服务。有些机器甚至都是开机跑了好几年都不带关机的,除非特殊情况,硬件维修,死机,搬迁等。
6. Linux 密码修改
root 用户在linux 系统中具有最高管理员权限,可以修改任意用户的密码,忘了密码都无所谓,具体操作命令如下,其他用户密码设置切换用户设置即可,root用户直接 su - username即可:
[root@testzhuji ~]# passwd test
Changing password for user test.
New password:
BAD PASSWORD: it is too simplistic/systematic
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.
7. Linux 文件与目录管理,相关命令
7.1文件与目录概述
我们知道Linux里一切皆文件。要不就是文件目录。
linux的目录结构为树状结构,最顶级的目录为根目录 /。类似如下:
其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们。
在开始本教程前我们需要先知道什么是绝对路径与相对路径。
绝对路径:
路径的写法,由根目录 / 写起,例如: /usr/share/doc 这个目录。
相对路径:
路径的写法,不是由 / 写起,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成: cd …/man 这就是相对路径的写法。
处理目录的常用命令
接下来我们就来看几个常见的处理目录的命令吧,要记住命令名称意思其实很简单,只要知道它是什么的简称即可:
ls(英文全拼:list files): 列出目录及文件名
cd(英文全拼:change directory):切换目录
pwd(英文全拼:print work directory):显示目前的目录
mkdir(英文全拼:make directory):创建一个新的目录
rmdir(英文全拼:remove directory):删除一个空的目录
cp(英文全拼:copy file): 复制文件或目录
rm(英文全拼:remove): 删除文件或目录
mv(英文全拼:move file): 移动文件与目录,或修改文件与目录的名称
你可以使用 man [命令] 来查看各个命令的使用文档,所以命令的参数不用详细去记,没必要,知道有这么个命令,实际使用时查询下即可,man的用处就是这个。如 :man cp。
7.2文件与目录相关命令演示
7.2.1. ls (列出目录)
在Linux系统当中, ls 命令可能是最常被运行的,我个人习惯直接使用ll。这个命令比较简单,常用要掌握
语法:
[root@www ~]# ls [-aAdfFhilnrRSt] 目录名称
[root@www ~]# ls [–color={never,auto,always}] 目录名称
[root@www ~]# ls [–full-time] 目录名称
选项与参数:
- -a :全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用)
- -d :仅列出目录本身,而不是列出目录内的文件数据(常用)
- -l :长数据串列出,包含文件的属性与权限等等数据;(常用)
将家目录下的所有文件列出来(含属性与隐藏档)
7.2.2 cd (切换目录)
cd是Change Directory的缩写,这是用来变换工作目录的命令。
语法:
cd [相对路径或绝对路径]
示例:切换到 /home 路径下
[root@10-90-50-75-jhdxyjd home]# cd /home/
[root@10-21-141-81-jhdxyjd home]# ll
total 4
drwx------ 3 app app 70 Jun 13 2018 app
drwx------ 2 bigdata bigdata 59 Sep 1 18:54 bigdata
drwx------ 2 ga ga 59 Aug 17 16:13 ga
drwx------ 3 logview logview 70 Feb 27 2020 logview
drwx------ 2 mobdi_prd mobdi_prd 59 Feb 20 2021 mobdi_prd
drwx------ 4 ops ops 4096 Jun 21 17:54 ops
drwx------ 2 packer packer 59 Sep 21 2017 packer
drwx------ 2 spark2 spark2 79 Aug 16 21:13 spark2
d-wx------ 4 test test 107 Apr 21 19:35 test
drwx------ 2 test2 test 59 Jul 9 15:17 test2
drwx------ 2 test3 test3 59 Jul 15 17:51 test3
drwx------ 2 yangyuying yangyuying 59 May 11 2020 yangyuying
drwx------ 2 zabbix zabbix 59 Nov 16 2017 zabbix
drwx------ 2 zhagjch zhagjch 59 Jan 4 2021 zhagjch
[root@10-21-141-81-jhdxyjd home]# cd app
[root@10-21-141-81-jhdxyjd app]# pwd
/home/app
[root@10-21-141-81-jhdxyjd app]# cd ..
[root@10-21-141-81-jhdxyjd home]# pwd
/home
[root@10-21-141-81-jhdxyjd home]# cd ./bigdata/
[root@10-21-141-81-jhdxyjd bigdata]# pwd
/home/bigdata
这个命令没啥说的,注意cd ..,表示返回上一层,.表示当前目录,..表示上一层目录,直接cd回车 返回根/目录。比如进入当前目录的下一层目录a 就是cd ./a
7.2.3 mkdir (创建新目录) (常用)
如果想要创建新的目录的话,那么就使用mkdir (make directory)吧。
基础语法:
mkdir [-mp] 目录名称
选项与参数:
- -m :配置文件的权限喔!直接配置,不需要看默认权限 (umask) 的脸色~
- -p :帮助你直接将所需要的目录(包含上一级目录)递归创建起来!
示例:使用绝对路径创建test目录
[root@10-90-50-75-jhdxyjd home]# mkdir /test
加了这个 -p 的选项,可以自行帮你创建多层目录!
[root@10-90-50-75-jhdxyjd home]# mkdir -p /test/test2/test3
7.2.3 pwd (显示目前所在的目录)
pwd 是 Print Working Directory 的缩写,也就是显示目前所在目录的命令。
示例:显示当前所在的目录
[root@10-90-50-75-jhdxyjd home]# pwd
/home
7.2.4 rmdir (删除空的目录)与rm
基础语法:
rmdir [-p] 目录名称
选项与参数:
- -p :连同上一级『空的』目录也一起删除
示例:删除多级目录 /test/test2/test3/(如果目录下有内容会报错)
[root@10-90-50-75-jhdxyjd home]# rmdir /test/test2/test3/
不过要注意的是
[root@10-90-50-75-jhdxyjd home]# rm -rf /test/
这个 rmdir 仅能删除空的目录,你可以使用 rm -rf 命令来强制删除非空目录。
示例:
[root@10-90-50-75-jhdxyjd home]# rm -rf /test/
rm (移除文件或目录),这个才是常用的,但要慎用。
rm [-fir] 文件或目录
选项与参数:
- -f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;
- -i :互动模式,在删除前会询问使用者是否动作
- -r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!!
7.2.5 cp (复制文件或目录)
cp 即拷贝文件和目录。
[root@www ~]# cp [-adfilprsu] 来源档(source) 目标档(destination)
[root@www ~]# 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
[root@10-90-50-75-jhdxyjd ~]# cp ~/.bashrc /tmp/bashrc
7.2.6 mv (移动文件与目录,或修改名称)
基础语法:
mv [-fiu] source destination
mv [options] source1 source2 source3 … directory
选项与参数:
- -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
- -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
- -u :若目标文件已经存在,且 source 比较新,才会升级 (update)
示例:复制一文件,创建一目录,将文件移动到目录中
[root@10-90-50-75-jhdxyjd tmp]# cd /tmp/
[root@10-90-50-75-jhdxyjd tmp]# cp ~/.bashrc bashrc
[root@10-90-50-75-jhdxyjd tmp]# mkdir mvtest1
[root@10-90-50-75-jhdxyjd tmp]# mv bashrc mvtest1
尖叫提示:mv速度贼快,因为他其实就是系统层面的文件重命名rename,要比cp快N倍。所以能mv不要cp尤其大文件,但是mv文件只有一份,重命名挪动了位置,cp则有多份。
8. Linux 文件内容查看
Linux系统中使用以下命令来查看文件的内容:
cat 由第一行开始显示文件内容
tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
nl 显示的时候,顺道输出行号!
more 一页一页的显示文件内容
less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
head 只看头几行
tail 只看尾巴几行
你可以使用 man [命令]来查看各个命令的使用文档,如 :man cp。
8.1 cat 【由第一行开始显示文件内容】和tac
基础语法:
cat [-AbEnTv]
选项与参数:
- -A :相当於 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
- -b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
- -E :将结尾的断行字节 $ 显示出来;
- -n :列印出行号,连同空白行也会有行号,与 -b 的选项不同;
- -T :将 [tab] 按键以 ^I 显示出来;
- -v :列出一些看不出来的特殊字符
示例:查看 /etc/hosts 这个文件的内容
[root@10-90-50-75-jhdxyjd tmp]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
tac 【与cat命令刚好相反,文件内容从最后一行开始显示,可以看出 tac 是 cat 的倒着写!】
示例:
[root@10-90-50-75-jhdxyjd tmp]# tac /etc/hosts
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
8.2 nl 【显示行号】,不常用
基础语法:
nl [-bnw] 文件
选项与参数:
-b :指定行号指定的方式,主要有两种:
-b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
-b t :如果有空行,空的那一行不要列出行号(默认值);
-n :列出行号表示的方法,主要有三种:
-n ln :行号在荧幕的最左方显示;
-n rn :行号在自己栏位的最右方显示,且不加 0 ;
-n rz :行号在自己栏位的最右方显示,且加 0 ;
-w :行号栏位的占用的位数。
示例:用 nl 列出 /etc/hosts 的内容
[root@10-90-50-75-jhdxyjd tmp]# nl /etc/hosts
1 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
2 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
8.3 more 【一页一页翻动】,常用
在 more 这个程序的运行过程中,你有几个按键可以按的:
空白键 (space):代表向下翻一页;
Enter :代表向下翻『一行』;
/字串 :代表在这个显示的内容当中,向下搜寻『字串』这个关键字;
- :f :立刻显示出档名以及目前显示的行数;
- q :代表立刻离开 more ,不再显示该文件内容。
- b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。
[root@10-90-50-75-jhdxyjd tmp]# more /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
8.4 less 【一页一页翻动】
less运行时可以输入的命令有:
- 空白键 :向下翻动一页;
- [pagedown]:向下翻动一页;
- [pageup] :向上翻动一页;
- /字串 :向下搜寻『字串』的功能;
- ?字串 :向上搜寻『字串』的功能;
- n :重复前一个搜寻 (与 / 或 ? 有关!)
- N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
- q :离开 less 这个程序;
[root@10-90-50-75-jhdxyjd tmp]# less /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
/etc/hosts (END)
8.5 head 【取出文件前面几行】
head [-n number] 文件
选项与参数:
- -n :后面接数字,代表显示几行的意思
示例:默认的情况中,显示前面 10 行!若要显示前 20 行,就得要这样
[root@10-90-50-75-jhdxyjd tmp]# head -n 20 /etc/man.config
#
# Generated automatically from man.conf.in by the
# configure script.
#
# man.conf from man-1.6f
#
# For more information about this file, see the man pages man(1)
# and man.conf(5).
#
# This file is read by man to configure the default manpath (also used
# when MANPATH contains an empty substring), to find out where the cat
# pages corresponding to given man pages should be stored,
# and to map each PATH element to a manpath element.
# It may also record the pathname of the man binary. [This is unused.]
# The format is:
#
# MANBIN pathname
# MANPATH manpath_element [corresponding_catdir]
# MANPATH_MAP path_element manpath_element
#
8.6 tail 【取出文件后面几行】
基础语法:
tail [-n number] 文件
选项与参数:
- -n :后面接数字,代表显示几行的意思
- -f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测
示例:默认的情况中,显示最后的十行!若要显示最后的 20 行,执行如下命令
[root@10-90-50-75-jhdxyjd tmp]# tail -n 20 /etc/man.config
# Decompress with given decompressor when input file has given extension
# The command given must act as a filter.
#
.gz /usr/bin/gunzip -c
.bz2 /usr/bin/bzip2 -c -d
.lzma /usr/bin/unlzma -c -d
.z
.Z /bin/zcat
.F
.Y
#
# Enable/disable makewhatis database cron updates.
# If MAKEWHATISDBUPDATES variable is uncommented
# and set to n or N, cron scripts
# /etc/cron.daily/makewhatis.cron
# /etc/cron.weekly/makewhatis.cron
# will not update makewhatis database.
# Otherwise the database will be updated.
#
#MAKEWHATISDBUPDATES n
9. Linux 文件权限管理
LInux作为更安全的操作系统,为不同的文件配置不同的文件权限进行管理,单个文件来看权限大致分为下面三种:
所有者权限:文件所有者能够进行的操作
组权限:文件所属用户组能够进行的操作
外部权限(其他权限):其他用户可以进行的操作。
9.1 .文件权限的查看
示例:
[root@10-90-50-75-jhdxyjd tmp]# ls -l /etc/hosts
-rw-r--r-- 1 root root 200 Sep 8 13:02 /etc/hosts
内容解读:
第一列就表示的是文件/etc/hosts的相关权限。
第一列的字符可以详细的列为三部分,每一部分有三个小字符组成,每个字符都代表不同的权限,r读权限、w写权限、x执行权限:
第一部分字符(2-4)表示文件所有者的权限,-rw-r–r--表示所有者拥有r读权限、w写权限。
第二部分字符(5-7)表示文件所属用户组的权限,-rw-r–r-- 表示该组拥有r读权限。
第三部分字符(8-10)表示所有其他用户的权限,-rw-r–r-- 表示其他用户只有r读取权限。
9.2 .文件权限更改
可以使用 chmod (change mode) 命令来改变文件权限。
一种是数字,一种是符号。
文件的权限字符为: -rwxrwxrwx , 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:
r:4 w:2 x:1
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的。
示例: -rwxrwx— 分数则是:
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= — = 0+0+0 = 0
所以该文件的权限数字就是 770
命令语法:
chmod [-R] xyz 文件或目录
操作示例:很多人懒省事,直接都是777,所有权限都有了
[root@10-90-50-75-jhdxyjd hadoop]# chmod 770 1.txt
[root@10-90-50-75-jhdxyjd hadoop]# ls -l
total 8
-rwxrwx--- 1 root root 0 Sep 8 17:33 1.txt
符号类型改变文件权限
user:用户
group:组
others:其他
那么我们就可以使用 u, g, o 来代表三种身份的权限。
示例:如果我们需要将文件权限设置为 -rwxr-xr-- ,可以使用 chmod u=rwx,g=rx,o=r 文件名 来设定。
操作示例:
[root@10-90-50-75-jhdxyjd hadoop]# touch test2 //创建文件
[root@10-90-50-75-jhdxyjd hadoop]# ls -al test2 //查看现有权限
-rw-r--r-- 1 root root 0 Sep 8 17:37 test2
[root@10-90-50-75-jhdxyjd hadoop]# chmod u=rwx,g=rx,o=r test2 //更改权限
[root@10-90-50-75-jhdxyjd hadoop]# ls -al test2 //查看权限
-rwxr-xr-- 1 root root 0 Sep 8 17:37 test2
[root@10-90-50-75-jhdxyjd hadoop]# chmod a-x test2 //去掉指定权限
[root@10-90-50-75-jhdxyjd hadoop]# ls -al test2
-rw-r--r-- 1 root root 0 Sep 8 17:37 test2
这些是lunix初级入门,后面继持续更新中级,高级系列,欢迎大家关注收藏,交流。