Linux入门
Linux 目录结构
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/etc:配置文件 /bin:重要执行档 /dev:所需要的装置文件 /lib:执行档所需的函式库与核心所需的模块 /sbin:重要的系统执行文件 这五个目录千万不可与根目录分开在不同的分区。请背下来啊。 usr是Unix Software Resource的缩写, 也就是Unix操作系统软件资源所放置的目录 /usr (软件放置处) 如果/usr是安装时会占用较大硬盘容量的目录,那么/var就是在系统运作后才会渐渐占用硬盘容量的目录。 因为/var目录主要针对常态性变动的文件,包括缓存(cache)、登录档(log file)以及某些软件运作所产生的文件, 包括程序文件(lock file, run file),或者例如MySQL数据库的文件等等。 /var/mail (使用者邮件信箱) /var/spool/news (新闻组) /var/run (程序相关) /var/lock (程序相关)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/bin:/bin放置的是在单人维护模式下还能够被操作的指令。在/bin底下的指令可以被root与一般帐号所使用,主要有:cat,chmod(修改权限), chown, date, mv, mkdir, cp, bash等等常用的指令。 /boot:主要放置开机会使用到的档案,包括Linux核心档案以及开机选单与开机所需设定档等等。Linux kernel常用的档名为:vmlinuz ,如果使用的是grub这个开机管理程式,则还会存在/boot/grub/这个目录。 /dev:在Linux系统上,任何装置与周边设备都是以档案的型态存在于这个目录当中。 只要通过存取这个目录下的某个档案,就等于存取某个装置。比要重要的档案有/dev/null, /dev/zero, /dev/tty , /dev/lp*, / dev/hd*, /dev/sd*等等 /etc:系统主要的设定档几乎都放置在这个目录内,例如人员的帐号密码档、各种服务的启始档等等。 一般来说,这个目录下的各档案属性是可以让一般使用者查阅的,但是只有root有权力修改。 FHS建议不要放置可执行档(binary)在这个目录中。 比较重要的档案有:/etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11/, /etc/fstab, /etc/sysconfig/等等。 另外,其下重要的目录有:/etc/init.d/ :所有服务的预设启动script都是放在这里的,例如要启动或者关闭iptables的话: /etc/init.d/iptables start、/etc/init.d/ iptables stop /etc/xinetd.d/ :这就是所谓的super daemon管理的各项服务的设定档目录。 /etc/X11/ :与X Window有关的各种设定档都在这里,尤其是xorg.conf或XF86Config这两个X Server的设定档。 /home:这是系统预设的使用者家目录(home directory)。 比较重要的是,家目录有两种代号: ~ :代表当前使用者的家目录,而 ~guest:则代表用户名为guest的家目录。 /lib:系统的函式库非常的多,而/lib放置的则是在开机时会用到的函式库,以及在/bin或/sbin底下的指令会呼叫的函式库而已 。 /media:/media底下放置的就是可移除的装置。 包括软碟、光碟、DVD等等装置都暂时挂载于此。 常见的档名有:/media/floppy, /media/cdrom等等。 /mnt:如果妳想要暂时挂载某些额外的装置,一般建议妳可以放置到这个目录中。在古早时候,这个目录的用途与/media相同啦。 只是有了/media之后,这个目录就用来暂时挂载用了。 /opt:这个是给第三方协力软体放置的目录 。 /root:系统管理员(root)的家目录。 之所以放在这里,是因为如果进入单人维护模式而仅挂载根目录时,该目录就能够拥有root的家目录,所以我们会希望root的家目录与根目录放置在同一个分区中。 /sbin:Linux有非常多指令是用来设定系统环境的,这些指令只有root才能够利用来设定系统,其他使用者最多只能用来查询而已。放在/sbin底下的为开机过程中所需要的,里面包括了开机、修复、还原系统所需要的指令。至于某些伺服器软体程式,一般则放置到/usr/sbin/当中。至于本机自行安装的软体所产生的系统执行档(system binary),则放置到/usr/local/sbin/当中了。常见的指令包括:fdisk, fsck, ifconfig, init, mkfs等等。 /srv:srv可以视为service的缩写,是一些网路服务启动之后,这些服务所需要取用的资料目录。 常见的服务例如WWW, FTP等等。 举例来说,WWW伺服器需要的网页资料就可以放置在/srv/www/里面。呵呵,看来平时我们编写的代码应该放到这里了。 /tmp:这是让一般使用者或者是正在执行的程序暂时放置档案的地方。这个目录是任何人都能够存取的,所以你需要定期的清理一下。当然,重要资料不可放置在此目录啊。 因为FHS甚至建议在开机时,应该要将/tmp下的资料都删除。
系统级别命令
软件下载安装
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
软件管理 apt ( Advanced Packaging Tool ) , 他可以自动下载、配置、安装软件包;简化了Linux系统上的。Debian及衍生版中都包含了apt , RedHat系列的linux的则使用yum来进行管理,其中Fedora22中Centos7中开始使用dnf 来替代yum。 apt-cache search package 搜索包 apt-cache show package 获取包的相关信息,如说明、大小、版本等 sudo apt-get install package 安装包 sudo apt-get install package –reinstall 重新安装包 sudo apt-get -f install 强制安装 sudo apt-get remove package 删除包 sudo apt-get remove package –purge 删除包,包括删除配置文件等 sudo apt-get autoremove 自动删除不需要的包 sudo apt-get update 更新源 sudo apt-get upgrade 更新已安装的包 sudo apt-get dist-upgrade 升级系统 sudo apt-get dselect-upgrade 使用 dselect 升级 apt-cache depends package 了解使用依赖 apt-cache rdepends package 了解某个具体的依赖 sudo apt-get build-dep package 安装相关的编译环境 apt-get source package 下载该包的源代码 sudo apt-get clean && sudo apt-get autoclean 清理下载文件的存档 sudo apt-get check 检查是否有损坏的依赖 apt的配置文件 /etc/apt/sources.list 设置软件包的获取来源 /etc/apt/apt.conf apt配置文件 /etc/apt/apt.conf.d apt的零碎配置文件 /etc/apt/preferences 版本参数 /var/cache/apt/archives/partial 存放正在下载的软件包 /var/cache/apt/archives 存放已经下载的软件包 /var/lib/apt/lists 存放已经下载的软件包详细信息 /var/lib/apt/lists/partial 存放正在下载的软件包详细信息 软件源配置文件格式: deb http://security.ubuntu.com/ubuntu xenial-security main restricted # deb-src http://security.ubuntu.com/ubuntu xenial-security main restricted deb http://security.ubuntu.com/ubuntu xenial-security universe # deb-src http://security.ubuntu.com/ubuntu xenial-security universe deb http://security.ubuntu.com/ubuntu xenial-security multiverse # deb-src http://security.ubuntu.com/ubuntu xenial-security multiverse
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
dpkg是Debian软件包管理器的基础,被用于安装、卸载和供给和.deb软件包相关的信息。dpkg本身是一个底层的工具,本身并不能从远程包仓库下载包以及处理包的依赖的关系,需要将包从远程下载后再安装。DPKG常用命令: dpkg -i package.deb 安装包 dpkg -r package 删除包 dpkg -P package 删除包(包括配置文件) dpkg -L package 列出与该包关联的文件 dpkg -l package 显示该包的版本 dpkg –unpack package.deb 解开 deb 包的内容 dpkg -S keyword 搜索所属的包内容 dpkg -l 列出当前已安装的包 dpkg -c package.deb 列出 deb 包的内容 dpkg –configure package 配置包
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
logout # 注销 reboot # 重启系统: 需要管理员权限 shutdown # 关机: 需要管理员权限 shutdown -r now # 现在立即重启 shutdown -r +5 # 三分钟后重启 shutdown -r 12:12 #在12:12时将重启计算机 shutdown -h now # 现在立即关机 shutdown -h +5 “The System will shutdown after 3 minutes” # 提示使用者将在三分钟后关机 shutdown -h +5 # 5分钟后关机 shutdown -h 12:00 # 12点钟关机 shutdown -c # 取消关机操作
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。 ps -A 实例1:显示所有进程信息 ps -u root 实例2:显示指定用户信息 ps -ef 实例3:显示所有进程信息,连同命令行 ps -ef |grep ssh 实例4: ps 与grep 常用组合用法,查找特定进程 ps aux 实例6:列出目前所有的正在内存当中的程序 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。 top 实例1:显示进程信息 top -c 实例2:显示 完整命令 top -b 实例3:以批处理模式显示程序信息 top -S 实例4:以累积模式显示程序信息 top -n 2 实例5:设置信息更新次数 #----------------------------------------------------------------------------------------------------------------------------------- kill命令用来终止指定的进程(terminate a process)的运行。 通常,终止一个前台进程可以使用Ctrl+C键,但是,对于一个后台进程就须用kill命令来终止,我们就需要先使用ps/pidof/pstree/top等工具获取进程PID,然后使用kill命令来杀掉该进程。 下面是常用的信号: HUP 1 终端断线 INT 2 中断(同 Ctrl + C) QUIT 3 退出(同 Ctrl + \) TERM 15 终止 KILL 9 强制终止 CONT 18 继续(与STOP相反, fg/bg命令) STOP 19 暂停(同 Ctrl + Z) kill 3268 实例3:先用ps查找进程,然后用kill杀掉 kill –9 3268 实例4:彻底杀死进程 kill -9 $(ps -ef | grep peidalinux) 实例5:杀死指定用户所有进程 (方法一,过滤出hnlinux用户进程并杀死) kill -u peidalinux 实例5:杀死指定用户所有进程 kill -9 1 实例6:init进程是不可杀的 killall命令用于杀死指定名字的进程(kill processes by name)。 我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用ps等命令再配合grep来查找进程,而killall把这两个过程合二为一,是一个很好用的命令。 killall vi 实例1:杀死所有同名进程 杀死 vi进程:killall -TERM vi 或者 killall -KILL vi 实例2:向进程发送指定信号 killall -9 bash 实例3:把所有的登录后的shell给杀掉 运行命令:killall -9 bash 后,所有bash都会被卡掉了,所以当前所有连接丢失了。需要重新连接并登录。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。 必要参数: -a 全部文件系统列表 -h 方便阅读方式显示 -H 等于“-h”,但是计算式,1K=1000,而不是1K=1024 -i 显示inode信息 -k 区块为1024字节 -l 只显示本地文件系统 -m 区块为1048576字节 --no-sync 忽略 sync 命令 -P 输出格式为POSIX --sync 在取得磁盘信息前,先执行sync命令 -T 文件系统类型 选择参数: --block-size=<区块大小> 指定区块大小 -t<文件系统类型> 只显示选定文件系统的磁盘信息 -x<文件系统类型> 不显示选定文件系统的磁盘信息 --help 显示帮助信息 --version 显示版本信息 df #显示磁盘使用情况 df -i #以inode模式来显示磁盘使用情况 df -t ext3 #显示指定类型磁盘 df -ia #列出各文件系统的i节点使用情况 df -T #列出文件系统的类型 df -h #以更易读的方式显示目前磁盘空间和使用情况 df -H #以更易读的方式显示目前磁盘空间和使用情况 df -lh #以更易读的方式显示目前磁盘空间和使用情况 df -k #以更易读的方式显示目前磁盘空间和使用情况 #---------------------------------------------------------------------------------------------------------- du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的. 命令参数: -a或-all 显示目录中个别文件的大小。 -b或-bytes 显示目录或文件大小时,以byte为单位。 -c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。 -k或--kilobytes 以KB(1024bytes)为单位输出。 -m或--megabytes 以MB为单位输出。 -s或--summarize 仅显示总计,只列出最后加总的值。 -h或--human-readable 以K,M,G为单位,提高信息的可读性。 -x或--one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。 -L<符号链接>或--dereference<符号链接> 显示选项中所指定符号链接的源文件大小。 -S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小。 -X<文件>或--exclude-from=<文件> 在<文件>指定目录或文件。 --exclude=<目录或文件> 略过指定的目录或文件。 -D或--dereference-args 显示指定符号链接的源文件大小。 -H或--si 与-h参数相同,但是K,M,G是以1000为换算单位。 -l或--count-links 重复计算硬件链接的文件。 du dirname # 显示dirname下所有目录及其子目录的大小 du -sh dirname 显示dirname的大小 #---------------------------------------------------------------------------------------------------------- mount / umount 3 挂载和卸载设备 mount # 查询挂在设备及属性 # 挂载光盘 mount -t iso9660 /dev/cerom /mnt mount /dev/sr0 /mnt # 重新挂载设备 mount -o remount,rw /mnt # 重新挂载设备并设置rw属性 # 挂载iso文件 mount a.iso -o loop /mnt umount /mnt # 卸载设备 umount -l /mnt # 强制卸载 #---------------------------------------------------------------------------------------------------------- crontab 定时任务 * * * * * command to be executed - - - - - - | | | | | | | | | | | --- 预执行的命令 | | | | ----- 表示星期0~7(其中星期天可以用0或7表示) | | | ------- 表示月份1~12 | | --------- 表示日期1~31 | ----------- 表示小时1~23(0表示0点) ------------- 表示分钟1~59 每分钟用*或者 */1表示 -u user:用来设定某个用户的crontab服务; -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。 -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。 -r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。 -i:在删除用户的crontab文件时给确认提示
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
修改密码: # 修改密码的命令 passwd # 默认修改当前用户的密码 passwd username # 修改指定用户的密码,需要管理员权限 忘记密码 开始时长按shift键,进入grub菜单--> 按字母e 进入编辑模式 --> 编辑内容--> 启动 进入但用户模式 ,重新设置用户密码,--> 按照F10重启 -- > 使用新密码进入系统 #--------------------------------------------------------------------------------------------------------------------------------------- 用户和用户组 linux使用文件保存用户信息 : 文件 # /etc/passwd 用户账户信息。 # /etc/shadow 安全用户账户信息。 # /etc/group 组账户信息。 # /etc/gshadow 安全组账户信息。 # /etc/default/useradd 账户创建的默认值。 # /etc/skel/ 包含默认文件的目录。 # /etc/login.defs Shadow 密码套件配置。 useradd: 添加用户 # -c 备注 加上备注。并会将此备注文字加在/etc/passwd中的第5项字段中 # -d 用户主文件夹。指定用户登录所进入的目录,并赋予用户对该目录的的完全控制权 # -e 有效期限。指定帐号的有效期限。格式为YYYY-MM-DD,将存储在/etc/shadow # -f 缓冲天数。限定密码过期后多少天,将该用户帐号停用 # -g 主要组。设置用户所属的主要组 www.cit.cn # -G 次要组。设置用户所属的次要组,可设置多组 # -M 强制不创建用户主文件夹 # -m 强制建立用户主文件夹,并将/etc/skel/当中的文件复制到用户的根目录下 # -p 密码。输入该帐号的密码 # -s shell。用户登录所使用的shell # -u uid。指定帐号的标志符user id,简称uid useradd user1 # 添加用户 user1 useradd -d /home/userTT user2 userdel : 删除用户 userdel user1 # userdel -r user1 # -r, --remove 用户主目录中的文件将随用户主目录和用户邮箱一起删除。在其它文件系统中的文件必须手动搜索并删除。 # -f, --force 此选项强制删除用户账户,甚至用户仍然在登录状态。它也强制删除用户的主目录和邮箱,即使其它用户也使用同一个主目录或邮箱不属于指定的用户 usermod : 修改用户信息 # -c<备注> 修改用户帐号的备注文字。 # -d登入目录> 修改用户登入时的目录。 # -e<有效期限> 修改帐号的有效期限。 # -f<缓冲天数> 修改在密码过期后多少天即关闭该帐号。 # -g<群组> 修改用户所属的群组。 # -G<群组> 修改用户所属的附加群组。 # -l<帐号名称> 修改用户帐号名称。 # -L 锁定用户密码,使密码无效。 # -s<shell> 修改用户登入后所使用的shell。 # -u<uid> 修改用户ID。 # -U 解除密码锁定。 usermod -G staff user2 # 将 newuser2 添加到组 staff 中 usermod -l newuser1 newuser # 修改 newuser 的用户名为 newuser1 usermod -L newuser1 # 锁定账号 newuser1 usermod -U newuser1 # 解除对 newuser1 的锁定 #--------------------------------------------------------------------------------------------------------------------------------------- groupadd : 添加组 groupadd group1 groupadd -g 1000 group1 # 指定gid groupdel : 删除组 groupdel group1 # 删除组 #--------------------------------------------------------------------------------------------------------------------------------------- su与 sudo su : 切换用户,没有参数时,默认切换为root用户; su # 切换为root ## 推荐 su - # 切换为root 并加载user1的环境配置 su - user1 # 切换为user1 并加载user1的环境配置 sudo : 让当前用户暂时以管理员的身份root来执行命令。 Ubuntu 默认没有启用root用户, 普通用户执行一些特殊的操作时,使用sudo就可以让普通用户以root用户的身份执行命令 sudo有一个配置文件: /etc/sudoers ; 通过修改配置文件可以让指定用户使用sudo命令
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
man man # 查看man命令的手册 man cd man pwd man 5 passwd man -k passwd # 模糊查找 man -f passwd # 精确查找 我的示例 man ls info ls ls --help -h的用法应该和--help相似,但上面ls的-h参数有其他含义,暂无示例。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
date : 用来显示或设定系统的日期和与时间 date //显示当前日期 # 日期格式化 # %Y year # %m month (01..12) # %d day of month (e.g., 01) # %H hour (00..23) # %I hour (01..12) # %M minute (00..59) # %S second (00..60) date +"%Y%m%d %H%M%S" 20160824 223856 date +"%Y-%m-%d %H:%M:%S" 2016-08-24 22:39:07 date -s //设置当前时间,只有root权限才能设置,其他只能查看。 date -s 20061010 //设置成20061010,这样会把具体时间设置成空00:00:00 date -s 12:23:23 //设置具体时间,不会对日期做更改 date -s “12:12:23 2006-10-10″ //这样可以设置全部时间 # 注意: 重新设置时间后需要将时间捅不到硬件时钟。方式如下: hwclock -w #--------------------------------------------------------------------------------------------------------------------------------------- cal : 显示一个日历 cal # 现实当前月份的日历 cal -y # 显示当年的日历 cal 2016 # # 显示指定年份的日历 #--------------------------------------------------------------------------------------------------------------------------------------- 设置时区 tzselect # 或者 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
which 查看可执行文件的位置。 在环境变量中查找 whereis 只能用于程序名的搜索。 在数据库查找 locate 配合数据库查看文件位置。 在数据库查找 find 实际搜寻硬盘查询文件名称。 history 查看执行过的命令。 alias 给命令起别名。 #-------------------------------------------------------------------------------------------------------------------------------- which指令会在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。 -n 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。 -p 与-n参数相同,但此处的包括了文件的路径。 -w 指定输出时栏位的宽度。 -V 显示版本信息 which lsmod #查找文件、显示命令路径 which 是根据使用者所配置的 PATH 变量内的目录去搜寻可运行档的!所以,不同的 PATH 配置内容所找到的命令当然不一样的! which which #用 which 去找出 which 竟然会有两个 which ,其中一个是 alias 这就是所谓的『命令别名』,意思是输入 which 会等於后面接的那串命令! which cd #找出 cd 这个命令 cd 这个常用的命令竟然找不到啊!为什么呢?这是因为 cd 是bash 内建的命令! 但是 which 默认是找 PATH 内所规范的目录,所以当然一定找不到的! whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。 当使用whereis和locate时,会从数据库中查找数据,而不是像find命令那样,通 过遍历硬盘来查找,效率自然会很高。 数据库文件并不是实时更新,默认情况下时一星期更新一次 -b 定位可执行文件。 -m 定位帮助文件。 -s 定位源代码文件。 -u 搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件。 -B 指定搜索可执行文件的路径。 -M 指定搜索帮助文件的路径。 -S 指定搜索源代码文件的路径。 whereis svn 将和**文件相关的文件都查找出来 whereis -b svn 只将二进制文件 查找出来 whereis -m svn 查出说明文档路径,whereis -s svn 找source源文件。 locate命令可以在搜寻数据库时快速找到文件。 -e 将排除在寻找的范围之外。 -1 如果 是 1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的权限资料。 -f 将特定的档案系统排除在外,例如我们没有到理要把 proc 档案系统中的档案放在资料库中。 -q 安静模式,不会显示任何错误讯息。 -n 至多显示 n个输出。 -r 使用正规运算式 做寻找的条件。 -o 指定资料库存的名称。 -d 指定资料库的路径 -h 显示辅助讯息 -V 显示程式的版本讯息 locate pwd #查找和pwd相关的所有文件 locate /etc/sh #搜索etc目录下所有以sh开头的文件 locate /etc/m #搜索etc目录下,所有以m开头的文件 find 命令的参数详解 1.使用name选项: 文件名选项是find命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用。 可以使用某种文件名模式来匹配文件,记住要用引号将文件名模式引起来。 find ~ -name "*.log" -print #在自己的根目录$HOME及子目录中查找所有的‘ *.log‘文件 find . -name "*.log" -print #在当前目录及子目录中查找所有的‘ *.log‘文件 find . -name "[A-Z]*" -print #在当前目录及子目录中查找文件名以一个大写字母开头的文件 find /etc -name "host*" -print #在/etc目录中查找文件名以host开头的文件 find ~ -name "*" -print 或find . -print #查找$HOME目录中的文件 find / -name "*" -print #要想让系统高负荷运行,就从根目录开始查找所有的文件。 find . -name "[a-z]*[4-9].log" -print #在当前目录查找文件名以一个个小写字母开头,最后是4到9加上.log结束的文件 2.用perm选项: 按照文件权限模式用-perm选项,按文件权限模式来查找文件的话。最好使用八进制的权限表示法。 find . -perm 755 -print #在当前目录下查找文件权限位为755的文件 find . -perm -005 #还有一种表达方法:在八进制数字前面要加一个横杠-,表示都匹配,如-007就相当于777,-005相当于555, 3.忽略某个目录: 如果在查找文件时希望忽略某个目录,因为你知道那个目录中没有你所要查找的文件,那么可以使用-prune选项来指出需要忽略的目录。在使用-prune选项时要当心,因为如果你同时使用了-depth选项,那么-prune选项就会被find命令忽略。 find test -path "test/test3" -prune -o -print #在test目录下查找文件,但不希望在test/test3目录下查找 4.使用find查找文件的时候怎么避开某个文件目录: find [-path ..] [expression] 在路径列表的后面的是表达式 -path "test" -prune -o -print 是 -path "test" -a -prune -o -print 的简写表达式按顺序求值, -a 和 -o 都是短路求值(-a和,-o或) find test -path "test/test4" -prune -o -print #在test 目录下查找不在test4子目录之内的所有文件 find test \( -path test/test4 -o -path test/test3 \) -prune -o -print #避开多个文件夹 圆括号表示表达式的结合。 \ 表示引用,即指示 shell 不对后面的字符作特殊解释,而留给 find 命令去解释其意义。 find test \(-path test/test4 -o -path test/test3 \) -prune -o -name "*.log" -print #查找某一确定文件,-name等选项加在-o 之后 5.使用user和nouser选项 find ~ -user peida -print #在$HOME目录中查找文件属主为peida的文件 find /etc -user peida -print #在/etc目录下查找文件属主为peida的文件 find /home -nouser -print #为了查找属主帐户已经被删除的文件,可以使用-nouser选项。在/home目录下查找所有的这类文件 这样就能够找到那些属主在/etc/passwd文件中没有有效帐户的文件。在使用-nouser选项时,不必给出用户名; find命令能够为你完成相应的工作。 6.使用group和nogroup选项: find /apps -group gem -print #在/apps目录下查找属于gem用户组的文件 find / -nogroup-print #要查找没有有效所属用户组的所有文件,可以使用nogroup选项 7.按照更改时间或访问时间等查找文件: 如果希望按照更改时间来查找文件,可以使用mtime,atime或ctime选项。如果系统突然没有可用空间了,很有可能某一个文件的长度在此期间增长迅速,这时就可以用mtime选项来查找这样的文件。 用减号-来限定更改时间在距今n日以内的文件,而用加号+来限定更改时间在距今n日以前的文件。 find / -mtime -5 -print #在系统根目录下查找更改时间在5日以内的文件 find /var/adm -mtime +3 -print #在/var/adm目录下查找更改时间在3日以前的文件 8.查找比某个文件新或旧的文件: 如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用-newer选项。 它的一般形式为: newest_file_name ! oldest_file_name 其中,!是逻辑非符号。 find -newer log2012.log ! -newer log2017.log #查找更改时间比文件log2012.log新但比文件log2017.log旧的文件 find . -newer log2012.log -print #查找更改时间在比log2012.log文件新的文件 9.使用type选项: find /etc -type d -print #在/etc目录下查找所有的目录 find . ! -type d -print #在当前目录下查找除目录以外的所有类型的文件 find /etc -type l -print #在/etc目录下查找所有的符号链接文件 10.使用size选项: 可以按照文件长度来查找文件,这里所指的文件长度既可以用块(block)来计量,也可以用字节来计量。以字节计量文件长度的表达形式为N c;以块计量文件长度只用数字表示即可。 在按照文件长度查找文件时,一般使用这种以字节表示的文件长度,在查看文件系统的大小,因为这时使用块来计量更容易转换。 find . -size +1000000c -print #在当前目录下查找文件长度大于1 M字节的文件 find /home/apache -size 100c -print #在/home/apache目录下查找文件长度恰好为100字节的文件 find . -size +10 -print #在当前目录下查找长度超过10块的文件(一块等于512字节) 11.使用depth选项: 在使用find命令时,可能希望先匹配所有的文件,再在子目录中查找。使用depth选项就可以使find命令这样做。这样做的一个原因就是,当在使用find命令向磁带上备份文件系统时,希望首先备份所有的文件,其次再备份子目录中的文件。 find / -name "CON.FILE" -depth -print #find命令从文件系统的根目录开始,查找一个名为CON.FILE的文件。 12.使用mount选项: 在当前的文件系统中查找文件(不进入其他文件系统),可以使用find命令的mount选项。 find . -name "*.XC" -mount -print #从当前目录开始查找位于本文件系统中文件名以XC结尾的文件 find是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作,这个时候exec的作用就显现出来了。 -exec 参数后面跟的是command命令,它的终止是以;为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。 {} 花括号代表前面find查找出来的文件名。 使用find时,只要把想要的操作写在一个文件里,就可以用exec来配合find查找,很方便的。在有些操作系统中只允许-exec选项执行诸如l s或ls -l这样的命令。大多数用户使用这一选项是为了查找旧文件并删除它们。建议在真正执行rm命令删除文件之前,最好先用ls命令看一下,确认它们是所要删除的文件。 exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{ },一个空格和一个\,最后是一个分号。为了使用exec选项,必须要同时使用print选项。如果验证一下find命令,会发现该命令只输出从当前路径起的相对路径及文件名。 find . -type f -exec ls -l {} \; #ls -l命令放在find命令的-exec选项中 上面的例子中,find命令匹配到了当前目录下的所有普通文件,并在-exec选项中使用ls -l命令将它们列出。 find . -type f -mtime +14 -exec rm {} \; #在目录中查找更改时间在n日以前的文件并删除它们 在shell中用任何方式删除文件之前,应当先查看相应的文件,一定小心!当使用诸如mv或rm命令时,可以使用-exec选项的安全模式。它将在对每个匹配到的文件进行操作之前提示你。 find . -name "*.log" -mtime +5 -ok rm {} \; #在目录中查找更改时间在n日以前的文件并删除它们,在删除之前先给出提示 在上面的例子中, find命令在当前目录中查找所有文件名以.log结尾、更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示。 按y键删除文件,按n键不删除。 find /etc -name "passwd*" -exec grep "root" {} \; #-exec中使用grep命令 任何形式的命令都可以在-exec选项中使用。 在上面的例子中我们使用grep命令。find命令首先匹配所有文件名为“ passwd*”的文件,例如passwd、passwd.old、passwd.bak,然后执行grep命令看看在这些文件中是否存在一个root用户。 find . -name "*.log" -exec mv {} .. \; #查找文件移动到指定目录 find . -name "*.log" -exec cp {} test3 \; #用exec选项执行cp命令 #---------------------------------------------------------------------------------------------------- history : 查看执行过的命令。 history # 显示最近1000条历史命令 history 5 # 显示最后5条命令 !number# number为history之后命令前的序号:执行该条命令 !cat # 执行最后一条以cat开头的命令 alias : 给命令起别名 alias ll='ls -alF' alias la='ls -A' alias l='ls -CF' 如果需要别名永久生效,需要保存到 .bashrc 文件
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
cd : 切换目录 cd # 回到当前用户的家目录 # ~ 可用于表示用户家目录 cd /etc # 切换到/etc目录 cd - # 切换到上一次的目录 cd / 进入系统根目录 cd .. 或者 cd .. // pwd : 查看当前的工作路径 pwd 命令来查看”当前工作目录“的完整路径。 pwd -P 显示出实际路径,而非使用连接(link)路径。 [root@localhost soft]# cd /etc/init.d [root@localhost init.d]# pwd [root@localhost init.d]# pwd -P 显示出实际路径,而非使用连接(link)路径。 env : 查看当前环境变量 export : 设置或显示环境变量。 source : 在当前bash环境下读取并执行FileName中的命令。该filename文件可以无"执行权限" env export name = "SN" source /etv/profile
.bashrc文件。详解
常用的配置修改待添加 比如修改ip
文件级别相关命令
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
Linux文件类型与扩展名 一. 文件类型 Linux文件类型常见的有:普通文件、目录文件、字符设备文件和块设备文件、符号链接文件等,现在我们进行一个简要的说明。 1. 普通文件:符号- 。这些文件一般是用一些相关的应用程序创建,比如图像工具、文档工具、归档工具... .... 或 cp工具等。 1>. 纯文本档(ASCII) 2>. 二进制文件(binary) 3>. 数据格式文件(data): 2. 目录文件:字符d。创建目录的命令可以用 mkdir 命令,或cp命令,cp可以把一个目录复制为另一个目录。删除用rm 或rmdir命令。 3. 字符设备或块设备文件 字符c ,这表示字符设备文件。比如猫等串口设备。是一些串行端口的接口设备, 例如键盘、鼠标等等 字符b,这表示块设备,比如硬盘,光驱等设备。就是一些储存数据, 以提供系统随机存取的接口设备 4. 数据接口文件(sockets): 属性为 [ s ]数据接口文件(或者:套接口文件),这种类型的文件通常被用在网络上的数据承接了。我们可以启动一个程序来监听客户端的要求, 而客户端就可以透过这个socket来进行数据的沟通了。 5. 符号链接文件: 字符是l,这类文件是链接文件。这和Windows操作系统中的快捷方式有点相似。 6. 数据输送文件(FIFO,pipe): 属性为[p] 。FIFO也是一种特殊的文件类型,他主要的目的在解决多个程序同时存取一个文件所造成的错误问题。 FIFO是first-in-first-out的缩写。 二. Linux文件扩展名 1. 扩展名类型 基本上,Linux系统上的文件名真的只是让你了解该文件可能的用途而已,真正的执行与否仍然需要权限的规范才行。 2. Linux文件名长度限制: 单一文件或目录的最大容许文件名为 255 个字符 包含完整路径名称及目录 (/) 之完整档名为 4096 个字符 3. Linux文件名的字符的限制: 一般来说,你在设定Linux底下的文件名时, 最好可以避免一些特殊字符比较好!例如底下这些:* ? > < ; & ! [ ] | \ ' " ` ( ) { } #------------------------------------------------------------------------------------------------------------------------------------------------- linux文件属性详解 我们以log2012.log为例: 2095112 -rw-r--r-- 1 root root 296K 11-13 06:03 log2012.log inode 的值是:2095112 文件类型:文件类型是-,表示这是一个普通文件; 关于文件的类型,请参考:每天一个linux命令(24):Linux文件类型与扩展名 文件权限:文件权限是rw-r--r-- ,表示文件属主可读、可写、不可执行,文件所归属的用户组不可写,可读,不可执行,其它用户不可写,可读,不可执行; 硬链接个数: log2012.log这个文件没有硬链接;因为数值是1,就是他本身; 文件属主:也就是这个文件归哪于哪个用户 ,它归于root,也就是第一个root; 文件属组:也就是说,对于这个文件,它归属于哪个用户组,在这里是root用户组; 文件大小:文件大小是296k个字节; 访问可修改时间 :这里的时间是最后访问的时间,最后访问和文件被修改或创建的时间,有时并不是一致的; 当然文档的属性不仅仅包括这些,这些是我们最常用的一些属性。 inode译成中文就是索引节点。每个存储设备或存储设备的分区(存储设备是硬盘、软盘、U盘等等)被格式化为文件系统后,应该有两部份,一部份是inode,另一部份是Block,Block是用来存储数据用的。而inode呢,就是用来存储这些数据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。inode为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令, 能通过inode值最快的找到相对应的文件。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
ls命令就是list的缩写,列出目标目录中所有的子目录和文件 -a, –all 列出目录下的所有文件,包括以 . 开头的隐含文件 -l 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来。 -h, –human-readable 以容易理解的格式列出文件大小 (例如 1K 234M 2G) ls *[0-9]* 显示包含数字的文件名和目录名 lsattr 显示特殊的属性 ls # 列出当前目录下的文件和目录 ls . # 列出当前目录下的文件和目录 ls .. # 列出当前目录的父目录下的文件和目录 ls /etc # 列出/etc目录下的文件和目录 #--------------------------------------------------------------------------------------------------------------------- linux的touch命令不常用,一般在使用make的时候可能会用到,用来修改文件时间戳,或者新建一个不存在的文件。 -a 或--time=atime或--time=access或--time=use 只更改存取时间。 -c 或--no-create 不建立任何文档。 -d 使用指定的日期时间,而非现在的时间。 -f 此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。 -m 或--time=mtime或--time=modify 只更改变动时间。 -r 把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。 -t 使用指定的日期时间,而非现在的时间。 touch log2012.log log2013.log #创建不存在的文件 touch -r log.log log2012.log #更新log.log的时间和log2012.log时间戳相同 touch -t 201211142234.50 log.log #设定文件的时间戳 #--------------------------------------------------------------------------------------------------------------------------- rm 删除一个目录中的一个或多个文件或目录,如果没有使用- r选项,则rm不会删除目录。如果使用 rm 来删除文件,通常仍可以将该文件恢复原状。 -f, --force 忽略不存在的文件,从不给出提示。 -r, -R, --recursive 指示rm将参数中列出的全部目录和子目录均递归地删除。 -v, --verbose 详细显示进行的步骤 -i, --interactive 进行交互式删除 rm 文件名:删除文件file,系统会先询问是否删除。 rm -f log1.log:强行删除file,系统不再提示。 rm -i *.log:删除任何.log文件;删除前逐一询问确认 rm -r test1:将 test1子目录及子目录中所有档案删除 rm -rf test2 :将 test2 子目录及子目录中所有档案删除,并且不用一一确认 rm -- -f:删除以 -f 开头的文件 # rm 命令太危险,不建议使用 #--------------------------------------------------------------------------------------------------------------------- mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),经常用来备份文件或者目录。 视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。 当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。 在跨文件系统移动文件时,mv先拷贝,再将原有文件删除,而链至该文件的链接也将丢失。 -b :若需覆盖文件,则覆盖前先行备份。 -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖; -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖! -u :若目标文件已经存在,且 source 比较新,才会更新(update) #总结:当mv的移动对象时文件时,而存放的对象是文件夹时,则将该文件移动到该文件夹下面 #当移动的对象是文件时,存放的对象也是文件,则移动到该对象中。若不同名则修改文件名 mv test.log test1.txt:文件改名 mv test1.txt test3:移动文件 mv log1.txt log2.txt log3.txt test3:将文件log1.txt,log2.txt,log3.txt移动到目录test3中。 mv -t /opt/soft/test/test4/ log1.txt log2.txt log3.txt :将3个txt文件移动到test4中 mv -i log1.txt log2.txt:将文件file1改名为file2,如果file2已经存在,则询问是否覆盖 mv -f log3.txt log2.txt:将文件file1改名为file2,即使file2存在,也是直接覆盖掉。 mv dir1 dir2 :目录的移动:如果目录dir2不存在,将目录dir1改名为dir2;否则,将dir1移动到dir2中。 mv * ../:移动当前文件夹下的所有文件到上一级目录 mv test3/*.txt test5:把当前目录的一个子目录里的文件移动到另一个子目录里 mv log1.txt -b log2.txt:文件被覆盖前做简单备份,前面加参数-b #-------------------------------------------------------------------------------------------------------------------------- cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一。 shell命令行和shell脚本的执行方式有些不同:在命令行环境下,执行cp会询问是否覆盖;但以脚本的方式运行时,执行cp将直接覆盖,不询问。 -a, --archive 等于-dR --preserve=all --backup[=CONTROL 为每个已存在的目标文件创建备份 -b 类似--backup 但不接受参数 --copy-contents 在递归处理是复制特殊文件内容 -d 等于--no-dereference --preserve=links -f, --force 如果目标文件无法打开则将其移除并重试(当 -n 选项 存在时则不需再选此项) -i, --interactive 覆盖前询问(使前面的 -n 选项失效) -H 跟随源文件中的命令行符号链接 -l, --link 链接文件而不复制 -L, --dereference 总是跟随符号链接 -n, --no-clobber 不要覆盖已存在的文件(使前面的 -i 选项失效) -P, --no-dereference 不跟随源文件中的符号链接 -p 等于--preserve=模式,所有权,时间戳 --preserve[=属性列表 保持指定的属性(默认:模式,所有权,时间戳),如果 可能保持附加属性:环境、链接、xattr 等 -R, -r, --recursive 复制目录及目录内的所有项目 cp log.log test5 #复制单个文件到目标目录,文件在目标文件中不存在 在没有带-a参数时,两个文件的时间是不一样的。在带了-a参数时,两个文件的时间是一致的。 cp log.log test5 #目标文件存在时,会询问是否覆盖 目标文件存在时,会询问是否覆盖。这是因为cp是cp -i的别名。目标文件存在时,即使加了-f标志,也还会询问是否覆盖。 cp -a test3 test5 #复制整个目录 注意目标目录存在与否结果是不一样的。目标目录存在时,整个源目录被复制到目标目录里面。 cp -s log.log log_link.log #复制的 log.log 建立一个连结档 log_link.log 那个 log_link.log 是由 -s 的参数造成的,建立的是一个『快捷方式』,所以您会看到在文件的最右边,会显示这个文件是『连结』到哪里去的! cp -i SOURCE DEST # 如果遇到需要覆盖的情况,则提示 cp -r dir1 dir2 # 若给出的源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件。此时目标文件必须为一个目录名 cp -p file1 file2 # 此时cp除复制源文件的内容外,还将把其修改时间和访问权限也复制到新文件中。 cp -rp dir1 dir2
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
stat : 查看文件相信信息 stat filename # Access time(atime):是指取用文件的时间,所谓取用,常见的操作有:使用编辑器查看文件内容,使用cat命令显示文件内容,使用cp命令把该文件(即来源文件)复制成其他文件,或者在这个文件上运用grep sed more less tail head 等命令,凡是读取而不修改文件的操作,均衡改变文件的Access time. # Modify time(mtime):是指修改文件内容的时间,只要文件内容有改动(如使用转向输出或转向附加的方式)或存盘的操作,就会改变文件的Modify time,平常我们使用ls –l查看文件时,显示的时间就是Modify time # Change time(ctime):是指文件属性或文件位置改动的时间,如使用chmod,chown,mv指令集使用ln做文件的硬是连接,就会改变文件的Change time. #----------------------------------------------------------------------------------------------------------------------------------------------------------- chmod命令用于改变linux系统文件或目录的访问权限。用它控制文件或目录的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。 必要参数: -c 当发生改变时,报告处理信息 -f 错误信息不输出 -R 处理指定目录以及其子目录下的所有文件 -v 运行时显示详细处理信息 选择参数: --reference=<目录或者文件> 设置成具有指定目录或者文件具有相同的权限 --version 显示版本信息 <权限范围>+<权限设置> 使权限范围内的目录或者文件具有指定的权限 <权限范围>-<权限设置> 删除权限范围的目录或者文件的指定权限 <权限范围>=<权限设置> 设置权限范围内的目录或者文件的权限为指定的值 权限范围: u :目录或者文件的当前的用户 g :目录或者文件的当前的群组 o :除了目录或者文件的当前用户或群组之外的用户或者群组 a :所有的用户及群组 权限代号: r :读权限,用数字4表示 w :写权限,用数字2表示 x :执行权限,用数字1表示 - :删除权限,用数字0表示 s :特殊权限 chmod a+x log2012.log #增加文件所有用户组可执行权限 chmod ug+w,o-x log2012.log #同时修改不同用户权限 chmod a-x log2012.log #删除文件权限 chmod u=x log2012.log #使用“=”设置权限 chmod -R u+x test4 #对一个目录及其子目录所有文件添加权限;递归地给test4目录下所有文件和子目录的属主分配权限 chmod 751 file #给file的属主分配读、写、执行(7)的权限,给file的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限 chmod u=rwx,g=rx,o=x file #上例的另一种形式 chmod =r file #为所有用户分配读权限 chmod 444 file #同上例 chmod a-wx,a+r file #同上例 #---------------------------------------------------------------------------------------------------------------------------------------------- chown : 更改文件的所有者和所有组 chown root:root file chown root file chown :root file 特殊权限 SUID: 让一般用户在执行某些程序的时候,能够暂时具有该程序拥有者的权限,SUID对目录是无效的 SGID : 文件:如果SGID设置在二进制文件上,则不论用户是谁,在执行该程序的时候,它的有效用户组(effective group)将会变成该程序的用户组所有者(group id); 目录:如果SGID是设置在某目录上,则在该目录内所建立的文件或目录的用户组,将会是该目录的用户组。 SGID多用在特定的多人团队的项目开发上,在系统中用得较少 STICKY : 只针对目录有效,在具有SBit的目录下,用户若在该目录下具有w及x权限,则当用户在该目录下建立文件或目录时,只有文件拥有者与root才有权力删除。 rwsrw-r-- 表明有suid标识, rwxrws--- 表明有sgid标识, rwxrw-rwt 表明有stick标识, 当设置了特别权限位时,如果原来这个位上有x,那么这个特殊标示就显示为小写字母s,s,t ,否者就显示为大写S,S,T,此时他们不生效。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接 软链接: 1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式 2.软链接可以 跨文件系统 ,硬链接不可以 3.软链接可以对一个不存在的文件名进行链接 4.软链接可以对目录进行链接 硬链接: 1.硬链接,以文件副本的形式存在。但不占用实际空间。 2.不允许给目录创建硬链接 3.硬链接只有在同一个文件系统中才能创建 必要参数: -b 删除,覆盖以前建立的链接 -d 允许超级用户制作目录的硬链接 -f 强制执行 -i 交互模式,文件存在则提示用户是否覆盖 -n 把符号链接视为一般目录 -s 软链接(符号链接) -v 显示详细的处理过程 选择参数: -S “-S<字尾备份字符串> ”或 “--suffix=<字尾备份字符串>” -V “-V<备份方式>”或“--version-control=<备份方式>” --help 显示帮助信息 --version 显示版本信息 ln -s log2013.log link2013 实例1:给文件创建软链接 ln log2013.log ln2013 实例2:给文件创建硬链接 ln log2013.log test3 实例4:将文件链接为另一个目录中的相同名字 ln -sv /opt/soft/test/test3 /opt/soft/test/test5 实例5:给目录创建软链接 #--------------------------------------------------------------------------------------------------------------------------- mkdir 命令用来创建指定的名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录。 -m, --mode=模式,设定权限<模式> (类似 chmod),而不是 rwxrwxrwx 减 umask -p, --parents 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录; -v, --verbose 每次创建新目录都显示信息 --help 显示此帮助信息并退出 --version 输出版本信息并退出 mkdir dir1 创建一个叫做 'dir1' 的目录' mkdir dir1 dir2 同时创建两个目录 mkdir -p /tmp/dir1/dir2 创建一个目录树 mkdir -m 777 test3 创建权限为777的目录 mkdir -vp scf/{lib/,bin/,doc/{info,product},logs/{info,product},service/deploy/{info,product}}一个命令创建项目的目录结构 mkdir: 已创建目录 “scf” mkdir: 已创建目录 “scf/lib” ……………… mkdir: 已创建目录 “scf/service” mkdir: 已创建目录 “scf/service/deploy” mkdir: 已创建目录 “scf/service/deploy/info” mkdir: 已创建目录 “scf/service/deploy/product” #--------------------------------------------------------------------------------------------------------------------------- rmdir是常用的命令,该命令的功能是删除空目录,一个目录被删除之前必须是空的。 - p 递归删除目录dirname,当子目录删除后其父目录为空时,也一同被删除。如果整个路径被删除或者由于某种原因保留部分路径,则系统在标准输出上显示相应的信息。 -v, --verbose 显示指令执行过程 rmdir doc:rmdir 不能删除非空目录 rmdir -p logs:当子目录被删除后使它也成为空目录的话,则顺便一并删除
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
用SecureCRT来上传和下载文件 rz,sz是Linux/Unix同Windows进行ZModem文件传输的命令行工具windows端需要支持ZModem的telnet/ssh客户端,SecureCRT就可以用SecureCRT登陆到Unix/Linux主机(telnet或ssh均可)O 运行命令rz,即是接收文件,SecureCRT就会弹出文件选择对话框,选好文件之后关闭对话框,文件就会上传到当前目录 O 运行命令sz file1 file2就是发文件到windows上(保存的目录是可以配置) 比ftp命令方便多了,而且服务器不用再开FTP服务了 #---------------------------------------------------------------------------------------------------------------------------------------------------------------- tar -c :建立一个压缩文件的参数指令(create 的意思); -x :解开一个压缩文件的参数指令! -t :查看 tarfile 里面的文件! 特别注意 c/x/t 同时仅能存在一个,因为不可能同时压缩与解压缩。 -z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩? -j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩? -v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程! -f :使用档名,请留意,在 f 之后要立即接文件名 -p :使用原文件的原来属性(属性不会依据使用者而变) -P :可以使用绝对路径来压缩! -N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中! # 将当前目录下所有.txt文件打包并压缩归档到文件this.tar.gz tar czvf this.tar.gz ./*.txt # 将当前目录下的this.tar.gz中的文件解压到当前目录 tar xzvf this.tar.gz ./ # 将整个 /etc 目录下的文件全部打包成为 /tmp/etc.tar tar -cvf /tmp/etc.tar /etc # 仅打包,不压缩! tar -zcvf /tmp/etc.tar.gz /etc # 打包后,以 gzip 压缩 tar -jcvf /tmp/etc.tar.bz2 /etc # 打包后,以 bzip2 压缩 # 解压文件 tar -xf a.tar.gz # tar -xf a.tar.gz -C /tmp # 指定解包路径 打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。 tar命令用来压缩和解压文件。tar本身不具有压缩功能。他是调用压缩功能实现的 https://www.cnblogs.com/gophper/p/4926667.html #------------------------------------------------------------------------------------------------------------------------------ gzip是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多出".gz"的扩展名。 https://www.cnblogs.com/gophper/p/4929147.html 还有zip、unzip
文件内容级别相关命令
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
sort : 排序 sort [-fbMnrtuk] [file or stdin] 选项与参数: -f :忽略大小写的差异,例如 A 与 a 视为编码相同; -b :忽略最前面的空格符部分; -n :使用『纯数字』进行排序(默认是以文字型态来排序的); -r :反向排序; -u :就是 uniq ,相同的数据中,仅出现一行代表; -t :分隔符,默认是用 [tab] 键来分隔; -k :以那个区间 (field) 来进行排序的意思 #--------------------------------------------------------------------- uniq : 忽略或报告重复行 uniq [-icu] 选项与参数: -i :忽略大小写字符的不同; -c :进行计数 -u :只显示唯一的行 #-------------------------------------------------------------------------------------- cut命令可以从一个文本文件或者文本流中提取文本列。 选项与参数: -d :后面接分隔字符。与 -f 一起使用; -f :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思; -c :以字符 (characters) 的单位取出固定字符区间; #------------------------------------------------------------------------------------- tee : 读取标准输入的数据,并将其内容输出成文件。 cat sec.log | tee file1 # 读取sec.log ,并生成file1文件 cat sec.log | tee - a file1 # 读取sec.log ,并追加, cat sec.log |tee file1 file2 #------------------------------------------------------------------------------------- wc (Word Count):统计指定文件中的字节数、字数、行数,并将统计结果显示输出 命令参数: -c 统计字节数。 -l 统计行数。 -m 统计字符数。这个标志不能与 -c 标志一起使用。 -w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。 -L 打印最长行的长度。 -help 显示帮助信息 --version 显示版本信息 wc test.txt 实例1:查看文件的字节数、字数、行数 wc -l test.txt cat test.txt |wc -l 实例2:用wc命令怎么做到只打印统计数字不打印文件名 ls -l | wc -l 实例3:用来统计当前目录下的文件数 #-------------------------------------------------------------------------------------------------------------- diff 命令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方。 diff log2014.log log2013.log 实例1:比较两个文件 diff log2013.log log2014.log -y -W 50 实例2:并排格式输出 diff log2013.log log2014.log -c 实例3:上下文输出格式 diff log2014.log log2013.log -u 实例4:统一格式输出 diff test3 test6 实例5:比较文件夹不同 diff -ruN log2013.log log2014.log >patch.log 实例6:比较两个文件不同,并生产补丁
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
more命令和cat的功能一样都是查看文件里的内容,但有所不同的是more可以按页来查看文件的内容,还支持直接跳转行等功能。 +n 从笫n行开始显示 -n 定义屏幕大小为n行 +/pattern 在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示 -c 从顶部清屏,然后显示 -d 提示“Press space to continue,’q’ to quit(按空格键继续,按q键退出)”,禁用响铃功能 -l 忽略Ctrl+l(换页)字符 -p 通过清除窗口而不是滚屏来对文件进行换页,与-c选项相似 -s 把连续的多个空行显示为一行 -u 把文件内容中的下画线去掉 Enter 向下n行,需要定义。默认为1行 Ctrl+F 向下滚动一屏 空格键 向下滚动一屏 Ctrl+B 返回上一屏 = 输出当前行的行号 :f 输出文件名和当前行的行号 V 调用vi编辑器 !命令 调用Shell,并执行命令 q 退出more more +3 log2012.log #显示文件中从第3行起的内容 more +/day3 log2012.log #从文件中查找第一个出现"day3"字符串的行,并从该处前两行开始显示输出 more -5 log2012.log #设定每屏显示行数 ls -l | more -5 #列一个目录下的文件,由于内容太多,我们应该学会用more来分页显示。这得和管道 | 结合起来 #---------------------------------------------------------------------------------------------------------------------- less : 查看文件内容 less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。 less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。 -b <缓冲区大小> 设置缓冲区的大小 -e 当文件显示结束后,自动离开 -f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件 -g 只标志最后搜索的关键词 -i 忽略搜索时的大小写 -m 显示类似more命令的百分比 -N 显示每行的行号 -o <文件名> 将less 输出的内容在指定文件中保存起来 -Q 不使用警告音 -s 显示连续空行为一行 -S 行过长时间将超出部分舍弃 -x <数字> 将“tab”键显示为规定的数字空格 /字符串:向下搜索“字符串”的功能 ?字符串:向上搜索“字符串”的功能 n:重复前一个搜索(与 / 或 ? 有关) N:反向重复前一个搜索(与 / 或 ? 有关) b 向后翻一页 d 向后翻半页 h 显示帮助界面 Q 退出less 命令 u 向前滚动半页 y 向前滚动一行 空格键 滚动一行 回车键 滚动一页 [pagedown]: 向下翻动一页 [pageup]: 向上翻动一页 less log2013.log 查看文件 ps -ef |less ps查看进程信息并通过less分页显示 history | less 查看命令历史使用记录并通过less分页显示 Less log2013.log log2014.log 浏览多个文件 1.全屏导航 ctrl + F - 向前移动一屏 ctrl + B - 向后移动一屏 ctrl + D - 向前移动半屏 ctrl + U - 向后移动半屏 2.单行导航 j - 向前移动一行 k - 向后移动一行 3.其它导航 G - 移动到最后一行 g - 移动到第一行 q / ZZ - 退出 less 命令 4.其它有用的命令 v - 使用配置的编辑器编辑当前文件 h - 显示 less 的帮助文档 &pattern - 仅显示匹配模式的行,而不是整个文件 5.标记导航 当使用 less 查看大文件时,可以在任何一个位置作标记,可以通过命令导航到标有特定标记的文本位置: ma - 使用 a 标记文本的当前位置 'a - 导航到标记 a 处 #---------------------------------------------------------------------------------------------------------------------- head 用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。 -q 隐藏文件名 -v 显示文件名 -c<字节> 显示字节数 -n<行数> 显示的行数 head -n 5 log2014.log #显示文件的前n行 head -c 20 log2014.log #显示文件前n个字节 head -c -32 log2014.log #文件的除了最后n个字节以外的内容 head -n -6 log2014.log #输出文件除了最后n行的全部内容 #---------------------------------------------------------------------------------------------------------------------- tail : 查看文件尾部的内容。默认显示最后10行 tail用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。 -f 循环读取 -q 不显示处理信息 -v 显示详细的处理信息 -c<数目> 显示的字节数 -n<行数> 显示行数 --pid=PID 与-f合用,表示在进程ID,PID死掉之后结束. -q, --quiet, --silent 从不输出给出文件名的首部 -s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒 tail -n 5 log2014.log 显示文件最后5行内容 tail -f test.log 循环查看文件内容(这里是循环查看前面ping包的结果) ping 192.168.120.204 > test.log & //在后台ping远程主机。并输出文件到test.log;这种做法也使用于一个以上的档案监视。用Ctrl+c来终止。 tail -n +5 log2014.log 从第5行开始显示文件 #---------------------------------------------------------------------------------------------------------------------- cat : 链接文件后输出文件内容到屏幕上,其实就是查看文件内容 tac : 反转行的输出 cat命令的用途是连接文件或标准输入并打印。这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用。 cat主要有三大功能: 1.一次显示整个文件:cat filename 2.从键盘创建一个文件:cat > filename 只能创建新文件,不能编辑已有文件. 3.将几个文件合并为一个文件:cat file1 file2 > file -A, --show-all 等价于 -vET -b, --number-nonblank 对非空输出行编号 -e 等价于 -vE -E, --show-ends 在每行结束处显示 $ -n, --number 对输出的所有行编号,由1开始对所有输出的行数编号 -s, --squeeze-blank 有连续两行以上的空白行,就代换为一行的空白行 -t 与 -vT 等价 -T, --show-tabs 将跳格字符显示为 ^I -u (被忽略) -v, --show-nonprinting 使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外 cat file1 #显示 file1的文件内容 cat file1 file2 # 显示file1和file2的文件内容 cat -n file1 # 由1开始对所有输出的行数编号 cat -s file # 当遇到连续2行以上的空白行,只保留一行空白行 cat -n log2012.log log2013.log #把 log2012.log 的文件内容加上行号后输入 log2013.log 这个文件里 cat -b log2012.log log2013.log log.log #把 log2012.log 和 log2013.log 的文件内容加上行号(空白行不加)之后将内容附加到 log.log 里。 cat -n log2012.log > log.log #把 log2012.log 的文件内容加上行号后输入 log.log 这个文件里 cat >log.txt <<EOF #使用here doc来生成文件 tac log.txt #tac (反向列示) #---------------------------------------------------------------------------------------------------------------------- nl命令在linux系统中用来计算文件中行号。nl 可以将输出的文件内容自动的加上行号!其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等等的功能。 nl log2012.log 实例一:用 nl 列出 log2012.log 的内容 nl -b a log2012.log 实例二:用 nl 列出 log2012.log 的内容,空本行也加上行号 nl -b a -n rz log2014.log nl -b a -n rz -w 3 log2014.log 实例3:让行号前面自动补上0,统一输出格式
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
echo echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开并在最后加上换行号。 -n 不要在最后自动换行 -e 若字符串中出现以下字符,则特别加以处理,而不会将它当成一般 文字输出: \a 发出警告声; \b 删除前一个字符; \c 最后不加上换行符号; \f 换行但光标仍旧停留在原来的位置; \n 换行且光标移至行首; \r 光标移至行首,但不换行; \t 插入tab; \v 与\f相同; -------------------------------------------------------------------------- 管道符 管道符 就是 | :他的作用是 将前一个命令的结果 交给后一个命令使用 -------------------------------------------------------------------------- 重定向 > 重定向,如果的文件存在,则覆盖文件内容,文件不存在时创建文件 >> 重定向,如果的文件存在,则向文件追加内容,文件不存在时创建文件 1> 标准正确输出,同上 1>> 标准正确输出,同上 2> 标准错误输出,同上 2>> 标准错误输出,同上 &> 标准正确输出和标准错误输出,同上
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
格式: grep [OPTIONS] PATTERN [FILE...] grep [OPTIONS] [-e PATTERN] [FILE...] 参数: -c --count #计算符合样式的列数 -l --file-with-matches #列出文件内容符合指定的样式的文件名称。 -v --revert-match #显示不包含匹配文本的所有行。 -i --ignore-case #忽略字符大小写的差别。 -o # 只显示匹配到的关键字 -n # 现实行号 -E 使用正则表达式 ------------------------------------------ grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。 grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。 grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。 3.命令参数: -a --text #不要忽略二进制的数据。 -A<显示行数> --after-context=<显示行数> #除了显示符合范本样式的那一列之外,并显示该行之后的内容。 -b --byte-offset #在显示符合样式的那一行之前,标示出该行第一个字符的编号。 -B<显示行数> --before-context=<显示行数> #除了显示符合样式的那一行之外,并显示该行之前的内容。 -c --count #计算符合样式的列数。 -C<显示行数> --context=<显示行数>或-<显示行数> #除了显示符合样式的那一行之外,并显示该行之前后的内容。 -d <动作> --directories=<动作> #当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。 -e<范本样式> --regexp=<范本样式> #指定字符串做为查找文件内容的样式。 -E --extended-regexp #将样式为延伸的普通表示法来使用。 -f<规则文件> --file=<规则文件> #指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。 -F --fixed-regexp #将样式视为固定字符串的列表。 -G --basic-regexp #将样式视为普通的表示法来使用。 -h --no-filename #在显示符合样式的那一行之前,不标示该行所属的文件名称。 -H --with-filename #在显示符合样式的那一行之前,表示该行所属的文件名称。 -i --ignore-case #忽略字符大小写的差别。 -l --file-with-matches #列出文件内容符合指定的样式的文件名称。 -L --files-without-match #列出文件内容不符合指定的样式的文件名称。 -n --line-number #在显示符合样式的那一行之前,标示出该行的列数编号。 -q --quiet或--silent #不显示任何信息。 -r --recursive #此参数的效果和指定“-d recurse”参数相同。 -s --no-messages #不显示错误信息。 -v --revert-match #显示不包含匹配文本的所有行。 -V --version #显示版本信息。 -w --word-regexp #只显示全字符合的列。 -x --line-regexp #只显示全列符合的列。 -y #此参数的效果和指定“-i”参数相同。 4.规则表达式: grep的规则表达式: ^ #锚定行的开始 如:'^grep'匹配所有以grep开头的行。 $ #锚定行的结束 如:'grep$'匹配所有以grep结尾的行。 . #匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。 * #匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。 .* #一起用代表任意字符。 [] #匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。 [^] #匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。 \(..\) #标记匹配字符,如'\(love\)',love被标记为1。 \< #锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。 \> #锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。 x\{m\} #重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。 x\{m,\} #重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。 x\{m,n\} #重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。 \w #匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。 \W #\w的反置形式,匹配一个或多个非单词字符,如点号句号等。 \b #单词锁定符,如: '\bgrep\b'只匹配grep。 POSIX字符: 为了在不同国家的字符编码中保持一至,POSIX(The Portable Operating System Interface)增加了特殊的字符类,如[:alnum:]是[A-Za-z0-9]的另一个写法。要把它们放到[]号内才能成为正则表达式,如[A- Za-z0-9]或[[:alnum:]]。在linux下的grep除fgrep外,都支持POSIX的字符类。 [:alnum:] #文字数字字符 [:alpha:] #文字字符 [:digit:] #数字字符 [:graph:] #非空字符(非空格、控制字符) [:lower:] #小写字符 [:cntrl:] #控制字符 [:print:] #非空字符(包括空格) [:punct:] #标点符号 [:space:] #所有空白字符(新行,空格,制表符) [:upper:] #大写字符 [:xdigit:] #十六进制数字(0-9,a-f,A-F) ps -ef|grep svn 实例1:查找指定进程 ps -ef|grep svn -c 实例2:查找指定进程个数 ps -ef|grep -c svn 实例2:查找指定进程个数 cat test.txt | grep -f test2.txt 实例3:从文件中读取关键词进行搜索 cat test.txt | grep -nf test2.txt 实例4:从文件中读取关键词进行搜索 且显示行号 grep 'linux' test.txt 实例5:从文件中查找关键词 grep 'linux' test.txt test2.txt实例6:从多个文件中查找关键词 ps aux|grep \[s]sh 实例7:grep不显示本身进程 ps aux | grep ssh | grep -v "grep" 实例7:grep不显示本身进程 cat test.txt |grep ^u 实例8:找出已u开头的行内容 cat test.txt |grep ^[^u] 实例9:输出非u开头的行内容 cat test.txt |grep hat$ 实例10:输出以hat结尾的行内容 cat test.txt |grep -E "ed|at" 实例12:显示包含ed或者at字符的内容行 grep '[a-z]\{7\}' *.txt 实例13:显示当前目录下面以.txt 结尾的文件中的所有包含每个字符串至少有7个连续小写字符的字符串的行 ------------------------------------------------------------------------------------------------------------------ sed : 流编辑器,一次处理一行内容 sed [-nefr] [动作] [文件] 选项与参数: -n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来 -e :直接在命令列模式上进行 sed 的动作编辑 -f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作 -r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法) -i :直接修改读取的文件内容,而不是输出到终端。 动作说明: [n1[,n2]] 动作: n1, n2 :不一定存在,一般代表选择进行动作的行数,比如,如果我的动作是需要在 10 到 20 行之间进行的,则10,20[动作行为] 动作: #a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行) #c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行! #d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚; sed "3d" file # 删除第三行 sed "1,3d" # 删除前三行 sed "1d;3d;5d" # 删除1、3、5行 sed "/^$/d" #删除空行 sed "/abc/d" #删除所有含有abc的行 sed "/abc/,/def/d" #删除abc 和 def 之间的行,包括其自身 sed "1,/def/d" #删除第一行到 def 之间的行,包括其自身 sed "/abc/,+3d " # 删除含有abc的行之后,在删除3行 sed "/abc/,~3d" #从含有abc的行开始,共删除3行 sed "1~2d" # 从第1行开始,每2行删除一行, 删除奇数行 sed "2~2d" # 从第2行开始,每2行删除一行, 删除奇数行 sed "$d" # 删除最后一行 sed "/dd\|cc/d" 删除有dd或者cc的行 #i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行); #p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行 sed -n "3p" file # 显示第三行 sed -n "1,3p" # 显示前三行 sed -n "2,+3p" # 显示第二行,及后面的三行 sed -n "$p" # 显示最后一行 sed -n "1p;3p;5p" # 只显示文件1、3、5行 sed -n "$=" # 显示文件行数 #s :替换,可以直接进行取代的工作。通常这个 s 的动作可以搭配正规表示法,例如 1,20s/old/new/g 's/old/new/g' sed "s/\(all\)/bb/" sed -r "s/(all)/bb/" ------------------------------------------------------------------------------------------------------------------ awk : 一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。 # 命令行调用方式 awk [-F field-separator] 'commands' input-file(s) # commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。 在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。 # awk工作流程: # 读入有'\n'换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是"空白键" 或 "[tab]键",所以$1表示登录用户,$3表示登录用户ip,以此类推。 cat /etc/passwd |awk -F ':' '{print $1}' cat /etc/passwd |awk -F ':' '{print $1"\t"$7}' awk 常用内置变量 ARGC 命令行参数个数 ARGV 命令行参数排列, ARGV[0] ARGV[1] ENVIRON 支持队列中系统环境变量的使用 FILENAME awk浏览的文件名 FNR 浏览文件的记录数 FS 设置输入域分隔符,等价于命令行 -F选项 NF 浏览记录的域的个数 NR 已读的记录数 OFS 输出域分隔符 ORS 输出记录分隔符 RS 控制记录分隔符 # 统计/etc/passwd:文件名,每行的行号,每行的列数,对应的完整行内容: #awk -F ':' '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwd # 使用printf替代print,可以让代码更加简洁,易读 awk -F ':' '{printf("filename:%10s,linenumber:%s,columns:%s,linecontent:%s\n",FILENAME,NR,NF,$0)}' /etc/passwd
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + filename :打开文件,并将光标置于最后一行首 vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处 vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename vi filename....filename :打开多个文件,依次进行编辑 移动光标类命令 h :光标左移一个字符 l :光标右移一个字符 space:光标右移一个字符 Backspace:光标左移一个字符 k或Ctrl+p:光标上移一行 j或Ctrl+n :光标下移一行 Enter :光标下移一行 w或W :光标右移一个字至字首 b或B :光标左移一个字至字首 e或E :光标右移一个字至字尾 ) :光标移至句尾 ( :光标移至句首 }:光标移至段落开头 {:光标移至段落结尾 nG:光标移至第n行首 n+:光标下移n行 n-:光标上移n行 n:光标移至第n行尾H:光标移至屏幕顶行M:光标移至屏幕中间行L:光标移至屏幕最后行0:(注意是数字零)光标移至当前行首:光标移至当前行尾 屏幕翻滚类命令 Ctrl+u:向文件首翻半屏 Ctrl+d:向文件尾翻半屏 Ctrl+f:向文件尾翻一屏 Ctrl+b;向文件首翻一屏 nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。 插入文本类命令 i :在光标前 I :在当前行首 a:光标后 A:在当前行尾 o:在当前行之下新开一行 O:在当前行之上新开一行 r:替换当前字符 R:替换当前字符及其后的字符,直至按ESC键 s:从当前光标位置处开始,以输入的文本替代指定数目的字符 S:删除指定数目的行,并以所输入文本代替之 ncw或nCW:修改指定数目的字 nCC:修改指定数目的行 删除命令 ndw或ndW:删除光标处开始及其后的n-1个字 do:删至行首 d:删至行尾ndd:删除当前行及其后n−1行x或X:删除一个字符,x删除光标后的,而X删除光标前的Ctrl+u:删除输入方式下所输入的文本搜索及替换命令/pattern:从光标开始处向文件尾搜索pattern?pattern:从光标开始处向文件首搜索patternn:在同一方向重复上一次搜索命令N:在反方向上重复上一次搜索命令:s/p1/p2/g:将当前行中所有p1均用p2替代:n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代:g/p1/s//p2/g:将文件中所有p1均用p2替换选项设置all:列出所有选项设置情况term:设置终端类型ignorance:在搜索中忽略大小写list:显示制表位(Ctrl+I)和行尾标志() number:显示行号 report:显示由面向行的命令修改过的数目 terse:显示简短的警告信息 warn:在转到别的文件时若没保存当前文件则显示NO write信息 nomagic:允许在搜索模式中,使用前面不带“\”的特殊字符 nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始 mesg:允许vi显示其他用户用write写到自己终端上的信息 最后行方式命令 :n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下 :n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下 :n1,n2 d :将n1行到n2行之间的内容删除 :w :保存当前文件 :e filename:打开文件filename进行编辑 :x:保存当前文件并退出 :q:退出vi :q!:不保存文件并退出vi :!command:执行shell命令command :n1,n2 w!command:将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入 :r!command:将命令command的输出结果放到当前行 寄存器操作 "?nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字 "?nyw:将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字 "?nyl:将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字 "?p:取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字 ndd:将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中。 一、插入文本 i 在当前字符前插入文本 I 在行首插入文本 a 在当前字符后添加文本 A 在行末添加文本 o 在当前行后面插入一空行 O 在当前行前面插入一空行 R 以改写方式输入文本 二、移动光标 j或下箭头 向下移动一行 k或上箭头 向上移动一行 h或左箭头 左移一个字符 l或右箭头 右移一个字符 w 右移一个词 W 右移一个以空格分隔的词 b 左移一个词 B 左移一个以空格分隔的词 0 移到行首 Ctrl-F 向前翻页 Ctrl-B 向后翻页 nG 到第n行 G 到最后一行 三、替换文本 $ 到行尾 ( 到句子的开头 ) 到句子的末尾 { 到段落的开头 } 到段落的末尾 四、删除文本 r 替换一个字符 c 修改文本直到按下Esc健 cw 修改下一个词 cnw 修改接下来的n个词 五、文本编辑 yy 将一行文本移到缺省缓冲区中 yn 将下一个词移到缺省缓冲区中 ynw 将后面的n个词移到缺省缓冲区中 p 如果缺省缓冲区中包含一行文本,则在当前 行后面插入一个空行井将缺省缓冲区中的声 容粘贴到这一行中;如果缺省缓冲区中包含 多个词,把这些词粘贴到光标的右边. P 如果缺省缓冲区中包含一行文本,则正当前 行前面插入一个空行井将缺省缓冲区中的内 容粘贴到这一行中;如果缺省缓冲区中包含 多个词,把这些词粘贴到光标的左边 六、保存退出 zz 保存并退出 :w filename 写入文件 :W 写入文件 :x 保存(如果当前文件修改过)并退出 :q! 不保存文件,直接退出 :q 退出vi vi编辑器的启动与退出 直接进入编辑环境 $ vi 进入编辑环境并打开(新建)文件 $ vi myfile 退出vi编辑环境 输入末行命令放弃对文件的修改,并退出编辑器 :q! 保存文件 保存对vi编辑器中已打开文件的修改 :w 另存为文件 将vi编辑器中的内容另存为指定文件名 :w myfile 退出vi编辑器的多种方法 未修改退出 没有对vi编辑器中打开的文件进行修改,或已对修改进行了保存,直接退出vi编辑器 :q 对vi编辑器中的文件进行保存并退出vi编辑器 :wq 不保存退出 放弃对文件内容的修改,并退出vi编辑器 :q! 光标的移动和翻页操作 h向左移动光标 l向右移动光标 k向上移动光标 j向下移动光标 翻页Ctrl + f向前翻整页 Ctrl + b向后翻整页 Ctrl + u向前翻半页 Ctrl + d向后翻半页 行内快速跳转 ^将光标快速跳转到本行的行首字符 $将光标快速跳转到本行的行尾字符 w将光标快速跳转到当前光标所在位置的后一个单词的首字母 b将光标快速跳转到当前光标所在位置的前一个单词的首字母 e将光标快速跳转到当前光标所在位置的后一个单词的尾字母 文件内行间快速跳转 命令功能 :set nu 在编辑器中显示行号 :set nonu 取消编辑器中的行号显示 1G跳转到文件的首行 G跳转到文件的末尾行 #G跳转到文件中的第#行 进入输入模式 i在当前光标处进入插入状态 a在当前光标后进入插入状态 A将光标移动到当前行的行末,并进入插入状态 o在当前行的下面插入新行,光标移动到新行的行首,进入插入状态 O在当前行的上面插入新行,光标移动到新行的行首,进入插入状态 cw删除当前光标到所在单词尾部的字符,并进入插入状态 c$删除当前光标到行尾的字符,并进入插入状态 c^命令删除当前光标之前(不包括光标上的字符)到行首的字符,并进入插入状态 输入模式的编辑键操作 方向键进行上下左右方向的光标移动 Home快速定位光标到行首 End快速定位光标到行尾 PageUp进行文本的向上翻页 PageDown进行文本的向下翻页 Backspace删除光标左侧的字符 Del删除光标位置的字符 删除操作 x删除光标处的单个字符 dd删除光标所在行 dw删除当前字符到单词尾(包括空格)的所有字符 de删除当前字符到单词尾(不包括单词尾部的空格)的所有字符 d$删除当前字符到行尾的所有字符 d^删除当前字符到行首的所有字符 J删除光标所在行行尾的换行符,相当于合并当前行和下一行的内容 替换操作 :s/old/new 将当前行中查找到的第一个字符“old” 串替换为“new” :s/old/new/g 将当前行中查找到的所有字符串“old” 替换为“new” :#,#s/old/new/g 在行号“#,#”范围内替换所有的字符串“old”为“new” :%s/old/new/g 在整个文件范围内替换所有的字符串“old”为“new” :s/old/new/c 在替换命令末尾加入c命令,将对每个替换动作提示用户进行确认 撤消操作 u取消最近一次的操作,并恢复操作结果 可以多次使用u命令恢复已进行的多步操作 U取消对当前行进行的所有操作 Ctrl + r对使用u命令撤销的操作进行恢复 复制与粘贴操作 yy复制当前行整行的内容到vi缓冲区 yw复制当前光标到单词尾字符的内容到vi缓冲区 y$复制当前光标到行尾的内容到vi缓冲区 y^复制当前光标到行首的内容到vi缓冲区 p读取vi缓冲区中的内容,并粘贴到光标当前的位置(不覆盖文件已有的内容) 字符串查找操作 /word从上而下在文件中查找字符串“word” ?word 从下而上在文件中查找字符串“word” n定位下一个匹配的被查找字符串 N定位上一个匹配的被查找字符串
参考:
每天一个linux命令
https://www.cnblogs.com/gophper/category/733967.html
Ubuntu学习
https://www.cnblogs.com/resn/p/5800922.html