Linux命令、文件管理

Linux命令  文件管理 用户管理

我们注重客户提出的每个要求,我们充分考虑每一个细节,我们积极的做好成都做网站、网站设计服务,我们努力开拓更好的视野,通过不懈的努力,成都创新互联公司赢得了业内的良好声誉,这一切,也不断的激励着我们更好的服务客户。 主要业务:网站建设,网站制作,网站设计,微信小程序定制开发,网站开发,技术开发实力,DIV+CSS,PHP及ASP,ASP.Net,SQL数据库的技术开发工程师。

一、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
。。。。。



名称栏目:Linux命令、文件管理
分享URL:http://scyanting.com/article/gepjph.html