touch
touch touch fileA 更改 fileA 的日期时间, 默认修改 access, modify, change 三个时间, 如果文件fileA不存在touch命令会在当前目录下创建一个空白文件 fileA.
touch touch fileA 更改 fileA 的日期时间, 默认修改 access, modify, change 三个时间, 如果文件fileA不存在touch命令会在当前目录下创建一个空白文件 fileA.
shell 判断文件存在 myPath="/var/log/httpd/" myFile="/var /log/httpd/access.log" -d 参数判断$myPath是否存在 if [ ! -d “$myPath”]; then mkdir “$myPath” fi -f 参数判断$myFile是否存在 if [ ! -f “$myFile” ]; then touch “$myFile” fi “[” 后面要有空格 “]“前面要有空格 另外使用变量时,如: mv $myFile $… myFile 路径中不能有”~” @_@
linux shell sleep,wait sleep 5 等待 秒 一、启动后台子任务 在执行命令后加&操作符,表示将命令放在子shell中异步执行。可以达到多线程效果。如下, sleep 10 #等待10秒,再继续下一操作 sleep 10 & #当前shell不等待,后台子shell等待 二、wait命令介绍 wait [作业指示或进程号] 1.等待作业号或者进程号制定的进程退出,返回最后一个作业或进程的退出状态状态。如果没有制定参数,则等待所有子进程的退出,其退出状态为0. 2.如果是shell中等待使用wait,则不会等待调用函数中子任务。在函数中使用wait,则只等待函数中启动的后台子任务。 3.在shell中使用wait命令,相当于高级语言里的多线程同步。 三、例子 1.使用wait等待所有子任务结束。 #!/bin/bash sleep 10 & sleep 5& wait #等待10秒后,退出 #!/bin/bash sleep 10 & sleep 5& wait $! #$!表示上个子进程的进程号,wait等待一个子进程,等待5秒后,退出 2.在函数中使用wait #!/bin/bash source ~/.bashrc fun(){ echo “fun is begin.timeNum:$timeNum” local timeNum=$1 sleep $timeNum & wait #这个只等待wait前面sleep echo "fun is end.timeNum:$timeNum" } fun 10 & fun 20 & ...
find command find 命令默认会递归遍历子目录 # find pathname -options find / -name '*task*.log' # find by file size # >100MB find . -type f -size +102400k -name 按文件名查找文件 # -name 按文件名查找文件 find . -name t.sql # 使用通配符时要加引号(单引号/双引号) find . -name 'bookmark*' # . 当前目录 # / 根目录 # 查 3 分钟前修改的文件 find . -mmin +3 -a, and -o, or -type f 表示查找文件而不是目录 -type d 目录类型 -prune prune 的功能就是当遇到某个文件夹的时候,跳过这个文件夹,不进去继续查找。 ...
chmod chmod a+x 1.sh chmod og+rwx 1.sh 格式: [ugoa…][+-=][rwxX…][,…] u 拥有者 g 与拥有者同组的 o 其它用户 a 三者都是 chmod -R a+rw folderName -R 对目录下和所有文件和子目录进行相同的权限变更
shell command basic ascii to binary $ echo -n "A" | xxd -b 0000000: 01000001 A $ echo -n "A" | xxd -b | awk '{print $2}' 01000001 https://unix.stackexchange.com/questions/98948/ascii-to-binary-and-binary-to-ascii-conversion-tools base64 > hex echo "YWJj" |base64 -d|xxd Display the last users who have logged onto the system last Display the user and group ids of your current user id Display who is online w Show who is logged into the system who Show this month’s calendar cal printf export LC_NUMERIC="en_US.UTF-8" printf "%'f\n" 1234567.777 1,234,567.777000 ...
linux CLI 作为 Linuxer,必须具备一定的 CLI 操作能力。有时候用 CLI 会比用 GUI 会更方便快捷。 —-lcan http://lcan.info/2011/03/cli-software/#comment-53 以下列出我所知道的一些常用 CLI 软件,仅供参考。 中文终端。据我所知,目前主要有两个解决方案: zhcon 和 fbterm。两个我都用过,zhcon 较长时间不更新了,问题比较多。不小心加错参数,甚至可能会导致死机。所以我推荐 fbterm,这个还是很不错的,要使用的话,必须开启 framebuffer。虽然某些方面也有些瑕疵,不过就目前而言,应该算是一个比较好用的中文终端了。有人可能会问: “中文输入怎么解决?“嘿嘿,这个倒不用担心。比较简陋的有 fbterm_ucimf,另外还有基于 ibus 的 ibus-fbterm 可供选择。 多窗口管理神器: tmux。功能和 screen 差不多,不过我感觉 tmux 更加强大、友好!可以横着切、竖着切窗口。让你充分利用你的屏幕!实乃远程管理、多任务控之必备神器啊! 文件管理器: vim 风格的可以选 ranger,另外还有 mc 之类的。 任务管理器: htop。这个可以理解为 top 的加强版。 音乐播放器: moc。这个用来播放 mp3,wma,flac 等常见音频文件还是不错的,但是不支持 ape 和 cue。如果这类文件比较多的,那就只能另寻他方了。cmus 也不支持 ape。 视频播放器: mplayer。说这个之前,我想咆哮几句: 是谁说 Linux 终端下只能用字符方式看视频啊!!!!是谁说在终端下看视频纯属找虐 啊!!!!!乃们这是误人子弟啊!!!!有木有听说过 framebuffer!!!!有木有!!!!有木有听说过 fbdev 输出!!!!!有木 有!!!!!! 我以前被人误导,也一直认为在 tty 终端下只能以字符方式看视频,但是直到有一天,我无意中了解到了有 framebuffer 这个东西!!!!无意中看到 mplayer 的视频输出里有 fbdev!!!!于是在开启了 framebuffer 的 tty 下。 mplayer -vo fbdev2 “我要看的视频” 我看到了神马?!我看到了一个清晰的带颜色输出的视频,竟然和在图形界面下播放时的质量差不了多少!!!!有木有看到!!!有木有!!!! PDF/图片查看器: fbida。fbida 里面包含了fbi,fbgs,ida,exiftran 四个应用。其中 fbi 可以用来查看图片 (FBI啊,名字就很牛X) ,fbgs 可以用来查看 PDF。前提嘛,估计各位看软件名就知道了,必 须开启 framebuffer。 截图工具: fbgrab。不废话,看官方说明: fbgrab – takes screenshots using the framebuffer。在桌面环境下可以用scrot这个命令行软件截屏。 IM 软件: finch。这个可以看成是 pidgin 的 CLI 版。 IRC 聊天: irssi。一个很强大的 IRC 客户端。 邮件客户端: mutt。有关介绍请移步 wiki。这个我基本不用。 RSS 阅读器: snownews。 屏幕录像: recordmydesktop。此软件可用于录制 GNOME、KDE 等桌面。
“futex” futex (fast userspace mutex) 是Linux的一个基础构件,可以用来构建各种更高级别的同步机制,比如锁或者信号量等等,POSIX信号量就是基于futex构建的。大多数时候编写应用程序并不需要直接使用futex,一般用基于它所实现的系统库就够了。 futex的性能非常优异,它是怎样做到的呢?这要从它的设计思想谈起。传统的SystemV IPC(inter process communication)进程间同步机制都是通过内核对象来实现的,以 semaphore 为例,当进程间要同步的时候,必须通过系统调用semop(2)进入内核进行PV操作。系统调用的缺点是开销很大,需要从user mode切换到kernel mode、保存寄存器状态、从user stack切换到kernel stack、等等,通常要消耗上百条指令。事实上,有一部分系统调用是可以避免的,因为现实中很多同步操作进行的时候根本不存在竞争,即某个进程从持有semaphore直至释放semaphore的这段时间内,常常没有其它进程对同一semaphore有需求,在这种情况下,内核的参与本来是不必要的,可是在传统机制下,持有semaphore必须先调用semop(2)进入内核去看看有没有人和它竞争,释放semaphore也必须调用semop(2)进入内核去看看有没有人在等待同一semaphore,这些不必要的系统调用造成了大量的性能损耗。futex就为了解决这个问题而生的,它的办法是: 在无竞争的情况下,futex的操作完全在user space进行,不需要系统调用,仅在发生竞争的时候进入内核去完成相应的处理(wait 或者 wake up)。所以说,futex是一种user mode和kernel mode混合的同步机制,需要两种模式合作才能完成,futex变量必须位于user space,而不是内核对象,futex的代码也分为user mode和kernel mode两部分,无竞争的情况下在user mode,发生竞争时则通过sys_futex系统调用进入kernel mode进行处理,具体来说: futex 变量是位于 user space 的一个整数,支持原子操作。futex 同步操作都是从user space开始的: 当要求持有futex的时候,对futex变量执行”down”操作,即原子递减,如果变量变为0,则意味着没有竞争发生,进程成功持有futex 并继续在user mode运行;如果变量变为负数,则意味着有竞争发生,需要通过sys_fute x系统调用进入内核执行futex_wait操作,让进程进入休眠等待。 当释放futex的时候,对futex变量进行”up”操作,即原子递增,如果变量变成1,则意味着没有竞争发生,进程成功释放futex并继续在user mode执行;否则意味着有竞争,需要通过sys_futex 系统调用进入内核执行 futex_wake 操作,唤醒正在等待的进程。 如果需要在多个进程之间共享futex,那就必须把futex变量放在共享内存中,并确保这些进程都有访问共享内存的权限;如果仅需在线程之间使用futex的话,那么futex变量可以位于进程的私有内存中,比如普通的全局变量即可。 更详细的信息请参阅futex作者的论文: Fuss, Futexes and Furwocks: Fast Userlevel Locking in Linux http://linuxperf.com/?p=23 什么是 Futex Futex,作为linux下的一种快速同步 (互斥) 机制 Futex 是Fast Userspace muTexes的缩写,由Hubertus Franke, Matthew Kirkwood, Ingo Molnar and Rusty Russell共同设计完成。几位都是linux领域的专家,其中可能Ingo Molnar大家更熟悉一些,毕竟是O(1)调度器和CFS的实现者。 ...