Linux 基础

Posted rxlogs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 基础相关的知识,希望对你有一定的参考价值。

1.用户类型

root 用户: 一个特殊的管理帐户 也被称为超级用户 root已接近完整的系统控制 对系统损害几乎有无限的能力 除非必要,不要登录为 root

普通( 非特权 )用户: 权限有限 造成损害的能力比较有限

2 终端 terminal

设备终端:键盘、鼠标、显示器

终端类型:控制台终端: /dev/console ;串行终端:/dev/ttyS# ;虚拟终端:tty:teletypewriters, /dev/tty#,tty 可有n个,Ctrl+Alt+F#  ;图形终端:startx, xwindows CentOS 6: Ctrl + Alt + F7 CentOS 7: 在哪个终端启动,即位于哪个虚拟终端 ;伪终端:pty:pseudo-tty , /dev/pts/# 如:SSH远程连接

查看当前的终端设备: tty 命令可以查看当前所在终端

3 交互式接口

交互式接口:启动终端后,在终端设备附加一个交互式应用程序。

3.1 交互式接口类型

3.2 什么是shell

Shell 是Linux系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并 把它送入内核去执行 shell也被称为LINUX的命令解释器(command interpreter),Shell 本身是一个程序。将用户输入的 命令行拆解为”命令名“与”参数“。接着,根据命令名找到对应要执行的程序,对被执行的程序进行初始 化,然后将刚才解析出来的参数传给该程序并执行 shell是一种高级程序设计语言,提供了变量,函数,条件判断,循环等开发语言的功能 由于Shell本身是个程序,所以它可以被任何用户自己开发的各种Shell所代替。

3.3 各种Shell

3.4 bash shell

GNU Bourne-Again Shell(bash)是GNU计划中重要的工具软件之一,目前也是 Linux标准的shell,与 sh兼容

显示当前使用的shell :echo $SHELL

显示当前系统使用的所有shell:cat /etc/shells

4 设置主机名

hostname NAME #临时生效

hostnamectl set-hostname NAME #持久生效

主机名不支持使用下划线,但支持横线,可使用字母,横线或数字组合 ;有些软件对主机名有特殊要求。

5 命令提示符 prompt

登录Linux后,默认的系统命令提示符毫无没有个性,无法明显辨别生产和测试环境,而导致误操作。 可以通过修改PS1变量实现个性的提示符格式,避免这种低级错误。

# 管理员 $ 普通用户

6 执行命令

6.1 执行命令过程

输入命令后回车,提请shell程序找到键入命令所对应的可执行程序或代码,并由其分析后提交给内核分 配资源将其运行起来。

6.2 shell中可执行的两类命令

内部命令:由shell自带的,而且通过某命令形式提供  ; 外部命令:在文件系统路径下有对应的可执行程序文件

区别指定的命令是内部或外部命令 : type COMMAND

查看是否存在对应内部和外部命令:  type -a COMMAND

6.2.1 内部命令相关

help 内部命令列表 enable 管理内部命令: enable cmd 启用内部命令 enable –n cmd 禁用内部命令 enable –n 查看所有禁用的内部命令

6.2.2 执行外部命令

查看外部命令路径:

which -a |--skip-alias

whereis

6.3 命令别名

对于经常执行的较长的命令,可以将其定义成较短的别名,以方便执行 显示当前shell进程所有可用的命令别名:alias

定义别名NAME,其相当于执行命令VALUE : alias NAME=\'VALUE\'

扫描新加的磁盘:alias scandisk=\'echo - - - > /sys/class/scsi_host/host0/scan;echo - - - > /sys/class/scsi_host/host1/scan;echo - - - > /sys/class/scsi_host/host2/scan\'

撤消别名:unalias  

unalias [-a] name [name ...]

unalias -a  #取消所有别名

注意:在命令行中定义的别名,仅对当前shell进程有效

如果想永久有效,要定义在配置文件中  仅对当前用户:~/.bashrc  对所有用户有效:/etc/bashrc

编辑配置给出的新配置不会立即生效,bash进程重新读取配置文件:source /path/to/config_file 或者 . /path/to/config_file

如果别名同原命令同名,如果要执行原命令,可使用:

\\ALIASNAME

“ALIASNAME”

‘ALIASNAME’

command ALIASNAME

/path/commmand   #只适用于外部命令

6.4 命令格式

COMMAND [OPTIONS...] [ARGUMENTS...]

COMMAND [COMMAND] [COMMAND] ....

选项:用于启用或关闭命令的某个或某些功能

短选项:UNIX 风格选项,-c 例如:-l, -h 长选项:GNU风格选项,--word 例如:--all, --human BSD风格选项: 一个字母,例如:a,使用相对较少

参数:命令的作用对象,比如:文件名,用户名等 : id -u  ; ls -a ; ls --all ; free -h ; free --human ;ps a

注意:

多个选项以及多参数和命令之间使用空白字符分隔

取消和结束命令执行:Ctrl+c,Ctrl+d

多个命令可以用 ";" 符号分开

一个命令可以用\\分成多行

7 常见命令

7.1 查看硬件信息

7.1.1 lscpu命令可以查看cpu信息 , cat /proc/cpuinfo也可看查看到

Thread(s) per core:    1 #每个core 有几个线程 Core(s) per socket:    4 #每个槽位有4个core Socket(s):             2 #服务器面板上有2个cpu 槽位 NUMA node(s):          2 #nodes的数量   

7.1.2 查看内存大小NUMA node0 CPU(s):     0,2,4,6 #对应的core

free  ; cat /proc/meminfo

7.1.3 查看硬盘和分区情况

lsblk ; cat /proc/partitions ; blocks name 

7.2 查看系统版本信息

7.2.1 查看内核版本 uname -r

7.2.2 查看操作系统发行版本 

CentOS8 查看发行版本:cat /etc/redhat-release ; cat /etc/os-release ; lsb_release -a

ubuntu查看发行版本:cat /etc/os-release ; cat /etc/issue ;lsb_release -a

7.3 日期和时间

Linux的两种时钟 系统时钟:由Linux内核通过CPU的工作频率进行的 硬件时钟:主板

相关命令:

date 显示和设置系统时间

显示当前时间:date -d @`date +%s`  转换格式:date -d @`date +%s` +%F_%T

显示当前时间:date +%s  ; date +%F

clock,hwclock: 显示硬件时钟

-s, --hctosys #以硬件时钟为准,校正系统时钟

-w, --systohc #以系统时钟为准,校正硬件时钟

ll /usr/sbin/clock 

时区:/etc/localtime

timedatectl list-timezones ; timedatectl set-timezone Asia/Shanghai  ; timedatectl status  ; ll /etc/localtime  ; cat /etc/timezone

显示日历:cal –y   eg:#cal 9 2050

7.4 关机和重启

关机: halt ; poweroff

重启: reboot  : -f: 强制,不调用shutdown   -p: 切断电源

关机或重启:shutdown

shutdown [OPTION]... [TIME] [MESSAGE]

-r: reboot   -h: halt   -c:cancel    TIME:无指定,默认相当于+1(CentOS7):now: 立刻,相当于+0    +#: 相对时间表示法,几分钟之后;例如 +3   hh:mm: 绝对时间表示,指明具体时间

7.5 用户登录信息查看命令

whoami: 显示当前登录有效用户 who: 系统当前所有的登录会话 w: 系统当前所有的登录会话及所做的操作

7.6 文本编辑

nano 工具可以实现文本的编辑,上手容易,适合初学者  gedit 工具是图形工具

7.7 会话管理

命令行的典型使用方式是,打开一个终端窗口(terminal window,以下简称"窗口"),在里面输入命 令。用户与计算机的这种临时的交互,称为一次"会话"(session)

会话的一个重要特点是,窗口与其中启动的进程是连在一起的。打开窗口,会话开始;关闭窗口,会话 结束,会话内部的进程也会随之终止,不管有没有运行完。

一个典型的例子就是,SSH 登录远程计算机,打开一个远程窗口执行命令。这时,网络突然断线,再次 登录的时候,是找不回上一次执行的命令的。因为上一次 SSH 会话已经终止了,里面的进程也随之消 失了。为了解决这个问题,会话与窗口可以"解绑":窗口关闭时,会话并不终止,而是继续运行,等到 以后需要的时候,再让会话"绑定"其他窗口。

终端复用器软件就是会话与窗口的"解绑"工具,将它们彻底分离:(1)它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。 (2) 它可以让新窗口"接入"已经存在的会话。 (3)它允许每个会话有多个连接窗口,因此可以多人实时共享会话。 (4)它还支持窗口任意的垂直和水平拆分。 类似的终端复用器还有Screen,Tmux

7.7.1 screen

利用screen 可以实现会话管理,如:新建会话,共享会话等

CentOS7 来自于base源,CentOS8 来自于epel源

安装 screen:yum -y install screen  #CentOS7    dnf -y install epel-release   dnf -y install screen   #CentOS8

screen命令常见用法:创建新screen会话 screen –S [SESSION] 加入screen会话 screen –x [SESSION] 退出并关闭screen会话 exit 剥离当前screen会话 Ctrl+a,d 显示所有已经打开的screen会话 screen -ls 恢复某screen会话 screen -r [SESSION]

7.7.2 tmux

Tmux 是一个终端复用器(terminal multiplexer),类似 screen,但是更易用,也更强大 。Tmux 就是会话与窗口的"解绑"工具,将它们彻底分离,功能:它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。 它可以让新窗口"接入"已经存在的会话。 它允许每个会话有多个连接窗口,因此可以多人实时共享会话。 它还支持窗口任意的垂直和水平拆分。

yum install tmux ; 启动与退出 :tmux exit

7.8 输出信息 echo

echo 命令可以将后面跟的字符进行输出 功能:显示字符,echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加 上换行号

echo [-neE][字符串] 

选项: -E (默认)不支持 \\ 解释功能 -n 不自动换行 -e 启用 \\ 字符的解释功能

显示变量:echo "$VAR_NAME”   #用变量值替换,弱引用; echo \'$VAR_NAME’   #变量不会替换,强引用

启用命令选项-e,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:

\\a 发出警告声 \\b 退格键 \\c 最后不加上换行符号 \\e escape,相当于\\033 \\n 换行且光标移至行首 \\r 回车,即光标移至行首,但不换行 \\t 插入tab \\\\ 插入\\字符 \\0nnn 插入nnn(八进制)所代表的ASCII字符 \\xHH插入HH(十六进制)所代表的ASCII数字(man 7 ascii)

7.8.2 echo 高级用法

在终端中,ANSI定义了用于屏幕显示的Escape屏幕控制码 具有颜色的字符,其格式如下: "\\033[字符背景颜色;字体颜色m字符串\\033[0m"

\\033[30m -- \\033[37m 设置前景色

\\033[40m -- \\033[47m 设置背景色

#字符背景颜色范围: 40--47    40:黑 41:红 42:绿 43:黄 44:蓝 45:紫 46:深绿  47:白色

#字体颜色: 30--37                  30: 黑 31: 红 32: 绿 33: 黄 34: 蓝 35: 紫 36: 深绿 37: 白色

加颜色只是以下控制码中的一种,下面是常见的一些ANSI控制码:

\\033[0m   关闭所有属性   \\033[1m   设置高亮度   \\033[4m   下划线   \\033[5m   闪烁   \\033[7m   反显   \\033[8m   消隐   \\033[nA   光标上移n行   \\033[nB   光标下移n行   \\033[nC   光标右移n列   \\033[nD   光标左移n列   \\033[x;yH 设置光标位置x行y列   \\033[2J   清屏

8 字符集和编码

许多场合下,字符集与编码这两个概念常被混为一谈,但两者是有差别的。字符集与字符集编码是两个 不同层面的概念。

charset是character set的简写,即字符集,即二进制和字符的对应关系,不关注最终的存储形式 encoding是charset encoding的简写,即字符集编码,简称编码,实现如何将字符转化为实际的二进制 进行存储或相反,编码决定了空间的使用的大小。

9 命令行扩展和被括起来的集合

9.1 命令行扩展:`` 和 $()

把一个命令的输出打印给另一个命令的参数,放在``中的一定是有输出信息的命令 $(COMMAND) 或 `COMMAND`

比较 ‘ ’,“ ” , ``三者区别:

单引号:强引用,六亲不认,变量和命令都不识别,都当成了普通的字符串,"最傻"

双引号:弱引用,不能识别命令,可以识别变量,"半傻不精"

反向单引号:里面的内容必须是能执行的命令并且有输出信息,变量和命令都识别,并且会将反向单引号的内 容当成命令进行执行后,再交给调用反向单引号的命令继续,"最聪明"

9.2 括号扩展:

可以实现打印重复字符串的简化形式   元素1..元素2=元素1,元素2,元素3 

关闭和启用的扩展功能:echo $-  set +B  set -B

10 tab 键补全

tab 键可以实现命令及路径等补全,提高输入效率,避免出错

内部命令

外部命令:bash根据PATH环境变量定义的路径,自左而右在每个路径搜寻以给定命令名命名的文 件,第一次找到的命令即为要执行的命令

命令的子命令补全,需要安装 bash-completion

注意:用户给定的字符串只有一条惟一对应的命令,直接补全,否则,再次Tab会给出列表

10.2 路径补全

把用户给出的字符串当做路径开头,并在其指定上级目录下搜索以指定的字符串开头的文件名 如果惟一:则直接补全 否则:再次Tab给出列表

10.3 双击Tab键

command 2Tab 所有子命令或文件补全 string2Tab 以string开头命令 /2Tab 显示所有根目录下一级目录,包括隐藏目录 ./2Tab 当前目录下子目录,包括隐藏目录 *2Tab 当前目录下子目录,不包括隐藏目录 ~2Tab 所有用户列表 $2Tab 所有变量 @2Tab /etc/hosts记录 (centos7 不支持) =2Tab 相当于ls –A (centos7不支持)

11 命令行历史

当执行命令后,系统默认会在内存记录执行过的命令

当用户正常退出时,会将内存的命令历史存放对应历史文件中,默认是 ~/.bash_history

登录shell时,会读取命令历史文件中记录下的命令加载到内存中

登录进shell后新执行的命令只会记录在内存的缓存区中;这些命令会用户正常退出时“追加”至命令历史 文件中

利用命令历史。可以用它来重复执行命令,提高输入效率

命令:history

-c: 清空命令历史 -d offset: 删除历史中指定的第offset个命令 n: 显示最近的n条历史 -a: 追加本次会话新执行的命令历史列表至历史文件 -r: 读历史文件附加到历史列表 -w: 保存历史列表到指定的历史文件 -n: 读历史文件中未读过的行到历史列表 -p: 展开历史参数成多行,但不存在历史列表中 -s: 展开历史参数成一行,附加在历史列表后

命令历史相关环境变量:

HISTSIZE:命令历史记录的条数 HISTFILE:指定历史文件,默认为~/.bash_history HISTFILESIZE:命令历史文件记录历史的条数 HISTTIMEFORMAT="%F %T `whoami` "   显示时间和用户 HISTIGNORE="str1:str2*:…" 忽略str1命令,str2开头的历史 HISTCONTROL:控制命令历史的记录方式 ignoredups 是默认值,可忽略重复的命令,连续且相同为“重复” ignorespace 忽略所有以空白开头的命令 ignoreboth   相当于ignoredups, ignorespace的组合 erasedups   删除重复命令

持久保存变量:

以上变量可以 export 变量名="值" 形式存放在 /etc/profile 或 ~/.bash_profile

12 调用命令行历史

重复前一个命令方法: 重复前一个命令使用上方向键,并回车执行 ;按 !! 并回车执行 ;输入!-1 并回车执行 ;按 Ctrl+p 并回车执行

13 bash的快捷键

Ctrl + l 清屏,相当于clear命令 Ctrl + o 执行当前命令,并重新显示本命令 Ctrl + s 阻止屏幕输出,锁定 Ctrl + q 允许屏幕输出,解锁 Ctrl + c 终止命令 Ctrl + z 挂起命令 Ctrl + a 光标移到命令行首,相当于Home Ctrl + e 光标移到命令行尾,相当于End Ctrl + f 光标向右移动一个字符 Ctrl + b 光标向左移动一个字符 Ctrl + xx 光标在命令行首和光标之间移动 Alt + f 光标向右移动一个单词尾 Alt + b 光标向左移动一个单词首 Ctrl + u 从光标处删除至命令行首 Ctrl + k 从光标处删除至命令行尾 Alt + r     删除当前整行 Ctrl + w 从光标处向左删除至单词首 Alt + d 从光标处向右删除至单词尾 Alt + Backspace 删除左边单词 Ctrl + d 删除光标处的一个字符 Ctrl + h 删除光标前的一个字符 Ctrl + y 将删除的字符粘贴至光标后 Alt + c 从光标处开始向右更改为首字母大写的单词 Alt + u 从光标处开始,将右边一个单词更改为大写 Alt + l 从光标处开始,将右边一个单词更改为小写 Ctrl + t 交换光标处和之前的字符位置 Alt + t 交换光标处和之前的单词位置 Alt + # 提示输入指定字符后,重复显示该字符#次

注意:Alt组合快捷键经常和其它软件冲突

 

编程基础 linux基础入门--linux为何物?

接触linux是在大二的时候,那时候迷上了嵌入式linux,把电脑换成了linux系统,学习linux基础知识,学习linux命令,学习shell,泡论坛,就这样慢慢的平时工作学习都可以使用linux系统完成了。到了毕业工作的时候,正式开始android开发,使用的正是ubuntu系统,多亏上学时候的linux基础知识,工作的时候也算得心应手。随着工作时间的增长,使用linux系统也越来越熟练,慢慢的发现做开发已经离不开linux了,离不开linux里面的shell了,使用shell命令的工作效率实在是太高了。

linux蜕变于unix,自大神Linus Torvalds创造出linux后,linux已经不断的在改变我们的生活,越来越越发挥着不可缺少的作用。君不见电梯里的电子广告牌,各种电视盒子,我们最常见的android手机,甚至于那些你平时不注意的电子设备,都可能运行着linux操作系统。

正是由于linux越来越多地用于各种嵌入式设备,基于linux的开发也一直是非常热门的技术。想要开发linux,首先要会熟练的使用linux,笔者作为过来人,就来和对linux感兴趣的初学者来聊聊linux。

上文提到过,linux就是根据unix演变过来的。当年linus就是因为接触到了unix而后才自己想开发一个简易的系统内核的,他开发的简易系统内核就是linux。当时linus把开发的这个系统内核丢到网上提供大家下载,由于它的精致小巧,越来越多的爱好者去研究它。人们对这个内核添枝加叶,而后成为了一个系统。也许你听说过吧,linux是免费开源的,所有人都可以拿到它的代码。这里的免费只是说linux的内核免费。在linux内核的基础上而产生了众多linux的发行版就不一定免费了。

Linux的发行版说简单点就是将Linux内核与应用软件做一个打包。较知名的发行版有:Ubuntu、RedHat、CentOS、Debain、Fedora、SuSE、OpenSUSE、TurboLinux、BluePoint、RedFlag、Xterm、SlackWare等。笔者只简单介绍了一下linux起源及发行版,如果你有兴趣,可以上网上搜索到非常全面的关于linux的介绍。

由于篇幅原因,小编暂时就聊到这里,后续会持续推出在linux上开发的基础知识。欢迎关注!

以上是关于Linux 基础的主要内容,如果未能解决你的问题,请参考以下文章

编程基础 linux基础入门--linux为何物?

linux具体要学点啥,基础要学啥?

linux入门基础——linux用户基础

Linux基础篇--linux基础和帮助用法

Linux基础(03)常用基础指令和操作

Linux操作基础