平时用的比较多的一些命令整理,毕竟不是专业的,如有需要再补充
用户相关
1. 进入root目录:
1. su - 切换root用户,也会把用户变量切换到root的环境变量
2. su 只会切换root用户,但环境变量还是以前用户的环境变量
3. sudo su 普通用户切换到root用户时权限不够,需要加sudo,输入密码
(sudo使用他人身份执行命令时,输入的是自己的密码,而不是他人的密码)。root切换到其他用户时不需要输入密码
4. sudo cat /etc/shadow # 从一般身份转为root用户并查看/etc/shadow的内容
5. exit 或使用快捷方式Ctrl + D 退回到原来用户(前提:我们是使用root用户从终端切换进入到了一般用户。)
6. 切换用户并切换环境变量
su -test 切换用户test,并切换环境变量
使用sudo命令提供超级管理员权限命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。
使用权限:在 /etc/sudoers 中有出现的使用者。
2. 切换路径 cd
1. cd /system/bin 表示切换到/system/bin路径下。
2. cd logs 表示切换到logs路径下。
3. cd / 表示切换到根目录。
4. cd ../ 表示切换到上一层路径。
3. 查看路径下文件树 ls <参数> <路径>
意义:ls是list的缩写;ls命令后面可以跟一个路径或参数,也可以不跟,表示列出路径或当前目录下的所有文件信息。最常用的的参数是“-l",也就是“ls -l”命令。
ls / 显示根目录下的所有文件及文件夹。
ls -a 查看当前目录下的所有目录和文件(包括隐藏的文件)
ls -l /data 显示/data路径下的所有文件及文件夹的详细信息。
ls -l 显示当前路径下的所有文件及文件夹的详细信息
ls *l wc显示当前目录下面的文件数量。
文件相关
4. 搜索文件
一、locate 在后台数据库中按文件名搜索(也只能按文件名搜索),搜索速度较快
在/etc/updatedb.conf配置文件中会过滤掉一些搜索路径,即在那些路径中的文件用locate命令无法搜索。
二、whereis及which命令
这两个命令用来搜索命令的路径(也遵循/etc/updatedb.conf配置文件的筛选规则)
whereis 命令名 #搜索命令所在路径及帮助文档所在位置
选项:
-b:只查找可执行文件
-m:只查找帮助文件
which 命令名 #查找命令是否存在,以及命令的存放位置在哪儿
linux中要想使某个命令在任何目录下都能执行,可以像windows一样将该命令的路径添加到环境变量PATH下:其中,各个搜索路径是用冒号分隔的。
三、find命令
find 目录 参数 文件名称
find /usr/tmp -name 'a*' # 查找/usr/tmp目录下的所有以a开头的目录或文件,-r 递归
四、grep命令
grep [选项] 字符串 文件名 # 在文件中匹配符合条件的字符串
选型:
-i: 忽略大小写
-v: 排除指定字符串
grep是在文件中查找符合条件的字符串,而不是寻找文件,grep是包含匹配,不像find的那样的完全匹配。另外,grep命令常结合linux管道原理进行二次查找操作,例如:
ll # ll:罗列出当前文件或目录的详细信息,含有时间、读写权限、大小、时间等信息 ,像Windows显示的详细信息。ll是“ls -l"的别名。相当于Windows里的快捷方式。可以理解为 ll 和 ls -l 的功能是相同的, ll 是 ls -l 的别名。
ll | grep study.txt # |表示管道前一个命令的输出的结果作为下一个命令的输入内容
find命令与grep命令的区别
find命令:在系统当中搜索符合条件的文件名,如果需要匹配,使用通配符匹配,通配符是完全匹配。
grep命令:在文件当中搜索符合条件的字符串,如果需要匹配,使用正则表达式进行匹配,正则表达式时包含匹配。
5. 复制文件 cp -r 目录名称 目录拷贝的目标位置 -r代表递归
cp /usr/tmp/aaa /usr # 将/usr/tmp目录下的aaa目录复制到 /usr目录下面
- 注意:cp命令不仅可以拷贝目录还可以拷贝文件,压缩包等,拷贝文件和压缩包时不 用写-r递归
删除文件,删除目录或文件:rm
6. 删除文件 rm
rm file # 删除当前目录下的文件
rm -f file # 删除当前目录的的文件(不询问)
删除目录/删除文件夹:
rm -r aaa # 递归删除当前目录下的aaa目录
rm -rf aaa # 递归删除当前目录下的aaa目录(不询问)
全部删除:
rm -rf * # 将当前目录下的所有目录和文件全部删除
rm -rf /* # 将根目录下的所有文件全部删除
- 注意:rm不仅可以删除目录,也可以删除其他文件或压缩包,为了方便大家的记忆,无论删除任何目录或文件,都直接使用 rm -rf 目录/文件/压缩包
7. 新建文件:touch 文件名
touch aa.txt # 在当前目录创建一个名为aa.txt的文件
8. 移动文件:mv和cp
一、重命名目录 mv 当前目录 新目录
mv aaa bbb # 将目录aaa改为bbb
注意:mv的语法不仅可以对目录进行重命名而且也可以对各种文件,压缩包等进行重命名的操作
二、剪切目录/移动文件夹 mv 目录名称 目录的新位置
mv /usr/tmp/aaa /usr # 将/usr/tmp目录下的aaa目录剪切到 /usr目录下面
注意:mv语法不仅可以对目录进行剪切操作,对文件和压缩包等都可执行剪切操作
三、拷贝目录 cp -r 目录名称 目录拷贝的目标位置 -r代表递归
cp /usr/tmp/aaa /usr # 将/usr/tmp目录下的aaa目录复制到 /usr目录下面
注意:cp命令不仅可以拷贝目录还可以拷贝文件,压缩包等,拷贝文件和压缩包时不用写-r递归
使用两种及以上命令创建文件
1. 命令:mkdir 目录
mkdir aaa # 在当前目录下创建一个名为aaa的目录
mkdir /usr/aaa
2. 命令:touch 文件名
touch aa.txt # 在当前目录创建一个名为aa.txt的文件
3. 命令:echo content > filename # 创建一个名为filename的文件,清空原来的内容写入content
echo content2 > filename # 在filename文件的末尾追加content2
其他问题
软连接、硬链接并简述区别
在linux系统中,链接分两种 :一种被称为硬链接(Hard Link),另一种被称为符号链接或软链接(Symbolic Link)。
-
默认不带参数情况下,ln命令创建的是硬链接。
-
硬链接文件与源文件的inode节点号相同,而软链接文件的inode节点号与源文件不同。
-
ln命令不能对目录创建硬链接,但可以创建软链接,对目录的软链接会经常被用到。
-
删除软链接文件,对源文件及硬链接文件无任何影响;
-
删除文件的硬链接文件,对源文件及软链接文件无任何影响;
-
删除链接文件的原文件,对硬链接文件无影响,会导致其软链接失效(红底白字闪烁状);
-
同时删除原文件及其硬链接文件,整个文件才会被真正的删除。
-
很多硬件设备中的快照功能,使用的就类似硬链接的原理。
-
软连接可以跨文件系统,硬链接不可以跨文件系统。
++附录一++:info ln结果摘录及老男孩老师简译参考
一个硬链接是一个已存在的文件的另一个名字;这个链接和源文件很难发现有不同的地方(除了名称不一样)。从技术上讲,他们共享同一个inode节点号,并且这个节点包含一个文件的所有真实信息(各种属性信息,非文件名和文件内容),把inode当成是文件的说法是不对的。你不能为一个目录创建硬链接,并且硬链接不能穿越文件系统边界。然而,上述限制在POSIX中是不被限制的。符号链接是一个特殊的文件类型,这不是所有的内核都支持的,System V release 3或更老的系统就缺乏符号链接,这个符号连接文件实际上是通过名字指向一个不同的文件(和源文件是不同的文件),当打开,读取,写入等等大多数操作时,会通过符号链接链接到文件,内核自动找到链接并且操作链接的源,但是一些操作(如:删除)等工作是针对链接自身的,而不是链接的源。
文件查看与权限
查看文件内容命令 cat/more/less/tail
头查看文件命令及设置查看行数 head -n file
head -n 2 study.txt # -n后面加显示的行数
尾查看文件命令及设置查看行数 tail
tail -n 30 install.log # -n后面加显示的行数
-f 动态显示,使用场景:动态显示日志
tail -f study.txt
分页查看文件命令
cat:看最后一屏
cat sudo.conf # 使用cat查看/etc/sudo.conf文件,只能显示最后一屏内容
more:百分比显示
示例:使用more查看/etc/sudo.conf文件,可以显示百分比,回车可以向下一行,空格可以向下一页,q可以退出查看
more sudo.conf
less:翻页查看
示例:使用less查看/etc/sudo.conf文件,可以使用键盘上的PgUp和PgDn向上和向下翻页,q结束查看
less sudo.conf
tail:指定行数或者动态查看
示例:使用tail -10 查看/etc/sudo.conf文件的后10行,Ctrl+C结束
tail -10 sudo.conf
改变文件权限(读写可执行) chmod
r: 读取;
w: 写入;
x: 执行。
一、符号模式
chmod [who] operator [permission] filename
who包含的选项及其含义:
u 文件属主权限。
g 属组用户权限。
o 其他用户权限。
a 所有用户(文件属主、属组用户及其他用户)。
operator包含的选项及其含义:
增加权限。
取消权限。
设定权限。
permission包含的选项及其含义:
r 读权限。
w 写权限。
x 执行权限。
s 文件属主和组set-ID。
t 粘性位*。
l 给文件加锁,使其他用户无法访问。
u,g,o 针对文件属主、属组用户及其他用户的操作。
filename为想要操作的文件的文件名。
- 在列文件或目录时,有时会遇到“ t”位。“t”代表了粘性位。如果在一个目录上出现“t”位,这就意味着该目录中的文件只有其属主才可以删除,即使某个属组用户具有和属主同等的权限。不过有的系统在这一规则上并不十分严格。
如果在文件列表时看到“ t”,那么这就意味着该脚本或程序在执行时会被放在交换区(虚存)。
关于“t”权限的进一步解释
1、t 权限是粘着位
例:TMP目录下,任何人都有读写执行权限,但是不是任何人对里边的可写权限的文件就可以删除呢,当然不是了,这个就是粘着位的做用,只有所有者才有权删除自已的文件,当然,ROOT除外
2、关于文件安全的另一种权限,i权限 也就是不可修改权限
例:chattr u+i aaa
则aaa文件就不可修改,无论任何人,如果删除
就用u-i就好了。a 权限 也就是只追加权限, 对于日志系统很好用,这个权限让目标文件只能追加,不能删除,而且不能通过编辑器追加。方法和i权限一样加
如果想要看某个文件是不是有这个权限,用lsattr filename
就行了
例如:temp为一个文件
chmod a-x temp //rw- rw- rw- 收回所有用户的执行权限
chmod og-w temp //rw- r-- r- - 收回属组用户和其他用户的写权限
chmod g+w temp //rw- rw- r- - 赋予属组用户写权限
chmod u+x temp //rwx rw- r- - 赋予文件属主执行权限
chmod go+x temp //rwx rwx r- x 赋予属组用户和其他用户执行权限
二、绝对模式
chmod [mode] file
其中mode为一个8进制数,每一个权限由一个8进制数表示。
0 4 0 0 文件属主可读
0 2 0 0 文件属主可写
0 1 0 0 文件属主可执行
0 0 4 0 属组用户可读
0 0 2 0 属组用户可写
0 0 1 0 属组用户可执行
0 0 0 4 其他用户可读
0 0 0 2 其他用户可写
0 0 0 1 其他用户可执行
在设定权限的时候,只需按照上面查出与文件属主、属组用户和其他用户所具有的权限相对应的数字,并把它们加起来,就是相应的权限表示。
例如,temp文件的符号模式权限查出为:-rwxr--r-- 1 wjr root 0 2008-09-21 16:40 temp
最前面的“-”表示文件为一般文件.
则,相应的绝对模式权限换算过程为:
rwx:0400 + 0200 +0100 (文件属主可读、写、执行) = 0 7 0 0
r--:0 0 4 0 (属组用户可读) = 0 0 4 0
r--:0 0 4 0 (属组用户可读) = 0 0 4 0
0 7 4 4
也可以这样算:
对应的8进制值如下,有相应权限则加上该值,没有则记零,
文件属主:r w x:4 + 2 + 1
属组用户:r w x:4 + 2 + 1
其他用户:r w x:4 + 2 + 1
temp文件的权限为:
1
2
r w x r - - r - -
4+2+1 4 4
把相应的权限加在一起,就是744
可以看出,文件属主、属组用户和其他用户分别所能够具有的最大权限值就是7。
改变权限的命令如:
1
2
$chmod 744 temp
$ls -l temp
结果:
1
-rwxr--r-- 1 wjr root 0 2008-09-21 16:40 temp
命令:
1
2
$chmod 766 temp
$ls -l temp
结果:
1
-rwxrw-rw- 1 wjr root 0 2008-09-21 16:40 temp
还可以通过使用 -R 选项连同子目录下的文件一起设置:
1
$chmod -R 664 /temp/*
这样就可以一次将/ temp目录下的所有文件连同各个子目录下的文件的权限全部设置为文件属主和属组用户可读和写,其他用户只读。
使用- R选项一定要谨慎,只有在需要改变目录树下全部文件权限时才可以使用。
改变文件所属分组
使用chown命令可以修改文件或目录所属的用户:
命令:chown 用户 目录或文件名
chown qq /home/qq # (把home目录下的qq目录的拥有者改为qq用户)
使用chgrp命令可以修改文件或目录所属的组:
命令:chgrp 组 目录或文件名
chgrp qq /home/qq # (把home目录下的qq目录的所属组改为qq组)
一、查看文件的时间及相关命令
- stat 查看文件时间
说明:
- Access:访问时间
- Modify:修改时间
- Change:改变时间 ,可以使用
stat *
查看这个目录所有文件的状态。
而我们想要查看某文件的三个时间中的具体某个时间,并以年月日时分秒的格式保存。我们可以使用下面的命令:
stat study.txt | grep -i Access | awk -F. '{print $1}' | awk '{print $2$3}'| awk -F- '{print $1$2$3}' | awk -F: '{print $1$2$3}' |grep -v 'rwr'
stat study.txt | grep -i Modify | awk -F. '{print $1}' | awk '{print $2$3}'| awk -F- '{print $1$2$3}' | awk -F: '{print $1$2$3}'
stat study.txt |grep -i Change | awk -F. '{print $1}' | awk '{print $2$3}'| awk -F- '{print $1$2$3}' | awk -F: '{print $1$2$3}'
- ls查看文件时间
- modification time(mtime,修改时间):当该文件的“内容数据”更改时,就会更新这个时间。内容数据指的是文件的内容,而不是文件的属性。
- status time(ctime,状态时间):当该文件的”状态(status)”改变时,就会更新这个时间,举例来说,更改了权限与属性,就会更新这个时间。
- access time(atime,存取时间):当“取用文件内容”时,就会更新这个读取时间。举例来说,使用cat去读取 ~/.bashrc,就会更新atime了。
ls -l --time=ctime lnmp-install.log
-rw-r--r--. 1 root root 2228418 May 15 2016 lnmp-install.log
ls -l --time=atime lnmp-install.log
-rw-r--r--. 1 root root 2228418 Apr 18 16:03 lnmp-install.log
注意:ls 参数里没有–time=mtime 这个参数,因为我们默认通过ls -l 查看到的时间就是mtime .
二、更新文件时间
创建文件我们可以通过touch命令来创建,同样的,我们也可以使用touch命令来修改文件时间。touch 的相关参数如下:
-a : 仅修改access time
-c :仅修改时间,而不建立文件
-d :后面可以接日期,也可以使用–date=“日期或时间”
-m :仅修改mtime
-t :后面可以接时间,格式为 [YYMMDDhhmm]
注意:如果touch后面接一个已经存在的文件,则该文件的3个时间(atime/ctime/mtime)都会更新为当前时间。若该文件不存在,则会主动建立一个新的空文件。
利用touch修改文件时间
- 同时变更文件的修改时间和访问时间
- 只变更文件的修改时间
- 只变更文件的访问时间
- 将一个文件的时间修改为与另一个文件的时间相同
另外touch 还支持像date命令一样的参数修改文件时间:
stat install.log
touch -d "3 days ago" install.log
ls -l install.log
总结一下常用的文件操作与时间的关系:
- 访问时间,读一次这个文件的内容,这个时间就会更新。比如对这个文件使用more命令。ls、stat命令都不会修改文件的访问时间。
- 修改时间,对文件内容修改一次,这个时间就会更新。比如:vim后保存文件。ls -l列出的时间就是这个时间。
- 状态改变时间。通过chmod命令更改一次文件属性,这个时间就会更新。查看文件的详细的状态、准确的修改时间等,可以通过stat命令+文件名。
查看内存及选项(不同系统选项不同)
No. | method | command | notes |
---|---|---|---|
1
|
/proc/meminfo
|
cat /proc/meminfo
|
查看RAM使用情况最简单的方法是通过 /proc/meminfo。这个动态更新的虚拟文件实际上是许多其他内存相关工具(如:free / ps / top)等的组合显示。/proc/meminfo列出了所有你想了解的内存的使用情况。进程的内存使用信息也可以通过/proc//statm 和 /proc//status 来查看。
|
2 | atop | sudo atop | atop命令是一个终端环境的监控命令。它显示的是各种系统资源(CPU, memory, network, I/O, kernel)的综合,并且在高负载的情况下进行了彩色标注。 |
3 | free | free -h | free命令是一个快速查看内存使用情况的方法,它是对 /proc/meminfo 收集到的信息的一个概述。 |
4 | GNOME System Monitor | gnome-system-monitor | GNOME System Monitor 是一个显示最近一段时间内的CPU、内存、交换区及网络的使用情况的视图工具。它还提供了一种查看CPU及内存使用情况的方法。 |
5 | htop | htop | 命令显示了每个进程的内存实时使用率。它提供了所有进程的常驻内存大小、程序总内存大小、共享库大小等的报告。列表可以水平及垂直滚动。 |
6 | KDE System Monitor | ksysguard | 功能同 4 中介绍的GENOME版本。 |
7 | memstat | memstat -p | memstat是一个有效识别executable(s), process(es) and shared libraries使用虚拟内存情况的命令。给定一个进程ID,memstat可以列出这个进程相关的可执行文件、数据和共享库。 |
8 | nmon | nmon | nmon是一个基于ncurses的系统基准测试工具,它可以监控CPU、内存、I/O、文件系统及网络资源等的互动模式。对于内存的使用,它可以实时的显示 总/剩余内存、交换空间等信息。 |
9 | ps | ps aux --sort -rss(使用 “–sort”选项对进程进行排序,例如按RSS进行排序) | ps命令可以实时的显示各个进程的内存使用情况。Reported memory usage information includes %MEM (percent of physical memory used), VSZ (total amount of virtual memory used), and RSS (total amount of physical memory used) |
10 | smem | sudo smem --pie name -c “pss” | smem命令允许你统计基于/proc信息的不同进程和用户的内存使用情况。内存使用情况的分析可以导出图表(如条形图和饼图)。 |
11 | top | top | top命令提供了实时的运行中的程序的资源使用统计。你可以根据内存的使用和大小来进行排序。 |
12 | vmstat | vmstat -s | vmstat命令显示实时的和平均的统计,覆盖CPU、内存、I/O等内容。例如内存情况,不仅显示物理内存,也统计虚拟内存。 |
查看硬盘及选项
top -> M 以内存占用率大小倒序排列
top -> P 以CPU占有率大小倒序排列
top -> T 系统会以time+大小倒序排列
查看文件
两种常用查看进程方式
查看某一进程占用内存与CPU: top -p pid
查看系统使用命令 free命令
可用参数:
-b 以Byte为单位显示内存使用情况。
-k 以KB为单位显示内存使用情况。
-m 以MB为单位显示内存使用情况。
-o 不显示缓冲区调节列。
-s <间隔秒数> 持续观察内存使用状况。
-t 显示内存总和列。
-V 显示版本信息。
结果含义:
total 系统总的可用物理内存大小
used 已被使用的物理内存大小
free 还有多少物理内存可用
shared 被共享使用的物理内存大小
buff/cache 被 buffer 和 cache 使用的物理内存大小
available 还可以被 应用程序 使用的物理内存大小
free与avaliable的区别:
free是指未被使用的物理内存数量
available是可以被应用程序使用的内存大小,available = free + buffer + cache
Linux 为了提升读写性能,会消耗一部分内存资源缓存磁盘数据,对于内核来说,buffer 和 cache 其实都属于已经被使用的内存。但当应用程序申请内存时,如果 free 内存不够,内核就会回收 buffer 和 cache 的内存来满足应用程序的请求。
查看硬盘信息 df -hl
6列数据分别的意思是:
硬盘编号、总容量、已使用大小、可用大小、磁盘利用率、挂载点
df [选项] 文件
参数 | 描述 |
---|---|
-a | 全部文件系统列表 |
-h | 方便阅读显示 |
-i | 显示inode信息 |
-T | 文件系统类型 |
-t<文件系统类型> | 只显示选定文件系统的磁盘信息 |
-x<文件系统类型> | 不显示选定文件系统的磁盘信息 |
搜索进程(通过管道符连接命令)
1. ps –ef| grep zookeeper # 查找zookeeper的进程
2. ps –ef| grep zookeeper| grep –v grep # 查找zookeeper的进程并不显示“grep”这个进程
3. ps –ef| grep zookeeper| grep –v grep| wc –l # zookeeper有几个进程在运行wc(word count)
4. ps –ef| grep zookeeper| grep –v grep| sort –nrk2 # 降序排列 sort(排列) -n() r() k2(只展示第二列)
ps –ef| grep zookeeper| grep –v grep| sort –nrk2| head –n 1 # head –n 1只显示1行; sort –nrk2降序排列 n数字 r反过来排序(降序);
k2 根据第二列的内容进行排序,显示进程号最大的那条进程
5. ps –ef| grep zookeeper| grep –v grep| sort –nrk2| head –n 1| awk‘{print$2}’ # awk‘{print$2}’只显示第二列
,显示进程号最大的那条进程号
6. ps –ef| grep zookeeper| grep –v grep| sort –nrk2| head –n 3| awk‘{print$2}’| xargs kill -9 # 删光一个程序的所有进程
IP相关
以下介绍的ip命令都是临时配置,一但重启就会还原,如"service network restart"
显示ip
查看所有IP地址
ip a/addr/address
ip a/addr/address sh/show
查看指定IP地址
ip a/addr/address sh/show dev eth1
ip a/addr/address sh/show eth1
修改ip
ip a/addr/address add 192.168.78.130/24 dev eth1 # 增加IP地址
ip a/addr/address del/delete 192.168.78.130/24 dev eth1 # 删除IP地址
删除eth1所有IP地址:ip a flush dev eth1
删除eth1的所有IPv4的IP地址:ip -4 a flush dev eth1
重启、关闭机器
operation | command |
---|---|
关机 | init0 |
shutdown -h now | 立刻关机重启,工作中常用 |
shutdown -h +1 | 1分钟后关机 |
重启 | init6 |
reboot | 工作中常用 |
shutdown -r now | 工作中常用 |
shutdown -r +1 | 一分钟后重启 |
注销 | logout |
exit | 工作中常用 |
Ctrl+d | 工作中常用 |
查看内核
查看Linux内核版本:
cat /proc/version
uname -a
查看系统信息
查看Linux系统版本:
1、lsb_release -a # 即可列出所有版本信息:这个命令适用于所有的Linux发行版,包括Redhat、SuSE、Debian…等发行版。
2、cat /etc/redhat-release # 这种方法只适合Redhat系的Linux:
3、cat /etc/issue # 此命令也适用于所有的Linux发行版。
环境变量
Linux的变量种类
按变量的生存周期来划分,Linux变量可分为两类:
1 永久的:需要修改配置文件,变量永久生效。
2 临时的:使用export命令声明即可,变量在关闭shell时失效。
设置变量的三种方法
- 在/etc/profile文件中添加变量【对所有用户生效(永久的)】
用vi
在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。
例如:编辑/etc/profile文件,添加CLASSPATH变量
vi /etc/profile
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
注:修改文件后要想马上生效还要运行# source /etc/profile不然只能在下次重进此用户时生效。
- 在用户目录下的.bash_profile文件中增加变量【对单一用户生效(永久的)】
用VI在用户目录下的.bash_profile文件中增加变量,改变量仅会对当前用户有效,并且是“永久的”。
例如:编辑guok用户目录(/home/guok)下的.bash_profile
vi/home/guok/.bash.profile添加如下内容:exportCLASSPATH=./JAVAHOME/lib;JAVA_HOME/jre/lib
注:修改文件后要想马上生效还要运行
$ source /home/guok/.bash_profile
不然只能在下次重进此用户时生效。
- 直接运行
export
命令定义变量【只对当前shell(BASH)有效(临时的)】
在shell的命令行下直接使用[export 变量名=变量值]
定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。
环境变量的查看
- 使用echo命令查看单个环境变量。例如:
echo $PATH
- 使用env查看所有环境变量。例如:
env
- 使用set查看所有本地定义的环境变量
使用unset删除指定的环境变量
set可以设置某个环境变量的值。清除环境变量的值用unset命令。如果未指定值,则该变量值将被设为NULL。示例如下:
export TEST="Test..."
增加一个环境变量TEST, env|grep TEST
此命令有输入,证明环境变量TEST已经存在了。
TEST=Test...
unset TEST #删除环境变量TEST
$ env|grep TEST
此命令没有输出,证明环境变量TEST已经删除
常用的环境变量
env | notes |
---|---|
PATH
| 决定了shell将到哪些目录中寻找命令或程序 |
HOME | 当前用户主目录 |
HISTSIZE | 历史记录数 |
LOGNAME | 当前用户的登录名 |
HOSTNAME | 指主机的名称 |
SHELL | 当前用户Shell类型 |
LANGUGE | 语言相关的环境变量,多语言可以修改此环境变量 |
当前用户的邮件存放目录 | |
PS1 | 基本提示符,对于root用户是#,对于普通用户是$ |
压缩包,解压缩命令
- tar
格式:tar 参数 压缩后的文件名 被压缩的文件名
tar 参数 被解压的文件 -C 指定目录
(如果省略 -C 指定目录,则解压到当前文件夹)
-c 建立一个压缩文件的参数指令(create)–压缩
-x 解开一个压缩文件的参数指令(extract)–解压
-z 是否需要用gzip压缩
-v 压缩的过程中显示文件(verbose)
-f 使用档名,在f之后要立即接档名(file)
常用解压参数组合:zxvf
常用压缩参数组合:zcvf
tar -zcvf /root/1.tar /root/a # 将root目录下的a文件夹压缩成1.tar,放在root目录下。
tar -zxvf ./1.tar 将当前目录下的1.tar文件解压缩
注意:如果后缀名为.tar.gz的压缩包用-zxvf,如果后缀名为.tar的压缩包用-xvf
2. zip命令常用选项及含义
选项 | 含义 |
---|---|
-r | 递归压缩目录,及将制定目录下的所有文件以及子目录全部压缩。 |
-m | 将文件压缩之后,删除原始文件,相当于把文件移到压缩文件中。 |
-v | 显示详细的压缩过程信息。 |
-q | 在压缩的时候不显示命令的执行过程。 |
-压缩级别 | 压缩级别是从 1~9 的数字,-1 代表压缩速度更快,-9 代表压缩效果更好。 |
-u | 更新压缩文件,即往压缩文件中添加新文件。 |
使用 zip 命令压缩目录,需要使用“-r”选项,例如:
[root@localhost ~]# mkdir dir1
#建立测试目录
[root@localhost ~]# zip -r dir1.zip dir1
adding: dir1/(stored 0%)
#压缩目录
[root@localhost ~]# ls -dl dir1.zip
-rw-r–r– 1 root root 160 6月 1716:22 dir1.zip
#压缩文件生成
明确功能
一. vi(vim)命令
【vi编辑器的3种模式】
命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:
1. 命令行模式(command mode)
- 控制屏幕光标的移动,字符、字或行的删除,查找,移动复制某区段及进入Insert mode下,或者到 last line mode。
- 命令行模式下的常用命令:
控制光标移动:↑,↓,j
删除当前行:dd
查找:/字符
进入编辑模式:i o a
进入底行模式::
2. 编辑模式(Insert mode)
- 只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。
- 编辑模式下常用命令:
ESC 退出编辑模式到命令行模式;
3. 底行模式(last line mode)
-
将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等。
-
底行模式下常用命令:
退出编辑: :q
强制退出: :q!
保存并退出: :wq
打开文件
命令:vi 文件名
示例:打开当前目录下的aa.txt文件:vi aa.txt
或者 vim aa.txt
- 注意:使用vi编辑器打开文件后,并不能编辑,因为此时处于命令模式,点击键盘i/a/o进入编辑模式。
编辑文件
使用vi编辑器打开文件后点击按键:i ,a或者o即可进入编辑模式。
i: 在光标所在字符前开始插入
a: 在光标所在字符后开始插入
o: 在光标所在行的下面另起一新行插入
保存/取消编辑文件:
第一步:ESC 进入命令行模式
第二步::进入底行模式
第三步:wq保存并退出编辑/q!撤销本次修改并退出编辑
- vi模式下快捷键
esc后:
保存并退出快捷键:shift+z+z
光标跳到最后一行快捷键:shift+g
删除一行:dd
复制一行内容:y+y
粘贴复制的内容:p
二. source命令
source命令也称为“点命令”,也就是一个点符号(.),是bash的内部命令。
功能:使Shell读入指定的Shell程序文件并依次执行文件中的所有语句
source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。
用法:
source filename 或 . filename
source命令(从 C Shell 而来)是bash shell的内置命令;点命令(.),就是个点符号(从Bourne Shell而来)是source的另一名称。
- source filename 与 sh filename 及./filename执行脚本的区别在那里呢?
- 当shell脚本具有可执行权限时,用
sh filename与./filename
执行脚本是没有区别得。./filename
是因为当前目录没有在PATH中,所有"."是用来表示当前目录的。
sh filename
重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell,除非使用export。
source filename
:这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面。
举例说明:
-
新建一个test.sh脚本,内容为:A=1
-
然后使其可执行chmod +x test.sh
-
运行sh test.sh后,echo $A,显示为空,因为A=1并未传回给当前shell
-
运行./test.sh后,也是一样的效果
-
运行source test.sh 或者 . test.sh,然后echo $A,则会显示1,说明A=1的变量在当前shell中
三. bashrc文件
.bashrc文件主要保存个人的一些个性化设置,如命令别名、路径等。也即在同一个服务器上,只对某个用户的个性化设置相关。它是一个隐藏文件,需要使用ls -a
来查看。
文件 | 解释 |
---|---|
.bash_history | 记录之前输入的命令 |
.bash_logout | 当你退出时执行的命令 |
.bash_profile | 当你登入shell时执行 |
.bashrc | 当你登入shell时执行 |
- 后两个的区别:
.bash_profile
只在会话开始时被读取一次,而.bashrc
则每次打开新的终端时,都要被读取。
这些文件是每一位用户对终端功能和属性设置,修改.bashrc可以改变环境变量PATH、别名alias和提示符。
除了可以修改用户目录下的.bashrc文件外,还可以修改如“/etc/profile”文件、“/etc/bashrc”文件及目录“/etc /profile.d”下的文件。
但是修改/etc路径下的配置文件将会应用到整个系统,属于系统级的配置,而修改用户目录下的.bashrc则只是限制在用户应用上,属于用户级设置。两者在应用范围上有所区别,建议如需修改的话,修改用户目录下的.bashrc,即无需root权限,也不会影响其他用户。
四. ssh
ssh [-l login_name] hostname | user@hostname [command]
ssh [-afgknqstvxACNTX1246] [-b bind_address] [-c cipher_spec] [-e escape_char] [-i identity_file] [-l login_name] [-m mac_spec] [-o option] [-p port] [-F configfile] [-L port:host:hostport] [-R port:host:hostport] [-D port] hostname | user@hostname [command]
ssh(SSH客户端)用于登录远程主机,并且在远程主机上执行命令。它的目的是替换rlogin和rsh,同时在不安全的网络以及两个互不信任的主机之间,提供加密的、安全的通信连接。X11连接和任意TCP/IP端口均可以通过此安全通道转发(forward)。
当用户通过ssh连接并登录主机hostname后,根据使用协议,使用不用的方法像远程主机证明他/她的身份(详细请使用man -a ssh
查看)。
/etc/ssh/ssh_config
详细请使用man -a ssh_config
查看帮助文档
五. scp(注意与cp的区别)
scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-S program] [[user@]host1:]file1 … [[user@]host2:]file2
scp在网络中的主机间进行文件复制。它用ssh(1)进行数据传输及身份验证,通过与ssh(1)相同的安全保护。如果需要身份验证,scp会要求输入口令。
文件名可以包含用户名和主机名的格式,以指定要将文件复制到该主机或从该主机复制该文件。可以使用绝对路径或相对路径展示本地文件名,以避免scp将包含”:”的文件名视为主机说明符。也允许在两个远程主机之间相互复制。
pwd 查看当前用户目录
通过etho显示字符串(指定的环境变量)
通过export 设置环境变量
通过env显示所有环境变量
通过set命令显示本地定义的shell变量
通过uset命令来清除环境变量
echo $PATH 环境变量
q + ! 强制退出
ctrl + l 清屏