个人技术分享

目录

一、shell

1.shell含义

2.shell作用

3.内部命令与外部命令的区别

二、查看内部命令(help、enable、type)

例一:type

例二:echo

例三:hash

例四:which

例五:whereis

三、命令帮助(help、man)

1.help

2.man手册的使用

四、查看及切换目录(pwd、cd、ls、du)

1.pwd:查看当前工作目录

2.cd:切换工作目录 (相对路径、绝对路径)

3.ls:列表显示目录内容 (常用选项、可结合通配符)

补充(通配符、文件类型)

4.du:统计目录及文件空间占用情况

五、创建目录和文件(mkdir、touch、ln)

1.mkdir:创建新目录

2.touch:创建空文件

3.ln:创建链接文件(软链接、硬链接)

六、复制、删除、移动目录和文件(cp、rm、mv)

1.cp:复制文件或目录

2.rm:删除文件或目录

3.mv:移动文件或目录/改名

七、查找目录和文件(which、find)

1.which:查找命令/文件存放目录

2.find:查找文件或目录

扩展

八、alias:给命令设置别名

九、chgrp:只改属主


一、shell

1.shell含义

shell是Linux系统中后台运行的一种特殊程序也可以理解成一种特殊的软件,提供了用户与内核进行交互操作的一种接口。

2.shell作用

  • 接受用户输入的命令
  • 解释命令
  • 传递给系统内核执行

简单来说,充当翻译官的作用
 

3.内部命令与外部命令的区别

内部命令 外部命令
集成于Shel解释器程序内部的一些特殊指令也称为内建(Built-in)指令 Linux系统中能够完成特定功能的脚本文件或二进制程序
属于Shell的一部分 属于Shell解释器程序之外的命令
没有单独对应的系统文件 每个外部命令对应了系统中的一个文件
自动载入内存,可以直接使用 必须知道其对应的文件位置,由Shell加载后才能执行

二、查看内部命令(help、enable、type)

注意:enable -n  禁用内部命令

例一:type

[root@localhost /]# type cd         
cd 是 shell 内嵌                       //内嵌代表内部命令
[root@test1 /]# type -a ls
ls 是 `ls --color=auto' 的别名        //别名代表外部命令        
ls 是 /usr/bin/ls                    //外部命令会有程序路径

[root@localhost /]# whereis ls       //whereis 可以查找命令具体的位置所在
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
 

例二:echo

外部命令存放于 echo $PATH  一个一个找,找到为止,找不到就报无命令
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
外部命令使用过后会被记录在内存(缓存,但是会占用内存,临时性的)加快读取速度

例三:hash

[root@localhost ~]# type useradd 
useradd 已被哈希 (/usr/sbin/useradd)
[root@localhost ~]# hash                  //或者使用hash
命中    命令
   1    /usr/bin/dd                       //前面数字代表用过几次
   2    /usr/sbin/useradd
   1    /usr/bin/whoami
   3    /usr/bin/ls
[root@localhost ~]# hash -d dd              //清楚dd命令缓存 -r全清
[root@localhost ~]# hash
命中    命令
   2    /usr/sbin/useradd
   1    /usr/bin/whoami
   3    /usr/bin/ls

例四:which

[root@localhost ~]# which ping      //外部命令的磁盘路径 -a 所有
/usr/bin/[root@localhost ~]# which help    //内部命令找不到
/usr/bin/which: no help in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)

例五:whereis

[root@localhost ~]# whereis echo            //相关文档的帮助的命令
echo: /usr/bin/echo /usr/share/man/man1/echo.1.gz /usr/share/man/man1p/echo.1p.gz

三、命令帮助(help、man)

1.help

显示命令的帮助信息,命令的参数和用法等

2.man手册的使用

linux的命令手册大全                          查找翻页,n 向下 N 向上
用法:man cd                                      

man ls | col -b > lshelp.txt 
在这个例子中,col 是一个命令程序,用于过滤文本中的一些特殊控制字符;另外还使 用了“|”和“>”符号,这是 Shell 环境中的两种特殊功能应用,分别称为管道、重定向输出。其 含义及作用如下所述。  

管道:用竖杠符号“|”表示,用于将前面命令的屏幕输出结果作为后面命令的操作对 象(输入)。就好像一根管道一样,从这头塞入内容,从另一头出来。 

重定向输出:用大于符号“>”表示,前面的命令成功执行以后,其屏幕输出结果将 保存到“>”号后边指定的文件中,而不是直接输出到屏幕,因此称为重定向。
 

四、查看及切换目录(pwd、cd、ls、du)

1.pwd:查看当前工作目录

[root@localhost ~]# pwd
/root

2.cd:切换工作目录 (相对路径、绝对路径)

cd /home    #后面跟绝对路径,切换到home目录
cd ./home   #后面跟相对路径,切换到home目录
cd ~        #切换到当前用户的家目录
cd          #切换到当前用户的家目录
cd ~user  #切换到某一个用户的家目录,只有root才行,别的用户只能在自己家
cd -        #切换到上一次执行操作的目录
cd ..       #切换到上一层目录(父目录)
思考:如何切换到父目录的父目录(cd ../../)

3.ls:列表显示目录内容 (常用选项、可结合通配符)

命令字    [选项]      [参数]
操作       功能        要执行的对象

-l  #将文件信息属性详细列出,通常直接使用ll,因为设置了别名
-R  #递归显示,比如一个目录下还有文件,则把那个文件也一起列出
-d  #查看目录本身信息,不显示目录下的内容
-i  #显示inode值
-h  #友好显示文件大小
-a  #遍历所有文件及目录 (ls内定将文件名或目录名称开头为"."的视为隐藏档,不会列出)
-A  #跟-a 唯一的不同是不列出当前目录和上一层目录
 

ls -lh

通配符
- “?”匹配一个字符
ls -lh /dev/sd?1
- “*” 匹配所有非隐藏的字符无论多长多短
ls -lh /etc/ns*.conf

[root@localhost mnt]# ll
#长格式
总用量 0
drwxr-xr-x 3 root root 16 8月  21 10:39 aa
第一个字段 d   代表文件类型比如 d是目录 - 是普通文件
第2-9(rwxr-xr-x)字母表示该文件的权限
root 文件所有者
root 文件所属组
16 文件大小
21 10:39 文件的最近使用时间
aa 文件或目录名称
ls -lh

补充(通配符、文件类型)

- 普通文件
d 目录文件 directory
b 块设备文件block
p 管道文件pipe
s 套接字文件 socket
l 符号链接文件link
 

通配符扩充

| 符号        | 效果                                                          |
| ----------- | ------------------------------------------------------------ |
| ?          | 匹配一个字符    f?.txt                                         |
| *           | 匹配所有非隐藏的字符无论多长多短,但不匹配 "." 开头的文件,即隐藏文件 |
| {1..10}     | 1到10                                                        |
| {a..z}      | a b c ...z                                                   |
| {A..Z}      | A B C .....Z                                                 |
| [123]       | 取其中之一有就显示没有也无所谓                                  |
| [a-z]       | 范围需要注意                                                   |
| [0-9]       | 匹配数字范围(0123456789)                                       |
| \           | 转义符,表示原来的意思                                          |
| [[:lower:]] | 小写字母表示 a-z                                               |
| [[:upper:]] | 大写字母表示 A-Z                                               |
| [^zhou]     | 匹配列表中的所有字符以外的字符                                   |
| [[:digit:]] | 任意数字,相当于0-9                                             |
 

4.du:统计目录及文件空间占用情况

-h:显示出每一个文件以及大小,单位是KB,MB,GB
-s:显示文件或整个目录的大小,默认单位是KB,但不会把他们显示出来

du -sh *   #生产环境常这样搭配使用统计当前目录下所有文件的大小并显示出来,常用于磁盘水位过高的情况

五、创建目录和文件(mkdir、touch、ln)

1.mkdir:创建新目录

mkdir /opt/sj    #创建目录,注意:父目录必须存在
-p:创建一个已有的目录会报错,加-p则不会报错/当父目录不存在时,递归创建


2.touch:创建空文件

①文件存在:修改文件或者目录的时间属性,包括存取时间和更改时间。
②文件不存在:创建新文件
touch [文件名]
touch  [文件名] [文件名]

下面是touch的高级用法
[root@localhost opt]# touch {1,2,3}
[root@localhost opt]# ls
1  2  3  rh
[root@localhost opt]# touch {1,2,3}.txt
[root@localhost opt]# ls
1  1.txt  2  2.txt  3  3.txt  rh
[root@localhost opt]# touch {4..8}.txt
[root@localhost opt]# ls
1  1.txt  2  2.txt  3  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  rh
如果要删除则rm -rf 1\ 2\ 3 


touch f{A..Z}.log
- [123] 取其中之一有就显示没有也无所谓
touch f[zhou].log 
ls f[zhou].log  //四个其中的之一有就全显示  


3.ln:创建链接文件(软链接、硬链接)

ln 命令用于为文件或目录建立链接文件(类似于 Windows 系统中的快捷方式),提高 用户定位文件或定位目录的效率
链接文件包括软链接和硬链接两种类型,其中软链接又称为符号链接。无论是访问软链接还是硬链接,与直接访问原始文件的效果基本相同
ln -s  创建软链接,相当于创建一个快捷方式
ln     创建硬链接,相当于复制了一份副本

软链接建立时原始文件可以不存在
如果删除源文件之后又重新建立源文件,那么软链接照样可以用
软链接文件的大小就是软链接文件本身的文件名字符长度!
可以给目录做软链接,为了防止目录被删

硬软区别
硬链接不能跨分区建立连接 无法对文件夹创建 
删除硬件连接可以继续访问硬链接

软连接可以跨设备 可以支持文件夹
软连接删除源文件不能访问
硬链接:
一般情况下,文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名。但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为"硬链接"(hard link)

软链接:
除了硬链接以外,还有一种特殊情况。文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打开哪一个文件,最终读取的都是文件B。这时,文件A就称为文件B的"软链接"(soft link)或者"符号链接(symbolic link)。这意味着,文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错:"No such file or directory"。这是软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode"链接数"不会因此发生变化。


注:相对路径与绝对路径  建议绝对路径


案列
[root@kgc home]# echo "this is kgc" > demo.txt
[root@kgc home]# ln -s demo.txt test.txt
删除demo.txt 验证

[root@kgc home]# echo "this is kgc" > demo1.txt
[root@kgc home]# echo "this is kgc2" > demo2.txt
[root@kgc home]# ln demo1.txt test2.txt

root@localhost ~]# mkdir /bin/wx 
[root@localhost ~]# ln -s /bin/bzip2 /bin/wx/ 
[root@localhost ~]# ls -lh /bin/wx/bzip2 

lrwxrwxrwx 1 root root 10 9 月 16 14:05 /
 

六、复制、删除、移动目录和文件(cp、rm、mv)

1.cp:复制文件或目录

-p:连属性一起复制
-a:保留权限,复制软链接本身,递归复制
-r:递归复制
-f:强制复制,不与用户交互
-i:提醒覆盖

cp的高级用法:cp  -v  file1.txt{,.bak}常用于备份

2.rm:删除文件或目录

-i:删除文件或目录时提醒用户确认
-r:删除目录时必须使用此选项,表示递归删除整个目录树(应谨慎使用)。
-f:删除文件或目录时不进行提醒,而直接强制删除

常见用法:rm -rf  /*   
删除空目录:rmdir


3.mv:移动文件或目录/改名

用法:mv [文件名] [目录名]
      mv [文件名] [文件名]
-i:若指定目录已有同名文件,则先询问是否覆盖旧文件
-f:在 mv 操作要覆盖某已有的目标文件时不给任何指示
当在同一目录下用mv就是改名,如果是跨目录使用mv的话就是移动,相当于剪切的操作

七、查找目录和文件(which、find)

1.which:查找命令/文件存放目录

which 命令用于查找 Linux 命令程序并显示所在的具体位置,其搜索范围主要由用户的环境变量 PATH 决定(可以执行“echo $PATH”命令查看),这个范围也是 Linux 操作系统在执行命令或程序时的默认搜索路径。

2.find:查找文件或目录

  • 根据目标的名称、类型、大小等不同属性进行精细查找

不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示
-name 按名称查找:
-size 按大小查找:
-user 按文件属主:
-type 按类型查找:普通文件(f)、目录(d)、块设备文件(b)、字符设备文件(c)、链接(l)
块设备指的是成块读取数据的设备(如硬盘、内存等),而字符设备指的是按单个字符读取数据的设备(如键盘、鼠标等)

  • Find工具-name参数案列:

find /etc -name "resol*.conf"
find   /data/    -name   "*.txt"      #查找/data/目录以.txt结尾的文件;
find   /data/    -name   "[A-Z]*"     #查找/data/目录以大写字母开头的文件;
find   /data/    -name   "test*"      #查找/data/目录以test开头的文件;

  • Find工具-size参数案列

find   /data/    -size   +1M              #查文件大小大于1Mb的文件;
find   /data/    -size   4M               #查文件大小为10M的文件;
find   /data/    -size   -1M             #查文件大小小于1Mb的文件;

-size +4M    表示4M 以上   不包括 4M
-size  4M    表示3M  到4M  且不包括3M   
-size -4M    表示3M  以内  包括3M
1G  1024 代表1023M - 1024M  不包括1023M

  • Find工具-type参数案列:

find /boot -type d
find   /data/    -type d    #查找/data/目录下的文件夹;
find   /data/    !   -type   d     #查找/data/目录下的非文件夹;
find   /data/    -type  l    #查找/data/目录下的链接文件。
find  /data/ -type d|xargs chmod 755 -R #查目录类型并将权限设置为755;
find  /data/ -type f|xargs chmod 644 -R #查文件类型并将权限设置为644;

  • 查找存在的用户的文件

find /home -user 用户名
find /home -user 用户名  -group 组名


设置 find 命令的查找条件时,若需要使用“*”或“?”通配符,最好将文件名用双引号括起 来,以避免当前目录下符合条件的文件干扰查找结果
find /boot -size +1024k -a/-o -name "vmlinuz*"
使用“-a”“-o”组合两个条件,前者表示两个条件必须同时满足, 后者表示只需满足其中任何一个条件即可

扩展

xargs
可以和管道配合
find ./ -maxdepth 1 -type f -print0 | xargs -0 ls -lh
-atime  -- 访问时间
Linux中日志放在/var/log sylog
        
-mtime  -- 文件内容修改时间
    
-ctime  -- 文件属性修改时间    
ctime   ##以天为单位
cmin    ##以分钟为单位    
find ./ -name "syslog.*.gz" -mtime -5 -exec ls -lh {} \;     # +5是五天以前      #-5天以内 

在当前目录下(包含子目录),删除所有txt文件 
find ./ -name "*.txt" -exec rm {} \; 

在当前目录下(包含子目录),查找所有txt文件并找出含有字符串"bin"的行 
find ./ -name "*.txt" -exec grep "bin" {} \; 

多条件查找
-a:并且
-o:或者

[root@localhost ~]# find /mnt -user root -a -size +5m


[root@localhost ~]# find /mnt -user root -o -size +5m

-not表示非;即反向选择
[root@localhost ~]# find /mnt -not -user root

按权限查找:-perm
[root@localhost ~]# find /bin/ -perm 755 # 等于 0755 权限的文件或目录
[root@localhost  ~]# find /bin/ -perm -644 #-perm -644 至少有 644 权限的文件或目录


生产案列

find /backup/ -type f -name "*.log" -exec rm {} \;  #删除备份文件
find /backup/ -type f -name "*.dmp" -exec rm {} \;
#删除日志文件
find /backup/ -type f -name "*.tar.gz" -mtime +5 -exec rm -rf {} \; #删除5天前的备份(注意:{} \中间有空格)


八、alias:给命令设置别名

alias   #查看系统当前所有可用别名
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

alias ll='ls -lt'  #设置别名

注意: 在定义别名时,等号两边不能有空格,否则shell不能决定您需要做什么。仅在命令中包含空格或特殊字符时才需要引号

unalias ll  #删除别名
永久生效
vim /root/.bashrc
临时修改

-  alias  命令别名 =  “命令”
-  unalias  别名命令   删除别名
-  \加命令 原始命令


修改

- 在/etc/bashrc 会影响全部

- /root/.bashrc只影响当前用户

  补充:

  别名>内部>hash>外部命令(先查找别名在查找内部命令,缓存最后外部)
 

九、chgrp:只改属主

chgrp 【属名】 【文件名】

chgrp xiewei lisi.txt