linux基础(2)-基础命令和基础特性
基础命令
命令历史
命令历史的管理
登陆 shell 时,会读取命令历史文件中记录下的命令: ~/.bash_history 。
登陆进 shell 后,新执行的命令只会记录在缓存中,这些命令会在用户退出时追加保存到命令历史文件中。
history使用
[root@zze ~]# history cd ~ ll history
history:查看所有历史。
[root@zze ~]# history history history
history #:查看最近 # 条历史。
[root@zze ~]# history -d [root@zze ~]# history cd ~ ll history history -d history
history -d #:删除历史中指定的第 # 条命令。
[root@zze ~]# history -c [root@zze ~]# history history
history -c:清空历史。
快捷操作
[root@zze ~]# history history ll history [root@zze ~]# ! ll total -rw-------. root root Jan : anaconda-ks.cfg -rw-r--r--. root root Jan : install.log -rw-r--r--. root root Jan : install.log.syslog
!#:调用历史中第 # 条命令。
[root@zze ~]# !l ll total -rw-------. root root Jan : anaconda-ks.cfg -rw-r--r--. root root Jan : install.log -rw-r--r--. root root Jan : install.log.syslog
!string:调用历史中最近一个以 string 开头的命令。
[root@zze ~]# !! ll total -rw-------. root root Jan : anaconda-ks.cfg -rw-r--r--. root root Jan : install.log -rw-r--r--. root root Jan : install.log.syslog
!!:上一条命令。
[root@zze ~]# ls -l /etc/profile -rw-r--r--. root root Jan : /etc/profile [root@zze ~]# cat !$
!$:调用上一条命令的最后一个参数。
使用 ESC,. 可直接显示上一条命令参数。控制命令的记录方式
命令的记录方式通过环境变量 HISTCONTROL 控制,可选三个值:
ignoredups :忽略重复(连续且相同的命令)。
ignorespace :忽略以空白字符开头的命令。
ignoreboth :忽略以上两项。
修改环境变量值的方式: export 变量名="值" ,默认只对当前会话生效。[root@zze ~]# ls -l /etc/profile -rw-r--r--. root root Jan : /etc/profile [root@zze ~]# history history
修改环境变量 HISTCONTROL
相关环境变量
HISTSIZE :命令历史记录的条数。
HISTFILE :命令历史文件路径, ~/.bash_history 。
HISTFILESIZE :命令历史文件记录历史的条数。
目录操作
切换目录-cd
[root@zze etc]# cd /etc/ [root@zze etc]# pwd /etc
cd [path]:切换到指定目录
[root@zze etc]# cd .. [root@zze /]#
cd ..:切换到上级目录
显示当前所在路径-pwd
[root@zze ~]# pwd /root
pwd:显示当前所在路径
显示文件-ls
[root@zze ~]# ls -a . .. anaconda-ks.cfg .bash_history .bash_logout .bash_profile .bashrc .cache .cshrc install.log install.log.syslog .mysql_history .mysql_secret .oracle_jre_usage .pip .rediscli_history .tcshrc
ls -a [path]:显示所有文件,包含隐藏文件,包括 "." 和 ".." 。
[root@zze ~]# ls -A anaconda-ks.cfg .bash_history .bash_logout .bash_profile .bashrc .cache .cshrc install.log install.log.syslog .mysql_history .mysql_secret .oracle_jre_usage .pip .rediscli_history .tcshrc
ls -A [path]:显示所有文件,包含隐藏文件,不包括 "." 和 ".." 。
[root@zze ~]# ls -l total -rw-------. root root Jan : anaconda-ks.cfg -rw-r--r--. root root Jan : install.log -rw-r--r--. root root Jan : install.log.syslog
ls -l [path]:长格式显示文件,不包含隐藏文件。
[root@zze ~]# ls -lh total 20K -rw-------. root root .2K Jan : anaconda-ks.cfg -rw-r--r--. root root .3K Jan : install.log -rw-r--r--. root root .1K Jan : install.log.syslog [root@zze ~]# ll -h total 20K -rw-------. root root .2K Jan : anaconda-ks.cfg -rw-r--r--. root root .3K Jan : install.log -rw-r--r--. root root .1K Jan : install.log.syslog
ls -h [path]:单位换算,通常和 "-l" 一起使用。
[root@zze local]# ls -ld /etc/ drwxr-xr-x. root root Jan : /etc/ [root@zze local]# ll -d /etc/ drwxr-xr-x. root root Jan : /etc/ [root@zze local]# ll -d drwxr-xr-x. root root Jan : .
ls -d [path]:显示目录自身相关属性,通常和 "-l" 一起使用。
[root@zze local]# ls bin etc games include java lib lib64 libexec redis sbin share src tomcat [root@zze local]# ls -r tomcat src share sbin redis libexec lib64 lib java include games etc bin
ls -r [path]:反序显示。
[root@zze ~]# ls -R /root/ /root/: anaconda-ks.cfg install.log install.log.syslog
ls -R [path]:递归显示文件夹及子文件夹所有文件。
创建目录-mkdir
[root@zze ~]# mkdir testdir [root@zze ~]# ls anaconda-ks.cfg install.log install.log.syslog testdir
mkdir <path>:创建目录。
[root@zze testdir]# mkdir a/b mkdir: cannot create directory `a/b': No such file or directory [root@zze testdir]# mkdir -p a/b [root@zze testdir]# ls -R .: a ./a: b
mkdir -p <path>:递归创建目录(不存在则创建)。
[root@zze testdir]# ll total [root@zze testdir]# mkdir -pv a/b mkdir: created directory `a' mkdir: created directory `a/b'
mkdir -v <path>:显示详细信息。
[root@zze testdir]# a [root@zze testdir]# ll total drw-rw-r--. root root Jan : a
mkdir -m <path>:创建目录时直接指定权限。
[root@zze testdir]# mkdir a/ a/b a/b/c [root@zze testdir]# tree a/ a/ └── b └── c
mkdir <path...>:同时创建多个目录
删除目录-rmdir
[root@zze testdir]# ls -R a/ a/: b a/b: [root@zze testdir]# rmdir a/ rmdir: failed to remove `a/': Directory not empty [root@zze testdir]# rmdir a/b/ [root@zze testdir]# rmdir a/ [root@zze testdir]# ll total
rmdir <path>:删除空目录。
[root@zze testdir]# rmdir -p a/b/c/ [root@zze testdir]# ll total
rmdir -p <path>:递归删除所有空目录。
树状显示目录结构-tree
[root@zze testdir]# tree a/ a/ └── b ├── c └── test.txt directories, file
tree <path>:树状显示目录及目录下的文件。
[root@zze testdir]# tree -d a/ a/ └── b └── c directories
tree -d <path>:树状显示目录结构,不包含文件。
[root@zze testdir]# tree -L a/ a/ └── b
tree -L # <path>:树状显示仅 # 深度结构。
查看文本文件
正序输出文件内容-cat
[root@zze testdir]# cat test.txt
cat <filename>:正序查看指定文件。
反序输出文件内容-tac
[root@zze testdir]# tac test.txt
tac <filename>:反序查看指定文件。
按页查看-more
[root@zze ~]# more /etc/profile # /etc/profile # System wide environment and startup programs, for login setup # Functions and aliases go in /etc/bashrc # It's NOT a good idea to change this file unless you know what you # are doing. It's much better to create a custom.sh shell script in # /etc/profile.d/ to make custom changes to your environment, as this # will prevent the need for merging in future updates. pathmunge () { case ":${PATH}:" in *:"$1":*) ;; *) if [ "$2" = "after" ] ; then PATH=$PATH:$ else PATH=$:$PATH fi esac } if [ -x /usr/bin/id ]; then if [ -z "$EUID" ]; then # ksh workaround EUID=`id -u` UID=`id -ru` fi USER="`id -un`" LOGNAME=$USER MAIL="/var/spool/mail/$USER" fi # Path manipulation " ]; then pathmunge /sbin pathmunge /usr/sbin pathmunge /usr/local/sbin else pathmunge /usr/local/sbin after pathmunge /usr/sbin after pathmunge /sbin after fi HOSTNAME=`/bin/>/dev/null` HISTSIZE= if [ "$HISTCONTROL" = "ignorespace" ] ; then export HISTCONTROL=ignoreboth else export HISTCONTROL=ignoredups fi export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL --More--(%)
more <filename>:按页查看指定文件。
[root@zze ~]# more -d /etc/rc.d/rc.sysinit #!/bin/bash # # /etc/rc.d/rc.sysinit - run once at boot time # # Taken in part from Miquel van Smoorenburg's bcheckrc. # HOSTNAME=$(/bin/hostname) set -m if [ -f /etc/sysconfig/network ]; then . /etc/sysconfig/network fi if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" ]; then HOSTNAME=localhost fi if [ ! -e /proc/mounts ]; then mount -n -t proc /proc /proc >& fi if [ ! -d /proc/bus/usb ]; then >& && mount -n -t usbfs /proc/bus/usb /proc/bus/usb else mount -n -t usbfs /proc/bus/usb /proc/bus/usb fi #remount /dev/shm to set attributes from fstab # >& #remount /proc to set attributes from fstab # >& . /etc/init.d/functions PLYMOUTH= [ -x /bin/plymouth ] && PLYMOUTH=yes # Check SELinux status SELINUX_STATE= if [ -e "/selinux/enforce" ] && [ "$(cat /proc/self/attr/current)" != "kernel" ]; then if [ -r "/selinux/enforce" ] ; then SELINUX_STATE=$(cat "/selinux/enforce") else # assume enforcing if you can't read it SELINUX_STATE= fi fi >& ; then /sbin/restorecon -R -F /dev >/dev/null fi disable_selinux() { echo $"*** Warning -- SELinux is active"
more -d <filename>:带提示信息查看,显示翻页及退出信息。
[root@zze temp]# test.txt
more +# <filename>:从第 # 行开始查看。
- 操作方式:
- B :向前翻页,SPACE :向后翻页,RETURN :下一行,Q:退出。
- 比例显示:
- 按字符统计。
一旦翻完不可回转。
按页查看-less
按页查看,操作方式和 man 一致,因为 man 内部实际上也是使用 less 打开文本文件。
- 操作:
- Space,^V,^F:向文件尾部翻屏。
- b,^B:向文件首部翻屏。
- d,^D:向文件尾部翻半屏。
- u,^U:向文件首部翻半屏。
- Return,^N,e,^E,j,^J:向文件尾部翻一行。
- y,^Y,^P,k,^K:向文件首部翻一行。
- q:退出。
- #:跳转到第 # 行。
- 1G:回到文件首部。
- G:跳至文件尾部。
- /KEYWORD:以 KEYWORD 指定的字符串为关键字,从当前位置向文件尾部搜索,不区分大小写。n:下一个,N:上一个。
- ?KEYWORD:以 KEYWORD 指定的字符串为关键字,从当前位置向文件首部搜索,不区分大小写。n:下一个,N:上一个。
翻完可回转。
查看文件头部-head
[root@zze temp]# head test.txt
head <filename>:默认输出前 10 行。
[root@zze temp]# test.txt
head -c # <filename>:指定输出前 # 字节。
[root@zze temp]# test.txt
head [-n #|-#] <filename>:指定输出前 # 行。
查看文件尾部-tail
[root@zze temp]# tail test.txt
tail <filename>:默认输出后 10 行。
[root@zze temp]# test.txt
tail -c # <filename>:指定输出后 # 字节。
[root@zze temp]# test.txt
tail [-n #|-#] <filename>:指定输出后 # 行。
[root@zze temp]# tail -f test.txt new line
tail -f <filename>:跟踪显示文件新追加的内容。
文件时间戳管理工具
数据
文件的数据分为元数据和内容数据,元数据可以看做文件的状态描述信息,内容数据则是文件的真实内容。
查看文件状态-stat
[root@zze temp]# stat test.txt File: `test.txt' Size: Blocks: IO Block: regular file Device: fd00h/64768d Inode: Links: Access: (/-rw-r--r--) Uid: ( / root) Gid: ( / root) Access: -- :: Modify: -- :: Change: -- ::
stat <filename>
- 三个时间戳:
-
access time (atime):访问时间,读取文件内容时。
modify time (mtime):修改时间,修改文件内容时。
change time (ctime):改变时间,元数据发生改变。
修改时间戳-touch
[root@zze temp]# stat test.txt File: `test.txt' Size: Blocks: IO Block: regular file Device: fd00h/64768d Inode: Links: Access: (/-rw-r--r--) Uid: ( / root) Gid: ( / root) Access: -- :: Modify: -- :: Change: -- :: [root@zze temp]# touch test.txt [root@zze temp]# stat test.txt File: `test.txt' Size: Blocks: IO Block: regular file Device: fd00h/64768d Inode: Links: Access: (/-rw-r--r--) Uid: ( / root) Gid: ( / root) Access: -- :: Modify: -- :: Change: -- ::
touch [-t time] <filename>:修改 atime 和 mtime 为指定时间,不指定 time 则默认修改为当前时间。
[root@zze temp]# touch -m -t 201810101200.59 test.txt [root@zze temp]# stat test.txt File: `test.txt' Size: Blocks: IO Block: regular file Device: fd00h/64768d Inode: Links: Access: (/-rw-r--r--) Uid: ( / root) Gid: ( / root) Access: -- :: Modify: -- :: Change: -- ::
touch -m [-t time] <filename>:修改 mtime 为指定时间,不指定 time 则默认修改为当前时间。
[root@zze temp]# touch -a -t 201811101200.59 test.txt [root@zze temp]# stat test.txt File: `test.txt' Size: Blocks: IO Block: regular file Device: fd00h/64768d Inode: Links: Access: (/-rw-r--r--) Uid: ( / root) Gid: ( / root) Access: -- :: Modify: -- :: Change: -- ::
touch -a [-t time] <filename>:修改 atime 为指定时间,不指定 time 则默认修改为当前时间。
[root@zze temp]# ls test.txt [root@zze temp]# touch a.txt [root@zze temp]# ls a.txt test.txt
touch <filename>:当 filename 指定的文件不存在时则创建文件。
[root@zze temp]# touch -c a.txt [root@zze temp]# ls a.txt test.txt [root@zze temp]# touch -c b.txt [root@zze temp]# ls a.txt test.txt
touch -c <filename>:当 filename 指定的文件不存在时不创建文件。
time 的格式为 "yyyyMMddHHmmss.ss" ,例:“2019年1月1号2点35分34秒”为 "201901010235.34"。
基础特性
补全-TAB键
命令补全
一次 TAB:如果用户给定的字符串只有一条唯一对应的命令,一次 TAB 则直接补全。
两次 TAB:如果用户给定的字符串开头对应的命令不唯一,再次 TAB 则会显示所有以该字符串开头的命令。
[root@zze ~]# cl clear clock clockdiff cloog
两次 TAB
路径补全
把用户给定的字符串当做路径开头,并在其指定目录下搜索以指定字符串开头的文件名。如果唯一,则直接补全,否则再次 TAB 显示列表。
命令行展开
[root@zze testdir]# cd ~ [root@zze ~]#
~:展开为当前用户主目录。
[root@zze testdir]# cd ~root/ [root@zze ~]#
~[user]:展开为 user 的主目录。
/tmp/{a,b} -> /tmp/a , /tmp/b /tmp/{a,b}/c -> /tmp/a/c , /tmp/b/c
{}:可承载一个逗号分隔的列表,并将其展开为多个路径。
[root@zze testdir]# mkdir tmp/x/{y1,y2}/{a,b} mkdir: cannot create directory `tmp/x/y1/a': No such file or directory mkdir: cannot create directory `tmp/x/y1/b': No such file or directory mkdir: cannot create directory `tmp/x/y2/a': No such file or directory mkdir: cannot create directory `tmp/x/y2/b': No such file or directory [root@zze testdir]# mkdir -p tmp/x/{y1,y2}/{a,b} [root@zze testdir]# tree tmp/ tmp/ └── x ├── y1 │ ├── a │ └── b └── y2 ├── a └── b directories, files
result
练习2:如何一次性创建 'x_m' , 'y_m' , 'x_n' , 'y_n' ?
[root@zze testdir]# mkdir -p {x,y}_{m,n} [root@zze testdir]# ls x_m x_n y_m y_n
result
练习3:如何一次性创建 'tmp/bin' , 'tmp/sbin' , 'tmp/usr/bin' , 'tmp/usr/sbin' ?
[root@zze testdir]# mkdir -p tmp/{bin,sbin,usr/{bin,sbin}} [root@zze testdir]# tree tmp tmp ├── bin ├── sbin └── usr ├── bin └── sbin directories, files
result
命令的执行状态结果
bash 使用特殊变量 $? 保存最近一条命令的执行状态结果:
[root@zze testdir]# mkdir tmp [root@zze testdir]# echo $? [root@zze testdir]# mkdir tmp mkdir: cannot create directory `tmp': File exists [root@zze testdir]# echo $?
0:成功,1-255:失败
linux基础(2)-基础命令和基础特性的更多相关文章
- Linux学习之CentOS(二)--初识linux的一些常用命令(基础命令)
初次学习linux系统,首先也得会一些linux的基本命令.至少要先学会开启和关闭系统吧!我称为 基础命令! linux命令是对Linux系统进行管理的命令.对于Linux系统来说,无论是中央处理器. ...
- 002 Linux 文件与目录命令的必会姿势!
01这些命令真的很重要吗? 文件及目录的路径切换.显示.创建.复制.移动和删除操作的常用姿势,必会!因为这些命令是使用 Linux 系统进行工作的基础,是摆脱小白的第一步,是构建大厦的基石! 发现锅锅 ...
- Linux命令工具基础04 磁盘管理
Linux命令工具基础04 磁盘管理 日程磁盘管理中,我们最常用的有查看当前磁盘使用情况,查看当前目录所占大小,以及打包压缩与解压缩: 查看磁盘空间 查看磁盘空间利用大小 df -h -h: huma ...
- SLAM+语音机器人DIY系列:(一)Linux基础——3.Linux命令行基础操作
摘要 由于机器人SLAM.自动导航.语音交互这一系列算法都在机器人操作系统ROS中有很好的支持,所以后续的章节中都会使用ROS来组织构建代码:而ROS又是安装在Linux发行版ubuntu系统之上的, ...
- Linux 学习笔记之超详细基础linux命令(the end)
Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 14---------------- ...
- Linux 学习笔记之超详细基础linux命令 Part 14
Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 13---------------- ...
- Linux 学习笔记之超详细基础linux命令 Part 13
Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 12---------------- ...
- Linux 学习笔记之超详细基础linux命令 Part 12
Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 11---------------- ...
- Linux 学习笔记之超详细基础linux命令 Part 11
Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 10---------------- ...
- Linux 学习笔记之超详细基础linux命令 Part 10
Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 9----------------- ...
随机推荐
- maven默认本地仓库目录
C:\Users\${姓名}\.m2\repository\
- django rest framwork教程之外键关系和超链接
此时,我们的API中的关系通过使用主键来表示.在本教程的这一部分中,我们将通过使用超链接来改善关系的内聚性和可发现性 为我们的API的根创建一个端点 现在我们有"snippets" ...
- IOS设计模式第五篇之装饰设计模式的代理设计模式
版权声明:原创作品,谢绝转载!否则将追究法律责任. 代理: 另一个装饰设计模式,代理,是一个代表或者协调另一个对象的行为机制.例如当你用一个tableView,你必须实现他里面的一个tableView ...
- Ubuntu14.04安装CMake3.0.2
http://blog.csdn.net/wz3118103/article/details/39826397 .去网址下载http://www.cmake.org/download/ Platfor ...
- django进阶-查询(适合GET4以上人群阅读)
前言: 下篇博客写关于bootstrap... 一.如何在脚本测试django from django.db import models class Blog(models.Model): name ...
- Python 编码规范(Google)
Python 编码规范(Google) https://blog.csdn.net/q469587851/article/details/54096093 Python 风格规范(Google) 本项 ...
- svn版本管理
代码发布方案: 1,安装,优化 软件环境,(nginx,lvs) <-------运维工程师 2,程序代码(不断更新). <--------开发工程师,(开发,运维都可以发布) 3, ...
- sys.path.insert(0,"/path") 的用法
可以选择用sys.path.insert(0,‘/path’),这样新添加的目录会优先于其他目录被import检查
- 【BZOJ1004】[HNOI2008]Cards Burnside引理
[BZOJ1004][HNOI2008]Cards 题意:把$n$张牌染成$a,b,c$,3种颜色.其中颜色为$a,b,c$的牌的数量分别为$sa,sb,sc$.并且给出$m$个置换,保证这$m$个置 ...
- linux下模拟CPU占用100%小程序
在做一个测试时,需要模拟服务器CPU占用满的情况,在查阅相关资料后,发现网上程序不太好用, 原文在这:http://www.2cto.com/os/201304/202068.html 优化后如下: ...