预备作业:课程基础

20182316胡泊 2019-2020-1 《数据结构与面向对象程序设计》第0周学习总结

1.预备作业

你对专业的认识和期望是什么?

  • 百度百科中对于信息管理与信息系统专业的概述是这样的“集信息技术与管理科学于一体、实践性和创新性很强的交叉学科”。
    • 经过我自己一年来的学习,我对这个专业也有了一些自己的理解。
      首先是我们专业不同于计算机专业,比他们多了文科的部分,也多了一些人文精神。
    • 又不同于文科专业,因为我们还是要靠技术吃饭的,无论是考研还是工作,这都是显露在外面的、最重要的能力。
    • 而当职位越来越高,成为一个真正的管理者时,技术已经不是限制的因素了,管理能力与相关理论知识就成为了主要限制因素。
  • 我的期望就是能够在大学期间充实自己,无论是能力还是内心,学到一些我认为对自己以后工作或生活有用的东西,使我的专业能够帮助我更好的发展。

    上学期C语言总代码量大概多少行,本学期实践10000行代码,你觉得这个负担大吗?

  • 大概6000~7000行左右,对于Java的10000行没有什么概念,但我觉得问题应该不大。

    你的C语言学习怎么样?如果学的还行,你认为从C语言学习中比较好的经验是什么?如果学的不好,那么你学的不好的原因是什么?

  • c语言学的不太好,有点马马虎虎的。我觉得原因主要有三方面。
  • 首先,是我自身上机较少,做题库有时会偷懒,不动脑筋,比其他优秀的同学练习量少了很多,做的不够熟练。
  • 其次,就是课时量不够,老师不得已将课时删减并压缩了一部分,由此导致上课听的不是很懂。
  • 最后,就是我的个人定力不足,经常受到手机、电脑等的诱惑,在其中浪费了大量学习时间,这些我都会做出改变,也恳请老师督促。
  • 总结 : 练习课堂诱惑改变

    2.Linux自学笔记

==学习内容总结==

基本概念

  • shell(壳):中间程序,terminal:终端模拟器,console:控制台。

    命令行操作体验

    快捷键:

  • tab : 补全命令(这个暂时还看不懂)
  • 连续两次tab:显示全部候选结果
  • Ctrl+c
    :强行终止当前程序且不退出终端。我的猜测就是在学c语言时,我们是在Windows系统下操作,当出现溢出等情况时,Windows系统会自动给出警告并结束进程,而Linux系统由于*度高,需要自己动手结束。
  • 上键 :恢复之前输入过的命令(Ctrl+z)
  • 通配符 : (*/?)
    • 用来对字符串进行模糊匹配(比如文件名、参数名),可以代替一个或多个字符,确实很好用。
    $ touch asd.txt fgh.txt
    $ ls *.txt
    • 一次性创建多个文件
    $ touch hp{1..10}.txt
    - **man命令(manual pages)** : 
    获取帮助(像是新手手册一样的东西)
    • 包括:NAME , SYNOPSIS(摘要) ,DESCRIPTION(说明) , EXAMPLES(示例) , SEE ALSO(参见)
    • ==在man中使用搜索==
      n键切换到下一个关键字所在处,shift+n为上一个关键字所在处。使用Space 翻页,Enter 向下滚动一行,或者使用 k , j 进行向前向后滚动一行。按下h键为显示使用帮助,按下q 退出。

      interesting thing :

  • 输出图形字符——==banner==
$ sudo apt-get update
$ sudo apt-get install sysvbanner
$ banner hpnbbb

用户

sudoSuperuser do

允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,面向每个命令。

chmod

改变文件的读写许可设置

  • su, su- 与 sudo :
    • su 切换用户,需密码
    • sudo 特权级别运行cmd,需密码且属于sudo组
    • su - 切换用户且环境变量跟着切换
$ sudo adduser lilei
$ls /home (默认创建)
$su -l lilei
$who am i
$pwd
  • 查看用户组
  • 方法一:groups命令
$ groups shiyanglou
shiyanlou:shiyanlou

冒号前为用户名,冒号后为所属用户组

  • 方法二:查看/etc/group文件
$cat /etc/group |sort
  • 将其他用户加入sudo用户组
$su -l  lilei
$sudo ls
$su shiyanlou
$groups lilei
$sudo usermod -G sudo lilei
$groups lilei

linux文件权限

文件权限

  • r、w、x :预备作业:课程基础read 、 write、 execute(执行)
$ls -dl <目录名>

查看某一个目录的完整属性,而不显示里面的属性

  • 修改文件权限

    • 方法:二进制数字表示

      -预备作业:课程基础 三组权限:拥有者、所属用户、其他用户,对应一个rwx,也就是一个 7 (111)

      $ echo "echo\"hello shiyanlou\"">iphone6
      $ chmod 600 iphone6

      Linux目录结构及文件基本操作

  • linux与windows目录结构的区别:windows是以盘符为主,而linux是以目录为主来管理文件的。
    • 关于这一点,我自己的感受就是,当在Windows中打开我的电脑后,首先出现的是盘符,而我们通过鼠标就可以打开想要的文件了,而在linux操作时,往往需要通过 " / "来实现文件的打开、编辑、删除等操作,因此更为方便一些。
  • FHS标准(英文:Filesystem Hierarchy Standard 中文:文件系统层次结构标准),FHS 定义了两层规范
    • 第一层是, ==/== 下面的各个目录应该要放什么文件数据,例如 /etc 应该放置设置文件,/bin 与 /sbin 则应该放置可执行文件等等
    • 第二层则是针对 ==/usr== 及 ==/var== 这两个目录的子目录来定义。例如 /var/log 放置系统日志文件,/usr/share 放置共享数据等等。
    • link FHS_2.3 标准文档
      预备作业:课程基础
  • 路径

    • cd :切换目录
    • cd. :当前目录
    • cd.. :上一级目录
    • cd~ 或cd /home/<用户名>:当前用户的home目录
    • pwd :获取当前路径(绝对路径)
  • 文件的操作
    • 创建
    $ cd/home/shiyanlou
    $ touch test
    $ mkdir mydir (创建一个空目录)
    $ mkdir -p father/son/grandson(创建多级目录)
    • 复制文件 cp
    $ cp test father/son/grandson
    • 复制目录
    $ cd /home/shiyanlou
    $ mkdir family
    $ cp -r father family
    复制目录需要加上-r ,表示递归复制。
    • 删除文件 rm——(remove files or directories)
    $ rm test
    当没有权限时用 ==-f== 强制删除
    $ rm -f test
    • 删除目录
    $ rm -r family
    • 移动文件: mv +源目录文件 + 目的目录
    $ mkdir Documents
    $ touch file1
    $ mv file1 Documents
    • 重命名文件:mv +旧的文件名+ 新的文件名
     $ mv file1 myfile
    • ==批量重命名 rename==
    • 查看文件 cat(正序),tac(倒序),nl
    $ cd /home/shiyanlou
    $ cp /etc/passwd passwd
    $ cat -n passwd(-n 显示行号)
    nl:添加行号并打印
    -b : 指定添加行号的方式,主要有两种: -b a:表示无论是否为空行,同样列出行号("cat -n"就是这种方式) -b t:只列出非空行的编号并列出(默认为这种方式) -n : 设置行号的样式,主要有三种: -n ln:在行号字段最左端显示 -n rn:在行号字段最右边显示,且不加 0 -n rz:在行号字段最右边显示,且加 0 -w : 行号字段占用的位数(默认为 6 位)
    • 查看文件类型
    $ file /bin/ls

    预备作业:课程基础

    • ELF:可执行与可链接格式。
    • executable:可执行的。

      使用more和less命令分页查看文件

    $ more passwd

    enter向下一行,space向下一屏,q退出。

目的:减少鼠标使用,简化操作。

环境变量

变量

$ declare tmp
$ tmp=shiyanlou
$ echo $tmp
  • 与C语言的不同之处:c中变量必须先定义后使用,而linux可以不用 declare 预声明一个变量,直接即用即创建。
  • 并不是任何形式的变量名都是可用的,变量名只能是英文字母、数字或者下划线,且不能以数字作为开头。

变量类型

  • 当前 Shell 进程私有用户自定义变量,只在当前 Shell 中有效。
  • Shell 本身内建的变量。
  • 从自定义变量导出的环境变量。

按照时间分类

  • 永久的:需要修改配置文件,变量永久生效
  • 临时的:使用 export 命令行声明即可,变量在关闭 shell 时失效。

永久生效

  • ==/etc/bashrc==:存放shell变量
  • ==/etc/profile==:存放环境变量

如果想要添加一个永久生效的环境变量,只需要打开 /etc/profile,在最后加上你想添加的环境变量。

创建脚本文件

$ cd /home/shiyanlou
$ touch hello_shell.sh
$ gedit hello_shell.sh (gedit :文本编辑器)

加入

#!/bin/bash

for ((i=0; i<10; i++));do
    echo "hello shell"
done

exit 0

为文件添加可执行权限:

$ chmod 755 hello_shell.sh

7(111) / 5(101)

执行脚本:

$ cd /home/shiyanlou
$ ./hello_shell.sh

./hello_shell.sh 这句的命令是什么?

创建C语言程序

$ cd /home/shiyanlou
$ gedit hello_world.c

在编辑栏中输入

#include <stdio.h>

int main(void)
{
    printf("hello world!\n");
    return 0;
}

保存后用gcc生成可执行文件

$ gcc -o hello_world hello_world.c

我认为是用hello_world代替了hello_world.c

也相当于C语言中的编译过程

验证:

  • 我在输入内容时少输了一个 ==;==
    预备作业:课程基础
  • 于是,在执行gcc命令时出现了
    预备作业:课程基础

创建目录,并将文件移入其中

$ cd /home/shiyanlou
$ mkdir mybin
$ mv hello_shell.sh hello_world mybin/

在mybin目录中分别运行程序

$ cd mybin
$ ./hello_shell.sh
$ ./hello_world

删除修改已有变量

  • 修改

==${变量名#匹配字串}== 从头向后开始匹配,删除符合匹配字串的最短数据

==${变量名##匹配字串}== 从头向后开始匹配,删除符合匹配字串的最长数据

==${变量名%匹配字串}== 从尾向前开始匹配,删除符合匹配字串的最短数据

==${变量名%%匹配字串}== 从尾向前开始匹配,删除符合匹配字串的最长数据

==${变量名/旧的字串/新的字串}== 将符合旧字串的第一个字串替换为新的字串

==${变量名//旧的字串/新的字串}== 将符合旧字串的全部字串替换为新的字串

  • 删除变量 : unset命令
    ### 如何让环境变量立即生效
  • source
$ cd /home/shiyanlou
$ source .zshrc

source的别名就是 ==.== ,因此上面的命令可替换为:
$ . ./.zshrc
注意第一个点后面有一个空格,而且后面的文件必须指定完整的绝对或相对路径名,source 则不需要。

搜索文件——whereis/which/find/locate

  • whereis简单快速
$ whereis who
$ whereis find

快:没有从硬盘中依次查找,而是直接从数据库中查询

  • locate 快而全
$ sudo apt-get update
$ sudo apt-get install locate
$ locate /etc/sh

不只是在 /bin 目录下查找,还会自动递归子目录进行查找。

$ locate /usr/share/\*.jpg

查找/user/share/下所有的jpg文件

注意要添加 号前面的反斜杠转义,否则会无法找到*。

  • which 小而精
    通常使用 which 来确定是否安装了某个指定的软件

  • find 精而细(强大!)
    例:
$ sudo find /etc/ -name interfaces

find后第一个参数为搜索范围

find [path] [option] [action]
#### 与时间相关的命令参数

参数 说明
-atime 最后访问时间
-ctime 最后修改文件内容的时间
-mtime 最后修改文件属性的时间

以-mtime为例

  • mtime n:n 为数字,表示为在 n 天之前的“一天之内”修改过的文件
  • mtime +n:列出在 n 天之前(不包含 n 天本身)被修改过的文件
  • mtime -n:列出在 n 天之内(包含 n 天本身)被修改过的文件
  • newer file:file 为一个已存在的文件,列出比 file 还要新的文件名

    文件的打包与解压缩

    压缩包形式

    ==.zip,.7z
    .rar .gz,.xz,.bz2,.tar,.tar.gz,.tar.xz,.tar.bz2==

    zip

    使用 zip 打包文件夹:
$ cd /home/shiyanlou
$ zip -r -q -o shiyanlou.zip /home/shiyanlou/Desktop
$ du -h shiyanlou.zip
$ file shiyanlou.zip

==-r== 参数表示递归打包包含子目录的全部内容,==-q== 参数表示为安静模式,即不向屏幕输出信息,==-o==,表示输出文件,需在其后紧跟打包输出文件名。 ==du== 命令查看打包后文件的大小

$ zip -r -9 -q -o shiyanlou_9.zip /home/shiyanlou/Desktop -x ~/*.zip
$ zip -r -1 -q -o shiyanlou_1.zip /home/shiyanlou/Desktop -x ~/*.zip

1~9: 1表示快但体积大,9表示体积小但慢。

必须使用绝对路径。

tar

  • 创建tar包
$ cd /home/shiyanlou
$ tar -cf shiyanlou.tar /home/shiyanlou/Desktop

-c 表示创建一个 tar 包文件,-f 用于指定创建的文件名,注意文件名必须紧跟在 -f 参数之后

  • 解包
$ mkdir tardir
$ tar -xf shiyanlou.tar -C tardir

解包一个文件(-x 参数)到指定路径的已存在目录(-C 参数)

总结

  • zip:
    • 打包 :zip something.zip something (目录请加 -r 参数)
    • 解包:unzip something.zip
    • 指定路径:-d 参数
  • tar:
    • 打包:tar -cf something.tar something
    • 解包:tar -xf something.tar
    • 指定路径:-C 参数

磁盘管理

查看目录容量

$ du -h -d 0 ~
  • du -h #同--human-readable 以K,M,G为单位,提高信息的可读性。
  • du -a #同--all 显示目录中所有文件的大小。
  • du -s #同--summarize 仅显示总计,只列出最后加总的值。
  • -d +number 表示查看目录的深度。

vim快捷键的使用

预备作业:课程基础

虚拟机的安装

我暑假期间按照知乎上一篇的教程,一步步的安装,过程还算顺利,没有什么大的问题。

https://zhuanlan.zhihu.com/p/42001070

学习过程中的问题

  • 问题1:
    linux中“ls” 、“ls -a”、“ls -al”的区别
  • 问题1解决方案:在网上查询:
    • ls 显示当前下面的文件及文件夹
    • ls -a 显示当前目录下的所有文件及文件夹包括隐藏的.和..等
    • ls -al 显示当前目录下的所有文件及文件夹包括隐藏的.和..等并显示详细信息,详细信息包括大小,属组,创建时间
  • 问题2:在虚拟机linux的环境中Ctrl+ c/v不能用
  • 问题2解决方案: 打开虚拟机设置,点击进入选项点击客户及隔离,然后启用复制粘贴及文件拖拽。
  • 问题3: $ ./hello_shell.sh 为什么可以执行 命令是什么
  • 问题3解决方案: source命令是bash shell的内置命令。而点命令(即“.”命令)则是source的另一名称。这两个命令都以一个脚本为参数,该脚本将作为当前shell的环境执行,即不会启动一个新的子进程。通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。
  • 问题4:英语的不足
  • 问题4解决方案:虽然我的英语基础不算太差,但是让我读全英的文章和许多的专有名词还是很吃力,甚至想要自闭,但是也只能见一个查一个,然后记一个了。
  • 问题5:学习过程中有很多很多缩写,比较难以记忆,尤其是最近在学计算机三级,缩写以及专有名词更多了.
  • 问题5解决方案:将其展开后,查询意思来记忆,就轻松了不少。
上一篇:20189320《网络攻防》第一周作业


下一篇:Python3简明教程(九)—— 文件处理