linux学习

Posted

tags:

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

1:linux终端可以分为以下几类:
(1)设备终端:键盘,鼠标,显示器。
(2)物理终端(/dev/console):控制台console
(3)虚拟终端:共有6个,其中有一个是图形化终端(Ctrl+Alt+F1),其余终端分别对应Ctrl+Alt+F2~F6。
(4)串行终端(/dev/ttyS#):通过串行端口登录,终端名为、dev/ttys
(5)伪终端(pty):字符或图形化界面打开的终端。
(6)通过tty命令可以查看当前终端的终端名。
2:SSH为Secure Shell的缩写,由IETF的网络工作小组(Network Working Group)所制定;SSH为建立在应用层和传输层基础上的安全协议。
SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。透过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。
SSH之另一项优点为其传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、POP、甚至为PPP提供一个安全的“通道”。
想要远程控制服务器就要安装SSH的客户端:x-shell或SecureCRT。
3:shell是一种人机交互语言,是用户和Linux操作系统之间的接口。它接收用户输入的命令并把它送入内核。Shell也被称为Linux的命令解释器,是一种高级程序语言。
windows shell
powershell
dos

linux  unix like
    sh
    bash (default) rhel/suse/ubuntu/fedora/debian/macOS
    ksh
    csh
    zsh
    nologin

mobile
    ios
    android

echo $SHELL 查看当前的shell类型
cat /etc/shells 查看当前系统所安装的Shell
命令提示符
whoami 显示当前用户名
who am/are/is 任意字符 显示当前的终端信息
who 显示所有终端的信息
w 显示所有终端的详细信息及所做的操作
id 显示当前用户信息(包含用户名、uid、组名、gid)
pwd显示当前所在目录的绝对路径。
[[email protected] ~]#
[用户名@主机名前缀 目录路径后缀]#|$ (root是为#,普通用户时为$)
echo $PS1显示当前的提示符格式
PS1="[\e[32m][\[email protected]\h \W]\$[\e[0m] ":将命令提示符颜色改为红色。(如果想要命令提示符一直变色则要讲此命令存在/etc/bashrc文件下)
4:内部与外部命令(重点)
内部命令:集成在内存中的命令,这类命令使用频率非常高。
外部命令:存储在硬盘中的命令,这类命令使用频率不高。
那么如何知道一条命令是外部还是内部命令呢?我们可以通过type command 命令来查询该命令是内部还是外部命令。
我们还可以用enable命令来激活,禁用,显示内部命令:
enable 显示所有已激活的内部命令
enable command 激活被禁用的内部命令
enable |wc -l 显示激活中的内部命令的数量
enable -a 显示所有的内部命令
enable -a |wc -l 显示所有的内部命令的数量
enable -n 显示所有被禁用的内部命令
enable -n command 禁用某个内部命令
命令的执行顺序问题:
例子:
(1)执行echo 123
(2)禁用echo
(3)执行echo 456
结果发现echo虽然被禁用了,但依旧打印出456在上了,接着用type命令查询echo,发现echo被hash在了/bin/echo目录。Echo被禁用后变为外部命令,系统会根据PATH变量从左到右寻找echo,最终在/bin/下找到了echo,并存储在hash中。
(4)将 /sbin/ifconfig 移到/usr/bin下取名为echo
(5)创建一个/root/bin目录,并将/bin/echo移入/root/bin下,再执行echo命令结果出错,这是什么原因呢?首先当执行命令时,系统先到内存中查找被激活的内部命令,如果找不到就到外部中查找,但由于之前已经查找过一遍,并将查找结果(路径)存到hash中,由于我们已经移走了,系统就找不到了。
(6)hash -r 清空所用的hash表,再执行echo命令
结果我们发现系统给我们的是IP地址。这是因为我们清空了hash表系统重新从PATH变量中寻找echo,并在/usr/bin下找到了echo,不过这是我们改的用来查IP的。并重新存在hash表中。
(7)enable echo 激活echo后运行echo命令。发现输出空行,这是因为内部命令激活,系统重新从内存中找,不在找hash表。
总结来看系统以已下顺序查找命令:
内部命令
外部命令
hash
PATH
hash
hash 显示所有被hash的命令路径
hash -l 显示所有被hash的命令路径,包含别名
hash -d 别名 删除指定别名的hash条目
hash -r 清空所有的hash
hash -t 别名 显示别名的hash路径
hash -p 路径 别名 手工增加一条hash

help 内部命令  查看内部命令的帮助信息

5别名:
alias 显示所有的别名信息
alias 别名=‘command -选项 参数‘
unalias 别名
unalias -a 取消所有别名
别名的保存 nano /etc/bashrc
使命令不受别名影响的方式
\command
‘command‘
"command"
/path/command
6简单命令及其执行语法
Command 【选项】 【参数】
;命令连接符,用来连接两个命令,前一个执行完,再执行后一个
\ 命令换行
date
+%Y 年
+%m 月
+%d 日
+%H 时
+%M 分
+%S 秒
+%w 星期
+%F 年-月-日
+%T 时:分:秒

设置时间
date 102013112020.45 月日时分年[.秒]
date -s ‘年-月-日 时:分:秒‘

poweroff关机
reboot重启
init 0 关机
init 6 重启
shutdown -r 重启
shutdown -h 关机
shutdown +1
shutdown 20:00
shutdown -c 取消计划关机
screen
screen 生成默认命令方式的screen即终端名.主机名前缀
screen -S 会话名 创建指定名的screen
screen -x 会话名 加入已创建的screen
screen -ls 查看所有已打开的Screen

echo
-E 不开始解释功能,默认
-n 不自动换行
-e 开启解释功能 ""
\a 警告声
\b 退格
\c 不换行
\n 回车换行
\r 回车,即光标移至行首,但不换行
\t 插入tab
\ 插入\
7:history
history 查询历史记录
!n 重复执行某条历史
!! 重复执行上一条命令
ctrl+p 等于上箭头
ctrl+n 等于下箭头
ctrl+j 等于回车
!string 重复前一个以“string”开头的命令
!?string
ctrl+r 命令历史中搜索命令

history -c 清空当前的所有历史记录
history -d 删除某条历史
history -a 将当前终端新执行的命令写入历史记录文件   (文件由变量HISTFILE决定,默认为用户家目录下的.bash_history
history -w /path/filename.txt 将历史记录写入指定文件
history -n 将未读过的历史从文件中读取
history -r 将所有的历史从文件中读取\

history显示当前终端的历史记录
!! 重复执行上一条命令
!-n 重复执行倒数第n条命令
!n 重复执行第n条命令
ctrl+p 等于向上方向键,翻出上一条命令。
ctrl+n 等于向下方向键,翻出下一条命令。
ctrl+j 等于enter 执行当前命令
!:0 执行前一条命令(去除参数)
!string 重复前一个以“string”开头的命令
!?string 重复前一个包含string的命令
!string:p 仅打印以string开头的命令历史,而不执行
!$:p 打印输出 !$ (上一条命令的最后一个参数)的内容
!:p 打印输出 !(上一条命令的所有参数)的内容
^string 删除上一条命令中的第一个string
^string1^string2 将上一条命令中的第一个string1替换为string2
!:gs/string1/string2 将上一条命令中所有的string1都替换为string2
ctrl-r来在命令历史中搜索命令
(reverse-i-search)`’:
Ctrl+g:从历史搜索模式退出
要重新调用前一个命令中最后一个参数:
!$ 表示
Esc, .(点击Esc键后松开,然后点击 . 键)
Alt+ .(按住Alt键的同时点击 . 键)

command !^ : 利用上一个命令的第一个参数做cmd的参数
command !$ : 利用上一个命令的最后一个参数做cmd的参数
command !* : 利用上一个命令的全部参数做cmd的参数
command !:n : 利用上一个命令的第n个参数做cmd的参数
command !n:^ 调用第n条命令的第一个参数
command !n:$ 调用第n条命令的最后一个参数
command !n:m 调用第n条命令的第m个参数
command !n:* 调用第n条命令的所有参数
command !string:^ 从命令历史中搜索以 string 开头的命令,并获取它的第一个参数
command !string:$ 从命令历史中搜索以 string 开头的命令,并获取它的最后一个参数
command !string:n 从命令历史中搜索以 string 开头的命令,并获取它的第n个参数
command !string:* 从命令历史中搜索以 string 开头的命令,并获取它的所有参数

8:$的3个作用:
$() 或 ``引用命令执行的结果
$(()) 或$[]进行运算
使用${}或"$变量名" 划定变量名的起止范围。
9:bash快捷键
Ctrl+L 清屏
Ctrl+O 执行当前命令,并重新显示本命令
Ctrl+s 锁定,但仍可以运行命令。
Ctrl+q 解锁
Ctrl+C 强制结束
Ctrl+D 正常终止
Ctrl+Z 挂起(暂停)命令
Ctrl + a 光标移到命令行首,相当于Home
Ctrl + e 光标移到命令行尾,相当于End
Ctrl + f 光标向右移动一个字符
Ctrl + b 光标向左移动一个字符
Alt + f 向右移动一个单词
Alt + b 向左移动一个单词
Ctrl + xx 光标在命令行首和光标之间移动
Ctrl + u 删除光标之前的内容
Ctrl + k 删除光标这后的内容
Alt + r 清除全部内容
Ctrl + w 从光标处向左删除至单词首
Alt + d 从光标处向右删除至单词尾
Ctrl + d 删除光标后的一个字符
Ctrl + h 删除光标前的一个字符
Ctrl + y 将删除的字符粘贴至光标后
Alt + c 从光标处开始向右更改为首字母大写的单词
Alt + u 从光标处开始,将右边一个单词更改为大写
Alt + l 从光标处开始,将右边一个单词更改为小写
Ctrl + t 交换光标处和之前的字符位置
Alt + t 交换光标处和之前的单词位置
Alt + N 提示输入指定字符后,重复显示该字符N次(N表示具体的数字)
Ctrl-Shift-n 创建新窗口
Ctrl-Shift-q 关闭当前窗口
Ctrl-Shift-t 创建一个标签页
Ctrl-Shift-w 关闭一个标签页
Ctrl-PaUp/PgUn 切换到下一个/前一个标签页
Ctrl-Shift-c 复制选中的文本
Ctrl-Shift-v 把文本粘帖到当前光标处
10:查找帮助:
当我们遇到忘记一些指令时,我们可以通过linux系统来查找命令的用法
对于内部命令我们可以用help command 来查找该命令的用法。
对于外部命令我们可以用command --help来查找
但这种方式有一些问题,查找不全面,触发方式不一,所以我们可以用man来查找
Man:共分为9个章节,分别是用户命令,系统调用,C库调用,设备文件及特殊文件,配置文件格式,游戏,杂项,管理类命令还有Linux内核API。
查找命令格式为man【0-9】 command 。用该命令还可以提取关键字,翻页也方便。
11:目录结构
(1)文件有两类数据:数据和元数据,元数据是指文件的权限,文件类型,UID,gid,数据区位置,大小,时间,文件链接数等等。
(2)Linux文件的后缀名并不重要。
(3)linux中的各个目录及作用
/boot:引导文件存放目录,内核文件,引导加载器存放在这里
/bin:二进制文件存放的地方,也就是执行文件存放的地方
/sbin:管理员才能进入并sbin下执行命令
/lib:库文件,方便调用
/home:家目录,除管理员外别的用户不能访问。软件的个性化配置。
/root: 管理员的家目录
/etc:配置文件
/dev:设备文件存储位置
/media:移动设备挂载点
12.时间戳
atime 访问时间
mtime 文件数据修改时间
ctime 文件元数据修改时间
stat filename

touch filename 当文件不存在时,则创建一个空文件,名为filename
当文件已存在时,则更新期时间戳
-a 仅更新atime,ctime
-m 仅更新mtime, ctime
touch filename 更新全部时间戳。

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

[linux][c/c++]代码片段01

[linux][c/c++]代码片段02

IOS开发-OC学习-常用功能代码片段整理

java SpringRetry学习的代码片段

python 机器学习有用的代码片段

linux打开终端如何启动scala,如何在终端下运行Scala代码片段?