ubuntu 入门篇之初识ubuntu、Linux
ubuntu 入门篇之初识ubuntu、Linux
我入门Linux用到的第一个发行版也是ubuntu,从虚拟机开始,由于不满于虚拟机的性能,于是开始了双系统之旅,在此期间,尝试过许多发行版。在此期间也算学习到了许多关于linux的一些知识,特此记录,并为初次接触ubuntu的朋友们提供借鉴。
为什么要用Linux?这个问题不好回答。以下是我个人的一些看法:
- Linux开源,开源意味着自由,开源意味着在关键时候不会被国外卡脖子,例如航空航天,军事等机密领域,需要绝对的可控权。当然这与我们普通用户无关,但当真的到了国内普通用户都无法使用windows的时候,Linux是最佳替代品。
- Linux相对于windows更稳定。这一点看Linux在服务器领域的占有率即可体现,服务器需要保证长久运行不宕机,Linux似乎就像为此而生。对于PC用户,稳定当然也重要,在Linux中就不知道什么是蓝屏,什么是程序未响应。
- windows的更新策略也是让我厌恶的一个原因,曾经有多少次晚上用完电脑,准备关机睡觉,看到的却是关机并更新和重启并更新。漫长的等待,看到的是更新中,请不要关闭你的计算机。(这一点,新的windows已经可以选择不更新,直接关机,但我还是不喜欢)我喜欢更新,但不喜欢这种被控制的感觉,我才是电脑的主人。
- 逃离流氓软件。windows下的有些流氓软件可以说是到了丧心病狂的地步。转到Linux,从此再也没有广告弹窗的困扰,也没有捆绑安装的套路,连Linux下的wps都不设广告。
- 更安全。许多病毒专门针对windows的漏洞,而Linux则可以很好的避开。
- 对于迫于开发环境用到Linux的,更不用解释。
关于Linux的一些基本概念
什么是Linux
另外,给新入坑Linux的朋友们纠正一些概念,我们现在叫的Linux,被扩大了概念,用来指代使用了Linux内核的发行版。实际上,Linux只是一个系统内核,至于系统内核怎么解释,如果将电脑的整个系统和软件(不包含硬件范畴)看作人体,则Linux内核相当于人体的神经系统(小而微,但却是最核心的部分), 其他所有软件,都是组成人体各个部分的器官。Linux内核不是大脑,因为日常使用中,你感受不到内核的存在,但整个系统的运行,确实离不开内核。
所以,综上所述,Linux内核,是基于Linux内核的操作系统的最底层,核心的部分,是操作系统软件层与硬件层交互的“中间层”。更详细的介绍,可以自行查找资料,以及看看Linux的发展史。
什么是Linux发行版
正如上一节中所说,Linux是一个内核,我们现在的叫法,是扩大了Linux的概念,也即,现在通常叫的“Linux”具体应该叫“Linux发行版”。Linux是一个开源的内核,同时又有许多开源社区维护的软件,Linux内核加上一些系统运行必备的组件,就组成了一个完整的Linux发行版,Ubuntu就是众多发行版(Linux发行版太多了,比如我最喜欢的是Arch linux)中的一种。
安装
如何安装ubuntu不在本篇博客范围,网上教程足够多了。虚拟机或者多系统启动都可以。
Welcome to Ubuntu !
开机即可看到ubunut的基佬紫的欢迎界面,输入密码登录后,依然是基佬紫的背景,界面美化在美化篇具体展开。
新安装的系统,开机会出现的提示更新,可先取消更新,待更换软件源后再更新,软件源会影响更新的速度。
ubuntu的默认桌面环境(gnome)与windows使用有所不同。开机后的界面如下图:
右上角点击可看到设置,锁定,注销等按钮,以及联网配置等。
左下角点阵图标,点击即为软件预览界面,类似MacOS的程序坞。
在Linux中,有一个终极工具-终端。你在网上搜到的所有Linux命令,都需要借助于终端执行。
终端的软件有很多,如terminator,console,gnome-terminal等等。
ubuntu默认桌面环境为gnome,使用的默认终端当然是gnome-terminal。在软件预览中,上面搜索框搜索需要的软件,或者直接翻页查找,找到gnome-terminal(中文名为“终端”)。右击它,选择添加到收藏,即可在桌面左侧的dock栏看到它。
终端和命令行的使用是Linux中基础中的基础!也是Linux与windows使用习惯上最大的不同。但也是Linux最灵活的地方,因为Linux可以脱离桌面环境而存在,仅使用终端作为交互工具。许多服务器运行的Linux没有安装桌面环境。
对于ubuntu,系统默认设置了打开终端的快捷键,为CTRL+ALT+T,可在系统设置界面更改。
在默认安装的程序中,涵盖了能日常使用的基本工具,MS office没有Linux版,所以ubuntu使用libre-office作为默认office软件,若使用不习惯,可以自行到wps官网下载最新的wps-office安装。
浏览器默认为firefox浏览器,在Linux界,差不多只有Firefox和Chrome两大浏览器,没有某些流氓浏览器。习惯Chrome浏览器的,百度chrome,进官网后,选择.deb包下载安装。
具体的软件安装,后面会详细说明。
简单了解Linux目录结构
打开文件管理器,选择“其他位置”,对于多系统启动的,这里会看到许多分区,找到ubuntu所在的分区,名字为“计算机”,且有 该符号("/")表示为根目录。 点击进去,即为ubuntu的根目录,ubuntu内所有的文件都在这层目录及其下属目录。
这一层的目录(/),普通用户没有任何写权限,只读。
在Linux中,有句话叫“一切皆文件”。了解目录结构有助于更好的使用Linux。以下是各目录的简介:
/ 根分区,存放以下所有的目录。为系统的“根”
/bin 目录中存放系统常用的二进制命令,例如cp,cat等。
/sbin 中存放的为仅root用户可用的命令,其他用户不可读,里面大多数为系统管理用的命令。
/etc 存放着系统管理和配置文件。
/home 存放所有用户的家目录,是用户主目录的基点,例如你的用户名为user,则你的家目录为/home/user,在终端中使用echo $HOME 命令即可输出自己用户对应的家目录。也可表示为~/。即/home/user/ = ~/
/usr 存放系统应用程序等。
/opt 部分自己安装的软件存放在此目录,例如vscode等。
/root 超级管理员的家目录,与/home/user 类似,但仅root用户可见,当以root用户登录时,~/ 代表 /root/ 。
/dev 存放各种设备的目录,你的电脑分区即存放在该目录,终端使用 lsblk即可查看磁盘分区信息,终端会输出/dev/sda, /dev/sdb 等信息。
/mnt 一般提供给挂载设备使用。
/boot 系统启动引导使用到的各种软件存放在此。
/tmp 用于存放各种临时文件,为公用的目录。一些软件编译时会使用该目录。
/var 普通用户用的不多,各种服务的日志文件一般存放在此。
终端与命令行的使用
打开终端即可看到ubuntu的提示,需要运行管理员命令时,使用su切换身份,或者使用sudo命令。在使用之前,简单介绍Linux的用户与权限。
初次接触Linux,只需要简单了解:
- Linux 中可以创建不同的用户,如你在安装系统时创建的用户。
- 系统默认会有一个管理员用户,用户名为root。
- 不同的用户对于不同的目录、文件具有不同的权限,其中root用户具有最高权限,即传说中的rm -rf /* 即可删除整个系统。
- Linux对文件具有严格的权限控制,不同用户对不同的文件具有不同的操作权限,一共有三种权限:读,写,执行。root用户掌控全局,能够操作系统中所有的文件。写操作包括修改,移动,删除等。
- 文件的权限可更改,每个用户只能操作“属于”自己的文件,root具有最高地位,可更改所有文件的权限。
- 对于普通用户,默认情况下,仅可操作自己目录下的文件,例如你的用户名为user,你的默认目录为/home/user,默认情况下,你可在该目录下更改文件权限,或者进行文件的读写操作,且ubuntu文件管理器打开后的目录也是/home/user。对于其他所有除了/home/user下的系统目录(/tmp共享目录除外),user用户均不具有写权限,其中部分目录读权限都没有,如/root 目录默认情况下只有root用户具有读权限。
在命令行中,也可以查看目录信息.
例如我的为dsm@dsm-VirtualBox:~$ ,其中,
dsm为我的用户名。
dsm-VirtualBox为我的主机名,可在/etc/hostname中修改。
~ 表示当前在~/目录下,前面介绍过,此为dsm用户的家目录。
$符号代表当前用户为普通用户,当使用root用户时,为#符号。
以下介绍一些命令行中常用的命令(假设你的用户名为user):
查看目录信息
ls /yourpath
ls后可以加路径参数,若直接使用ls命令,即为查看当前目录下的文件和目录信息。
在Linux中,隐藏文件以.开头,比如你的目录下存有.profile文件,但是你用ls命令看不到,需要加-a参数,在linux命令中,一般在命令后用-符号接参数。如下:
ls -a
即表示显示当前目录所有文件(目录),包括隐藏文件。此时会看到许多以. 开头的文件。
- 创建文件
```bash
touch hello.c
此命令会在当前目录下创建一个名为hello.c的文件。
创建目录
mkdir test
该命令会在当前目录中创建一个名为test的目录,这个任务当然可以在图形界面的文件管理器中完成。创建后可使用ls命令查看。
切换目录
cd test
该命令会切换至当前目录下的test目录中
注:当目录名不以/ 开头时表示相对目录,如上test 即表示相对目录,系统会在当前目录中寻找test目录。若输入
cd /home/user/test
即为绝对路径,系统从根目录/ 中依次寻找。
移动命令 & 重命名
回到家目录,即~/ 下,执行以下命令
mv test test1
mv为移动命令,也可以用作重命名,命令使用方式为mv A B, A代表原文件(或目录),B代表目标文件(或目录)。跟所有与路径有关的命令一样,注意绝对路径与相对路径。
删除命令
rm test1
即可删除test1目录
当目录test1中不为空时,会提示无法删除,此时使用
rm -r test1
即可,,r代表递归,常用来对目录进行操作,所以在对目录进行操作时,一般加上r参数。还有一个常用的参数,f。如下:
rm -rf test1
即为删除test1目录,且无需逐一确认,若不加此参数,系统会在删除该目录下每个文件前询问是否确认删除,使用-f参数后即可无需确认,所以对目录的一般操作,加上-rf参数即可。
于是便有了传说中的大杀器(不要以管理员身份执行,后果自负):
rm -rf /*
此命令会删除/ 分区下的所有文件和目录,系统直接gg,但是放心,只有root才有权限这么做。
在上面命令中*符号为Linux下的正则表达式,代表该目录下所有文件(和目录)。
复制命令
cp test1 test2
此命令会复制一个test1目录到test2目录,与rm类似,注意绝对路径与相对路径,以及目录不为空时加-r参数。
特别注:上述mv, cp, rm命令中,mv命令在对目录进行操作时无需加-r参数。
终端中编辑文件
如果你去网上搜索各种命令,涉及到修改文件的,一般官方的文档告诉你的是,修改某某文件,然后怎么怎么样,并不会给具体命令,这是考虑到不同的编辑器用户。若是一些博客,包括我的博客,有些会直接给你修改的命令,如:
vim test.c
这种命令,需要解释下,vim为Linux下常用的一个命令行编辑器,其功能可以十分强大,甚至可以配置成vscode一样,但是默认下界面十分简陋,且对于初次接触Linux和命令行的人来说具有劝退效果。因为其与windows下的记事本等的设计理念完全不同。且ubuntu下默认没有安装vim,直接执行会提示command not found,这在后面如何安装软件时会讲,所以,本博客里,我们的所有与编辑文件有关的命令,编辑器用gedit代替,此编辑器为图形界面编辑器,对新手友好,类似windows操作。即以上命令应该为:
gedit test.c
这样会弹出一个与记事本类似的文本编辑器,随便写入内容保存后,当前目录即会新建一个test.c的文件了。
前面提到过,每个用户一般只能写自己家目录下的文件,而普通用户无权修改系统文件,当执行修改系统文件的命令时,终端会回应你permission 错误,基本上就是因为权限问题。有两种办法可以让普通用户执行这一类操作:
- 切换到管理权限更高的用户,一般为root
- 使用sudo命令。
进入到这一步,需要稍微谨慎,因为后面的操作将以管理员身份进行,稍有不慎,会给系统造成灾难后果!
1、sudo命令
sudo意思为以su的身份do something,用管理员的身份运行。
我们可以从风险较小的/home 目录入手,前面提到过,user用户只对/home/user 目录有写权限,那么/home/目录,user是没有权限创建文件之类的。先在终端中,执行
cd /home
现在,我们直接使用touch test.c
终端会显示权限不够。
加上sudo命令:
sudo touch test.c
终端会提示输入用户密码,输入过程不会回显,输入完成回车即可。
这样,便在该目录下创建了一个test.c文件,其他操作类似,不同的只是在命令之前加上sudo,提高执行权限。
2、su命令
终端执行
su
即可切换至root用户,输入root密码后回车即可,输入过程中,终端不会回显,为正常现象。
等等,认证失败?我的密码没错啊!
在前面介绍过,Linux有许多用户,你的user只是其中一个,root也是一个用户,不同的用户有不同的密码,在安装系统时许多发行版的图形安装器都会帮助你设置用户密码,但别忘了,root也是一个用户,它也要设置密码,可是你没设置,故系统设置了随机的密码,这可咋办。这就要介绍Linux修改密码的命令了。
终端直接执行passwd,即可修改当前用户的密码,但是我们现在需要修改的是root用户的密码,而root用户你个普通的user怎么可能有权限修改,所以只能先加上sudo命令。于是执行:
sudo passwd
再输入你当前用户的密码(是你当前用户的密码,是你当前用户的密码),此处仔细看终端,先出现的是[sudo] user 的密码:这一行信息(当在一定时间内为sudo输入过密码,则无需再次输入,此时则不会出现该行)。
输入完自己的密码,回车后会出现
输入新的UNIX密码:此处输入你想设置的root密码(是root用户的密码,是root用户的密码),回车
再次输入完成即设置完root用户的密码。
整个过程的输出如图:
注:这里输入密码均不会回显。
此时,你应当记住,你有两个密码,一个自己用户user的密码,即自己登录界面以及执行sudo需要输入的,还有一个就是刚刚设置的root用户的密码。
在设置完之后,就可以一个su命令,输入root密码后切换至root用户,可以看到此时终端的$已经变成#,表示当前为root用户,此时你的任何操作都应当谨慎,确认没有风险再执行。当切换到root用户后,你想怎么修改系统文件当然随你了。
3. vim的基本使用
这个可以参考我的一篇介绍vim的博客,非常建议至少要学会一些基础的vim操作。
此时Linux里面的一些最基础的命令介绍的差不多了,在这些基础上,借助搜索引擎学习其他的命令,相信你会更得心应手。
软件源与包管理器
每种Linux发行版有其不同的包管理器,ubuntu和debian系列的apt,deb包,redhet系的dnf(yum),rpm包,Archlinux系的pacman等等。可以简单理解为windows的软件商店,但不可等同,Linux的包管理器远比windows的软件商店复杂和强大。熟悉包管理器的使用也是熟练使用Linux的基础。
对于ubuntu系,包管理器为apt,软件包格式为.deb(类比windows的.exe)。
首先,受限于国内的网络环境,ubuntu的软件服务器国内网络直连比较慢,不同地区的网络连不同的服务器网速也不同。好在ubuntu等一系列Linux发行版在国内均有相应的镜像站。
亲身体验,网络比较好的几个镜像源,也是我在Archlinux和ubuntu常用的几个镜像源:
下面以阿里云镜像为例,说明如何更改ubuntu的apt源。
进入阿里云镜像站,找到ubuntu,点击进去即可看到阿里云镜像源的使用帮助,对于没有使用帮助的镜像站,更换方式与阿里云一样。
Ubuntu 的镜像源文件为/etc/apt/sources.list,我们需要修改这个文件配置镜像。
在操作之前,先备份原文件,以免误操作。执行如下命令备份:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
再在终端中输入:(注意:如果没有看vim使用的,将vim替换成nano,或者gedit, gedit为ubuntu中的图形界面编辑器)
sudo vim /etc/apt/sources.list
输入用户密码,即可打开编辑,清空文件内容,将阿里云的镜像配置写入文件中(注意自己ubuntu版本,每个版本的内容不一样)。
修改apt源之后,依次执行以下命令:
sudo apt update
sudo apt upgrade
apt update 会更新软件缓存,upgrade 升级所有软件。中间按照提示确认信息即可。
以后每次安装软件之前建议都先执行以上命令。
ubuntu 18.04 的gnome环境提供了“Ubuntu软件”来给用户下载和管理软件,操作类似windows的应用商店,不需要详细介绍它的使用。下面简单介绍apt包管理器的使用:
配置完apt源,后面就可以按照自己的意愿安装想要的软件:
安装软件
sudo apt install vim
此命令会安装vim编辑器,其他软件亦是如此,换个名字即可。
查询软件
apt search codeblocks
软件查询命令不需要管理员权限,故可以不加sudo,查询结果包含软件名,系统版本,软件版本,适合系统架构,软件描述等。
如:
codeblocks/bionic 16.01+dfsg-2.1 amd64 Code::Blocks 集成开发环境(IDE)
输出信息依次与上面对应。
卸载软件
sudo apt purge vim 或者 sudo apt remove vim
这些软件存放在ubuntu官方软件库,许多软件都可以通过以上方式安装管理,对于不在官方软件库里的软件,可以自行到软件官方网站(官方网站,官方网站)上下载(各种某某下载站之类的不要去,倒不是怕盗版病毒之类的,而是很多都是挂羊头卖狗肉,百度出来显示Linux某某软件,进去下载发现是.exe,浪费时间)。对于ubuntu,如果需要下载软件包的,建议只去这两个地方:
- 各软件提供商的官网
- 开源软件可以去Github等代码托管平台
下载到的软件安装包格式为.deb ,.deb的安装方式有两种:
- 图形界面安装,双击deb包,即会出现安装界面。
- 命令行安装
Ubuntu的图形界面安装较为方便,但是当安装软件失败,就需要使用命令行安装来查看错误信息,好进一步解决。
终端中,进入软件包的目录中,执行:
sudo dpkg -i *.deb
即可安装该软件包(),如果终端提示依赖问题,则执行:
sudo apt install -f -y
然后再重新执行:
sudo dpkg -i *.deb
文件权限
当使用Linux久了,或者使用别人的项目,难免会接触到shell的脚本,即.sh文件,这个相当于把Linux命令写到一个文件里,然后一起执行。前面已提到,文件有读,写,执行权限。既然想要让这个文件执行,需要赋予文件可执行权限,若没有可执行权限,即不能直接在终端使用./test.sh 类似的命令执行。更改文件权限的命令为:chmod,先创建一个文件,名字为test.sh,默认是没有可执行权限的,使用ls命令可以看到它是白色的。
执行:
chmod +x test.sh
表示为test.sh赋予可执行权限,此时再ls命令查看,可以看到文件已经变成绿色的了。终端中进入该目录,执行:
./test.sh
就可以执行该文件中的命令,你可以试着在里面写入一些简单的命令执行。在终端中执行:
ls -al
会显示当前目录下所有文件的权限(包括隐藏文件),例如: drwxr-xr-x,d表示这是一个目录(directory),-表示这是一个普通文件。后面为3*3位的二进制,字母代表1,即有该权限,-代表0 ,无该权限。r 为读,w为写,x为可执行。一共分3组rwx,分别为owner,group,others的权限。如上面的例子,表示owner有读,写,执行权限,group有读权限,无写权限,有执行权限,others有读,无写,可执行,对应二进制数为755。
owner就是目录的所有着,你(user)就是/home/user 的owner,group是user所属的用户组,使用groups 命令即可查看自己属于哪些用户组。用户组涉及到系统管理运维层面了,这里不做详细说明,只了解即可。others顾名思义,不做详细说明。
由二进制数也可知,若要将某文件赋予上面这个例子的权限,执行:
chmod 755 ***
即可。若是目录,需要加参数-R,即:
chmod -R 755 ***
C/C++编程环境
有了以上的基础,配置下C/C++的编程环境基本就很简单了。Linux下常用到的工具有:
GCC, G++, cmake
与以上有关的命令:
gcc, cc , g++, cmake, make, make install等,若是这些命令提示command not found,则是这几个工具没有安装
执行命令安装即可:
sudo apt install gcc g++ cmake
确认后等待下载安装。
简单的编译.c 文件:
gcc test.c
在当前目录会看到一个绿色的(可执行)a.out文件,再执行:
./a.out
即可看到程序运行的结果
可以自己指定输出文件名:
gcc test.c -o test.out
与上面类似,只是名字会不同。
若是多个.c 文件,需要编写makefile 文件,然后使用:
make
即可编译工程文件,关于makefile的编写,我目前没有自己写过,以后有机会专门写一篇博客详解makefile文件的编写。
后续配置
新安装的ubuntu不仅丑,字体还小,这些你都可以根据自己的意愿更改,相关的内容后续有机会陆续补上。
结语
啰啰嗦嗦这么多,其实内容也不多,熟悉Linux的会觉得废话连篇。此博客纯自己码字所写,难免会有一些错误。写它主要用来记录一点微薄的知识,顺便给初次接触Linux的人提供一些方便。以后有机会会把这篇博客挖下的坑填上的。