第1章:linux基础

 

复制代码
ABI与API;用户空间与内核空间
===================================================================
ABI:描述了应用程序和OS之间的底层接口,允许编译好的目标代码在使用兼容ABI的系统中无需改动就能运行
API:定义了源代码和库之间的接口,因此同样的源代码可以在支持这个API的任何系统中编译


windows的运行程序格式:exe;.dll;.lib
linux的运行程序格式:ELF;.so;.a

===================================================================
用户空间(user space)
    用户程序的运行空间。为了安全,它们是隔离的,即使用户的程序崩溃,内核也不受影响。
    只能执行简单的运算,不能直接调用系统资源,必须通过系统接口(system call),才能向内核发出指令
内核空间(kernel space)
    linux内核的运行空间,可以执行任意命令,调用系统的一切资源

str="www.baidu.com"         #用户空间
x=x+100                     #用户空间
file.write(str)             #切换到内核空间,用户不能直接写文件(操纵硬件,写入内容到磁盘),必须通过内核安排
y=x+200                     #切换回用户空间

在用户空间,只能做一些普通的操作
而要涉及到操作硬件,则只有内核才有权限,比如open,read,write,close等等,需要切换到内核空间,才能进行这些操作
用户空间,内核空间,上下文切换
ABI与API;用户空间与内核空间
复制代码

 

复制代码
linux通配符;linux特殊字符
-------------------------------------------------------------------------------
linux通配符:
    *   匹配所有
    ?   匹配单个字符,有且只有1个
    [acgz]  匹配中括号内的任意一个字符
    [a-z]   匹配中括号中指定范围内的任意一个字符(注意,[a-c]将匹配a,A,b,B,c)
    [!a-d]或[^1-9] !或^都可以用于取反

    各种预定义的字符类,例如[:digit:],详见正则

----------------------------------------------
linux特殊字符---路径位置:
    ~   用户家目录路径
    -   上一次目录路径
    .   当前目录路径
    ..  上级目录路径

----------------------------------------------
linux特殊字符---引号相关:
    ''单引号       所见即所得:shell忽略所有特殊字符
    ""双引号       在双引号中的三种特殊字符不被忽略:$、\、`;即双引号会解析变量
    ``反引号       解析命令,等价于$(),但是推荐使用$()
                        shell中有两种方法作命令替换:把shell命令用反引号或者$(...)结构括起来,其中,$(...)格式受到POSIX标准支持,也利于嵌套。
----------------------------------------------
linux特殊字符---其他字符:
    ;   分号,命令分隔符。分号前后是2条无关联的命令
    #   1.管理员root提示符,2.注释
    $   1.普通用户提示符;2.调用变量时使用,例如$();touch $(date +%F).txt
            
    |   管道符,前面的数据交给后面处理
    \   转义字符,让字符还原本义
    {}  1.生成序列;2.引用变量,让变量成为整体,例如 ehco "${a}is a teacher"
    !   1.取反;2.vim 强制;3.先显示符合字符开头的命令,然后再执行该命令,
                    例如:!echo,将会打印显示上一次的echo,然后执行该命令;完全也可以使用!ec,因为只是匹配符合字符开头的命令
    &&  等同于and,前面正确后面才输出,例如:pwd && echo oldboy
    ||  等同于or,前面错误后面才输出,例如:touch || echo oldboy
    &   将程序放入后台运行符,该命令还未讲
linux通配符;linux特殊字符
复制代码

 

复制代码
pwd、dirname、basename、cd、ls、echo、printf、tr(字符替换)
==============================================================
pwd   打印工作目录;打印当前目录
pwd命令 显示当前shell的绝对路径
    -L    显示链接路径(默认)
    -P    显示真实物理路径

basename    #接收绝对路径形式的字符串,打印基名,即打印文件名
dirname      #接收绝对路径形式的字符串,打印目录名,即绝对路径中的目录
---------------------------------------------------------
cd命令用于切换当前工作目录。
    cd /home/dir        #切换目录,绝对路径
    cd home/dir         #切换目录,相对路径
    cd ..               #切换到上一级目录
    cd -                #切换到上一次目录,其实就是切到$OLDPWD
    cd                  #切换到当前用户的家目录
    cd ~                #切换到当前用户的家目录

    相关环境变量
    $PWD        当前目录路径
    $OLDPWD     上一次目录路径

---------------------------------------------------------
ls 默认罗列当前目录下的文件和目录(默认不显示隐藏文件)
    -l long长葛市显示文件属性***
    -a 显示所有文件,含隐藏文***
    -d 只显示目录***默认查看目录内的文件,-d则查看目录
    -i 显示inode节点***
    -h human以人类可读形式显示(目前只观察到文件大小会自动换算成KB,MB等)
    -p 目录结果加'/',区分目录和文件
    -F 不同文件结果加不同标识,目录结果加'/'
    --color==auto 显示不同文件的颜色
    -1 文件分行显示
    -S 按从大到小排序
    -rt (猜测r是反转排序,t是按mtime排序)
    
    -t modify,文件内容被改过之后的时间。
    -c change,文件属性发生改变的时间。
    -a access,文件内容被访问过的时间。
    

---------------------------------------------------------
ehco命令,用于字符串的输出
    -E  (默认)不支持'\'解释功能
    -n  不自动换行
    -e  启用'\'字符的解释功能
        \a    发出警告声
        \b    退格键
        \c    最后不加上换行符号
        \n    换行且光标移动至行首
        \r    回车,即光标移动至行首,但不换行
        \t    插入tab
        \\    插入'\'
        \Onnn 插入八进制字符串
        \xHH  插入十六进制字符串
    
    支持转移字符输出,echo -e "hello world\n hello world"

---------------------------------------------------------
printf 格式化打印字符串,即默认支持特殊字符输出,printf "hello world\n hello world"

    printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg  
    printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
    printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543
    printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876
---------------------------------------------------------
tr 替换or删除字符
    -c, --complement:反选设定字符。也就是符合 SET1 的部份不做处理,不符合的剩余部份才进行转换
    -d, --delete:删除指令字符
    -s, --squeeze-repeats:缩减连续重复的字符成指定的单个字符
    -t, --truncate-set1:削减 SET1 指定范围,使之与 SET2 设定长度相等
    --help:显示程序用法信息
    --version:显示程序本身的版本信息
    支持[:alpha:]、\n等特殊字符

示例:
    tr 'o' 'O' < test1.txt      # 将txt中的文本导入到输出中,再执行小写o替换成大写O
    tr 'a-c' '1-3' < test1.txt  # 'a-c' '1-3'一一对应进行替换
    tr -s "abc" < test1.txt     #去重;压缩连续的字符,不连续的不压缩
    tr -s " " ":" < test1.txt   #先对test1.txt中的空格进行去重,然后替换为":"
    tr -d "abc" < test1.txt     #删除指定字符
    tr -dc "abc" < test1.txt    #反向删除指定字符,即保留指定字符
pwd、dirname、basename、cd、ls、echo、printf、tr(字符替换)
复制代码

 

复制代码
Bash 常用快捷键
ctrl+A    把光标移动到命令行开头。如果我们输入的命令过长,想要把光标移动到命令行开头时使用。
ctrl+E    把光标移动到命令行结尾。
ctrl+C    强制终止当前的命令。
ctrl+L    清屏,相当于clear命令。
ctrl+U    删除或剪切光标之前的命令。我输入了一行很长的命令,不用使用退格键一个一个字符的删除,使用这个快捷键会更加方便
ctrl+K    删除或剪切光标之后的内容。
ctrl+Y    粘贴ctrl+U或ctul+K剪切的内容。
ctrl+R    在历史命令中搜索,按下ctrl+R之后,就会出现搜索界面,只要输入搜索内容,就会从历史命令中搜索。
ctrl+D    退出当前终端。
ctrl+Z    暂停,并放入后台。这个快捷键牵扯工作管理的内容,我们在系统管理章节详细介绍。
ctrl+S    暂停屏幕输出。
ctrl+Q    恢复屏幕输出。
Bash 常用快捷键
复制代码

 

复制代码
shell命令分类(内部命令、外部命令);type命令;enable命令;which命令;whereis命令;hash命令和hash缓存表
=============================================================
shell命令分类:
内部命令:shell自带,
    linux系统运行时,内部命令已存在于内存中,运行内部命令时,不需要去磁盘读取命令
    help            #默认查看全部内部命令
    enable cmd      #启用内部命令
    enable -n cmd   #禁用内部命令
    enable -n       #查看被禁用的内部命令  
外部命令:在文件系统路径下有对应的课指定程序文件
    查看路径:which -a|--skip-alias;whereis
 
------------------------------------------------------------------
type命令可以用于区分一个命令是外部命令还是内部命令;内部命令就是写在bash内部的命令
[root@yefeng28325 ~]# type tree
tree is /usr/bin/tree
[root@yefeng28325 ~]# type enable
 enable is a shell builtin

------------------------------------------------------------------
enable      #启用、禁用、查看内部命令
    enable cmd      #启用内部命令
    enable -n cmd   #禁用内部命令
    enable -n       #查看被禁用的内部命令 

------------------------------------------------------------------
which命令 查找外部命令(搜索命令所在路径及别名)
------------------------------------------------------------------
whereis 命令名      搜索命令所在路径及帮助文档所在位置
 -b :只查找可执行文件位置
 -m:只查找帮助文件
------------------------------------------------------------------
hash命令和hash缓存表
    系统初始hash表为空;当外部命令执行时,shell解释器首先会查看hash表,
        1.如果存在该命令,则直接执行;
        2.如果不存在该命令,则会从PATH路径下寻找该命令,找到后将这条命令的路径记录到hash表中
hash常见用法
hash                #显示hash缓存
hash -l             #显示hash缓存,可作为输入使用
hash -p path name   #将命令全路径path起别名为name
hash -t name        #打印hash缓存中name的路径
hash -d name        #从hash缓存将指定命令清除
hash -r             #清空hash缓存
shell命令分类(内部命令、外部命令);type命令;enable命令;which命令;whereis命令;hash命令和hash缓存表
复制代码
复制代码
命令帮助(内部命令获取帮助、外部命令获取帮助);man命令、help命令、info命令、whatis命令
=============================================================
内部命令:help、man
外部命令:
1.command --help;command -h
2.man   
3.info
4.程序自身的帮助文档:README/INSTALL/ChangeLog
5.程序官方文档
6.发行版的官方文档
7. whatis      显示命令的简短描述,基于数据库,所以刚安装后不可立即使用
    makewhatis | mandb  制作数据库
    示例:whatis cal 或 man -f cal

-----------------------------------
[root@yefeng ~]# date --help
Usage: date [OPTION]... [+FORMAT]
  or:  date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
 
[]表示可选项
CAPS或<>    表示变化的数据
...         表示一个列表
x|y|z       表示或
-abc        表示 -a -b -C
{}          表示分组
 

------------------------------------------------------
help命令    #查看内部命令,默认查看全部内部命令
------------------------------------------------------
man命令
几乎每个命令都有man的"页面",手册页放在/usr/share/man
man命令的配置文件:/etc/man_db.conf或/etc/man.config
中文man需要安装包 man-pages-zh-CN
 
man章节:1.用户命令;2.系统调用;3.C库调用;4.设备文件及特殊文件;5.配置文件格式;6.游戏;7.杂项;8.管理类的命令;9.linux内核API
 
 
man -f passwd
 
man命令常用参数
    -a        显示所有匹配项
    -d        显示man查照手册文件时候,搜索路径信息,不显示手册页内容
    -D        同-d,显示手册页内容
    -f        同命令whatis ,将在whatis数据库查找以关键字开同的帮助索引信息
    -h        显示帮助信息
    -k        同命令apropos 将搜索whatis数据库,模糊查找关键字
    -S list        指定搜索的领域及顺序 如:-S 1:1p httpd 将搜索man1然后 man1p目录
    -t        使用troff 命令格式化输出手册页 默认:groff输出格式页
    -w        不带搜索title 打印manpath变量 带title关键字 打印找到手册文件路径,默认搜索一个文件后停止
    -W        同-w
    section        搜索领域【限定手册类型】默认查找所有手册
 
man command         #man共有9章节,默认从第一章开始查找,并显示第一个找到的文件
man 5 passwd        #查看第五章节的passwd说明文件
man -f passwd       #在whatis数据库查找以关键字开同的帮助索引信息
man -k passwd       #-k与-f都是搜索whatis数据库,区别在于-f(准确搜索),-k(模糊搜索)
man -a passwd       #逐次显示所有章节的passwd的相关文件
man -w passwd       #显示查找到的帮助文档的路径
man BASH   #这里可以看到所有变量的说明
 
man界面的操作方法(基于less命令实现,详见less)
 
 
------------------------------------------------------
 
info适用于通用文档参考,info页面的结构像一个网站,每一页分为‘节点’,链接节点之前*
info页面操作
方向键、PgUp、PgDn
移动到下一个链接    tab
显示主题目录        d
显示主题首部        home
进入选定链接        回车
进入下/前/上一层/最后一个链接     n/p/u/l
文本搜索            s
退出info            q
命令帮助(内部命令获取帮助、外部命令获取帮助);man命令、help命令、info命令、whatis命令
复制代码

 

复制代码
source命令;alias、unalias命令;
-------------------------------------------------------------
source命令(从 C Shell 而来)是bash shell的内置命令。'.'命令,就是个点符号,(从Bourne Shell而来)是source的另一名称。
    这两个命令都以一个脚本为参数,该脚本将作为当前shell的环境执行(其他方式的运行脚本都是在子shell中运行的,这点是最重要的区别,所以source命令可以重载脚本中的变量)
 
-------------------------------------------------------------
alias、unalias命令
alias  查看or设置别名
    alias NAME='VALUE'
在命令行中设置别名,仅对当前shell进程有效;在脚本中无法使用alias
若要永久有效,则需要将alias定义在配置文件中:~/.bashrc(仅对当前用户有效);/etc/bashrc(对所有用户有效)
unalias 取消别名
    unalias -a 取消所有别名
 
source命令;alias、unalias命令;
复制代码

 

复制代码
调用历史参数;history命令
=============================================================================
调用历史参数
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开头的命令,并获取它的所有参数

=============================================================================
history命令
    -c:清空当前历史命令;
    -d<offset>:删除历史记录中第offset个命令
    n:打印最近的n条历史命令
    -a:将历史命令缓冲区中命令写入历史命令文件中;
    -r:将历史命令文件中的命令读入当前历史命令缓冲区;
    -w:将当前历史命令缓冲区命令写入历史命令文件中;
    -n<filename>:读取指定文件
    -N: 显示历史记录中最近的N个记录;
    -p:展开历史参数成多行,但不存在历史列表中
    -s:展开历史参数成一行,附加在历史列表中
 
命令历史相关的环境变量
 $HISTSIZE      命令历史记录的条数
 $HISTFILE      指定历史文件,默认为~/.bash_history
 $HISTFILESIZE  命令历史文件记录历史的条数
 
 $HISTCMD        
 $HISTCONTROL    

history命令,命令行历史
命令历史文件~/.bash_history:保存着命令行执行过的命令的列表;登陆shell时,会读取该文件内容到缓存中;当退出shell时,缓存数据才会保存到命令历史文件~/.bash_history中
 
执行上一条命令的4种方法:
    1.向上的方向键
    2.!!并回车执行
    3.!-1并回车执行
    4.ctrl+p并回车执行
!:0 执行前一条命令(去除参数)
ctrl+n      显示当前历史中的下一跳命令,但不执行
ctrl+j      执行当前命令
!n          执行history命令输出对应序号n的命令
!-n         执行history历史中倒数第n个命令
 
要重新调用前一个命令中最后一个参数
!$    表示
esc,. (点击esc键后松开,然后点击.键)
alt+.  (按住alt键的同时点击.键)
 
调用历史参数;history命令
复制代码

 

复制代码
文件描述符;标准I/O、I/O重定向(>、2>、&>、>>、2>>、&>>)、(<、<<EOF)
===========================================================================
打开的文件都有一个fd(file description文件描述符)
    ll /proc/$$/fd      #查看文件描述符
    exec 8<> file       #将文件与文件描述符进行绑定
    cat /proc/$$/fd/8   #通过文件描述符查看文件和直接查看文件是等效的
    exec 8>&-           #对文件描述符进行解绑

    ls > /dev/pts/5     #将ls的标准输出重定向到其他终端/dev/pts/5

    ls /err /data >log1 2>&1
    ls /err /data 2>log2 1>&2   
    ls /err /data &>all.log
这里的&没有固定的意思
放在>后面的&,表示重定向的目标不是一个文件,而是一个文件描述符,内置的文件描述符如下
1 => stdout 2 => stderr 0 => stdin
换言之 2>1 代表将stderr重定向到当前路径下文件名为1的regular file中,而2>&1代表将stderr重定向到文件描述符为1的文件(即/dev/stdout)中,这个文件就是stdout在file system中的映射
而&>file是一种特殊的用法,也可以写成>&file,二者的意思完全相同,都等价于
file 2>&1
此处&>或者>&视作整体,分开没有单独的含义

源文档 <https://my.oschina.net/u/4131409/blog/3079199> 

-------------------------------------------------------------------------
linux给程序提供三种I/O设备
    标准输入stdin---0   默认接收来自键盘的输入
    标准输出stdout---1  默认输出到终端窗口
    标准错误stderr---2  默认输出到终端窗口
I/O重定向:改变默认位置
    >       重定向标准输出
    2>      重定向标准错误
    &>      重定向标准输出和标准错误
>文件内容会被覆盖
    set -C 禁止将内容覆盖已有文件,但可以追加
    >| file 强制覆盖
    set +C 允许覆盖
>> 在原有内容基础上,追加内容

    <或0<       清空已有内容,数据一般从文件流向处理的命令
    <<或0<<     追加内容到底部,数据一般从文件流向处理的命令
    >或1>       正常输出重定向到文件,会清空已有内容
    >>或1>>     将内容追加重定向到文件底部,不会清空已有内容
    2>          将标准错误内容重定向到文件,会清空已有内容
    2>>         将标准错误内容追加重定向到文件底部,不会清空已有内容


把输出和错误重新定向到文件
2>  覆盖重定向错误输出数据流
2>> 追加重定向错误输出数据流
command > file.out 2>error.out   #将标准输出和标准错误输出到不同的文件中

合并标准输出和标准错误为同一个数据流,并进行重定向
&>      覆盖重定向(centos4,5可能不支持这种写法)
&>>     追加重定向
command > file.out 2>&1 (顺序很重要)
command >> file.out 2>&1

()合并多个程序的标准输出
(cal 2007;cal 2008) > all.txt




要重定向输入,那么这个命令首先应该能接收标准输入
cat <f1 >f2
cat <f1 >>f2
这两种写法,输出对象是其他文件,那么结果符合预期
但是输出对象是自己时,结果就不符合预期了
cat <f1 >f1         #f1文件被清空
cat <f1 >>f1        #这种写法造成了循环...



        以下这3种用法均等效:
        touch >> log.txt  2>> log.txt
        echofdsfsdfs &> log.txt  等效于 echofdsfsdfs > log.txt  2> log.txt
        echofdsfsdfs >> log.txt 2>&1   
        
        此外还有一个特殊重定向用法:将标准错误重定向到标准输出,即标准错误和标准输出一样从定向到文件中,这个功能有3种实现命令方法。
        方法1:echo "I am oldboy" >oldboy.txt  2>oldboy.txt
        方法2:echo "I am oldboy" &>oldboy.txt
        方法3:echo "I am oldboy" 1>oldboy.txt 2>&1


---------------------------------------------
< 重定向标准输入
cat > file1 < file2   #从文件2导入标准输入,将标准输出重定向到文件1

<<终止词(<<EOF)  将多行内容重定向到标准输入

<是单行重定向,每输入一个回车,就重定向一次(当前终端的每一次回车,使用另一个终端查看文件,都能看到内容)
<<EOF是多行重定向,输入回车不会导致重定向;只有当遇到EOF终止符时,才会进行重定向(只有当遇到终止符时,才会一次性重定向)

视频中用于比较的2个命令
cat >111.txt
cat <<EOF >111.txt
文件描述符;标准I/O、I/O重定向(>、2>、&>、>>、2>>、&>>)、(<、<<EOF)



<<EOF用法
EOF是END Of File的缩写,表示自定义终止符.既然自定义,那么EOF就不是固定的,可以随意设置别名
        其用法如下:
        <<EOF        //开始
        ....
        EOF            //结束
        还可以自定义,比如自定义:
        <<BBB        //开始
        ....
        BBB              //结束


[root@yefeng28325 directory_test]# more <<EOF >123.txt
[root@yefeng28325 directory_test]# cat <<EOF >123.txt
[root@yefeng28325 directory_test]# cat >123.txt <<EOF     #这种写法与上一种等效
文件描述符;标准I/O、I/O重定向(>、2>、&>、>>、2>>、&>>)、(<、<<EOF)
复制代码

 /dev/null 文件:如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到**/dev/null**中

复制代码
管道"|";xargs命令;xargs与find -exec比较;tee命令
==========================================================================
管道"|"
命令1 | 命令2 | 命令3   #将命令1的标准输出作为命令2的标准输入,将命令2的标准输出作为命令3的标准输入
标准错误默认不能通过管道转发,可利用2>&1或者|&实现

管道后面能结合的命令是需要标准输入的,否则没有意义

管道中的"-"符号
tar -cvf - /home | tar -xvf -/home里面的文件打包,但打包的数据不是记录到文件,而是传送到stdout,经过管道后,将tar -cvf - /home传送给后面的tar -xvf - ,后面的这个-则是取自前一个命令的stdout,因此就不需要使用临时file了

强调:管道左边的命令一定要有标准输出,管道右边的命令一定要有标准输入
标准输入的命令,有一个特点,单敲一个命令,命令行界面会换行,等待标准输入

-------------------------------------------------------------------------------------------
xargs(英文全拼: eXtended ARGuments)是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。
xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。
xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
xargs 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。
xargs用于产生某个命令的参数,xargs可以读取stdin的数据,并且以空格符or回车符将stdin的数据分隔成为arguments
命令格式:somecommand |xargs -item  command

参数:
        -n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。
        -d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符。
        -i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。

        -a file 从文件中读入作为 stdin
        -e flag ,注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。
        -p 当每次执行一个argument的时候询问一次用户。
        -t 表示先打印命令,然后再执行。
        -r no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了。
        -s num 命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数。
        -x exit的意思,主要是配合-s使用。
        -L num 从标准输入一次读取 num 行送给 command 命令。
        -l 同 -L。
        -P 修改最大的进程数,默认是1,为0时候为as many as it can ,这个例子我没有想到,应该平时都用不到的吧。

        xargs 一般是和管道一起使用。
        xargs -d"." -n2 <test.txt    #-n按指定数量进行分组;-d指定分隔符,默认是空格

xargs命令功能:
    1.由于很多命令不支持管道来传递参数,而日常工作中有这个必要
        find /sbin -perm +700 |ls -l        #错误用法
        find /sbin -perm +700 |xargs ls -l  #正确用法
    2.有些命令不能接受过多参数,命令执行可能会失败
        touch {1..1000000}.txt                      #提示Argument list too long
        echo {1..1000000}.txt |xargs touch          #成功创建   #作为内容,长度没有限制;但是作为参数,个数是有限制的!
        rm -rf *                                    #提示Argument list too long
        echo {1..1000000}.txt | xargs rm -rf        #删除成功

-------------------------------------------------------------------------------------------
xargs与find的-exec比较
    find /data -type f -exec rm -f {} \;
        相当于 
        rm -f oldboy1.txt
        rm -f oldboy2.txt
        rm -f oldboy3.txt
        效率低。

    find /data -type f|xargs rm -f
        只是一条命令
        rm -f oldboy1.txt oldboy2.txt oldboy3.txt
        效率高

-------------------------------------------------------------------------------------------
tee命令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。
    -a或--append  附加到既有文件的后面,而非覆盖它.
    ls | tee ls.log       #达到同时将标准输出输出到终端和保存到文件的目的,保存文件默认是覆盖
    ls | tee -a ls.log    #-a 追加到文件
管道"|";xargs命令;xargs与find -exec比较;tee命令
复制代码

 tee命令用于定时任务crontab清空日志文件

sudo echo "" |tee `sudo find /dir/ -mtime +7 -type f 、\( -name "xxxxx.log.*" \)`

 

复制代码
linux的两种时钟(date命令、hwclock命令、clock命令);关机重启命令(halt命令、poweroff命令、reboot命令)
===================================================================================
linux的两种时钟
1.系统时钟
2.硬件时钟:主板
 
date命令  显示和设置系统时间
 
hwclock,clock 显示硬件时钟
    -s,--hctosys 以硬件时钟为准,校正系统时钟
    -w,--wywtohc 以系统时钟为准,校正硬件时钟
 
cat /etc/localtime   #查看时区
cal -y               #查看日历,默认显示当月月份,-y显示一年
 
 
ntpdate 192.168.1.1     #同步时间
 
 
-----------------------------------------------------------
关机:halt,poweroff
重启:reboot
    -f   强制,不调用shutdown
    -p   切断电源
关机或重启:shutdown
    -r reboot
    -h halt
    -c cancel
    TIME:无指定,默认相当于+1
        now 立刻,相当于+0
        +m  相对时间表示法,几分钟之后,例如+3
        hh:mm  绝对时间表示,指明具体时间
linux的两种时钟(date命令、hwclock命令、clock命令);关机重启命令(halt命令、poweroff命令、reboot命令)
复制代码

 

复制代码
mail命令、reset命令;使用原始命令的4种方法;命令优先级;其他小知识点
==========================================================
mail命令
mail        #查看邮箱
echo  hello word | mail -s " title" 123456@qq.com  #发送邮件
mail -s " title" 123456@qq.com < mail.txt

===============================================================
reset命令其实和 tset 是一同个命令,它的用途是设定终端机的状态。
除了在 login 时使用外,当系统终端机因为程序不正常执行而进入一些奇怪的状态时,你也可以用它来重设终端机.
例如不小心把二进位档用 cat 指令进到终端机,常会有终端机不再回应键盘输入,或是回应一些奇怪字元的问题。此时就可以用 reset 将终端机回复至原始状态。
=================================================================
使用原始命令的4种方法
    1.使用全路径(仅适用于外部命令)
    2.\命令  -------反斜线
    3.'命令'-------单引号
    4.command 命令

-----------------------------------------
命令优先级
别名>内部命令>外部命令
    别名的优先级比内部优先级高(enable命令为查看激活的内部命令;1.alias enable=who;2.enable查看结果显示为who的结果)
    外部命令默认是不加载到内存中的,只有使用到外部命令,才会将外部命令加载到内存中
 

-----------------------------------------
echo $SHELL         #查看当前使用的shell
cat /etc/shells     #查看当前系统支持的所有shell

-----------------------------------------
PS1=[\u@\h \W]\$
\e\033
\u  当前用户
\h  主机名简称
\H  主机名
\w  当前工作目录
\W  当前工作目录基名
\t  24小时时间格式
\T  12小时时间格式
\!  命令历史数
\#  开机后命令历史数

-----------------------------------------
$()或``:把一个命令的输出打印给另一个命令的参数
{}:打印重复字符串的简化形式
    {1,3,5};{1..10};{a..z}
 
-----------------------------------------
tab键:命令补全、路径补全
常见用法不总结了,补全2个不熟悉的用法
~2tab       所有用户列表
$2tab       所有变量
 
-----------------------------------------
文件有两类数据:元数据metadata、数据data
字母是否大小写敏感,是和文件系统相关的!
mail命令、reset命令;使用原始命令的4种方法;命令优先级;其他小知识点
复制代码

 

posted @   雲淡風輕333  阅读(63)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示