首页 文章 精选 留言 我的

精选列表

搜索[shell],共7518篇文章
优秀的个人博客,低调大师

每日一博 | Shell 编程之软硬链接 ln

在 Windows 里面我们经常通过快捷方式来创建链接以方便我们使用电脑。而 Linux 中有两种方式创建链接,分别为软链接和硬链接。下面我们就来详细说下二者的区别。 定义 ln (link file 的简称)是 GNU 核心工具包中的基本工具。该命令是为某个文件在另外一个位置建立一个同步链接。当我们需要在不同的目录用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,此时只需用 ln 创建对应文件的链接,不必重复的占用磁盘空间。 命令格式 # 硬链接(source只能是文件) ln source target # 软链接(source可以是文件也可以是目录) ln -s source target 软链接 软链接 symbolic link 跟 Windows 里面的快捷方式等价。它的内容是指向另一个文件的位置。所以可以创建某个目录的软链接,也可以对一个不存在的文件进行链接。除此之外,它可以跨文件系统。这三点硬链接都无法实现。 硬链接 硬链接 hard link 可以理解为文件的别名,而且别名可以有多个。 原理 对于 Linux 而言,文件的结构与 Windows 有点类似,由文件名,inode(类似于 Windows 下的 FCB 文件控制块,保存文件的一些信息)和数据组成。比如创建 origin 文件,会得到下面的信息。 注意 Inode 和硬链接,下面创建 origin 的硬链接 hardlink。 比对发现,创建硬链接的文件 hardlink 与原文件 origin 之间除了名称不同之外其他完全相同,就像同一个人它有个正式的名称也可能会有小名。它们的数据显然完全一样。 接下来,我们创建 origin 的软链接 softlink。 对比发现,origin 和 softlink 是完全不同的文件,有着不同的 size,不同的块,不同的 Inode,不同的 type。唯一的联系是 softlink 文件指向 origin 文件(有点文件指针的味道)。 用例 删除源文件对软硬链接的影响 由上图可以看出 hardlink 中硬链接的个数少了一个,而 softlink 还是安然无恙的存在着。接着我们通过两个链接来打开文件。 由上图发现,hardlink 依旧能打开文件,而软链接却无法查看原文件。 参考文献 GUN核心工具包 维基百科ln ln源码 如果该文章对您产生了帮助,或者您对技术文章感兴趣,可以关注微信公众号: 技术茶话会, 能够第一时间收到相关的技术文章,谢谢! 本篇文章由一文多发平台ArtiPub自动发布

优秀的个人博客,低调大师

用Shell写一个日志收集脚本

有时候想了想Flume框架的原理,其实也是对文件或者文件夹进行监控,那我自己也可以写一个脚本来简单的实现监控我们想监控的文件,然后对其进行上传。 1. 引入环境变量 #!/bin/bash #set java env export JAVA_HOME=/home/fantj/jdk/ export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH #set hadoop env export HADOOP_HOME=/home/fantj/hadoop/ export PATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH 2. 声明路径变量 #日志文件存放的目录 log_src_dir=/home/fantj/log/ #待上传文件存放的目录 log_toupload_dir=/home/fantj/toupload/ #日志文件上传到hdfs的根路径 hdfs_root_dir=/data/log/ 3. 扫描文件 ls $log_src_dir | while read fileName do if [[ "$fileName" == access.log ]]; then date=`date +%Y_%m_%d_%H_%M_%S` #将文件移动到待上传目录并重命名 #打印信息 echo "moving $log_src_dir$fileName to $log_toupload_dir"fantj_log_$fileName"$date" mv $log_src_dir$fileName $log_toupload_dir"fantj_log_$fileName"$date #将待上传的文件path写入一个列表文件willDoing echo $log_toupload_dir"fantj_log_$fileName"$date >> $log_toupload_dir"willDoing."$date fi done 把已经扫描到的日志文件重命名,然后mv到待上传目录,然后打印日志,并对mv成功的日志文件加上willDoing做未完成上传标记。 4. 开始上传 #找到列表文件willDoing ls $log_toupload_dir | grep will |grep -v "_COPY_" | grep -v "_DONE_" | while read line do #打印信息 echo "toupload is in file:"$line #将待上传文件列表willDoing改名为willDoing_COPY_ mv $log_toupload_dir$line $log_toupload_dir$line"_COPY_" #读列表文件willDoing_COPY_的内容(一个一个的待上传文件名) ,此处的line 就是列表中的一个待上传文件的path cat $log_toupload_dir$line"_COPY_" |while read line do #打印信息 echo "puting...$line to hdfs path.....$hdfs_root_dir" hadoop fs -put $line $hdfs_root_dir done mv $log_toupload_dir$line"_COPY_" $log_toupload_dir$line"_DONE_" done 5. 测试 我在/home/fantj/log目录下放一个access.log文件,然后执行脚本。 [root@s166 fantj]# ./upload2hdfs.sh envs: hadoop_home: /home/fantj/hadoop/ log_src_dir:/home/fantj/log/ moving /home/fantj/log/access.log to /home/fantj/toupload/fantj_log_access.log2018_07_29_12_49_03 toupload is in file:willDoing.2018_07_29_12_49_03 puting.../home/fantj/toupload/fantj_log_access.log2018_07_29_12_49_03 to hdfs path...../data/log/ [root@s166 fantj]# hadoop fs -ls -R /data/ drwxr-xr-x - root supergroup 0 2018-07-29 00:49 /data/log -rw-r--r-- 3 root supergroup 14340 2018-07-29 00:49 /data/log/fantj_log_access.log2018_07_29_12_49_03 -rw-r--r-- 3 root supergroup 14340 2018-07-28 13:53

优秀的个人博客,低调大师

11.Linux shell编程(常用命令)

(创建于2018/1/31) 文件操作 1.显示列表 ls -l 以列表的形式显示 ls -la 以列表的形式显示所有,包括隐藏文件 ls -l ja* 通配符查找,查找的如果是文件夹结果是以列表形式显示文件夹下第一层的所有文件和文件夹 ls -l ja? ?表示一个字符,查找ja后边只有一个字符的,显示的结果同上 ls -l 和 ls -la的区别,ls -la可以显示隐藏文件 611949796.png s -l xx*通配符查找的是 满足条件的目录下的所有文件列表 612113484.png 2.创建文件 touch ren.txt 在当前目录创建ren.txt文件 3.复制文件 cp src.txt dest.txt 将src.txt文件复制到当前目录下,文件名为dest.txt cp -i src.txt dest.txt 复制前询问是否复制,有一个确认的过程(我在linux云主机上尝试的没有提示,效果同上边的命令) cp /xxx/xxx . 复制某一目录下某一文件到当前目录下,注意如果要复制本目录下到当前目录也就是本目录是不行的,会有提示 cp -R src dest 复制整个目录src到dest 目录下 (R有的地方区分大小写) 4.删除 rm -rf ndk/ rm:删除命令 -r开关:递归地删除子目录和子目录中的文件 -f开关:强制删除,不再一一向用户提示确认 * 所有文件和文件夹 rm file 删除文件file echo "ren" 输出ren 6.查看文件类型 file 文件名 7.查看文件内容 cat 文件名 功能跟vim差不多,不过cat打开只能读,不能编辑(more命令也可以查看) cat -b 文件名 查看文件,显示行号 tail -n 10 文件名 查看文件最后十行 head -n 10 文件名 查看文件最前边十行 8.创建用户 useradd -m renzhenming 创建用户renzhenming,同时创建renzhenming用户的home目录 userdel -r renzhenming 删除用户 9.创建组 groupadd 组名 10.分配用户到组 usermod -G 组名 用户名 12.文件权限 704394750.png 如上截图 r:读 w:写 x:执行 d:目录 以上边user目录权限为例 d后边第一个三位表示文件所属用户具备的权限(rwx 具备读写执行的最高权限) d后边第二个三位表示文件所属用户的所属组具备的权限(r-x具备读执行的权限)-表示0 d后边最后一个三位表示系统的其他用户具备的权限(r-x具备读执行的权限) 以往简单粗暴的赋权方式chmod 777 file不安全,我们需要根据需要设置root用户以及组和其他用户的权限 数字对应关系如下: 权限 二进制 八进制 --- 000 0 --x 001 1 -w- 010 2 -wx 011 3 r-- 100 4 r-x 101 5 rw- 110 6 rwx 111 7 rwx必须是固定顺序 修改文件权限 chmod 644 file 给用户加上执行权限 chmod u+x file //(chmod是权限管理命令change the permissions mode of a file的缩写。。u代表所有者,x代表执行权限。 + 表示增加权限。chmod u+x file.sh 就表示对当前目录下的file.sh文件的所有者增加可执行权限) tar命令的详细解释 参数: -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。 -z:有gzip属性的 -j:有bz2属性的 -Z:有compress属性的 -v:显示所有过程 -O:将文件解开到标准输出 --delete从存档中删除 注意是两个减号。 下面的参数-f是必须的 -f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。 下面是例子 1.压缩一个目录 eg: tar -cvzf test.tar.gz tar #压缩当前目录下的tar目录,压缩包的名字叫test.tar.gz 2.压缩其中某一类型的文件 eg: tar -cvzf test.tar.gz ./*.c #压缩当前目录下的.c为后缀的文件。但是不能压缩以.开头的文件 3.查看一个压缩文件的内容 eg: tar -tvf test.tar.gz #查看当前目录下test.tar.gz压缩文件中的文件 4.解压一个文件 eg. tar -xvzf test.tar.gz #解压test.tar.gz到当前目录下面 5.文件夹做一个归档文件、备份一个目录、 eg: tar -cvf test.tar tar #将tar文件夹下的文件生成一个test.tar归档文件 6.将某一类型的文件做成归档文件、备份某一类型的文件 eg:tar -cvf test.tar ./tar/*.c # 将tar文件夹下所有以.c结尾的文件放到test.tar 文件中,但是以.开头的文件不行 7.向归档文件中添加一个文件夹 eg: tar -rf test.tar ./test1 #将test1文件夹中的所有文件,添加到test.tar 归档文件中 8.删除归档文件中的文件 eg: tar -f test.tar --delete a.c #删除test.tar文件中的 a.c文件 9.删除归档文件中的某一类的文件 eg: tar -f test.tar --delete *.c #删除test.tar文件中的 以.c结尾的文件 10.释放归档文件 eg: tar -xvf test.tar #释放test.tar归档文件中的内容到 当前目录下 11.查看归档文件中的内容 eg: tar -tvf test.tar 总结 1、*.tar 用 tar –xvf 解压 2、*.gz 用 gzip -d或者gunzip 解压 3、*.tar.gz和*.tgz 用 tar –xzf 解压 4、*.bz2 用 bzip2 -d或者用bunzip2 解压 5、*.tar.bz2用tar –xjf 解压 6、*.Z 用 uncompress 解压 7、*.tar.Z 用tar –xZf 解压 8、*.rar 用 unrar e解压 9、*.zip 用 unzip 解压

优秀的个人博客,低调大师

Linux下查看CPU/内存/硬盘的shell命令

1、cpu查看 1)cpu个数:#cat /proc/cpuinfo | grep "physical id" | uniq | wc -l 2)cpu核数:#cat /proc/cpuinfo | grep "cpu cores" | uniq 3)cpu型号:#cat /proc/cpuinfo | grep 'model name' |uniq 2、内存查看:#cat /proc/meminfo | grep MemTotal 3、硬盘查看:#fdisk -l | grep Disk 下面是一些命令的集合,供参考: [plain]view plain copy uname-a#查看内核/操作系统/CPU信息的linux系统信息 head-nl/etc/issue#查看操作系统版本 cat/proc/cpuinfo#查看CPU信息 hostname#查看计算机名的linux系统信息命令 lspci-tv#列出所有PCI设备 lsusb-tv#列出所有USB设备的linux系统信息命令 lsmod#列出加载的内核模块 env#查看环境变量资源 free-m#查看内存使用量和交换区使用量 df-h#查看各分区使用情况 du-sh#查看指定目录的大小 grepMemTotal/proc/meminfo#查看内存总量 grepMemFree/proc/meminfo#查看空闲内存量 uptime#查看系统运行时间、用户数、负载 cat/proc/loadavg#查看系统负载磁盘和分区 mount|column-t#查看挂接的分区状态 fdisk-l#查看所有分区 swapon-s#查看所有交换分区 hdparm-i/dev/hda#查看磁盘参数(仅适用于IDE设备) dmesg|grepIDE#查看启动时IDE设备检测状况网络 ifconfig#查看所有网络接口的属性 iptables-L#查看防火墙设置 route-n#查看路由表 netstat-lntp#查看所有监听端口 netstat-antp#查看所有已经建立的连接 netstat-s#查看网络统计信息进程 ps-ef#查看所有进程 top#实时显示进程状态用户 w#查看活动用户 id#查看指定用户信息 last#查看用户登录日志 cut-d:-f1/etc/passwd#查看系统所有用户 cut-d:-f1/etc/group#查看系统所有组 crontab-l#查看当前用户的计划任务服务 chkconfig–list#列出所有系统服务 chkconfig–list|grepon#列出所有启动的系统服务程序 rpm-qa#查看所有安装的软件包 cat/proc/cpuinfo:查看CPU相关参数的linux系统命令 cat/proc/partitions:查看linux硬盘和分区信息的系统信息命令 cat/proc/meminfo:查看linux系统内存信息的linux系统命令 cat/proc/version:查看版本,类似uname-r cat/proc/ioports:查看设备io端口 cat/proc/interrupts:查看中断 cat/proc/pci:查看pci设备的信息 cat/proc/swaps:查看所有swap分区的信息

优秀的个人博客,低调大师

centos6 多段Ip添加shell脚本

#!/bin/bash export device=`ifconfig|grep eth0|head -n 1|awk '{print ($1)}'` export ipcfg_pre="/etc/sysconfig/network-scripts/ifcfg-eth1-range" awktmp=`mktemp` msg=`mktemp` ip_txt=`mktemp` ifcfgs="$(find ${ipcfg_pre%/*} -name ${ipcfg_pre##*/}*)" if test ! -z "$ifcfgs";then echo "发现如下已有配置文件是否删除(yes/no)?" echo "$ifcfgs" select var in "yes" "no" do if test "$var" = "yes";then rm -f $ifcfgs break; else break; fi done fi #脚本保存进 临时文件 不再使用a.awk文件。 cat >$awktmp <<EOF #!/usr/bin/awk -f BEGIN{ ipcfg_pre="${ipcfg_pre}" #你需要修改 ipcfg_pre 为自己的路径前缀 device=ENVIRON["device"] clone_num=1; numofpc[24]=253 numofpc[24]=125 numofpc[26]=61 numofpc[27]=29 numofpc[28]=13 numofpc[29]=5 } function ip_str(iplist){ return sprintf("%s.%s.%s.%s",ip_list[1],ip_list[2],ip_list[3],ip_list[4]); } function gen_mask(num,mask_bin, _ARGVEND_,sum,bits){ #把掩码由数字转换成数组 _i=1; mask_bin[1]=0; for (;_i*8 <=num && _i<=4;_i++){ mask_bin[_i]=255; } bits=num-(_i-1)*8; sum=0; for(;bits>0;bits--){ sum=sum+2^(8-bits); } mask_bin[_i]=sum; _i++; for(;_i<=4;_i++){ mask_bin[_i]=0; } } { ipfile=sprintf("%s%s",ipcfg_pre,NR); split(\$0,ip,"/"); ip_mask=ip[2]; split(ip[1],ip_list,"."); #ip_list 列表保存了 ip 的四个 字节值 ip_start=ip_list[4]+2; ip_end=ip_start+numofpc[ip_mask]-1; printf("DEVICE=%s\n",device)>ipfile printf("BOOTPROTO=static\n")>>ipfile printf("CLONENUM_START=%d\n",clone_num)>>ipfile ip_list[4]=ip_start; printf("IPADDR_START=%s\n",ip_str(ip_list))>>ipfile ip_list[4]=ip_end; printf("IPADDR_END=%s\n",ip_str(ip_list))>>ipfile clone_num+=numofpc[ip_mask]; printf("ONBOOT=yes\n")>>ipfile gen_mask(ip_mask,ip_list) netmask=ip_str(ip_list) printf("NETMASK=%s\n",netmask)>>ipfile } EOF chmod a+x $awktmp msg=`mktemp` cat >$msg <<EOF 请输入IP地址和掩码每行一行(不可出现空白行) 如: 45.34.89.40/29 23.91.3.0/28 23.91.8.32/28 23.91.18.160/28 23.91.28.128/28 EOF vi +":!cat $msg" $ip_txt #service network restart test -e $ip_txt && awk -f $awktmp $ip_txt service network restart rm -f $awktmp $msg $ip_txt rm -f ipcfg.sh ===================================================== 此脚本只适用于 45.34.89.40/29 23.91.3.0/28 23.91.8.32/28 23.91.18.160/28 23.91.28.128/28 这种格式IP段添加,请注意脚本网卡名称和机器网卡名称是否一致 使用方法,命名为ipcfg.sh 1. 会提示IP文件是否已经存在,让选择是否删除。我们只用于第一次添加。尽量不要去补充添加。 2. 按回车键,然后按 i 进入编辑模式,输入IP段。iP段一个一行,不要有空格。 保存。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册