Linux补课

已经将开发环境转Linux了(当然用的是ubuntu,图像界面还是舒服一点,支持也多),不上QQ和微信的话用的还是挺舒服的,但是无奈基础欠账太多,这里赶快补一下

Linux和Unix的关系

emmm算是老生常谈了,但是还是记录一下吧,建立一些感性认识。

Unix是先开发的,最一开始的版本是使用汇编语言,后来用C语言重写了。之后Bell实验室允许大学使用该操作系统教学。Linus对Unix的底层代码进行了修改,原先命名为Linus's Unix并上传,后来被网站管理员改名为Linux,之后就火了

Unix于1969年由贝尔实验室开发出来,使用至今已变更了很多个版本。目前主流的Unix系统有三种,分别是AIX、HP-UX、Solaris,这些Unix系统互不兼容。

Linux于1991年由芬兰大学生Linus开发出来,是一个类Unix系统,但是其代码不源自任何Unix版本,完全不是Unix的一个分支,而是一个开源版的模仿。

现在Linux主要使用在PC机和嵌入式,或者一些小型企业的服务器;而Unix垄断着大型企业的关键性应用领域。

来源:https://www.zhihu.com/question/24217234

Unix现在还活得好好的,只不过在互联网上的名气不如Linux大,毕竟Linux的面向人群还是大一些的

GNU

理查德·马修·斯托曼

他发起自由软件运动,倡导软件用户能够对软件自由进行使用、学习、共享和修改,确保了这些软件被称作自由软件。斯托曼发起了GNU项目,并成立了自由软件基金会。他开发了GCC(gnu compiler collection)、GDB、GNU Emacs,同时编写了GNU通用公共许可协议

他迄今为止一直是GNU项目的组织者,作为主要开发者的他开发了一些被广泛使用的GNU软件,其中包括GCCGDBGNU Emacs。在1985年10月他创立了自由软件基金会。

斯托曼开创了Copyleft的概念,它使用著作权法的原则来保护使用、修改和分发自由软件的权利,并且是描述这些术语的自由软件许可证的主要作者。最为人所称道的是GPL(最广泛使用的自由软件协议)。

1989年,他和别人一起创立了自由程序设计联盟。自20世纪90年代中期以来,斯托曼花他大部分时间组织参与宣传自由软件,反对软件专利数字版权管理的以及他认为剥夺用户自由的其他法律和技术系统运动。这包括最终用户许可协议保密协议产品激活、加密狗、软件复制保护、专有格式、二进制软件包(没有源代码的可执行文件)。

1991年,他与Liuns商谈,让Linux加入了GNU计划,后来更名为GNU/Linux,当然人们还是叫Linux

Linux的系统特点

  • 开源

  • 多用户、多任务:支持多用户同时登录,支持同时进行多个任务

    Windows属于单用户、多任务(也可以通过一些方法实现多用户,具体搜索即可)

Linux分支

ubuntu\debian\centos\rethat\suse\deepin\arch等

分支图:

redhat的服务是收费的

Ubuntu常用快捷键

  1. Super 键:打开活动搜索界面,会显示一个搜索框以及所有打开的应用程序界面

  2. Ctrl+Alt+T:打开 Ubuntu 终端窗口

  3. Super+A:显示应用程序菜单

  4. Super+Tab 或 Alt+Tab:在运行中的应用程序间切换

  5. Super+箭头:移动窗口位置

    Super+左箭头:贴合左面

    Super+右箭头:贴合右面

    Super+上箭头:最大化

    Super+下箭头:恢复正常大小

  6. Super+M:切换到通知栏

  7. Alt+F2:运行控制台。是的,Linux除了终端还有控制台

  8. Alt+F4/Ctrl+Q:关闭应用程序窗口

  9. Ctrl+Alt+箭头:切换工作区

路径符号

Linux中的分隔符是/,不是Windows的\

~:家(home)目录

. :一个点表示当前目录

.. :两个点表示上一级目录

/ :根目录

指令

  1. ls 路径:显示该目录下所有的文件

    参数:

    1. ls -l:以详细列表的形式展示

    2. ls -lh:以详细列表的形式展示的同时以更具有可读性的方式显示

    3. ls -a:显示所有的文件及文件夹(主要是显示隐藏文件、文件夹)

      LInux的隐藏文件一般都是.开头

    ls列出的结果中,蓝色表示文件夹,黑色表示文件,绿色表示其权限为拥有所有权限

  2. pwd:打印当前工作目录

  3. mkdir 文件夹名称:创建文件夹

    -p : mkdir -p 路径: 一次性创建多层不存在的目录,就是路径中所有不存在的文件夹都会被创建

    mkdir 路径1 路径2:一次性创建多个目录

  4. touch 路径:创建文件

  5. cp 要复制的文件的路径 目的路径(可以同时改名):复制

    -r: 递归复制,也就是将文件夹里面的内容也进行复制

  6. mv 需要移动的文件目录 要保存的文件目录:移动,也就是剪切的意思

    mv同时也能执行重命名

  7. rm 文件目录:删除

    -f:force,不进行再次确认

    -r:递归删除,用于删除文件夹

    -rf:两个一起用

    删除指令可以使用正则表达式:例如 rm -r linux*

  8. 输出重定向

    将命令结果保存到文件中而不是显示在终端中

    > 覆盖输出,覆盖掉原有文件

    >> 追加输出,在文件末尾添加

  9. cat:

    1. cat 文件路径:直接打开一个文件而不进入编辑,和vim等编辑器效果不一样(打开后依然在终端中,能看到之前的命令)

    2. cat 待合并文件路径1 待合并文件路径2等等 >新地址:合并文件

      不同类型的文件也可以合并

  10. df:查看磁盘空间

    df -h:以较高可读性的形式显示

  11. free:查看内存使用情况

    free -h同理

    swap用于临时内存,用磁盘空间充当内存

  12. head:查看一个文件的前n行(默认显示前10行)

    head -n 文件路径

  13. tail:查看一个文件的后n行(默认10行)

    也可以通过tail查看一个文件的动态变化,语法为tail -f 文件地址,但是这个命令主要用来查看系统日志,变化内容不能是用户手动添加的(用户使用vim修改文件的实质是删除文件并创建同名新文件,这使得tail无法跟踪),要测试可以利用输出重定向.退出的话按下q键即可

  14. less:查看文件,以较少的内容进行输出,只显示一屏,按下辅助功能键查看更多

    less 文件地址

    :n 从第n行进行显示

    空格键:一页一页翻

    上下:一行一行翻

    :q 退出

  15. wc:统计文件内容信息

    wc 文件路径

    -l:行数

    -w:单词数,注意,这里的单词是依照空格来区分的

    -c:字节数

    不加选项的话,返回:行数、单词数、字节数、名称

    加选项就只返回对应的内容和文件名称

  16. date指令:操作时间和日期(读取、设置),shell脚本中用的比较多

    但是设置比较少用现在,都是自动获取

    CST:当地时间

    不加参数的话输出是这个样子:2019年 10月 06日 星期日 12:07:26 HKT

    带参数的输出:

    1. date +%F,也可以用 date "+%Y-%m-%d":输出年月日:2019-10-06

      注意这里Y是大写,m和d是小写,大小写表示的含义是不一样的

      Y:整位的四位数年

    2. date +%F,输出也是2019-10-06,等价于date "+%Y-%m-%d"

    3. date "+%F %T",输出是2019-10-06 15:04:35,这里的引号表示让其中的内容成为一个整体,和date "+%Y-%m-%d %H:%M:%S"等价

    4. date -d "-1 day" "+%F %T":表示输出一天前的时间(可以用于编写shell脚本自动实现备份数据库以及删除一个时间节点之前的,例如一个月或者一个礼拜之前的数据库备份)

      date -d "+1 day" "+%F %T":一天后

      date -d "-1 month" "+%F %T":一周前

      date -d "-1 year" "+%F %T":一年前

      加s和不加都可以

    完整参考内容见下:

    来源:https://man.linuxde.net/date

    -d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号;
    -s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号;
    -u:显示GMT;
    --help:在线帮助;
    --version:显示版本信息。
    %H 小时,24小时制(00~23)
    %I 小时,12小时制(01~12)
    %k 小时,24小时制(0~23)
    %l 小时,12小时制(1~12)
    %M 分钟(00~59)
    %p 显示出AM或PM
    %r 显示时间,12小时制(hh:mm:ss %p)
    %s 从1970年1月1日00:00:00到目前经历的秒数
    %S 显示秒(00~59)
    %T 显示时间,24小时制(hh:mm:ss)
    %X 显示时间的格式(%H:%M:%S)
    %Z 显示时区,日期域(CST)
    %a 星期的简称(Sun~Sat)
    %A 星期的全称(Sunday~Saturday)
    %h,%b 月的简称(Jan~Dec)
    %B 月的全称(January~December)
    %c 日期和时间(Tue Nov 20 14:12:58 2012)
    %d 一个月的第几天(01~31)
    %x,%D 日期(mm/dd/yy)
    %j 一年的第几天(001~366)
    %m 月份(01~12)
    %w 一个星期的第几天(0代表星期天)
    %W 一年的第几个星期(00~53,星期一为第一天)
    %y 年的最后两个数字(1999则是99)
    date +%Y%m%d                   //显示前天年月日
    date -d "+1 day" +%Y%m%d //显示前一天的日期
    date -d "-1 day" +%Y%m%d //显示后一天的日期
    date -d "-1 month" +%Y%m%d //显示上一月的日期
    date -d "+1 month" +%Y%m%d //显示下一月的日期
    date -d "-1 year" +%Y%m%d //显示前一年的日期
    date -d "+1 year" +%Y%m%d //显示下一年的日期
    date -s                        //设置当前时间,只有root权限才能设置,其他只能查看
    date -s 20120523 //设置成20120523,这样会把具体时间设置成空00:00:00
    date -s 01:01:01 //设置具体时间,不会对日期做更改
    date -s "01:01:01 2012-05-23" //这样可以设置全部时间
    date -s "01:01:01 20120523" //这样可以设置全部时间
    date -s "2012-05-23 01:01:01" //这样可以设置全部时间
    date -s "20120523 01:01:01" //这样可以设置全部时间
  17. cal:操作日历

    直接输入cal:显示当月日历,等价于 cal -1

    cal -3:显示上一个月+本月+下一个月的日历

    cal -y 2019:显示2019年日历

  18. clear:清空终端中的命令和结果,也可以用快捷键 ctrl+L

    不是严格意义上的清空,只是下拉一页,用来的都在上面

  19. 管道:|

    管道不能单独使用,必须配合前面讲的一些指令配合使用,主要起辅助作用

    管道一般可以用于:

    1. 过滤

      例如:

      用管道查询出当前目录下包含y字母的文档名称:

      ls|grep y

      grep:global regular expression print,全局正则表达式打印,用于检索目标行命令

      以管道作为分界线,前面命令的输出就是后面命令的输入

    2. 特殊

      例如:

      通过管道实现less的等价效果(只是举例了,还是用less)

      cat 路径|less

    3. 拓展处理

      统计某目录下文档的总个数ls 目录地址 |wc -w

  20. hostname:操作主机名:读取和设置(设置用的比较少,因为这里改的是临时的,一重启就没有了)

    语法:

    hostname:输出完整的主机名

    hostname -f:输出当前主机名中的FQDN(全限定域名)

  21. id:查看一个用户的基本信息(用户id、用户组id、附加组id)

    如果不指定用户,则默认当前用户

    id 用户名:显示指定用户的基本信息,例如 id root

    验证用户信息:通过文件/etc/passwd

    验证用户组信息:/etc/group

  22. whoami:返回当前用户名

    一般用于shell脚本,获取用于当前操作的用户名,方便日志的记录

  23. ps -ef指令

    用于查看当前机器的进程信息

    -e:列出全部进程

    -f:显示全部的列,即显示那些默认不显示的内容

    显示的内容:

    1. UID:用户名

    2. PID:process ID,进程名

    3. PPID:父级进程名

      如果一个程序的父级进程找不到,该程序的进程称为僵尸进程,就是表示没有什么用了

    4. C:表示CPU占有率(百分比)

    5. STIME:start time:启动时间

    6. TTY:终端设备

      如果一个进程有终端设备,就表示这个进程是由这个终端发起的,?表示不是由终端发起的

    7. TIME:进程的执行时间

    8. CMD:进程对应的路径

    案例:搜索特定进程

    ps -ef|grep gnome-shell

    ps-ef搜索出来的结果,无论原来有没有,一定会至少有一个,也就是我们搜索这个行为的进程,即使我们乱搜也会有的

  24. top:查看机器进程占用的资源(实时更新的哦)

    q键或者Ctrl+c退出

    解释一下top的一些参数意思:

    • top:当前时间
    • up:开机时间
    • load average:在某个时间点范围内的负载情况,第一个是5分钟,第二个是10分钟,第三个是15分钟
    • zombie:僵尸进程数量

    表头的含义:

    • PR(priority):权重(网站用的那个PR是page rank),例如在搜索引擎对网页也有这个,范围是1-10,级别越高说明优先级越高,越受欢迎

    • NI:nice CPU time,即用户进程空间改变过优先级的进程占用CPU百分比

    • VIRT:虚拟内存,虚拟内存就是进程申请的内存

    • RES:常驻内存,常驻内存是进程实际使用的内存

    • SHR:共享内存,有的进程不能独立运行,而是依赖于其他进程,共享内存值的就是常驻内存中对其他进程的调用开销

      计算一个进程实际使用的`1内存=常驻内存-共享内存

    • S:进程的状态(sleeping,S是睡眠,R是运行)

    • MEM:内存的占用百分百

    • COMMAND:进程的名称或者路径

    排序:

    M:按内存占用排序

    P:按CPU使用排序

    1:将CPU的不同内核的状态展开,分别显示

  25. du -sh 目录地址:查看目录的真实大小

    -s:只显示汇总的大小(summary)

    -h:使用便于阅读的形式显示

  26. find 路径范围 选项 选项的值:用于查找文件

    -name:按名字来搜,支持模糊搜索和正则表达式(例如:*.txt,表示所有txt文件)

    -type:按文档的类型搜,注意,这里指的不是文件名后缀,而是“f":文件,"d":文件夹

  27. service:控制软件服务的启动/停止/重启

    service 服务名 start/restart/stop

    例如,启动apache:service apache2 start

    可以使用ps查询apache服务是否启动:

    ps -ef|grep apache2

    同时访问的一个用户就需要一个进程来管理,所以启动apache的时候会同时启动一些子进程来应对并发

  28. kill:杀死进程

    语法:kill 进程的PID

  29. killall:直接通过进程名称杀死进程,不需要先查询出PID了

    语法: killall 进程名称

  30. ifconfig:操作网卡,全称是interface configuring

    显示处理的结果举个例子:

    enp3s0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500

    ether 54:ee:75:cf:f1:f8 txqueuelen 1000 (以太网)

    RX packets 0 bytes 0 (0.0 B)

    RX errors 0 dropped 0 overruns 0 frame 0

    TX packets 0 bytes 0 (0.0 B)

    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

    lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536

    inet 127.0.0.1 netmask 255.0.0.0

    inet6 ::1 prefixlen 128 scopeid 0x10

    loop txqueuelen 1000 (本地环回)

    RX packets 302613 bytes 122591057 (122.5 MB)

    RX errors 0 dropped 0 overruns 0 frame 0

    TX packets 302613 bytes 122591057 (122.5 MB)

    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

    wlp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

    inet 172.16.187.23 netmask 255.255.240.0 broadcast 172.16.191.255

    inet6 fe80::b8b9:217c:9d49:ef9e prefixlen 64 scopeid 0x20

    ether 7c:67:a2:4e

    Linux知识补课的更多相关文章

    1. Linux知识:/root/.bashrc与/etc/profile的异同

      Linux知识:/root/.bashrc与/etc/profile的异同 要搞清bashrc与profile的区别,首先要弄明白什么是交互式shell和非交互式shell,什么是login shel ...

    2. J2EE程序员应该要掌握的linux知识

      J2EE程序员应该要掌握的linux知识 大型J2EE应用都在建构在linux环境下的.开发环境下我们可以通过samba映射成本地的网络驱动器,直接在windows环境下进行编程调试.但是最后的发布还 ...

    3. My way on Linux - 知识梳理计划

      知识梳理计划图 近期计划把自己学习的工作中用到的Linux知识梳理下,敬请期待.

    4. 欢迎关注我的微信公众账号:Linux技巧(微信号:irefactoring),一起学习Linux知识~~~

      最近很少写博客了,一方面是近期工作比较繁忙,第二是把精力都放在GitHub和读源码去了. 申请了一个微信公众账号:Linux技巧 微信ID:irefactoring(意思是爱重构) ========= ...

    5. IM开发基础知识补课:正确理解前置HTTP SSO单点登陆接口的原理

      1.前言 一个安全的信息系统,合法身份检查是必须环节.尤其IM这种以“人”为中心的社交体系,身份认证更是必不可少. 一些PC时代小型IM系统中,身份认证可能直接做到长连接中(也就是整个IM系统都是以长 ...

    6. IM开发基础知识补课(五):通俗易懂,正确理解并用好MQ消息队列

      1.引言 消息是互联网信息的一种表现形式,是人利用计算机进行信息传递的有效载体,比如即时通讯网坛友最熟悉的即时通讯消息就是其具体的表现形式之一. 消息从发送者到接收者的典型传递方式有两种: 1)一种我 ...

    7. IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token

      本文引用了简书作者“骑小猪看流星”技术文章“Cookie.Session.Token那点事儿”的部分内容,感谢原作者. 1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动 ...

    8. Android系统--输入系统(三)必备Linux知识_双向通信(scoketpair)

      Android系统--输入系统(三)必备Linux知识_双向通信(scoketpair) 引入 1. 进程和APP通信 创建进程 读取.分发 - 进程发送输入事件给APP 进程读取APP回应的事件 输 ...

    9. Android系统--输入系统(二)必备Linux知识_实现inotify_epoll.c

      Android系统--输入系统(二)必备Linux知识_实现inotify_epoll.c 课后作业 1. 编写 inotify_epoll.c, 用它来监测tmp/目录: 有文件被创建/删除, 有文 ...

    随机推荐

    1. JAVA使用easyexcel操作Excel

      版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.                                               本 ...

    2. 剑指offer32----之字形打印一颗二叉树

      题目 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 思路 在这里我们如果单纯的使用队列去弄的话,会很 ...

    3. LeetCode 98. 验证二叉搜索树(Validate Binary Search Tree)

      题目描述 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右子树自身必须也 ...

    4. redis high available solution/ redis 高可用方案

      http://developers.linecorp.com/blog/?p=1420 http://engineering.docusign.com/articles/redis-sentinel- ...

    5. jenkins 内置变量

      Jenkins 有一些内置的变量可以使用.主要是: 邮件的配置变量,可以在发送邮件的时候使用. 环境变量 1. 邮件的配置变量 ${GIT_BRANCH} - build 的 Git 分支 ${FIL ...

    6. celery 启动命令

      celery 任务启动命令  celery worker -A  _tasks.tasks -l info -E tasks 就是celery 任务的文件 celery beat启动命令  celer ...

    7. [flask]jinjia2处理表单-实现搜索界面

      思路: 通过flask-wtf创建forms表单类 在app.py中创建search_name()视图函数,实例化form表单类,将通过render_template将form传给html模板 创建h ...

    8. 如何在Ubuntu / CentOS 6.x上安装Bugzilla 4.4

      这里,我们将展示如何在一台Ubuntu 14.04或CentOS 6.5/7上安装Bugzilla.Bugzilla是一款基于web,用来记录跟踪缺陷数据库的bug跟踪软件,它同时是一款免费及开源软件 ...

    9. 如何实现在Eclipse导入Apache Commons

      Apache Commons https://en.wikipedia.org/wiki/Apache_Commons 右键项目->Properties->Java Build Path- ...

    10. delphi 导出excel

      Var FExcel:OleVariant; //excel应用程序 FWorkBook :OleVariant; //工作表 Temsheet:OleVariant; //工作薄 FPicture: ...