欢迎光临
我们一直在努力

Linux命令、文件管理



Linux命令  文件管理 用户管理



一、linux命令




    命令语法通用格式
    #COMMAND OPTION ARGUMENTS


1、命令的含义:发起一命令:就是请求内核将某个二进制程序运行为一个进程; 命令是一个可执行的二进制程序文件,
有可能会调用共享文件库。


[root@localhost tmp]# file /bin/ls   -----查看ls文件类型
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), 
dynamically linked (uses shared libs), for GNU/Linux 2.6.32, 
BuildID[sha1]=0xec333a104e045327c5e3d0ca6dda16c610a210f3, stripped
     程序-->进程
     静态-->动态 (有生命周期)

    file  文件: 查询文件类型信息;
    ldd:可以查看一个可执行程序依赖的共享库;
[root@localhost tmp]# ldd /bin/ls
linux-vdso.so.1 =>  (0x00007fffb81fe000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f7882e89000)
libcap.so.2 => /lib64/libcap.so.2 (0x00007f7882c84000)
libacl.so.1 => /lib64/libacl.so.1 (0x00007f7882a7a000)
libc.so.6 => /lib64/libc.so.6 (0x00007f78826b9000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f7882458000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f7882253000)
/lib64/ld-linux-x86-64.so.2 (0x00007f78830c3000)
libattr.so.1 => /lib64/libattr.so.1 (0x00007f788204e000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f7881e32000)


    库: 别人写好的现有的,成熟的,可以复用的代码,可以使用但要遵守许可协议;
      静态库的后缀是.a;
      动态库(共享库)的后缀是.so,它由gcc加特定参数编译产生;


 如何定位共享库文件?新安装一个库之后如何让系统识别?Linux中如何创建静态库和动态库,以及使用它们?


            详细可参考:


https://www.cnblogs.com/yangg518/p/5842651.html




   


2、系统程序存放路径:
   /bin; /sbin; /usr/bin; /usr/sbin; /usr/local/bin; /usr/local/sbin;
   普通命令:/bin; /usr/bin; /usr/local/bin; 
   管理命名:/sbin;  /usr/sbin; /usr/local/sbin;
   共享库文件: /lib; /lib64; /usr/lib;/usr/lib64; /usr/local/lib; /usr/local/lib64;
   注意:并非所有的命令都有一个在某个目录与之对应的可执行程序文件。




    3、命令的类别:以是否有可执行文件来区分。


   查看命令的类型及位置:type COMMAND 
   内置命令: 由shell程序自带的命令; builtin
   [root@localhost bin]# type printf
    printf is a shell builtin

      外部命令: 独立的可执行程序文件,文件即命令:
    [root@localhost bin]# type zip
    zip is /bin/zip


4、shell


       shell程序是独特的程序,负责解析用户提供的命令;


        环境变量:PATH


[root@localhost bin]# echo $PATH
/usr/java/jdk1.6.0_45/bin:/bin:/usr/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin




PATH:从路径中查找用户键入的命令字符串所对应的命令文件:查找的顺序是,自左向右,以第一次查找到的命令为止。
    OPTIONS:
     两种表现形式:
     短选项; 如  -l  -d (注意有些选项没有-);可合并,如 -ld;
     长选项: 如  --word  ; 不能合并;


    ARGUMENTS: 命令作用对象,对何生效
      部分可以带多个参数,以空白字符分开,如


[root@localhost bin]# ls /tmp /etc/ssh
/etc/ssh:
moduli       ssh_host_ecdsa_key      ssh_host_ed25519_key.pub
ssh_config   ssh_host_ecdsa_key.pub  ssh_host_rsa_key
sshd_config  ssh_host_ed25519_key    ssh_host_rsa_key.pub
/tmp:
2004-02-29 16:21:42  script
2017-02-29 16:21:42  sort.txt
2017-4-5      systemd-private-1f0c154d3be34ae4bc6670cd76168c21-colord.service-NOKmzL
cat        systemd-private-1f0c154d3be34ae4bc6670cd76168c21-rtkit-daemon.service-ekYjoA
fatabmy      vmware-root
functions     yum_save_tx.2019-06-24.08-11.VV74Ze.yumtx
glfstab      yum_save_tx.2019-06-25.16-52.9YerbK.yumtx
magedu.com
语法格式:
尖括号< >:必选参数,实际使用时应将其替换为所需要的参数
大括号{ }:必选参数,内部使用,包含此处允许使用的参数
方括号[ ]:可选参数,在命令中根据需要加以取舍
小括号( ):指明参数的默认值,只用于{ }中
竖线|:a|b|C ;用于分隔多个互斥参数,含义为“或”,使用时只能选择一个。
省略号...:任意多个参数。


    5、获取命令帮助


   内置命令:  help COMMAND
   所有命令:
     1) 命令自带简要格式的使用帮助
       # COMMAND --help


[root@localhost bin]# mke2fs --help
mke2fs: invalid option -- '-'
Usage: mke2fs [-c|-l filename] [-b block-size] [-C cluster-size]
[-i bytes-per-inode] [-I inode-size] [-J journal-options]
[-G flex-group-size] [-N number-of-inodes]
[-m reserved-blocks-percentage] [-o creator-os]
[-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]
[-O feature[,...]] [-r fs-revision] [-E extended-option[,...]]
[-t fs-type] [-T usage-type ] [-U UUID] [-jnqvDFKSV] device [blocks-count]




 2) 手册查询帮助:  manual COMMAND   或者  man COMMAND        
      手册位于: /usr/share/man      ----需要有手册
      手册为压缩格式文件,有章节CHAPTER之分: man1;  man2;  man3......
        1:  用户命令
        2: 系统调用
        3: C库调用
        4: 设备文件及特殊文件
        5: 文件格式(配置文件格式)
        6: 游戏使用帮助;
        7: 杂项
        8: 管理工具及守护进程;系统管理员手册。


       # whatis COMMAND      ---查询命令有哪个CHAPTER手册 
       # man CHAPTER COMMAND ---指定查询CHAPTER的手册;
         -M /PATH/         ---到指定目录查找手册;



[root@localhost bin]# whatis passwd
sslpasswd (1ssl)     - compute password hashes
passwd (1)           - update user's authentication tokens
passwd (5)           - password file
[root@localhost bin]# man 5 passwd
PASSWD(5)   Linux Programmer's Manual   PASSWD(5)
NAME
passwd - password file


    手动更新man的数据库:
   # makewhatis
   # info COMMAND   查看该命令的info帮助文档

      应用程序自带文档: /usr/share/doc/APP-VERSION

google 搜索查询:
    keyword  filetype :pdf    指定文档类型;
    keyword  site:domain       指定网站;


    6、命令别名

  外部命令可以起别名,可以与原名相同,若相同,则原名被隐藏。


[root@localhost dev]# type ls      
ls is aliased to `ls --color=auto'       -----ls是ls --color=auto的别名
[root@localhost dev]# 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'
[root@localhost dev]# unalias ls   -----撤销别名
[root@localhost dev]# 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 mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@localhost dev]# type ls    ----看到了ls是外部命令,
ls is hashed (/bin/ls)
[root@localhost dev]# alias ls='ls --color=auto'  -----加回去


   要执行别名的原命令,使用\COMMAND; 
   别名设置是对当前的shell有效



7、常用命令

 pwd: 当前目录
 cd:
  cd 或者 cd ~  切换到家目录
  cd -  切换到上一个目录
     隐含了两个变量: $PWD; $OLDPWD
[root@localhost tmp]# echo $PWD
/tmp
[root@localhost tmp]# echo $OLDPWD
/bin
[root@localhost tmp]# cd -
/bin
[root@localhost bin]# cd -
/tmp


        


        ls:ls [OPTION]… [FILE]… 



           -l



               如:



               -rw-r–r–. 1 root  root    18281 Jun  4 06:08 functions



               文件类型: -; d; b; c; l; s; p



               -rw-rwxr–:   权限



                      左: user; 宿主;



                      中: group  宿组;



                      右: other  其它用户;



               18281: 字节;(注意,目录的大小不代表它下一级所有文件的大小之和,谨代表它自己)



               4:    硬连接数;       





           -h  文件大小换算;



           -d  查看目录自身



               [root@localhost tmp]# ls -ld /tmp



   drwxrwxrwt. 13 root root 4096 Jul  7 01:29 /tmp



           -r 逆序显示;



           -R 递归显示所有;




        cat:查看文本文件(去看二进制文件,乱码一堆)


           cat [OPTION]… [FILE]…



           -n: 编行号显示;



           -E: 显示结束符;




        tac:cat的逆序;




        file: 查看文件类型;




        echo:


            echo [SHORT-OPTION]… [STRING]…


               -e 显示转义字符   \n 换行    \t 制表符


                STING 用单引号和双引号


                      单引号: 强引用 变量引用不执行替换;


                      双引号: 弱引用 变量引用会被替换


        


        wall : 发消息




        日期命令:


            date 


             显示系统时间 


              +FORMAT


                +%F  ;full date; same as %Y-%m-%d


                +%T  : time; same as %H:%M:%S


                +%S  :seconds since 1970-01-01 00:00:00 UTC


                 –       : (hyphen) do not pad the field



[root@localhost script]# date
Sun Jul  7 02:00:35 PDT 2019
[root@localhost script]# date +%F
2019-07-07
[root@localhost script]# date +%T
02:05:31
[root@localhost script]# date +%s
1562490341


             设定系统时间 


               date [MMDDhhmm[[CC]YY][.ss]




        Linux系统启动从硬件读取时间和日期,读取完成后,这日期时间就不再与硬件项相关联了。


            系统时钟:


            硬件时钟:





        hwclock : query or set the hardware clock 显示或设置硬件时钟



          -s :   Set the System Time from the Hardware Clock   硬为准



          -w :   Set the Hardware Clock to the current System Time  系统为准





        cal;   display a calendar



           cal [options] [[[day] month] year]





    练习:在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。


[root@localhost mk]# echo "tfile-/date"       -----命令date无执行,引用命令结果要$(COMMAND)
tfile-/date
[root@localhost mk]# echo "tfile-$(date)"      ----- date的格式要处理
tfile-Sun Jul  7 07:24:53 PDT 2019
[root@localhost mk]# echo "tfile-$(date +%F-+%H-+%M-+%S)"  ----- 这个+一个就足够了
tfile-2019-07-07-+07-+25-+45
[root@localhost mk]# echo "tfile-$(date +%F-%H-%M-%S)" ----- 结果快出来了
tfile-2019-07-07-07-25-59
[root@localhost mk]# touch "tfile-$(date +%F-%H-%M-%S)"
[root@localhost mk]# ls
mydir  tfile-2019-07-07-07-26-18


          



二、文件管理




1. 文件类型


    –


常规文件,即file



d


目录文件



b


block device 即块设备文件,如硬盘;支持以block为单位进行随机访问



c


character device 即字符设备文件,如键盘支持以character为单位进行线性访问



    major number: 主设备号,用于标识设备类型,加载驱动;



    minor number: 次设备号,用于标识同一设备类型的不同设备.

[root@localhost dev]# ls -l /dev |grep sda
brw-rw----. 1 root disk      8,   0 Jul  3 07:14 sda
brw-rw----. 1 root disk      8,   1 Jul  3 07:14 sda1
brw-rw----. 1 root disk      8,   2 Jul  3 07:14 sda2
brw-rw----. 1 root disk      8,   3 Jul  3 07:14 sda3





l


symbolic link 即符号链接文件,又称软链接文件



p


pipe 即命名管道文件



s


socket 即套接字文件,用于实现两个进程进行通信   —–这个套接字当时写TCP通讯程序非常熟悉,现在全忘了!






2、常用命令


    mkdir: make directories创建目录


      -p : 自动创建父目录


[root@localhost tmp]# mkdir /tmp/mk/mydir
mkdir: cannot create directory ‘/tmp/mk/mydir’: No such file or directory
[root@localhost tmp]# mkdir -p /tmp/mk/mydir   -----创建成功



      -v :  verbose 显示创建过程


      -m : 设置权限




    rmdir:  remove empty directories 删除目录


      -P :  删除某目录,若父辈为空,则一并删除;rmdir -p a/b/c' is similar to 'rmdir a/b/c a/b a'




    tree : 显示目录层次


      -L level 显示指定层组,如 tree -L 3 


    


    练习:


        1)创建/tmp/a1, /tmp/a2, /tmp/a1/a, /tmp/a1/b。


          利用{}分组,可承载以逗号为分割的路径列表

[root@localhost mk]# mkdir /tmp/a{1{a,b},2}
[root@localhost mk]# cd /tmp/
[root@localhost tmp]# tree 
├── a1a
├── a1b
├── a2
 
[root@localhost tmp]# mkdir -pv /tmp/a{1/{a,b},2}
     ----r若不带p,则显示mkdir:cannotcreate directory ‘/tmp/a1/a’: No such file or director
mkdir: created directory ‘/tmp/a1’
mkdir: created directory ‘/tmp/a1/a’
mkdir: created directory ‘/tmp/a1/b’
mkdir: created directory ‘/tmp/a2





2)在/tmp目录下创建目录:x_y, x_z, q_y, q_z

[root@localhost tmp]# mkdir -pv /tmp/{x,q}/{y,z}
mkdir: created directory ‘/tmp/x’
mkdir: created directory ‘/tmp/x/y’
mkdir: created directory ‘/tmp/x/z’
mkdir: created directory ‘/tmp/q’
mkdir: created directory ‘/tmp/q/y’
mkdir: created directory ‘/tmp/q/z’
[root@localhost tmp]# mkdir -pv /tmp/{x,q}_{y,z}
mkdir: created directory ‘/tmp/x_y’
mkdir: created directory ‘/tmp/x_z’
mkdir: created directory ‘/tmp/q_y’
mkdir: created directory ‘/tmp/q_z’


3、文件的数据信息及查询


    文件查看工具:


        cat;tac; less; more; head; tail;


        tail : – output the last part of files 显示文件尾部n行,默认10行。 


           tail -20  somefile


           -f : output appended data as the file grows;  —–通常用于追踪转化为后台应用程序的日志;


    文件包含两类数据: 元数据+正文实际数据


        元数据Metadata:描述数据的数据,即数据属性(property)信息,


                                    如大小、权限、宿主宿组、时间戳、数据块的分布信息(inode)等


            时间戳:


                access time :  ATime    数据最后一次读取时间;


                modify time :  MTime    数据最后一次更改时间;


(当实际数据更改了,并不一定会产生读取!,如重定向>>输入)


                change time :   CTime    元数据最后一次更改时间;


(实际数据更改了,这个就一定会跟着变,但是如果你是用touch去修改数据戳,就不会跟着变)


     查看文件数据信息: stat file

[root@localhost tmp]# stat glfstab 
File: ‘glfstab’
Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 803h/2051d      Inode: 103529576   Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1002/   user1)   Gid: ( 1002/   user1)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2019-06-23 06:31:29.863083244 -0700
Modify: 2019-06-23 06:31:29.863083244 -0700
Change: 2019-06-23 08:40:41.242916831 -0700
 Birth: -


    修改文件时间戳的信息: 


          touch [OPTION]… FILE…   改变时间戳,默认为当下,CTime无法指定更换,


文件不存在则创建文件


                  -a  ATime;


                  -m  MTime;    


                        human readable date string such as "Sun, 29 Feb2004 16:21:42 -0800" or "2004-02-29 16:21:42" or


 even "next Thursday"


                   -c  CTime  do not create any files


                    -t  指定时间;  [[CC]YY]MMDDhhmm[.ss]


                    

[root@localhost tmp]# touch -t 201707070707 glfstab 
[root@localhost tmp]# stat glfstab 
File: ‘glfstab’
Size: 0        Blocks: 0    IO Block: 4096   regular empty file
Device: 803h/2051d      Inode: 103529576   Links: 1
Access: (0674/-rw-rwxr--)  Uid: ( 1002/   user1)   Gid: ( 1002/   user1)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2017-07-07 07:07:00.000000000 -0700
Modify: 2017-07-07 07:07:00.000000000 -0700
Change: 2019-07-06 22:38:48.310288863 -0700
 Birth: -
[root@localhost tmp]# echo "be a test" >> glfstab   
(用vim修改,Atime必然跟着MTime而变,用>>,ATim不变)
[root@localhost tmp]# stat glfstab 
File: ‘glfstab’
Size: 28       Blocks: 8     IO Block: 4096   regular file
Device: 803h/2051d      Inode: 103529576   Links: 1
Access: (0674/-rw-rwxr--)  Uid: ( 1002/   user1)   Gid: ( 1002/   user1)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2019-07-06 22:40:43.228353962 -0700
Modify: 2019-07-06 22:42:30.142275224 -0700
Change: 2019-07-06 22:42:30.142275224 -0700
 Birth: -




4.文件管理工具


    cp: 


       单—>单(可重命名) —-通常用来备份文件


       多(用{})—>目录


       -i :交互


       -n : do not overwrite an existing file


       -f :强制复制,不询问覆盖性的复制


       -R -r: 递归复制目录


    mv: move (rename) files    —–你说这东西拷到一半出故障了,目录两边各一部分内容,怎么还原呢?


                                                     ctrl+c ctrl+V 比直接ctrl+X安全


       -b :  like –backup but does not accept an argument    —–这个也安全


    


    rm:remove files or directories    —–危险动作,还是先mv到临时文件夹,过段时间在临时文件夹rm安全


       -i : 交互


       -f : force


       -R -r : recursive;递归删除


 

     删除目录 rm -rf   


       严重警告 :


              在root的权限下输入此命令,极容易出现rm -rf / 的操作,所有都没有了,因此最后对其限制或者用别名。


              root权限危险,rm危险,两者结合很危险。






    练习:复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。


[root@localhost tmp]# cp -rv  /etc/[p]*[^[[:digit:]]] /tmp
cp: cannot stat ‘/etc/[p]*[^[[:digit:]]]’: No such file or directory
[root@localhost tmp]# cp -rv  /etc/[p]*[^[:digit:]] /tmp  
‘/etc/pam.d’ -> ‘/tmp/pam.d’
‘/etc/pam.d/config-util’ -> ‘/tmp/pam.d/config-util’
‘/etc/pam.d/other’ -> ‘/tmp/pam.d/other’
‘/etc/pam.d/chfn’ -> ‘/tmp/pam.d/chfn’
‘/etc/pam.d/chsh’ -> ‘/tmp/pam.d/chsh
。。。。。



赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。