linux命令
标题
linux学习笔记
一、初见命令
tty 当前连接的终端设备窗口号。 /dev/pts/1 /dev/pts/2
who 查看当前登陆该终端的所有用户
whoami 查看当前用户身份 //who am i 两种写法显示效果不一样
hostname -I 查看当前域名ip
free -h 当前系统消耗的内存/磁盘占用情况
runlevel 查看当前终端模式 (N 5) (5 3) // (上一个模式 当前模式)
init 切换模式 //3字符 5图形 (init 3)
gedit 编辑修改文件 ( 例:geidt /etc/motd) //motd是登录后的提示文件,issue登录前的提示文件
nano 编辑修改文件(字符界面的工具,不依赖于图形,可以输入中文进入文件)
ps aux 查看列出当前系统运行的所有程序
sudo passed 用户名 修改用户密码
sudo -i 切换成root用户
hostname 设置主机名(hostname NAME)
//bj-yz-k8s-nodel-100-10.magedu.com
hostnamectl 可以把文件(断电不丢失)和内存(断电丢失)都改了
(例:hostnamectl set0hostname 新的主机名)
//nano也可以修改文件,把主机名修改,断电不丢失
reboot 重新启动计算机
lscpu 查看当前一级缓存、二级缓存
exit; logout; 退出
echo (例:echo $PS1 $SHELL $PATH) //$SHELL当前shell类型
type 查看当前命令是否属于shell内部命令 (type xxx)
hash 列出曾经执行过的外部命令的路径(即存储的位置)//该命令缓存在hash中
help 内部命令列表
hash -r 删除缓存
bc 计算器一种交互式命令(obase=2,定义输出是二进制)
rpm -qa | grep xxx 查询一个安装包是否安装
php-fpm restart
5 cd opt/homebrew/etc/php
brew services restart nginx
ubuntu上安装工具
安装ssh sudo apt-get install ssh
安装vim sudo apt-get install vim
shell
显示当前使用的shell echo ${SHELL}
显示当前系统使用的所有shell echo /etc/shells
二、命令提示符 prompt
例:[root@localhost ~]#
# 管理员
$ 普通用户
1、显示提示符格式
[root@centos8 ~]#echo $PS1
\[\e[1;35m\][\u@\h \W]\$\[\e[0m\]
(\h代表当前主机 \W代表当前用户名 \$代表提示符)
2、修改提示符
PS1=”\[\e[1;5;41;33m\][\u@\h \W]\\$\[\e[0m\]”
PS1=”\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\
[\e[0m\]\\$”
1;字体高亮 5;闪烁 41;背景颜色(41-47) 33m字体颜色
\t显示时间
3、提示符格式说明
\e 控制符\033
\u 当前用户
\h 主机名简称
\H 主机名
\w 当前工作目录
\W 当前工作目录基名
\t 24小时时间格式
\T 12小时时间格式
! 命令历史数
# 开机后命令历史数
!!!提示符的修改是保存在内存中的,断电丢失,如果要永久修改提示符,修改env文件即可(只能在centos上操作,ubuntu不可以)
例:持久保存提示格式相关变量PS1
[root@centos8 ~]# echo ‘PS1=”\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\
[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$”‘ > /etc/profile.d/env.sh
[root@centos8 ~]#cat /etc/profile.d/env.sh
PS1=”\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\
[\e[0m\]\\$”
[root@centos8 ~]# exit
logout
Connection closed by foreign host.
Disconnected from remote host(centos8) at 15:28:38.
Type `help’ to learn how to use Xshell prompt.
[c:\~]$
Reconnecting in 1 seconds. Press any key to exit local shell.
.
Connecting to 10.0.0.100:22…
Connection established.
To escape to local shell, press ‘Ctrl+Alt+]’.
Activate the web console with: systemctl enable –now cockpit.socket
Last login: Wed Dec 11 15:28:34 2019 from 10.0.0.1
[15:28:40 root@centos8 ~]#
三、执行命令
优先级:别名>内部命令>外部命令
(如果一个命令既是别名又是内部命令,则优先执行别名的命令作用。如果想让它执行的是内部命令,见下文)
1、执行命令过程
输入命令后回车,提请shell程序找到键入命令所对应的可执行程序或代码,并由其分析后提交给内核分 配资源将其运行起来
2.1、内部命令:shell自带
外部命令:在文件系统路径下有对应的可执行程序文件
2.2、type 区别指定的命令是内部或外部命令
2.3、内部命令相关
help 内部命令列表
enable 管理内部命令
enable cmd 启用内部命令
enable -n cmd 禁用内部命令
enable -n 查看所有禁用的内部命令
2.4、执行外部命令
查看外部命令路径:
- which: 显示外部命令的路径 // which -a |—skip-alias
- whereis:显示外部命令的文件路径及帮助文档的路径
2.5、Hash缓存表
系统初始hash表为空,当外部命令执行时,默认会从PATH路径寻找该命令,找到后会将这条命令的路径记录到hash表中,当再次使用该命令时,shell解释器首先会查看hash表,存在则执行,不存在,将会去PATH路径下寻找,利用hash缓存表可大大提高命令的调用效率
hash命令常见用法
- hash 显示hash缓存
- hash -l 显示hash缓存,可作为输入使用
- hash -p path name 将命令全路径path起别名为name
- hash -t name 打印缓存中name的路径
- hash -d name 清除name缓存
- hash -r 清除缓存
3、命令别名
- alias 显示当前shell进程所有可用的命令别名
- alias NAME=‘VALUE’ 定义别名NAME,执行NAME,相当于执行VALUE例:[root@centos8 ~]#echo “alias free=’free -h'” >> .bashrc (别名保存在bashrc文件中)
定义别名不能立马生效,可以退出重新登录 或 ..bashrc命令
别名生效方式:退出重新登录 或 .后面跟上一个文件,执行命令
- 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/command //只适用于外部命令
别名是临时的,hash缓存的是外部命令
4、命令格式
COMMAND [OPTIONS…] [ARGUMENTS…]
选项:用于启用或关闭命令的某个或某些功能
短选项:UNIX风格,-c 例如:-l,-h
长选项:GNU风格选项,–word 例如:–all, –human
BSD风格选项:一个字母, 例如:a,使用相对较少
参数:命令的作用对象,文件名、用户名等
id -u wang (显示wang这个用户的id)
ls –a
ls –all
free -h
free –human
ps a
注意:
- 多个选项以及多参数和命令之间使用空白字符分隔
- 取消和结束命令执行:Ctrl+c(强制退出), Ctrl+d(一般退出)
- 多个命令可以用“,”符号分开
- 一个命令可以用\分成多行
四、常见命令
1、查看cpu
lscpu
cat /proc/cpuinfo
2、查看内存大小:
free
cat /proc/meminfo (proc目录对应是内存中的数据,显示当前系统的状态,都以内存方式保存,即meminfo为内存中的文件)
3、查看硬盘和分区情况
lsblk
cat /proc/partitions
4、查看内核版本
uname -r
5、查看操作系统发行版本
centos:
cat /etc/redhat-release (红帽)
cat /etc/os-release (Ubuntu)
lsb_release -a
ubuntu:
cat /etc/os-release
cat /etc/issue
lsb_release -a
6、日期和时间
Linux的两种时钟
系统时钟:由Linux内核通过CPU的工作频率进行的
硬件时钟:主板
systemctl status chrony 可以查看chrony是否安装,这个软件可以校正系统时间,否则只能用date手动校正
- date 显示和设置系统时间
date可以修改时间,例如:date 062018302020.50
[root@centos8 ~]#date +%s
1584689051
[root@centos8 ~]#date -d @`date +%s`
Fri Mar 20 15:24:18 CST 2020
[root@centos8 ~]#date -d @1584689051
Fri Mar 20 15:24:11 CST 2020
[root@centos8 ~]#date -d @1584689051 +%F_%T
2020-03-20_15:24:11
- clock,hwclock: 显示硬件时钟
-s, –hctosys 以硬件时钟为准,校正系统时钟
-w, –systohc 以系统时钟为准,校正硬件时钟 (clock -w)
- 时区 /etc/localtime
设置时区 timedatectl set-timezone Asia/Shanghai
列出所有时区 timedatectl list-timezones
centos:
[root@centos8 ~]#timedatectl set-timezone Asia/Shanghai
[root@centos8 ~]#ll /etc/localtime
lrwxrwxrwx. 1 root root 35 Dec 11 11:19 /etc/localtime ->
../usr/share/zoneinfo/Asia/Shanghai
ubuntu: cat /etc/timezone
root@ubuntu1804:~# cat /etc/timezone
Asia/Shanghai
- 显示日历 cal
cal :显示当月的日历
cal -y:显示今年整年的日历
cal -2021:显示2021年整年日历
cal 10 2040:显示2040年10月份的日历
7、关机和重启
关机: 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 绝对时间表示,指明具体时间
8、用户登录信息查看命令
whoami: 显示当前登录有效用户
who: 系统当前所有的登录会话
w: 系统当前所有的登录会话及所做的操作
9、文本编辑
nano: 工具可以实现文本的编辑,上手容易,适合初学者
gedit: 图形工具
vim:
10、会话管理
命令行的典型方式是,打开一个终端窗口,在里面输入命令。用户与计算机的这种临时的交互,成为一次“会话”。
会话特点:
窗口与其中启动的进程是连在一起的。打开窗口,会话开始;关闭窗口,会话结束,会话内部的进程也会随之种植,不管有没有运行完
例: SSH登录远程计算机,打开一个远程窗口执行命令。这时,网络突然断线,再次登录的时候,是找不回上次执行的命令的。因为上一次SSH会话已经终止,里面的进程也随之消失了。为了解决这个问题,会话与窗口可以“解绑”;窗口关闭时,会话并不终止,而是继续运行,等到以后需要的时候,再让会话“绑定”其他窗口。
?终端复用器: 会话与窗口的解绑工具,将它们彻底分离。
- 它允许在单个窗口中,同时访问多个会话,这对于同时运行多个命令行程序很有用。
- 它可以让新窗口“接入”已经存在的会话
- 允许每个会话有多个连接窗口,因此可以多人实时共享会话
- 支持窗口任意的垂直和水平拆分
类似的终端复用器还有:Screen,Tmux
(1) screen
安装screen: dnf -y install screen (centos8)
yum -y install screen (centos6、centos7、centos8)
- 创建新screen会话 screen -S [SESSION]
- 加入screen会话 screen -x [SESSION]
- 退出并关闭screen会话 exit (该操作会把原登录用户踢出)
- 剥离当前screen会话 Ctrl+a,d (按住Ctrl+a ,松手按d键)
- 显示所有已经打开的screen会话 screen -ls
- 恢复某screen会话 screen -r [SESSION]
注意:CentOS7来自于base源,CentOS8来自于epel源
(2) tmux : 比screen更强大,更易用。 拥有?提及的所有功能
- 安装tmux: yum install tmux
- 启动与退出: tmux / exit
快捷键:默认前缀Ctrl+b (帮助命令:Ctrl+b ?然后按q键退出)
- 新建会话: Tmux new -s <session-name >
(第一个启动的Tmux窗口,编号是0,第二个窗口的编号是1,以此类推。这些窗口对应的会话,就是0号会话、1号会话。。。使用编号区分会话不直观,可以为会话起名)
查看当前所有会话:tmux ls
tmux list-session
- 分离会话: tmux detach 或 按下Ctrl+b
- 接入会话: tmux attach -t <SESSION-name>
(tmux attach -t 0)
- 杀死会话: tmux kill -session -t <session-name>
- 切换会话: tmux switch -t <session-name>
上下分窗格 tmux split-window 或 ctrl+b,’’
左右分窗格 tmux split-window -h 或 ctrl+b,%
#窗格快捷键
Ctrl+b % 划分左右两个窗格
Ctrl+b ‘’ 划分上下两个窗格
Ctrl+b <arrow key> 光标切换到其他窗格 (arrow key 方向键)
Ctrl+b ; 光标切换到上一个窗格
Ctrl+b o 光标切换到下一个窗格
Ctrl+b { 当前窗格左移
Ctrl+b } 当前窗格右移
Ctrl+b Ctrl+o 当前窗格上移
Ctrl+b Alt+o 当前窗格下移
Ctrl+b x 关闭当前窗格
Ctrl+b ! 将当前窗格拆分为一个独立窗口
Ctrl+b z 当前窗格全屏显示,再使用一次会变回原来大小
Ctrl+b Ctrl+<arrow key> 按箭头方向调整窗格大小
Ctrl+b q 显示窗格编号
a、窗口管理
除了将一个窗口划分成多个窗格,Tmux也允许新建多个窗口
- 新建窗口 tmux new-window
tmux new-window -n <window-name> 新建一个指定名称的窗口
- 切换窗口 tmux select-window
tmux select-window -t <window-number> 切换到指定编号
tmux select-window -t <window-name> 切换到指定名称
#窗口快捷键
Ctrl+b c 创建一个新窗口,状态栏会显示多个窗口的信息
Ctrl+b p 切换到上一个窗口(按照状态栏上的顺序)
Ctrl+b n 切换到下一个窗口
Ctrl+b <number> 切换到指定编号的窗口 (<number>状态栏上的窗口编号)
Ctrl+b w 从列表中选择窗口
Ctrl+b , 窗口重命名
列出所有快捷键,及其对应的Tmux命令 tmux list-keys
列出所有Tmux命令及其参数 tmux list-commands
11、输出信息echo
echo:显示字符,会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开,并在最后加上换行号
echo [-neE] [字符串]
-E (默认)不支持、解释功能
-n 不自动换行
-e 启用\字符的解释功能
显示变量
echo “$VAR_NAME” //用变量值替换,弱引用
echo ‘$VAR_NAME’ //变量不会替换,强引用
\ 转义符
echo \$PATH 变量直接当作字符串输出
启用命令选项\e,若字符中出现一下字符,则特别加以处理,而不会将它当成一般文字输出
- \a 发出警告声
- \b 退格键
- \c 最后不加上换行符号
- \e escape,相当于\0333
- \n 换行且光标移至行首
- \r 回车,即光标移至行首,但不换行
- \t 插入tab
- \\ 插入\字符
- \0nnn 插入nnn(八进制)所代表的ASCII字符
- \xHH 插入HH(十六进制)所代表的ASCII数字 (man 7ascii)
[root@centos8 ~]#echo -e ‘a\x0Ab’
a
b
[root@centos8 ~]#echo -e ‘\033[43;31;1;5mmagedu\e[0m’
magedu
[root@centos8 ~]#echo -e ‘\x57\x41\x4E\x47’
WANG
[root@centos8 ~]#echo \$PATH
$PATH
[root@centos8 ~]#echo \
[root@centos8 ~]#echo \\
\
[root@centos8 ~]#echo \\\
>
[root@centos8 ~]#echo \\\\
\\
[root@centos8 ~]#echo “$PATH”
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@centos8 ~]#echo ‘$PATH’
$PATH
五、字符集和编码
查看ascii表
dnf -y install man-pages
man ascii
Unicode编码方案:
- UTF-8: 变长,1到4个字节
- UTF-16: 变长,2到4个字节
- UTF-32: 固定长度,4个字节
编码转换和查询:
http://www.chi2ko.com/tool/CJK.htm
https://javawind.net/tools/native2ascii.jsp?action=transform
http://tool.oschina.net/encode
Unicode和UTF-8
Unicode符号范围 |
UTF-8编码方式 |
0000 0000-0000 007F |
0xxxxxxx |
0000 0080-0000 07FF |
110xxxxx 10xxxxxx |
0000 0800-0000 FFFF |
1110xxxx 10xxxxxx 10xxxxxx |
0001 0000-0010 FFFF |
11110xxx 10xxxxxx 10xxxxxx |
例:修改LANG变量实现中文语言提示
[root@centos7 ~]#xxx
bash: xxx: command not found… [root@centos7 ~]#echo $LANG en_US.UTF-8
[root@centos7 ~]#LANG=zh_CN.UTF-8 [root@centos7 ~]#echo $LANG zh_CN.UTF-8
[root@centos7 ~]#xxx
bash: xxx: 未找到命令…
六、命令行扩展和被括起来的集合
主题
- 此为示例文本。
- 选择以替换为您自己的文本。
- 您可以自定字体、大小、颜色和样式。
- 此为示例文本。
- 选择以替换为您自己的文本。
- 您可以自定字体、大小、颜色和样式。
- 此为示例文本。