Linux基本操作:6w字搞定Linux手把手教程(一)

Linux是一种开源电脑操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统。

Linux最早是由芬兰 Linus Torvalds为尝试在英特尔x86架构上提供自由的类Unix操作系统而开发的。该计划开始于1991年,在计划的早期有一些Minix 黑客提供了协助,而今天全球无数程序员正在为该计划无偿提供帮助。

linux其实很常见,它的安全性也很好,因为它得体积很小也经常被广泛得应用到小的家电中去。Linux得功能也十分得强大,被广泛的应用于智能设备、后台服务器、云计算、大数据等。学习好它十分的重要。

它的基本的目录主要是这样的:

  • /:/是根目录.Unix 和 Linux 中,没有盘符. 只有一个硬盘,一个根.
  • /bin :系统的常用命令目录. 包括控制台命令, 系统可执行文件, 系统的核心二进制文件等.
  • /etc: 发布目录, 相当于 windows 系统中的 windows 目录, 保存系统中的所有核心内容. 要求控制权限高, 建议不要随便读写.
  • /usr :用户目录, 相当于 windows 系统中的 program files 目录. 常用于安装系统所有用户共用的软件,资源的.
  • /root :root 根用户的用户目录 . 相当于 windows 系统中的C:/users/administrator 目录.
  • /home :保存其他用户主目录的目录. 如: Linux 系统中有 oldlu 用户. 那么一定有/home/oldlu 目录存在. 代表用户的主目录.
  • /var :系统运行过程的数据目录.
  • Linux命令这么多,该怎么从入门到精通?其实,这个事情非常的simple,博智互联给大家整理了这篇非常完整的文章。文章非常的长,非常考验一个人耐心和毅力。衷心希望对你有所收获!

    本文将由一个Linux命令概览开始,说明Linux命令的方方面面。如果你读完这部分还是一头雾水,那么就证明需要按照下面的小白教程去学习了,内容涵盖了:如何挑选Linux发行版、如何安装Linux系统,按照主题学习Linux系统的命令等。

    1. Linux命令概览

    这部分是给稍微有点Linux经验的同学准备的,如果你是初学者,请跳过此part直接进入第二部分。

    1.1目录操作

    工作中,最常打交道的就是对目录和文件的操作。linux提供了相应的命令去操作他,并将这些命令抽象、缩写。

    1.1.1 基本操作

    可能是这些命令太常用了,多打一个字符都是罪过。所以它们都很短,不用阿拉伯数字,一个剪刀手就能数过来。

    看命令。
    mkdir 创建目录 make dircp 拷贝文件 copymv 移动文件 moverm 删除文件 remove

    例子:

    # 创建目录和父目录a,b,c,dmkdir -p a/b/c/d# 拷贝文件夹a到/tmp目录cp -rvf a/ /tmp/# 移动文件a到/tmp目录,并重命名为bmv -vf a /tmp/b# 删除机器上的所有文件rm -rvf /

    1.1.2 漫游

    linux上是黑漆漆的命令行,依然要面临人生三问:我是谁?我在哪?我要去何方?

    ls 命令能够看到当前目录的所有内容。ls -l能够看到更多信息,判断你是谁。
    pwd 命令能够看到当前终端所在的目录。告诉你你在哪。
    cd 假如你去错了地方,cd命令能够切换到对的目录。
    find find命令通过筛选一些条件,能够找到已经被遗忘的文件。

    至于要去何方,可能就是主宰者的意志了。

    1.2 文本处理

    这是是非常非常加分的技能。get到之后,也能节省更多时间来研究面向对象。小姐姐味道已经输出了“最常用的vim、sed、awk技巧系列”。

    1.2.1 查看文件

    cat
    最常用的就是cat命令了,注意,如果文件很大的话,cat命令的输出结果会疯狂在终端上输出,可以多次按ctrl+c终止。

    # 查看文件大小du -h file# 查看文件内容cat file

    less
    既然cat有这个问题,针对比较大的文件,我们就可以使用less命令打开某个文件。 类似vim,less可以在输入/后进入查找模式,然后按n(N)向下(上)查找。
    有许多操作,都和vim类似,你可以类比看下。

    tail
    大多数做服务端开发的同学,都了解这么命令。比如,查看nginx的滚动日志。

    tail -f access.log

    tail命令可以静态的查看某个文件的最后n行,与之对应的,head命令查看文件头n行。但head没有滚动功能,就像尾巴是往外长的,不会反着往里长。

    tail -n100 access.loghead -n100 access.log

    1.2.1 统计

    sort和uniq经常配对使用。 sort可以使用-t指定分隔符,使用-k指定要排序的列。

    下面这个命令输出nginx日志的ip和每个ip的pv,pv最高的前10

    # 2019-06-26T10:01:57+08:00|nginx001.server.ops.pro.dc|100.116.222.80|10.31.150.232:41021|0.014|0.011|0.000|200|200|273|-|/visit|sign=91CD1988CE8B313B8A0454A4BBE930DF|-|-|http|POST|112.4.238.213awk -F'|' '{print $3}' access.log | sort | uniq -c | sort -nk1 -r | head -n10

    1.2.3 其他

    grep
    grep用来对内容进行过滤,带上--color参数,可以在支持的终端可以打印彩色,参数n则输出具体的行数,用来快速定位。
    比如:查看nginx日志中的POST请求。

    grep -rn --color POST access.log

    推荐每次都使用这样的参数。

    如果我想要看某个异常前后相关的内容,就可以使用ABC参数。它们是几个单词的缩写,经常被使用。 A after 内容后n行 B before 内容前n行 C count? 内容前后n行
    就像是这样:

    grep -rn --color Exception -A10 -B2   error.log

    diff

    diff命令用来比较两个文件是否的差异。当然,在ide中都提供了这个功能,diff只是命令行下的原始折衷。对了,diff和patch还是一些平台源码的打补丁方式,你要是不用,就pass吧。

    1.3压缩

    为了减小传输文件的大小,一般都开启压缩。linux下常见的压缩文件有tar、bzip2、zip、rar等,7z这种用的相对较少。

    .tar 使用tar命令压缩或解压
    .bz2 使用bzip2命令操作
    .gz 使用gzip命令操作
    .zip 使用unzip命令解压
    .rar 使用unrar命令解压

    最常用的就是.tar.gz文件格式了。其实是经过了tar打包后,再使用gzip压缩。

    创建压缩文件

    tar cvfz  archive.tar.gz dir/

    解压

    tar xvfz. archive.tar.gz

    快去弄清楚它们的关系吧。

    1.4 日常运维

    开机是按一下启动按钮,关机总不至于是长按启动按钮吧。对了,是shutdown命令,不过一般也没权限-.-!。passwd命令可以用来修改密码,这个权限还是可以有的。

    mount
    mount命令可以挂在一些外接设备,比如u盘,比如iso,比如刚申请的ssd。可以放心地看小电影了。

    mount /dev/sdb1 /xiaodianying

    chown
    chown 用来改变文件的所属用户和所属组。
    chmod 用来改变文件的访问权限。

    这两个命令,都和linux的文件权限777有关。
    示例:

    # 毁灭性的命令chmod 000 -R /# 修改a目录的用户和组为 xjjchown -R xjj:xjj a# 给a.sh文件增加执行权限(这个太常用了)chmod a+x a.sh

    yum
    假定你用的是centos,则包管理工具就是yum。如果你的系统没有wget命令,就可以使用如下命令进行安装。

    yum install wget -y

    systemctl
    当然,centos管理后台服务也有一些套路。service命令就是。systemctl兼容了service命令,我们看一下怎么重启mysql服务。 推荐用下面这个。

    service mysql restartsystemctl restart  mysqld

    对于普通的进程,就要使用kill命令进行更加详细的控制了。kill命令有很多信号,如果你在用kill -9,你一定想要了解kill -15以及kill -3的区别和用途。

    su
    su用来切换用户。比如你现在是root,想要用xjj用户做一些勾当,就可以使用su切换。

    su xjjsu - xjj

    -可以让你干净纯洁的降临另一个账号,不出意外,推荐。

    1.5 系统状态概览

    登陆一台linux机器,有些命令能够帮助你快速找到问题。这些命令涵盖内存、cpu、网络、io、磁盘等。

    uname uname命令可以输出当前的内核信息,让你了解到用的是什么机器。

    uname -a

    ps
    ps命令能够看到进程/线程状态。和top有些内容重叠,常用。

    # 找到java进程ps -ef|grep java

    top 系统状态一览,主要查看。cpu load负载、cpu占用率。使用内存或者cpu最高的一些进程。下面这个命令可以查看某个进程中的线程状态。

    top -H -p pid

    free
    top也能看内存,但不友好,free是专门用来查看内存的。包括物理内存和虚拟内存swap。

    df
    df命令用来查看系统中磁盘的使用量,用来查看磁盘是否已经到达上限。参数h可以以友好的方式进行展示。

    df -h

    ifconfig
    查看ip地址,不啰嗦,替代品是ip addr命令。

    ping
    至于网络通不通,可以使用ping来探测。(不包括那些禁ping的网站)

    netstat虽然ss命令可以替代netstat了,但现实中netstat仍然用的更广泛一些。比如,查看当前的所有tcp连接。

    netstat -ant

    此命令,在找一些本地起了什么端口之类的问题上,作用很大。

    1.6 工作常用

    还有一些在工作中经常会用到的命令,它们的出现频率是非常高的 ,都是些熟面孔。

    export
    很多安装了jdk的同学找不到java命令,export就可以帮你办到它。export用来设定一些环境变量,env命令能看到当前系统中所有的环境变量。比如,下面设置的就是jdk了。

    export PATH=$PATH:/home/xjj/jdk/bin

    有时候,你想要知道所执行命令的具体路径。那么就可以使用whereis命令,我是假定了你装了多个版本的jdk。

    crontab
    这就是linux本地的job工具。不是分布式的,你要不是运维,就不要用了。比如,每10分钟提醒喝茶上厕所。

    */10 * * * * /home/xjj/wc10min

    date date命令用来输出当前的系统时间,可以使用-s参数指定输出格式。但设置时间涉及到设置硬件,所以有另外一个命令叫做hwclock。

    xargs xargs读取输入源,然后逐行处理。这个命令非常有用。举个例子,删除目录中的所有class文件。

    find . | grep .class$ | xargs rm -rvf#把所有的rmvb文件拷贝到目录ls *.rmvb | xargs -n1 -i cp {} /mount/xiaodianying

    1.7 网络

    linux是一个多作业的网络操作系统,所以网络命令有很多很多。工作中,最常和这些打交道。

    ssh
    这个,就不啰嗦了。你一定希望了解ssh隧道是什么。你要是想要详细的输出过程,记得加参数-v。

    scp
    scp用来进行文件传输。也可以用来传输目录。也有更高级的sftp命令。

    scp a.txt 192.168.0.12:/tmp/a.txtscp -r a_dir 192.168.0.12:/tmp/

    wget
    你想要在服务器上安装jdk,不会先在本地下载下来,然后使用scp传到服务器上吧(有时候不得不这样)。wget命令可以让你直接使用命令行下载文件,并支持断点续传。

    wget -c http://oracle.fuck/jdk2019.bin

    mysql
    mysql应用广泛,并不是每个人都有条件用上navicat的。你需要了解mysql的连接方式和基本的操作,在异常情况下才能游刃有余。

    mysql -u root -p -h 192.168.1.2

    不要觉得复杂,命令是有限的,但激情无限;都会也不要骄傲,一个vim就够折腾一辈子。捷径就是总结,深入只有探索。白马过隙,终会行云流水,手到擒来。
    物是人非,年华易老。唯有时光,不会辜负。

    2. 挑选一个Linux发行版

    和Linux比较像的还有Unix,但如果你是一个二三十岁的小青年,你接触到可能只有Linux的世界了。从手机,到服务器上广泛使用的centos,到漂亮的桌面发行版ubuntu,甚至是风靡全球的树莓派,到处都是linux的身影。

    2.1 你需要知道这些linux历史

    知道一点相关操作系统的历史,是能够陶冶情操的。GNU/Linux是为了抵制一些商业公司的垄断行为而发展起来的,凝结了一代互联网人向往自由的心血。

    和其他Unix比起来,Linux其实很年轻。直到1991年,一个叫Linus Torvalds的芬兰年轻人才开始开发我们现在所知道的Linux内核。

    Linux的吉祥物是企鹅,这个吉祥物直到1996年才确定,所以你会经常看到一些搞笑的图片。如果你是90后,那这只小企鹅几乎和你一般大,还是个年轻的小伙。

    Linux的发展历程比较的复杂。经过一次次的过关斩将,Linux走到今天确属不易。关于其发展历史,你可以通过下面的链接,查看高清图片。20年的时间,对软件行业来说,是一段非常漫长的时光,有多少的风光已经物是人非。

    高清见图片(1t.click/aUnx) 。可以看到,linux只占了那可怜的一小块。这就像人类的出现,在生命的长河中,微不足道,但却是一个质的飞跃。

    你可能注意到,在前面的描述中,说的是GUN/Linux,而不仅仅是Linux。Linux本身只是一个内核,作用有限,只有和GNU联合起来,拥有完整的生态才会发挥它的作用。

    谈到上面区别的原因,是为了记住Richard Stallman在1983年发起的GNU计划。他同时是smalltalk语言的发明者,被公认的第二个面向对象的语言。我在早些年,还研究过一段时间。哦,他还编写了一个巨无霸编辑器,Emacs。

    只有一个人被捧成神,他才会有能量折磨你。

    针对于Linux历史,我们不做过多介绍。下面介绍几个经典的发行版本。

    2.2 精选版本介绍

    现在的Linux发行版本,已经有上千个,你要是喜欢、而且多金,你也可以做一个。如何在这其中,找到最合适的版本,是需要经过一番折腾的。很多发行版本,其实是很小众的。

    这不像是哲学领域的某些东西,真理掌握在少数人手中。只有获得良好发展,并得到认可的Linux发行版,才有它的价值,可以说是彻头彻尾的实用主义。

    但这东西又像女朋友,刚开始感觉风采迥异,各有千秋,到最后了解到是一样的庸俗不堪。但有人就是喜欢Linux相关的工作,一干就是一辈子...

    我可以先说一下自己的历程。刚开始,接触的是红帽redhat,当时还没有分什么企业版。用了一段时间以后,又切换成更稳定的slackware。但是slackware上的程序更新实在太慢了,于是又切换成readhat血统的fedora,这个版本的软件保鲜度很高。其间,又尝试了其他几个linux版本,最终,在2013年前后,换成了滚动升级的archlinux,直到现在。

    要我个人做个推荐的话:
    1、个人用户(技术),桌面版用ubuntu=>archlinux。
    2、企业用户,服务器,使用centos。

    2.3 主要起源

    这么多Linux版本,其实有两条主线。debian系列和redhat系列。很多发行版本,其实是二次翻新,很多就直接拿这两个基础系列进行改造。正所谓:操作系统千千万,都是帽子和大便。

    debian

    下面这个屎一样的图表,就是debian。呃呃呃,和大便只差一个字母。

    Debian计划是一个致力于创建一个自由操作系统的合作组织。它的特点是:稳定、安全,到现在为止,已经发展了20多年了。我们所熟悉的ubuntu,就是基于debian改进的。

    redhat

    红帽是一家商业公司,涉足Linux比较早,现在对个人提供一些红帽认证之类的证书。现在云主机使用较多的centos,包括红帽公司的RHEL,占据了大部分服务器市场。近期,centos 8推出了centos stream滚动版本,看起来更像是一个正常的操作系统。

    2.4 典型版本

    我们看一下处于不同层次的几个典型版本。从应用方面来说,linux有桌面、服务器、研究用等用途。

    2.4.1、ubuntu

    ubuntu的出现,对Linux的推广有不可磨灭的贡献。它是一个易于安装的桌面版本(也有服务器版本),界面非常漂亮。ubuntu是基于debian系统的unstable分支修改的,包管理软件是apt-get。

    它的创建者是Mark Shuttleworth,南非企业家,世界上第二名自资的太空游客。我想,无论是太空还是ubuntu,这都是梦想吧。

    2.4.2、centos

    centos是目前最流行的服务器版本。它是RHEL源代码再编译的产物,主要是为了绕开一些法律问题。在包管理,甚至稳定性上,与红帽企业版没什么差别。

    2.4.3、archlinux

    archlinux采用滚动升级的模式进行发行,尽全力提供最新的稳定版本。刚开始安装,arch只提供一个基本的系统,甚至连界面都没有,对初学者不是很友好。

    但是,archlinux是非常干净的系统。很多软件,只有你需要的时候才会安装。它的软件和理念通常都是最新的,定制化非常强,深得许多Linux爱好者的喜爱。

    2.4.4、gentoo

    上面的archlinux,提供了编译后的软件包。用户在安装软件时,只需要下载、解压即可。gentoo将这个过程更近一步,可以说更加的变态。它下载的是软件的源代码,然后在本地进行编译,然后安装。

    这通常非常的蛋疼,因为下载、编译会花费非常长的时间,但它有一个非常大的优点,就是稳定。

    这个系统比较底层,对技能要求更多,不太推荐。

    2.4.5 、LFS

    LFS的全拼是“linux from scratch”,意思是从零构建一个linux系统。它有一个非常详细的安装文档,教你怎样编译内核,编译引导程序,编译和配置必要的软件。

    这是一个疯狂而必要的过程。如果你想要自己的Linux之上更上层楼,跟着文档做一遍是受益无穷的。你需要经过多次交叉编译,最终使用chroot命令切换到新系统进行后续操作。

    想做一个自己的发行版么?从这开始吧。

    2.4.6、kali

    kali linux是一个非常专业的发行版。如果你在做渗透方面的工作,将是一个非常好的选择。

    发行版的安装包非常大,包含了常见的破解工具,渗透工具,攻击工具。这非常的危险,我曾用它暴力破解了非常多的wifi密码,成功的窥视了邻居的隐私。还是非常好用的。

    3. 安装一个清爽的Linux系统

    工欲善其事,必先利其器。你可能会想到买一台云主机练练手,但那毕竟要花点银子,我们可以自己安装一个。我们在上面提到,目前使用最广泛的,就是centos。不论你是自建机房,还是使用类似于阿里云这样的云端环境,大多数都会提供centos的安装。

    你可能会找到多种安装虚拟机的方式。本小节,将使用虚拟双网卡的方式,准备一个纯洁的环境。这一小节,图片很多。

    以阿里云为例,默认第一位就是CentOS,提供了从7.6版本到旧版本的多个镜像。

    3.1 下载

    下面的文章,我们就以CentOS 7稳定版本为基础环境。centos很流行,所以镜像也有很多。国内,我们从上海交大下载,速度应该会快一些。

    http://ftp.sjtu.edu.cn/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1908.iso

    如果交大哪天不维护了。可以从这里找:

    http://centos.mirror.ndchost.com/7/isos/x86_64/CentOS-7-x86_64-Minimal-1908.iso

    为了让大家学到更多的知识,我们使用最小化的系统ISO。最小化的iso不到1GB,而预装了很多软件的dvd有4.3GB的大小。我们就用这个减肥版。

    3.2 安装Linux

    要想快速学习、体验Linux,最便捷的方式,就是使用虚拟机进行安装。目前,最流行的虚拟机,一个是VMware,一个是VirtualBox。在MacOS上还有一个Parallels Desktop。

    其中,VirtualBox免费而且跨平台,能够满足我们的需求。接下来,将一步步引导你进行安装。

    (1) 点击新建,开启安装旅程。

    (2) 填写名称,版本。然后点击继续。

    (3)按照你的机器配置,选择内存

    我的机器是8GB内存的,就分配给虚拟机2GB,这个已经足够用了。

    (4) 创建一个虚拟磁盘

    点击继续后,将弹出一个对话框。我们不用多管,一直点继续,知道对话框消失。这非常的粗暴。

    (5) 接下来,点击设置。

    (6) 切换到Storage选项,选择我们下载的iso

    (7) 点击启动,开始安装。

    使用方向键切换,使得高亮聚焦在Install CentOS 7上。点击确定,开始安装。

    (8) 弹出一个安装界面

    接下来的步骤有点多,如果我们没有特别的介绍,那么直接continue就ok了。

    (9) 接下来,配置磁盘分区

    依然保持默认,并按按钮Done退出。

    (10) 配置用户

    linux上默认的用户名为root。接下来我们设置root用户的密码为123456。由于这是一个弱密码,所以需要点击两次确定退出。

    (11) 等待安装完毕,进行重启

    (12) 安装成功

    3.3 联网

    这个时候,我们安装的虚拟机,还不能联网,无法把自己的意念传达出去。由于我们没有对虚拟机进行任何设置,所以使用的是默认的NAT模式。

    将光标聚焦到命令行窗口,然后输入命令dhclient。等待几秒钟,执行ping baidu.com测试以下网络,可以看到能够正常访问网络了。

    上面黑漆漆的窗口,就是我们现在的Linux界面。有人觉得很丑,就像是在玩dos,但像我这种不可救药的人,却觉得格外的亲切。

    接下来的命令,我们不会再截图,而使用高亮的代码块表示。为了不至于让人晕头转向,请先看下图。

    3.4 外部访问虚拟机

    由于NAT模式的特点,我们的虚拟机能够访问外网,但无法被外部发现。酒香竟怕巷子深。为了解决这个问题,我们需要再添加一块网卡。

    在做这些更改之前,需要首先关闭虚拟机。可以强制关闭机器,也可以在命令行中输入:

    shutdown -h now

    虚拟机关闭后,再次点击设置,切换到网络适配器选项卡。如图,添加一个新的网络适配器,适配器类型为Host-only Adapter。通过这块网卡,我们的宿主机就能够访问它了。

    再次启动虚拟机,执行dhclient命令后,执行ip addr查看主机的ip地址。可以看到,我们现在有两块网卡,两个ip地址。

    记录下192打头的网络地址,我们会使用外部的程序,比如XShell、SecureCRT等,进行连接。比如,我这里的ip地址是:192.168.99.100。不废话,看图。

    小提示:关于虚拟网卡的网段,如果有差异。你可以在全局设置里,改成和我一样的。

    3.5 远程连接

    你可能已经体验到,通过虚拟机自带的命令行界面进行输入,局限性非常大。通过远程连接,可以把终端界面切换到我们熟悉的操作模式,如果能够显示彩色的终端,那再好不过了。下面介绍几个工具,一般的,使用xshell的居多。

    Windows

  • XShell 你可能在公司内,见过你的SRE同事,运指如飞,命令字符如流水一般撒过屏幕。即使非常繁杂,难以记忆的密码,也能瞬间输入。他可能用的就是xshell。
  • SecureCRT 比较老的一款产品,使用也较多。
  • MobaXterm MobaXterm就是一单文件纯绿色软件,下载过来exe包直接运行即可,不需要任何的安装过程。
  • 它们都有免费版和专业版之分。无力购买的话,就找找破解版。但是注意,盗版汉化的ssh客户端,有些别有用心的人会在软件中植入木马,窃取你的密码、证书,这种情况已经发生过很多次。

    MacOS

    对于macos用户来说,简单的很。直接使用iTerm,输入命令行即可。比如使用下面的命令连接我们的机器。

    ssh root@192.168.99.100

    Linux

    唔,你都已经是Linux环境了,还折腾个啥虚拟机呢?直接用吧。

    推荐使用XShell、SecureCRT、iTerm等工具,通过ssh进行远程连接。对于一些命令拷贝、验证来说,要方便快捷的多。

    4. 对Linux命令行有个初步了解

    万事开头难。面对黑漆漆的Linux窗口,要勇敢的走出第一步。不要怕输错了什么,系统健壮的很。命令行通常会拥有比图形界面更高的效率,更加重要的是它可以做自动化之类的小工具,这使得生产力产生质的飞跃。

    现在,你已经安装好了centos,并远程连接上了它。我们拥有了它,但并不能了解它的脾气。接下来,让我们进入Linux命令行的世界。和我签订契约吧,少年。

    本小节会使用非常详细的演进方式,来看一下一个命令,是怎样生成和执行的。

    4.1、简单尝试

    好啦,我们现在就在终端里了。什么叫做终端呢?你在很多黑客电影里,看到的黑漆漆的界面就是,它提供了一个可以输入字符串的交互式界面,至于那些闪光的、扫描机一样的东西,是不存在的。

    尝试输入些什么吧。 比如:jdsjf。

    [root@localhost ~]# jdsjf-bash: jdsjf: command not found

    我们再次把这张图贴一下。怎么回事?命令的输出翻译成中文,就是“找不到命令”的意思。什么叫命令?就是我们上面随便输入的字符串jdsjf。

    然后,我们看下提示中其他一些有用的东西。

    (0)

    相关推荐