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
用户
sudo:Superuser 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操作时,往往需要通过 " / "来实现文件的打开、编辑、删除等操作,因此更为方便一些。
- 关于这一点,我自己的感受就是,当在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
- 复制目录
复制目录需要加上-r ,表示递归复制。$ cd /home/shiyanlou $ mkdir family $ cp -r father family
- 删除文件 rm——(remove files or directories)
当没有权限时用 ==-f== 强制删除$ rm test
$ rm -f test
- 删除目录
$ rm -r family
- 移动文件: mv +源目录文件 + 目的目录
$ mkdir Documents $ touch file1 $ mv file1 Documents
- 重命名文件:mv +旧的文件名+ 新的文件名
$ mv file1 myfile
- ==批量重命名 rename==
- 查看文件 cat(正序),tac(倒序),nl
nl:添加行号并打印$ cd /home/shiyanlou $ cp /etc/passwd passwd $ cat -n passwd(-n 显示行号)
-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解决方案:将其展开后,查询意思来记忆,就轻松了不少。