Linux基础------看这篇就够了

1. 什么是Linux?

严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU工程各种工具和数据库的操作系统。详情参见:https://baike.baidu.com/item/linux/27050?fr=aladdin

2. Linux 内核及发行版

2.1 Linux 内核版本

  • 内核(kernel)是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序,它提供了一个在裸设备与应用程序间的抽象层(可以理解成媒介、接口)
  • Linux内核版本又分为稳定版和开发版,两种版本是相互关联,相互循环
    • 稳定版:具有工业级强度,可以广泛地应用和部署。新的稳定版相对于较旧的只是修正一些 bug 或加入一些新的驱动程序
    • 开发版:由于要试验各种解决方案,所以变化很快
  • 内核源码网址:http://www.kernel.org 所有来自全世界的对 Linux 源码的修改最终都会汇总到这个网站,由 Linus 领导的开源社区对其进行甄别和修改最终决定是否进入到 Linux 主线内核源码中

2.2 Linux 发行版本

  • Linux 发行版(也被叫做 GNU/Linux 发行版)通常包含了包括桌面环境、办公套件、媒体播放器、数据库等应用软件
  • 常见的发行版本如下:

    • Ubuntu
    • Redhat
    • Fedora
    • openSUSE
    • Linux Mint
    • Debian
    • Manjaro
    • Mageia
    • CentOS
    • Arch
  • 十大 Linux 服务器发行版排行榜:http://os.51cto.com/art/201612/526126.htm

3. Linux的应用领域

3.1 服务器领域

  • Linux在服务器领域的应用是其重要分支
  • Linux 免费、稳定、高效等特点在这里得到了很好的体现
    • Linux早期因为维护、运行等原因同样受到了很大的限制
    • 近些年来Linux服务器市场得到了飞速的提升,尤其在一些高端领域尤为广泛

3.2 嵌入式领域

  • 近些年来Linux在嵌入式领域的应用也得到了飞速的提高
  • Linux 运行稳定、对网络的良好支持性、低成本,且可以根据需要进行软件裁剪,内核最小可以达到几百KB等特点,使其近些年来在嵌入式领域的应用得到非常大的提高

主要应用:机顶盒数字电视网络电话程控交换机手机PDA、等都是其应用领域,得到了 Google、三星、摩托罗拉、NEC 等公司的大力推广

3.3 个人桌面领域

  • 此领域是传统 Linux 应用最薄弱的环节
  • 传统 Linux 由于界面简单、操作复杂、应用软件少的缺点,一直被Windows所压制
  • 近些年来随着UbuntuFedora等优秀桌面环境的兴起,同时各大硬件厂商对其支持的加大,Linux 在个人桌面领域的占有率也在逐渐提高

4. 文件和目录

4.1 单用户操作系统和多用户操作系统(科普)

单用户操作系统:指一台计算机在同一时间只能由一个用户使用,一个用户独自享用系统的全部硬件和软件资源,Windows XP之前的版本都是单用户操作系统
多用户操作系统:指一台计算机在同一时间可以由多个用户使用,多个用户共同享用系统的全部硬件和软件资源
Unix 和 Linux 的设计初衷就是多用户操作系统

4.2 Windows 和 Linux 文件系统区别

4.2.1 Windows下的文件系统
在Windows下,打开“计算机”,我们看到的是一个个的驱动器盘符:

每个驱动器都有自己的根目录结构,这样形成了多个树并列的情形,如图所示:

4.2.2 Linux 下的文件系统
在Linux下,我们是看不到这些驱动器盘符,我们看到的只有文件夹(目录):

Ubuntu没有盘符这个概念,只有一个根目录 /,所有文件都在它下面

4.3 用户目录

位于 /home/user,称之为用户工作目录或家目录,表示方式: /home/user/ ,如下图所示:

4.4 Linux主要目录速查表(用于速查,不用死记)

/:根目录,一般根目录下只存放目录,在 linux 下有且只有一个根目录,所有的东西都是从这里开始
当在终端里输入 /home,其实是在告诉电脑,先从 /(根目录)开始,再进入到 home 目录
/bin、/usr/bin:可执行二进制文件的目录,如常用的命令 ls、tar、mv、cat 等
/boot:放置 linux 系统启动时用到的一些文件,如 linux 的内核文件:/boot/vmlinuz,系统引导管理器:/boot/grub
/dev:存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱mount /dev/cdrom /mnt
/etc:系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有
/etc/inittab
/etc/fstab
/etc/init.d
/etc/X11
/etc/sysconfig
/etc/xinetd.d
/home:系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下
~ 表示当前用户的家目录
~edu 表示用户 edu 的家目录
/lib、/usr/lib、/usr/local/lib:系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助
/lost+fount:系统异常产生错误时,会将一些遗失的片段放置于此目录下
/mnt: /media:光盘默认挂载点,通常光盘挂载于 /mnt/cdrom 下,也不一定,可以选择任意位置进行挂载
/opt:给主机额外安装软件所摆放的目录
/proc:此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的文件有:/proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/* 等
/root:系统管理员root的家目录
/sbin、/usr/sbin、/usr/local/sbin:放置系统管理员使用的可执行命令,如 fdisk、shutdown、mount 等。与 /bin 不同的是,这几个目录是给系统管理员 root 使用的命令,一般用户只能"查看"而不能设置和使用
/tmp:一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下
/srv:服务启动之后需要访问的数据目录,如 www 服务需要访问的网页数据存放在 /srv/www 内
/usr:应用程序存放目录
/usr/bin:存放应用程序
/usr/share:存放共享数据
/usr/lib:存放不能直接运行的,却是许多程序运行所必需的一些函数库文件
/usr/local:存放软件升级包
/usr/share/doc:系统说明文件存放目录
/usr/share/man:程序说明文件存放目录
/var:放置系统执行过程中经常变化的文件
/var/log:随时更改的日志文件
/var/spool/mail:邮件存放的目录
/var/run:程序或服务启动后,其 PID 存放在该目录下

5. Linux 终端命令

5.1 学习Linux终端命令的原因

  • Linux刚面世时并没有图形界面,所有的操作全靠命令完成,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。在职场中,大量的服务器维护工作都是在远程通过SSH客户端来完成的,并没有图形界面,所有的维护工作都需要通过命令来完成
  • 作为后端程序员,必须要或多或少的掌握一些Linux常用的终端命令
  • Linux发行版本的命令大概有 200 多个,但是常用的命令只有10左右而已

ps:不需要死记硬背,对于常用命令,用的多了,自然就记住了,切记不要尝试一次学会所有的命令,有些命令是非常不常用的,临时遇到,临时百度就可以。

5.2 终端命令格式 

command [-options] [parameter]
说明:
command:命令名,相应功能的英文单词或单词的缩写
[-options]:选项,可用来对命令进行控制,也可以省略
parameter:传给命令的参数,可以是零个、一个或者多个
[] 代表可选

5.3 查阅命令帮助信息

5.3.1 --help

command --help
说明:显示command命令的帮助信息

5.3.2 man

man command
说明:查阅command命令的使用手册
man是 manual的缩写,是Linux提供的一个手册,包含了绝大部分的命令、函数的详细使用说明。

使用man时的操作键
操作键功能
Enter一次滚动手册页的一行
b回滚一屏
f前滚一屏
q退出手册
/keyword搜索keyword字符串
空格显示手册页的下一屏,与f键功能一样

 

 

 

 

 

 


 

5.4 常用 Linux 命令的基本使用

命令对应英文作用
lslist查看当前文件夹下的内容
pwdprint work directory查看当前所在文件夹
cd 目录名change directory切换文件夹
touch 文件名touch如果文件不存在,新建文件
mkdir 目录名make directory创建目录
rm 文件名remove删除指定文件名的文件
clearclear清屏

ps:
1.ctrl+shift+"+" 可以放到终端字体显示;ctrl+"-" 缩小终端字体显示
2.在敲出“文件”/“目录”/“命令”的前几个字母之后,按下“tab”键,如果输入的没有歧义,系统会自动补全;如果还存在其他“文件”/“目录”/“命令”,再按一下“tab”键,系统会提示可能存在的命令

3.按“上”/“下”光标键可以在曾经使用过的命令之间来回切换,如果想要退出选择,并且不想执行当前选中的命令,可以按“ctrl“ + ”c”

5.4.1 ls命令说明
ls是英文单词"list"的简写,其功能为列出目录的内容,是用户最常用的命令之一,类似于DOS下的 "dir"命令 

1)ls常用选项:                                                                                                                                                                                                  
-a 显示指定目录下所有子目录与文件,包括隐藏文件
-l 以列表方式显示文件的详细信息
-h 配合“-l”以人性化的方式显示文件大小     

小插曲: 计算机中文件大小的表现方式(了解即可)

     

ps:Linux文件或者目录名称最长可以有256个字符;以"."开头的文件为隐藏文件,需要用"-a"参数才能显示;("."代表当前目录;".."代表上一级目录)
在Linux终端中,命令的选项可以分开输入,也可以合在一起输入

2)ls与通配符的使用 

案例1:找到以"1"开头的文件

案例2:找到以“1”结尾的文件,可以看到,我开始输入“*1”点击回车是没有反应的,输入“*1.txt”才可以

   
其他通配符请各位老铁自行测试~ 

5.4.2 "cd"命令说明
cd是"change directory"的简写,其功能为更改当前的工作目录。
注意:Linux所有的目录和文件名都是大小写敏感的
      
我们也要明白相对路径和绝对路径的概念:
相对路径:表示相对于当前目录所在的目录位置,在输入路径时,最前面不是"/"或者"~"。
绝对路径:表示从”根目录/家目录“开始的具体目录位置,在输入路径时,最前面是"/"或者"~"。
 
5.4.3 创建和删除操作
1>touch 文件名:如果文件不存在,可以创建一个空白文件;如果文件已经存在,可以修改文件的末次修改日
2>mkdir -p 文件夹:可以递归创建目录

3>rm 文件名/文件夹:删除文件或目录
-f:强制删除,忽略不存在的文件,无需提示
-r:递归地删除目录下的内容,删除文件夹时必须加此参数
rm命令也可以与通配符结合使用:

使用"rm"命令一定要小心,因为文件删除后不能恢复

5.4.4 拷贝和移动文件

1>tree -d:只显示目录。
2>"cp"命令的功能是将给出的文件或目录复制到另一个文件或目录中,相当于DOS下的"copy"命令。
   
相关选项:
-i: 覆盖文件前提示
-r: 若给出的源文件是目录文件,则 cp 将递归复制该目录下的所有子目录和文件,目标文件必须为一个目录名
 
如上图所示,复制目录必须加“-r”
3>"mv"命令可以用来移动文件或目录,也可以给文件或目录重命名
 
相关选项:-i: 覆盖文件前提示 

5.4.5 查看文件内容

1>cat会一次显示所有的内容,适合查看内容较少的文本文件,相关选项:
-b: 对非空输出行编号
-n: 对输出的所有行编号
ps:Linux 中还有一个"nl"的命令和"cat -b"的效果等价

2>more命令可以用于分屏显示文件内容,每次只显示一页内容,适合于查看内容较多的文本文件,操作键与“man”命令一样,比如按enter键往下滚动一行
3>Linux系统中"grep"命令是一种强大的文本搜索工具,"grep"允许对文本文件进行模式查找,所谓模式查找,又被称为正则表达式查找
-n: 显示匹配及行号
-v: 显示不包含匹配文本的所有行(相当于求反)
-i: 忽略大小写

常用的两种模式查找:
^a: 行首,搜寻以"a"开头的行
key$: 行尾,搜寻以"key"结束的行

5.4.6 重定向">"和">>"
1>"echo"会在终端中显示参数指定的文字,通常会和重定向联合使用

2>Linux允许将命令执行结果重定向到一个文件

从如上示例可以看出,">" 表示输出,会覆盖文件原有的内容; ">>"表示追加,会将内容追加到已有文件的末尾
5.4.7 管道"|"
Linux允许将一个命令的输出可以通过管道做为另一个命令的输入,可以理解现实生活中的水管,水管一头进水,另一头出水,这里"|"分为左右两端,左端进水(写),右端出水(读)
常用的管道命令有:
more:分屏显示内容
grep:在命令执行结果的基础上查询指定的文本

5.4.8 关机/重启
shutdown:关机/重新启动
"shutdown"命令可以”安全关闭“或者”重新启动系统“
-r:重新启动
温馨提示:
不指定选项和参数,默认表示1分钟之后关闭电脑;
远程维护服务器时,最好不要关闭系统,而应该重新启动系统
常用命令:
1>重新启动操作系统,其中now表示现在,即重启动作会马上执行
shutdown -r now
2>立刻关机
shutdown now
3>系统在今天的20:25关机
shutdown 20:25
4>系统再过十分钟后自动关机
shutdown +10
5>取消之前指定的关机计划
shutdown -c
5.4.9 查看或配置网卡信息
网卡是一个专门负责网络通讯的硬件设备,IP地址是设置在网卡上的地址信息,我们可以把电脑比作电话,网卡相当于SIM卡,IP地址相当于电话号码。
IP地址:每台联网的电脑上都有IP地址,是保证电脑之间正常通讯的重要设置。
注意:每台电脑的IP地址不能相同,否则会出现IP地址冲突,并且没有办法正常通讯。
1>ifconfig: 对应英文configure a network interface,可以查看/配置计算机当前的网卡配置信息。


ps:一台计算机中有可能会有一个物理网卡多个虚拟网卡,在Linux中物理网卡的名字通常以"ensXX"表示;"127.0.0.1"被称为本地回环/环回地址,一般用来测试本机网卡是否正常
2>ping ip地址: ping检测到目标ip地址的连接是否正常
"ping"一般用于检测当前计算机到目标计算机之间的网络是否通畅,时间数值越大,速度越慢。
原理:网络上的机器都有唯一确定的IP地址,我们给目标IP地址发送一个数据包,对方就要返回一个数据包,根据返回的数据包以及时间,我们可以确定目标主机的存在和网络是否流畅。


ps: "ping"的工作原理与潜水艇的声纳相似,"ping"这个命令就是取自声纳的声音网络管理员之间也常将"ping"用作动词————ping一下计算机X,看他是否开着。

5.5 远程管理命令

在Linux中,SSH是非常常用的工具,通过SSH客户端我们可以连接到运行了SSH服务器的远程机器上。SSH 客户端是一种使用"Secure Shell(SSH)"协议连接到远程计算机的软件程序,它是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。

优点:
1)利用SSH协议可以有效防止远程管理过程中的信息泄露;
2)通过SSH协议可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗;
3)SSH的另一项优点是传输的数据可以是经过压缩的,所以可以加快传输的速度。
1>域名和端口
域名由一串用点分隔的名字组成,是IP地址的别名,主要是为了方便用户记忆,例如:www.baidu.com。
端口包括物理端口和逻辑端口。物理端口是用于连接物理设备之间的接口,逻辑端口是逻辑上用于区分服务的端口。TCP/IP协议中的端口就是逻辑端口,通过不同的逻辑端口来区分不同的服务。一个IP地址的端口通过16bit进行编号,最多可以有65536个端口。端口是通过端口号来标记的,端口号只有整数,范围是从0 到65535。
IP地址:通过IP地址找到网络上的计算机
端口号:通过端口号可以找到计算机上运行的应用程序
SSH服务器的默认端口号是22,如果是默认端口号,在连接的时候,可以省略。

常见服务端口号列表
序号服务端口号
01SSH 服务器22
02Web 服务器80
03HTTPS443
04FTP 服务器21

案例:我们先通过ping www.baidu.com可以看到百度的服务器IP是119.75.217.26,然后打开浏览器输入此IP,回车后便可以访问百度,web默认端口号是80,所以我们输入119.75.217.26:80也是可以访问到百度的。 


如果把端口号改成81就出问题了


2>SSH客户端的简单使用
ssh [-p port] user@remote 此命令用于访问远程SSH服务器
1)user是在远程机器上的用户名,如果不指定的话默认为当前用户
2)remote是远程机器的地址,可以是IP/域名,或者别名
3)port是SSH Server监听的端口,如果不指定,就为默认值22
温馨提示:使用exit退出当前用户的登录
注意:ssh这个终端命令只能在Linux或者UNIX系统下使用,如果在Windows系统中,可以安装PuTTY或者XShell客户端软件:
Putty http://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html(需要科学上网)
XShell http://xshellcn.com
温馨提示:在工作中,SSH 服务器的端口号很有可能不是 22,如果遇到这种情况就需要使用 -p 选项,指定正确的端口号,否则无法正常连接到服务器
下面我来演示用XShell6连接Ubuntu

设置完之后点连接,我在连接的时候出问题了,如下图所示:

连接失败之后,我用ssh命令重新连接还是失败,这是怎么回事?难道SSH服务没开?

我在尝试用sudo service ssh start开启SSH时,提示没有找到SSH服务,这么说是我的Ubuntu上压根就没这玩意,我还以为SSH是Ubuntu自带的。那咱就sudo apt-get install ssh安装一下这玩意,安装完成之后重启服务。然后在XShell6中重新建立会话窗口连接Ubuntu,出现如下提示点击“授权并保存”即可,之后输入密码点确定就可以了。



当出现用户名@ubuntu即表示连接成功

终于可以快乐地玩耍了,我先试试远程重启:

愚人节可以恶搞同事,再胆子大点可以恶搞领导

3>SCP
scp就是secure copy,是一个在Linux下用来进行远程拷贝文件的命令,它的地址格式与ssh基本相同,需要注意的是,在指定端口时用的是大写的-P而不是小写的。
注意:scp这个终端命令只能在Linux或者UNIX系统(mac os也可以,因为它是基于unix内核的图形化操作系统)下使用,如果在Windows系统中,可以安装PuTTY,使用pscp命令行工具或者安装FileZilla使用FTP进行文件传输。

"scp -P port helloworld.py user@remote:Desktop/helloworld.py"此命令可以实现把本地当前目录下的helloworld.py文件复制到远程家目录下的Desktop/helloworld.py
注意:后面的路径如果不是绝对路径,则以用户的家目录作为参照路径
"scp -P port user@remote:Desktop/01.py 01.py"此命令可以实现把远程家目录下的Desktop/01.py文件复制到本地当前目录下的01.py
加上 -r 选项可以传送文件夹,比如把当前目录下的demo文件夹复制到远程家目录下的Desktop,可以用如下命令实现:
scp -r demo user@remote:Desktop

相信大多数人用的都是Windows系统,那我们就用FileZilla来一顿操作,点击这里下载最新版本FileZilla,我用的是目前最新的3.41.2,下载完成后进行傻瓜式安装,打开软件后按照下图所示填写相关信息,点击快速连接。

不知道你们这样操作有问题没,我是出问题了,提示无法连接到服务器,可是我的信息填写完全正确,why?

我的解决方案是这样的:
1.把端口号改成22,FileZilla会自动把主机切成SFTP传输

2.在FileZilla客户端点击文件>>站点管理器中新建站点,然后选择SFTP协议即可

大家有其他解决方案可以在评论区留言与我交流~
下图是FileZilla实现拷贝文件及目录的方法,是不是so easy~

4>SSH高级使用(下面的内容知道就行,工作中很少用)
1)免密码登录

  • 第一步:配置公钥

    执行"ssh-keygen"即可生成SSH钥匙,一路回车即可

  • 第二步:上传公钥到服务器

    执行"ssh-copy-id -p port user@remote",可以让远程服务器记住我们的公钥
温馨提示:有关SSH的配置信息都保存在用户家目录下的".ssh"目录下
我用的是Windows系统(不是因为我穷,是我觉得苹果系统不好用,而且是美国货,我这么爱国,才不会用,你们应该会相信的吧),就用Ubuntu终端服务器登录终端服务器自己的方法来给大家演示吧~

首先我们查看家目录下的所有文件,没有发现.ssh文件夹。

这是因为.ssh文件夹需要在终端登录ssh后才会生成,我这里自己登录自己。

再次查看家目录下的所有文件,可以看到已经生成了.ssh文件夹,并且在.ssh中有一个叫known_hosts的文件,这个文件其实就是我们刚才输入yes时保存的授权信息,当我们下次再登录这个服务器的时候,就不会再提示授权了。

接下来我们执行"ssh-keygen"命令,一路回车即可。之后我们可以看到在.ssh下有多了两个文件,分别是id_rsa(私钥)、id_rsa.pub(公钥)。

我们再执行“ssh-copy-id -p port user@remote”把公钥上传到远程服务器。

我们再次查看.ssh文件,发现又多了个authorized_keys文件,而且内容跟id_rsa.pub一模一样,其实这个就是我们上传到服务器的公钥。

免密登录原理(非对称加密算法)图解

2)配置别名
我们在终端使用ssh的频率还是很高的,那么每次都输入ssh -p port user@remote,时间久了会觉得很麻烦,特别是当user,remote和port都得输入时就更头疼了,而且还不好记忆,而配置别名可以让我们偷懒,譬如用:ssh myserver来替代这么一长串,那么就在 ~/.ssh下创建config文件, 里面追加以下内容:
Host xxx
HostName ip地址
User xxx
Port 22
保存之后,即可用 ssh mac 实现远程登录了,scp 同样可以使用。

温馨提示:大家可能在终端使用“gedit filename”打开文件会报错,点击这里可能会帮到你哟~

5.6 用户权限相关命令

5.6.1 用户和权限的基本概念

  • 用户是Linux系统工作中重要的一环,用户管理包括用户与组管理
  • 在Linux系统中,不论是由本机或是远程登录系统,每个系统都必须拥有一个账号,并且对于不同的系统资源拥有不同的使用权限
  • 在Linux中,可以指定每一个用户针对不同的文件或者目录的不同权限

对文件/目录 的权限包括:

1> 组
为了方便用户管理,提出了的概念,如下图所示:

在实际应用中,可以预先针对设置好权限,然后将不同的用户添加到对应的组中,从而不用依次为每一个用户设置权限。

2>ls -l 命令扩展

"ls -l"可以查看文件夹或文件的详细信息,从左到右依次是:

  • 权限:第1个字符如果是"d"表示目录,"-"则表示文件
  • 硬链接数:通俗地讲,就是有多少种方式,可以访问到当前目录或文件
  • 拥有者:家目录下文件或目录的拥有者通常都是当前用户
  • 组:在Linux中,很多时候,会出现组名和用户名相同的情况
  • 文件或文件夹的大小
  • 文件或文件夹创建时间
  • 文件名或文件夹名


3>chmod 简单使用
chmod可以修改用户和组对文件及目录的权限,命令格式为:chmod +/-rwx 文件名或目录名。
温馨提示:以上方式会一次性修改拥有者和组的权限。

4>超级用户
Linux系统中的root账号通常用于系统的维护和管理,对操作系统的所有资源具有所有访问权限,在大多数版本的Linux中,都不推荐直接使用root账号登录系统(没有特殊需要,建议大家不要登录root账户)。在Linux安装的过程中,系统会自动创建一个用户账号,而这个默认的用户就称为“标准用户”,比如我系统中的当前用户“zwx530940”。
那么怎么登录root用户呢?look!

su是"substitute user"的缩写,表示使用另一个用户的身份。sudo命令用来以其他身份来执行命令,预设的身份为root,用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码,若其未经授权的用户企图使用sudo,则会发出警告邮件给管理员。

5.6.2 组管理

组信息保存在"/etc/group"文件中,"etc"目录放的都是系统配置相关的信息,看不懂的信息不要乱删,以免系统崩溃或某些常用功能异常。对组的操作无非就是增删改查。
 

命令功能
groupadd 组名添加组
groupdel 组名删除组
chgrp -R 组名 文件/目录名递归修改文件/目录的所属组
cat /etc/group查看确认组信息

ps:创建组或删除组的终端命令都需要通过sudo执行。

第一次我没有加sudo,提示被拒绝,第二次通过sudo groupadd Android添加了Android组,通过cat /etc/group即可查看刚刚创建的组信息:

5.7 用户管理

5.7.1 创建用户---设置密码---删除用户
1>相关终端命令

命令功能说明
useradd -m -g 组 新建的用户名添加新用户-m 自动建立用户家目录
-g 指定用户所在的组,否则会建立一个与用户名同名的组
passwd 用户名设置用户密码如果是普通用户,直接用passwd可以修改自己的账户密码
userdel -r 用户名删除用户-r 选项会自动删除用户家目录
cat /etc/passwd | grep 用户名确认用户信息新建用户后,用户信息会保存在"/etc/passwd"文件中

下面我来演示添加新用户并设置密码:

新用户添加成功后,我们在Windows中用Xshell登录新用户。在之前创建的"新建会话"上点击鼠标右键,选择属性,在属性界面填写新用户的用户名和密码,最后点击连接就可以了。


创建用户时,如果忘记用"-m"选项指定新用户的家目录,该怎么办?最简单的方法就是删除用户,重新创建!

2> 查看用户信息
我们已经知道用户信息存放在/etc/passwd文件中,其实这个文件中的用户信息是以":"隔开分组显示的,由6个分号组成的7个信息,分别是:用户名、密码(x,表示密码是加密的)、UID(用户标识)、GID(组标识)、用户全名或本地帐号、家目录、登录使用的Shell(就是登录之后,使用的终端命令,ubuntu默认是dash)。

命令功能
id [用户名]查看用户UID和GID信息
who查看当前所有登录的用户列表
whoami查看当前登录用户的账户名


3>修改用户信息usermod
usermod可以用来设置用户的主组、附加组和登录Shell,命令格式如下:
修改用户的主组(passwd中的GID):usermod -g 组 用户名
修改用户的附加组:usermod -G 组 用户名
修改用户登录Shell:usermod -s /bin/bash 用户名
相关概念:
主组:通常在新建用户时指定,如果不指定,系统会默认指定主组名和用户名相同,在etc/passwd的第4列GID对应的是主组。
附加组:在etc/group中最后一列表示该组的用户列表,用于指定用户的附加权限。
Shell:看这里,linux下的shell又是什么?看这里(度娘有时候也是满靠谱的~)
注意:默认使用useradd添加的用户是没有权限使用sudo以root身份执行命令的,可以使用以下命令,将用户添加到sudo附加组中
bash usermod -G sudo 用户名。设置了用户的附加组之后,需要重新登录才能生效!

Ubuntu默认的shell是dash,如果不改成bash,你或许会发疯~按上键输出"[[A^",按删除键输出"^H"!!!

4>which命令可以查看执行命令所在位置

我们从上图可以看到有些执行命令储存在bin中,有些储存在sbin中,那么他们区别在哪?
在Linux中,绝大多数可执行文件都是保存在/bin、/sbin、/usr/bin、/usr/sbin中:

  • /bin(binary)是二进制执行文件目录,主要用于具体应用
  • /sbin(system binary)是系统管理员专用的二进制代码存放目录,主要用于系统管理
  • /usr/bin(user commands for applications)系统安装好之后,用户后期安装的一些软件
  • /usr/sbin(super user commands for applications)超级用户的一些管理程序

ps:cd这个终端命令是内置在系统内核中的,没有独立的文件,因此用which无法找到cd命令的位置
5>切换用户
命令如下:
su - 用户名:切换用户,并且切换目录;"-"可以切换到用户家目录,否则保持位置不变 |
exit:退出当前登录账户
”su“不接用户名,可以切换到root用户,但是不推荐使用,使用root太不安全了

6>修改文件权限
命令如下:
chown 用户名 文件名或者目录名:修改文件或目录的拥有者
chgrp -R 组名 文件名或目录名:递归修改文件或目录的组
chmod -R 755 文件名或目录名:递归修改文件或目录的权限 
之前我们已经学过改变文件或目录权限可以用“chmod +/-rwx 文件名或目录名”这个命令,但这个命令会给所有用户添加或删除权限,不能精确到拥有者、组、其他用户。

其实chmod在设置权限时,可以简单地使用三个数字分别对应拥有者、组和其他用户的权限,如下表所示:

常见数字组合有(u表示用户/g表示组/o表示其他):
777 ===> u=rwx,g=rwx,o=rwx
755 ===> u=rwx,g=rx,o=rx
644 ===> u=rw,g=r,o=r

5.8 系统信息相关命令

5.8.1 时间和日期
date:查看系统时间
cal:"calendar"查看日历,"-y"选项可以查看一年的日历
5.8.2 磁盘信息
df -h:"disk free"显示磁盘剩余空间
du -h [目录名]:"disk usage"显示目录下的文件大小,不加目录名默认显示当前目录下子文件的大小
5.8.3 进程信息
ps aux:"process status"查看进程的详细状况
top:动态显示运行中的进程并且排序
kill [-9] 进程代号:终止指定代号的进程,"-9"表示强行终止
"ps"默认只会显示当前用户通过终端启动的应用程序
ps选项说明如下:

选项含义
a显示终端上的所有进程,包括其他用户的进程
u显示进程的详细状态
x示没有控制终端的进程

提示:
1.使用"kill"命令时,最好只终止由当前用户开启的进程,而不要终止"root"身份开启的进程,否则可能导致系统崩溃。
2.要退出"top"可以直接输入"q" 

5.9 其他常用命令

5.9.1 查找文件命令
find 命令功能非常强大,通常用来在特定的目录下搜索符合条件的文件,命令格式是:
find [opthons] [查找起始路径] [查找条件] [处理动作]

如果省略路径,表示在当前文件夹下查找。之前学习的通配符,在使用find命令时可用,有关find的更多使用详见:https://blog.csdn.net/qq_35101450/article/details/90244986
5.9.2 软链接
软链接可以理解为类似于Windows下的快捷方式,创建软链接的命令格式是:8ln -s 被链接的源文件 链接文件
          


 

该睡觉了,大家晚安~未完待续。。。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值