12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952 |
- GNU coreutils NEWS -*- outline -*-
- * Noteworthy changes in release ?.? (????-??-??) [?]
- ** Bug fixes
- df no longer corrupts displayed multibyte characters on macOS.
- * Noteworthy changes in release 8.30 (2018-07-01) [stable]
- ** Bug fixes
- 'cp --symlink SRC DST' will again correctly validate DST.
- If DST is a regular file and SRC is a symlink to DST,
- then cp will no longer allow that operation to clobber DST.
- Also with -d, if DST is a symlink, then it can always be replaced,
- even if it points to SRC on a separate device.
- [bugs introduced with coreutils-8.27]
- 'cp -n -u' and 'mv -n -u' now consistently ignore the -u option.
- Previously, this option combination suffered from race conditions
- that caused -u to sometimes override -n.
- [bug introduced with coreutils-7.1]
- 'cp -a --no-preserve=mode' now sets appropriate default permissions
- for non regular files like fifos and character device nodes etc.,
- and leaves mode bits of existing files unchanged.
- Previously it would have set executable bits on created special files,
- and set mode bits for existing files as if they had been created.
- [bug introduced with coreutils-8.20]
- 'cp --remove-destination file symlink' now removes the symlink
- even if it can't be traversed.
- [bug introduced with --remove-destination in fileutils-4.1.1]
- ls no longer truncates the abbreviated month names that have a
- display width between 6 and 12 inclusive. Previously this would have
- output ambiguous months for Arabic or Catalan locales.
- 'ls -aA' is now equivalent to 'ls -A', since -A now overrides -a.
- [bug introduced in coreutils-5.3.0]
- 'mv -n A B' no longer suffers from a race condition that can
- overwrite a simultaneously-created B. This bug fix requires
- platform support for the renameat2 or renameatx_np syscalls, found
- in recent Linux and macOS kernels. As a side effect, ‘mv -n A A’
- now silently does nothing if A exists.
- [bug introduced with coreutils-7.1]
- ** Changes in behavior
- 'cp --force file symlink' now removes the symlink even if
- it is self referential.
- ls --color now matches file extensions case insensitively.
- ** New features
- cp --reflink now supports --reflink=never to enforce a standard copy.
- env supports a new -v/--debug option to show verbose information about
- each processing step.
- env supports a new -S/--split-string=S option to split a single argument
- string into multiple arguments. Used to pass multiple arguments in scripts
- (shebang lines).
- md5sum accepts a new option: --zero (-z) to delimit the output lines with a
- NUL instead of a newline character. This also disables file name escaping.
- This also applies to sha*sum and b2sum.
- rm --preserve-root now supports the --preserve-root=all option to
- reject any command line argument that is mounted to a separate file system.
- ** Improvements
- cut supports line lengths up to the max file size on 32 bit systems.
- Previously only offsets up to SIZE_MAX-1 were supported.
- stat and tail now know about the "exfs" file system, which is a
- version of XFS. stat -f --format=%T now reports the file system type,
- and tail -f uses inotify.
- wc avoids redundant processing of ASCII text in multibyte locales,
- which is especially significant on macOS.
- * Noteworthy changes in release 8.29 (2017-12-27) [stable]
- ** Bug fixes
- b2sum no longer crashes when processing certain truncated check files.
- [bug introduced with b2sum coreutils-8.26]
- dd now ensures the correct cache ranges are specified for the "nocache"
- and "direct" flags. Previously some pages in the page cache were not
- invalidated. [bug introduced for "direct" in coreutils-7.5,
- and with the "nocache" implementation in coreutils-8.11]
- df no longer hangs when given a fifo argument.
- [bug introduced in coreutils-7.3]
- ptx -S no longer infloops for a pattern which returns zero-length matches.
- [the bug dates back to the initial implementation]
- shred --remove will again repeatedly rename files with shortening names
- to attempt to hide the original length of the file name.
- [bug introduced in coreutils-8.28]
- stty no longer crashes when processing settings with -F also specified.
- [bug introduced in fileutils-4.0]
- tail --bytes again supports non seekable inputs on all systems.
- On systems like android it always tried to process as seekable inputs.
- [bug introduced in coreutils-8.24]
- timeout will again notice its managed command exiting, even when
- invoked with blocked CHLD signal, or in a narrow window where
- this CHLD signal from the exiting child was missed. In each case
- timeout would have then waited for the time limit to expire.
- [bug introduced in coreutils-8.27]
- ** New features
- timeout now supports the --verbose option to diagnose forced termination.
- ** Improvements
- dd now supports iflag=direct with arbitrary sized files on all file systems.
- tail --bytes=NUM will efficiently seek to the end of block devices,
- rather than reading from the start.
- Utilities which do not support long options (other than the default --help
- and --version), e.g. cksum and sleep, now use more consistent error diagnostic
- for unknown long options.
- ** Build-related
- Default man pages are now distributed which are used if perl is
- not available on the build system, or when cross compiling.
- * Noteworthy changes in release 8.28 (2017-09-01) [stable]
- ** Bug fixes
- cp and mv now merely warn about any failure to preserve symlink ownership.
- Before, cp (without -p) would exit with a failure status, and a cross-device
- mv would leave such symlinks behind in the source file system.
- [the bug dates back to the initial implementation]
- When creating numbered backups, cp, install, ln, and mv now avoid
- races that could lose backup data in unlikely circumstances. Since
- the fix relies on the renameat2 system call of Linux kernel 3.15 and
- later, the races are still present on other platforms.
- [the bug dates back to the initial implementation]
- cp, install, ln, and mv no longer lose data when asked to copy a
- backup file to its original via a differently-spelled file name.
- E.g., 'rm -f a a~; : > a; echo data > a~; cp --backup=simple a~ ./a'
- now fails instead of losing the data.
- [the bug dates back to the initial implementation]
- cp, install, ln, and mv now ignore nonsensical backup suffixes.
- For example, --suffix='/' and --suffix='' are now no-ops.
- [the bug dates back to the initial implementation]
- date and touch no longer overwrite the heap with large
- user specified TZ values (CVE-2017-7476).
- [bug introduced in coreutils-8.27]
- dd status=progress now just counts seconds; e.g., it outputs "6 s"
- consistently rather than sometimes outputting "6.00001 s".
- [bug introduced in coreutils-8.24]
- df no longer interacts with excluded file system types, so for example
- specifying -x nfs no longer hangs with problematic nfs mounts.
- [bug introduced in coreutils-8.21]
- df no longer interacts with dummy file system types, so for example
- no longer hangs with problematic nfs mounted via system.automount(5).
- [bug introduced in coreutils-8.21]
- `groups inva:lid root` no longer exits immediately upon failure.
- Now, it prints a diagnostic or a line to stdout for each argument.
- [bug introduced in the bourne-shell-to-C rewrite for coreutils-6.11]
- kill now converts from number to signal name correctly on AIX.
- Previously it would have always returned the 'EXIT' name.
- [bug introduced in fileutils-4.1.9]
- ls now quotes symlink targets consistently. Previously it may not
- have quoted the target name if the link name itself didn't need quoting.
- [bug introduced in coreutils-8.26]
- split no longer exits when invocations of a --filter return EPIPE.
- [bug introduced in coreutils-8.26]
- md5sum --check no longer incorrectly enables BSD reversed format mode when
- ignoring some non checksum lines. This also affects sha*sum and b2sum.
- [bug introduced in coreutils-8.14]
- tail -F 'dir/file' is now monitored even when 'dir' is replaced.
- [bug introduced with inotify support added in coreutils-7.5]
- tail -f with --pid=PID now processes all inotify events.
- Previously events may have been ignored completely upon PID death,
- or ignored until future events on the monitored files.
- [bug introduced with inotify support added in coreutils-7.5]
- tail -f /dev/tty is now supported by not using inotify when any
- non regular files are specified, as inotify is ineffective with these.
- [bug introduced with inotify support added in coreutils-7.5]
- uptime no longer outputs the AM/PM component of the current time,
- as that's inconsistent with the 24 hour time format used.
- [bug introduced in coreutils-7.0]
- expr now returns number of characters matched (instead of incorrect
- number of bytes matched) with 'match'/':' operators on multibyte strings.
- ** New features
- expand and unexpand now support specifying an offset for tab stops
- by prefixing the last specified number like --tabs=1,+8 which is
- useful for visualizing diff output for example.
- ls supports a new --hyperlink[=when] option to output file://
- format links to files, supported by some terminals.
- split supports a new --hex-suffixes[=from] option to create files with
- lower case hexadecimal suffixes, similar to the --numeric-suffixes option.
- env now has a --chdir (-C) option to change the working directory before
- executing the subsidiary program.
- expr supports multibyte strings for all string operations.
- ** Changes in behavior
- tail -f now exits immediately if the output is piped and the reader of
- the pipe terminates. That allows `tail -f file | grep -q foo` to return
- responsively, but does make `tail -f file | :` exit immediately without
- waiting for data. Instead one should now `tail -f file | grep -q .`
- ** Improvements
- mv --verbose now distinguishes rename and copy operations.
- stat -f -c %l, used to output the max file name length on a file system,
- is now supported on FreeBSD and OpenBSD.
- tail -f no longer erroneously warns about being ineffective
- when following a single tty, as the simple blocking loop used
- is effective in this case.
- * Noteworthy changes in release 8.27 (2017-03-08) [stable]
- ** Bug fixes
- cp --parents will now set an SELinux context for created directories,
- as appropriate for the -a, --preseve=context, or -Z options.
- [bug present since SELinux support added in coreutils-6.10]
- date again converts from a specified time zone. Previously output was
- not converted to the local time zone, and remained in the specified one.
- [bug introduced in coreutils-8.26]
- Commands like 'cp --no-dereference -l A B' are no longer quiet no-ops
- when A is a regular file and B is a symbolic link that points to A.
- [bug introduced in fileutils-4.0]
- factor no longer goes into an infinite loop for certain numbers like
- 158909489063877810457 and 222087527029934481871.
- [bug introduced in coreutils-8.20]
- tail no longer prints redundant file headers with interleaved inotify events,
- which could be triggered especially when tail was suspended and resumed.
- [bug introduced with inotify support added in coreutils-7.5]
- timeout no longer has a race that may terminate the wrong process.
- The race is unlikely, as timeout(1) needs to receive a signal right
- after the command being monitored finishes. Also the system needs
- to have reallocated that command's pid in that short time window.
- [bug introduced when timeout was added in coreutils-7.0]
- wc --bytes --files0-from now correctly reports byte counts.
- Previously it may have returned values that were too large,
- depending on the size of the first file processed.
- [bug introduced in coreutils-8.24]
- ** Improvements
- The new 'date' option --rfc-email is now the long form for -R.
- The new option spelling is intended to avoid the need to track the
- Internet RFC number for email dates (currently RFC 5322). The old
- option spellings --rfc-2822 and --rfc-822 still work.
- date now outputs "-00" for a numeric time zone if the time is UTC
- and the time zone abbreviation begins with "-", indicating that the
- time zone is indeterminate.
- nproc now honors the OMP_THREAD_LIMIT environment variable to
- set the maximum returned value. OMP_NUM_THREADS continues to
- set the minimum returned value, but is updated to support the
- nested level syntax allowed in this variable.
- stat and tail now know about the "rdt" file system, which is an interface
- to Resource Director Technology. stat -f --format=%T now reports the
- file system type, and tail -f uses inotify.
- stty now validates arguments before interacting with the device,
- ensuring there are no side effects to specifying an invalid option.
- If the file B already exists, commands like 'ln -f A B' and
- 'cp -fl A B' no longer remove B before creating the new link.
- That is, there is no longer a brief moment when B does not exist.
- ** New features
- expand and unexpand now support specifying a tab size to use
- after explicitly specified tab stops, by prefixing the last
- specified number like --tabs=2,4,/8.
- * Noteworthy changes in release 8.26 (2016-11-30) [stable]
- ** Bug fixes
- cp, mv, and install no longer run into undefined behavior when
- handling ACLs on Cygwin and Solaris platforms. [bug introduced in
- coreutils-8.24]
- cp --parents --no-preserve=mode, no longer copies permissions from source
- directories, instead using default permissions for created directories.
- [bug introduced in coreutils-5.93]
- chcon, chgrp, chmod, chown, du, and rm, or specifically utilities
- using the FTS interface, now diagnose failures returned by readdir().
- [this bug was inherent in the use of fts: thus, for rm the bug was
- introduced in coreutils-8.0. du, chmod, chgrp and chown started using
- fts in 6.0. chcon was added in coreutils-6.9.91 with fts support. ]
- date, du, ls, and pr no longer mishandle time zone abbreviations on
- System V style platforms where this information is available only
- in the global variable 'tzname'. [bug introduced in coreutils-8.24]
- factor again outputs immediately when numbers are input interactively.
- [bug introduced in coreutils-8.24]
- head no longer tries to process non-seekable input as seekable,
- which resulted in failures on FreeBSD 11 at least.
- [bug introduced in coreutils-8.24]
- install -DZ and mkdir -pZ now set default SELinux context correctly even if
- two or more directories nested in each other are created and each of them
- defaults to a different SELinux context.
- ls --time-style no longer mishandles '%%b' in formats.
- [bug introduced in coreutils-7.2]
- md5sum --check --ignore-missing no longer treats files with checksums
- starting with "00" as missing. This also affects sha*sum.
- [bug introduced with the --ignore-missing feature in coreutils-8.25]
- nl now resets numbering for each page section rather than just for each page.
- [This bug was present in "the beginning".]
- pr now handles specified separator strings containing tabs correctly.
- Previously it would have output random data from memory.
- [This bug was detected with ASAN and present in "the beginning".]
- sort -h -k now works even in locales that use blank as thousands separator.
- stty --help no longer outputs extraneous gettext header lines
- for translated languages. [bug introduced in coreutils-8.24]
- stty "sane" again sets "susp" to ^z on Solaris, and leaves "swtch" undefined.
- [This bug previously fixed only on some older Solaris systems]
- seq now immediately exits upon write errors.
- [This bug was present in "the beginning".]
- tac no longer crashes when there are issues reading from non-seekable inputs.
- [bug introduced in coreutils-8.15]
- tail -F now continues to process initially untailable files that are replaced
- by a tailable file. This was handled correctly when inotify was available,
- and is now handled correctly in all cases.
- [bug introduced in fileutils-4.0h]
- tail -f - 'untailable file' will now terminate when there is no more data
- to read from stdin. Previously it behaved as if --retry was specified.
- [This bug was present in "the beginning".]
- tail -f 'remote file' will now avoid outputting repeated data on network
- file systems that misreport file sizes through stale metadata.
- [This bug was present in "the beginning" but exacerbated in coreutils-8.24]
- tail -f --retry 'missing file' will now process truncations of that file.
- Previously truncation was ignored thus not outputting new data in the file.
- [bug introduced in coreutils-5.3.0]
- tail -f will no longer continually try to open inaccessible files,
- only doing so if --retry is specified.
- [This bug was present in "the beginning".]
- yes now handles short writes, rather than assuming all writes complete.
- [bug introduced in coreutils-8.24]
- ** Changes in behavior
- rm no longer accepts shortened variants of the --no-preserve-root option.
- seq no longer accepts 0 value as increment, and now also rejects NaN
- values for any argument.
- stat now outputs nanosecond information for timestamps even if
- they are out of localtime range.
- sort, tail, and uniq now support traditional usage like 'sort +2'
- and 'tail +10' on systems conforming to POSIX 1003.1-2008 and later.
- The 2008 edition of POSIX dropped the requirement that arguments
- like '+2' must be treated as file names.
- ** Improvements
- dd now warns about counts specified with a 0x "prefix", since dd will
- interpret those as a zero multiplier rather than a hex constant.
- The warning suggests to use 00x if a zero multiplier is really intended.
- df now filters the system mount list more efficiently, with 20000
- mount entries now being processed in about 1.1s compared to 1.7s.
- du, shuf, sort, and uniq no longer fail to process a specified file
- when their stdin is closed, which would have happened with glibc >= 2.14.
- install -Z now also sets the default SELinux context for created directories.
- ls is now fully responsive to signals until the first escape sequence is
- written to a terminal.
- ls now aligns quoted items with non quoted items, which is easier to read,
- and also better indicates that the quote is not part of the actual name.
- stat and tail now know about these file systems:
- "balloon-kvm-fs" KVM dynamic RAM allocation support,
- "cgroup2" Linux Control Groups V2 support,
- "daxfs" Optical media file system,
- "m1fs" A Plexistor file system,
- "prl_fs" A parallels file system,
- "smb2" Samba for SMB protocol V2,
- "wslfs" Windows Subsystem for Linux,
- "zsmalloc" Linux compressed swap support,
- stat -f --format=%T now reports the file system type, and
- tail -f uses polling for "prl_fs" and "smb2", and inotify for others.
- stat --format=%N for quoting file names now honors the
- same QUOTING_STYLE environment variable values as ls.
- ** New programs
- b2sum is added to support the BLAKE2 digest algorithm with
- a similar interface to the existing md5sum and sha1sum, etc. commands.
- ** New Features
- comm now accepts the --total option to output a summary at the end.
- date now accepts the --debug option, to annotate the parsed date string,
- display timezone information, and warn about potential misuse.
- date now accepts the %q format to output the quarter of the year.
- * Noteworthy changes in release 8.25 (2016-01-20) [stable]
- ** Bug fixes
- cp now correctly copies files with a hole at the end of the file,
- and extents allocated beyond the apparent size of the file.
- That combination resulted in the trailing hole not being reproduced.
- [bug introduced in coreutils-8.10]
- cut --fields no longer outputs extraneous characters on some uClibc configs.
- [bug introduced in coreutils-6.11]
- install -D again copies relative file names when absolute file names
- are also specified along with an absolute destination directory name.
- [bug introduced in coreutils-6.2]
- ls no longer prematurely wraps lines when printing short file names.
- [bug introduced in coreutils-5.1.0]
- mv no longer causes data loss due to removing a source directory specified
- multiple times, when that directory is also specified as the destination.
- [bug introduced in coreutils-8.24]
- shred again uses defined patterns for all iteration counts.
- [bug introduced in coreutils-5.93]
- sort --debug -b now correctly marks the matching extents for keys
- that specify an offset for the first field.
- [bug introduced with the --debug feature in coreutils-8.6]
- tail -F now works with initially non existent files on a remote file system.
- [bug introduced in coreutils-7.5]
- ** New commands
- base32 is added to complement the existing base64 command,
- and encodes and decodes printable text as per RFC 4648.
- ** New features
- comm,cut,head,numfmt,paste,tail now have the -z,--zero-terminated option, and
- tac --separator accepts an empty argument, to work with NUL delimited items.
- dd now summarizes sizes in --human-readable format too, not just --si.
- E.g., "3441325000 bytes (3.4 GB, 3.2 GiB) copied". It omits the summaries
- if they would not provide useful information, e.g., "3 bytes copied".
- Its status=progress output now uses the same format as ordinary status,
- perhaps with trailing spaces to erase previous progress output.
- md5sum now supports the --ignore-missing option to allow
- verifying a subset of files given a larger list of checksums.
- This also affects sha1sum, sha224sum, sha256sum, sha384sum and sha512sum.
- printf now supports the '%q' format to print arguments in a form that
- is reusable by most shells, with non-printable characters escaped
- with the POSIX proposed $'...' syntax.
- stty now supports the "[-]drain" setting to control whether to wait
- for transmission of pending output before application of settings.
- ** Changes in behavior
- base64 no longer supports hex or oct --wrap parameters,
- thus better supporting decimals with leading zeros.
- date --iso-8601 now uses +00:00 timezone format rather than +0000.
- The standard states to use this "extended" format throughout a timestamp.
- df now prefers sources towards the root of a device when
- eliding duplicate bind mounted entries.
- ls now quotes file names unambiguously and appropriate for use in a shell,
- when outputting to a terminal.
- join, sort, uniq with --zero-terminated, now treat '\n' as a field delimiter.
- ** Improvements
- All utilities now quote user supplied arguments in error strings,
- which avoids confusing error messages in the presence of '\r' chars etc.
- Utilities that traverse directories, like chmod, cp, and rm etc., will operate
- more efficiently on XFS through the use of "leaf optimization".
- md5sum now ensures a single line per file for status on standard output,
- by using a '\' at the start of the line, and replacing any newlines with '\n'.
- This also affects sha1sum, sha224sum, sha256sum, sha384sum and sha512sum.
- dircolors now supports globbing of TERM entries in its database.
- For example "TERM *256color*" is now supported.
- du no longer stats all mount points at startup, only doing so
- upon detection of a directory cycle.
- [issue introduced in coreutils-8.20]
- ls -w0 is now interpreted as no limit on the length of the outputted line.
- stat -f --format=%T now reports the file system type for new Linux
- pseudo file systems "bpf_fs", "btrfs_test", "nsfs", "overlayfs"
- and "tracefs", and remote file system "acfs".
- wc now ensures a single line per file for counts on standard output,
- by quoting names containing '\n' characters; appropriate for use in a shell.
- * Noteworthy changes in release 8.24 (2015-07-03) [stable]
- ** Bug fixes
- dd supports more robust SIGINFO/SIGUSR1 handling for outputting statistics.
- Previously those signals may have inadvertently terminated the process.
- df --local no longer hangs with inaccessible remote mounts.
- [bug introduced in coreutils-8.21]
- du now silently ignores all directory cycles due to bind mounts.
- Previously it would issue a warning and exit with a failure status.
- [bug introduced in coreutils-8.1 and partially fixed in coreutils-8.23]
- chroot again calls chroot(DIR) and chdir("/"), even if DIR is "/".
- This handles separate bind mounted "/" trees, and environments
- depending on the implicit chdir("/").
- [bugs introduced in coreutils-8.23]
- cp no longer issues an incorrect warning about directory hardlinks when a
- source directory is specified multiple times. Now, consistent with other
- file types, a warning is issued for source directories with duplicate names,
- or with -H the directory is copied again using the symlink name.
- factor avoids writing partial lines, thus supporting parallel operation.
- [the bug dates back to the initial implementation]
- head, od, split, tac, tail, and wc no longer mishandle input from files in
- /proc and /sys file systems that report somewhat-incorrect file sizes.
- mkdir --parents -Z now correctly sets the context for the last component,
- even if the parent directory exists and has a different default context.
- [bug introduced with the -Z restorecon functionality in coreutils-8.22]
- numfmt no longer outputs incorrect overflowed values seen with certain
- large numbers, or with numbers with increased precision.
- [bug introduced when numfmt was added in coreutils-8.21]
- numfmt now handles leading zeros correctly, not counting them when
- settings processing limits, and making them optional with floating point.
- [bug introduced when numfmt was added in coreutils-8.21]
- paste no longer truncates output for large input files. This would happen
- for example with files larger than 4GiB on 32 bit systems with a '\n'
- character at the 4GiB position.
- [the bug dates back to the initial implementation]
- rm indicates the correct number of arguments in its confirmation prompt,
- on all platforms. [bug introduced in coreutils-8.22]
- shuf -i with a single redundant operand, would crash instead of issuing
- a diagnostic. [bug introduced in coreutils-8.22]
- tail releases inotify resources when unused. Previously it could exhaust
- resources with many files, or with -F if files were replaced many times.
- [bug introduced in coreutils-7.5]
- tail -f again follows changes to a file after it's renamed.
- [bug introduced in coreutils-7.5]
- tail --follow no longer misses changes to files if those files were
- replaced before inotify watches were created.
- [bug introduced in coreutils-7.5]
- tail --follow consistently outputs all data for a truncated file.
- [bug introduced in the beginning]
- tail --follow=name correctly outputs headers for multiple files
- when those files are being created or renamed.
- [bug introduced in coreutils-7.5]
- ** New features
- chroot accepts the new --skip-chdir option to not change the working directory
- to "/" after changing into the chroot(2) jail, thus retaining the current wor-
- king directory. The new option is only permitted if the new root directory is
- the old "/", and therefore is useful with the --group and --userspec options.
- dd accepts a new status=progress level to print data transfer statistics
- on stderr approximately every second.
- numfmt can now process multiple fields with field range specifications similar
- to cut, and supports setting the output precision with the --format option.
- split accepts a new --separator option to select a record separator character
- other than the default newline character.
- stty allows setting the "extproc" option where supported, which is
- a useful setting with high latency links.
- sync no longer ignores arguments, and syncs each specified file, or with the
- --file-system option, the file systems associated with each specified file.
- tee accepts a new --output-error option to control operation with pipes
- and output errors in general.
- ** Changes in behavior
- df no longer suppresses separate exports of the same remote device, as
- these are generally explicitly mounted. The --total option does still
- suppress duplicate remote file systems.
- [suppression was introduced in coreutils-8.21]
- mv no longer supports moving a file to a hardlink, instead issuing an error.
- The implementation was susceptible to races in the presence of multiple mv
- instances, which could result in both hardlinks being deleted. Also on case
- insensitive file systems like HFS, mv would just remove a hardlinked 'file'
- if called like `mv file File`. The feature was added in coreutils-5.0.1.
- numfmt --from-unit and --to-unit options now interpret suffixes as SI units,
- and IEC (power of 2) units are now specified by appending 'i'.
- tee will exit early if there are no more writable outputs.
- tee does not treat the file operand '-' as meaning standard output any longer,
- for better conformance to POSIX. This feature was added in coreutils-5.3.0.
- timeout --foreground no longer sends SIGCONT to the monitored process,
- which was seen to cause intermittent issues with GDB for example.
- ** Improvements
- cp,install,mv will convert smaller runs of NULs in the input to holes,
- and cp --sparse=always avoids speculative preallocation on XFS for example.
- cp will read sparse files more efficiently when the destination is a
- non regular file. For example when copying a disk image to a device node.
- mv will try a reflink before falling back to a standard copy, which is
- more efficient when moving files across BTRFS subvolume boundaries.
- stat and tail now know about IBRIX. stat -f --format=%T now reports the file
- system type, and tail -f uses polling for files on IBRIX file systems.
- wc -l processes short lines much more efficiently.
- References from --help and the man pages of utilities have been corrected
- in various cases, and more direct links to the corresponding online
- documentation are provided.
- * Noteworthy changes in release 8.23 (2014-07-18) [stable]
- ** Bug fixes
- chmod -Rc no longer issues erroneous warnings for files with special bits set.
- [bug introduced in coreutils-6.0]
- cp -a, mv, and install --preserve-context, once again set the correct SELinux
- context for existing directories in the destination. Previously they set
- the context of an existing directory to that of its last copied descendant.
- [bug introduced in coreutils-8.22]
- cp -a, mv, and install --preserve-context, no longer seg fault when running
- with SELinux enabled, when copying from file systems that return an error
- when reading the SELinux context for a file.
- [bug introduced in coreutils-8.22]
- cp -a and mv now preserve xattrs of symlinks copied across file systems.
- [bug introduced with extended attribute preservation feature in coreutils-7.1]
- date could crash or go into an infinite loop when parsing a malformed TZ="".
- [bug introduced with the --date='TZ="" ..' parsing feature in coreutils-5.3.0]
- dd's ASCII and EBCDIC conversions were incompatible with common practice and
- with POSIX, and have been corrected as follows. First, conv=ascii now
- implies conv=unblock, and conv=ebcdic and conv=ibm now imply conv=block.
- Second, the translation tables for dd conv=ascii and conv=ebcdic have been
- corrected as shown in the following table, where A is the ASCII value, W is
- the old, wrong EBCDIC value, and E is the new, corrected EBCDIC value; all
- values are in octal.
- A W E
- 041 117 132
- 133 112 255
- 135 132 275
- 136 137 232
- 174 152 117
- 176 241 137
- 313 232 152
- 325 255 112
- 345 275 241
- [These dd bugs were present in "the beginning".]
- df has more fixes related to the newer dynamic representation of file systems:
- Duplicates are elided for virtual file systems like tmpfs.
- Details for the correct device are output for points mounted multiple times.
- Placeholder values are output for inaccessible file systems, rather than
- than error messages or values for the wrong file system.
- [These bugs were present in "the beginning".]
- df now outputs all appropriate entries in the presence of bind mounts.
- On some systems, entries would have been incorrectly elided due to
- them being considered "dummy" mounts.
- [bug introduced in coreutils-8.22]
- du now silently ignores directory cycles introduced with bind mounts.
- Previously it would issue a warning and exit with a failure status.
- [bug introduced in coreutils-8.1]
- head --bytes=-N and --lines=-N now handles devices more
- consistently, not ignoring data from virtual devices like /dev/zero,
- or on BSD systems data from tty devices.
- [bug introduced in coreutils-5.0.1]
- head --bytes=-N - no longer fails with a bogus diagnostic when stdin's
- seek pointer is not at the beginning.
- [bug introduced with the --bytes=-N feature in coreutils-5.0.1]
- head --lines=-0, when the input does not contain a trailing '\n',
- now copies all input to stdout. Previously nothing was output in this case.
- [bug introduced with the --lines=-N feature in coreutils-5.0.1]
- id, when invoked with no user name argument, now prints the correct group ID.
- Previously, in the default output format, it would print the default group ID
- in the password database, which may be neither real nor effective. For e.g.,
- when run set-GID, or when the database changes outside the current session.
- [bug introduced in coreutils-8.1]
- ln -sf now replaces symbolic links whose targets can't exist. Previously
- it would display an error, requiring --no-dereference to avoid the issue.
- [bug introduced in coreutils-5.3.0]
- ln -sr '' F no longer segfaults. Now works as expected.
- [bug introduced with the --relative feature in coreutils-8.16]
- numfmt now handles blanks correctly in all unibyte locales. Previously
- in locales where character 0xA0 is a blank, numfmt would mishandle it.
- [bug introduced when numfmt was added in coreutils-8.21]
- ptx --format long option parsing no longer falls through into the --help case.
- [bug introduced in TEXTUTILS-1_22i]
- ptx now consistently trims whitespace when processing multiple files.
- [This bug was present in "the beginning".]
- seq again generates correct output with start or end values = -0.
- [bug introduced in coreutils-8.20.]
- shuf --repeat no longer dumps core if the input is empty.
- [bug introduced with the --repeat feature in coreutils-8.22]
- sort when using multiple threads now avoids undefined behavior with mutex
- destruction, which could cause deadlocks on some implementations.
- [bug introduced in coreutils-8.6]
- tail -f now uses polling mode for VXFS to cater for its clustered mode.
- [bug introduced with inotify support added in coreutils-7.5]
- ** New features
- od accepts a new option: --endian=TYPE to handle inputs with different byte
- orders, or to provide consistent output on systems with disparate endianness.
- configure accepts the new option --enable-single-binary to build all the
- selected programs in a single binary called "coreutils". The selected
- programs can still be called directly using symlinks to "coreutils" or
- shebangs with the option --coreutils-prog= passed to this program. The
- install behavior is determined by the option --enable-single-binary=symlinks
- or --enable-single-binary=shebangs (the default). With the symlinks option,
- you can't make a second symlink to any program because that will change the
- name of the called program, which is used by coreutils to determine the
- desired program. The shebangs option doesn't suffer from this problem, but
- the /proc/$pid/cmdline file might not be updated on all the platforms. The
- functionality of each program is not affected but this single binary will
- depend on all the required dynamic libraries even to run simple programs.
- If you desire to build some tools outside the single binary file, you can
- pass the option --enable-single-binary-exceptions=PROG_LIST with the comma
- separated list of programs you want to build separately. This flag
- considerably reduces the overall size of the installed binaries which makes
- it suitable for embedded system.
- ** Changes in behavior
- chroot with an argument of "/" no longer implicitly changes the current
- directory to "/", allowing changing only user credentials for a command.
- chroot --userspec will now unset supplemental groups associated with root,
- and instead use the supplemental groups of the specified user.
- cut -d$'\n' again outputs lines identified in the --fields list, having
- not done so in v8.21 and v8.22. Note using this non portable functionality
- will result in the delayed output of lines.
- ls with none of LS_COLORS or COLORTERM environment variables set,
- will now honor an empty or unknown TERM environment variable,
- and not output colors even with --colors=always.
- ** Improvements
- chroot has better --userspec and --group look-ups, with numeric IDs never
- causing name look-up errors. Also look-ups are first done outside the chroot,
- in case the look-up within the chroot fails due to library conflicts etc.
- install now allows the combination of the -D and -t options.
- numfmt supports zero padding of numbers using the standard printf
- syntax of a leading zero, for example --format="%010f".
- Also throughput was improved by up to 800% by avoiding redundant processing.
- shred now supports multiple passes on GNU/Linux tape devices by rewinding
- the tape before each pass, avoids redundant writes to empty files,
- uses direct I/O for all passes where possible, and attempts to clear
- inode storage used for small files on some file systems.
- split avoids unnecessary input buffering, immediately writing input to output
- which is significant with --filter or when writing to fifos or stdout etc.
- stat and tail work better with HFS+, HFSX, LogFS and ConfigFS. stat -f
- --format=%T now reports the file system type, and tail -f now uses inotify,
- rather than the default of issuing a warning and reverting to polling.
- * Noteworthy changes in release 8.22 (2013-12-13) [stable]
- ** Bug fixes
- df now processes the mount list correctly in the presence of unstatable
- mount points. Previously it may have failed to output some mount points.
- [bug introduced in coreutils-8.21]
- df now processes symbolic links and relative paths to special files containing
- a mounted file system correctly. Previously df displayed the statistics about
- the file system the file is stored on rather than the one inside.
- [This bug was present in "the beginning".]
- df now processes disk device nodes correctly in the presence of bind mounts.
- Now df shows the base mounted file system rather than the last one mounted.
- [This bug was present in "the beginning".]
- install now removes the target file if the strip program failed for any
- reason. Before, that file was left behind, sometimes even with wrong
- permissions.
- [This bug was present in "the beginning".]
- ln --relative now updates existing symlinks correctly. Previously it based
- the relative link on the dereferenced path of an existing link.
- [This bug was introduced when --relative was added in coreutils-8.16.]
- ls --recursive will no longer exit with "serious" exit code (2), if there
- is an error reading a directory not specified on the command line.
- [Bug introduced in coreutils-5.3.0]
- mkdir, mkfifo, and mknod now work better when creating a file in a directory
- with a default ACL whose umask disagrees with the process's umask, on a
- system such as GNU/Linux where directory ACL umasks override process umasks.
- [bug introduced in coreutils-6.0]
- mv will now replace empty directories in the destination with directories
- from the source, when copying across file systems.
- [This bug was present in "the beginning".]
- od -wN with N larger than 64K on a system with 32-bit size_t would
- print approximately 2*N bytes of extraneous padding.
- [Bug introduced in coreutils-7.0]
- rm -I now prompts for confirmation before removing a write protected file.
- [Bug introduced in coreutils-6.8]
- shred once again uses direct I/O on systems requiring aligned buffers.
- Also direct I/O failures for odd sized writes at end of file are now handled.
- [The "last write" bug was introduced in coreutils-5.3.0 but masked
- by the alignment bug introduced in coreutils-6.0]
- tail --retry -f now waits for the files specified to appear. Before, tail
- would immediately exit when such a file is initially inaccessible.
- [This bug was introduced when inotify support was added in coreutils-7.5]
- tail -F has improved handling of symlinks. Previously tail didn't respond
- to the symlink target (re)appearing after being (re)created.
- [This bug was introduced when inotify support was added in coreutils-7.5]
- ** New features
- cp, install, mkdir, mknod, mkfifo and mv now support "restorecon"
- functionality through the -Z option, to set the SELinux context
- appropriate for the new item location in the file system.
- csplit accepts a new option: --suppressed-matched, to elide the lines
- used to identify the split points.
- df --output now accepts a 'file' field, to propagate a specified
- command line argument through to the output.
- du accepts a new option: --inodes to show the number of inodes instead
- of the blocks used.
- id accepts a new option: --zero (-z) to delimit the output entries by
- a NUL instead of a white space character.
- id and ls with -Z report the SMACK security context where available.
- mkdir, mkfifo and mknod with --context set the SMACK context where available.
- id can now lookup by user ID, in addition to the existing name lookup.
- join accepts a new option: --zero-terminated (-z). As with the sort,uniq
- option of the same name, this makes join consume and produce NUL-terminated
- lines rather than newline-terminated lines.
- uniq accepts a new option: --group to print all items, while separating
- unique groups with empty lines.
- shred accepts new parameters to the --remove option to give greater
- control over that operation, which can greatly reduce sync overhead.
- shuf accepts a new option: --repeat (-r), which can repeat items in
- the output.
- ** Changes in behavior
- cp --link now dereferences a symbolic link as source before creating the
- hard link in the destination unless the -P,--no-deref option is specified.
- Previously, it would create a hard link of the symbolic link, even when
- the dereferencing options -L or -H were specified.
- cp, install, mkdir, mknod and mkfifo no longer accept an argument to the
- short -Z option. The --context equivalent still takes an optional argument.
- dd status=none now suppresses all non fatal diagnostic messages,
- not just the transfer counts.
- df no longer accepts the long-obsolescent --megabytes option.
- stdbuf now requires at least one buffering mode option to be specified,
- as per the documented interface.
- ** Improvements
- base64 encoding throughput for bulk data is increased by about 60%.
- md5sum can use libcrypto hash routines where allowed to potentially
- get better performance through using more system specific logic.
- sha1sum for example has improved throughput by 40% on an i3-2310M.
- This also affects sha1sum, sha224sum, sha256sum, sha384sum and sha512sum.
- stat and tail work better with EFIVARFS, EXOFS, F2FS, HOSTFS, SMACKFS, SNFS
- and UBIFS. stat -f --format=%T now reports the file system type, and tail -f
- now uses inotify for files on all those except SNFS, rather than the default
- (for unknown file system types) of issuing a warning and reverting to polling.
- shuf outputs subsets of large inputs much more efficiently.
- Reservoir sampling is used to limit memory usage based on the number of
- outputs, rather than the number of inputs.
- shred increases the default write block size from 12KiB to 64KiB
- to align with other utilities and reduce the system call overhead.
- split --line-bytes=SIZE, now only allocates memory as needed rather
- than allocating SIZE bytes at program start.
- stty now supports configuring "stick" (mark/space) parity where available.
- ** Build-related
- factor now builds on aarch64 based systems [bug introduced in coreutils-8.20]
- * Noteworthy changes in release 8.21 (2013-02-14) [stable]
- ** New programs
- numfmt: reformat numbers
- ** New features
- df now accepts the --output[=FIELD_LIST] option to define the list of columns
- to include in the output, or all available columns if the FIELD_LIST is
- omitted. Note this enables df to output both block and inode fields together.
- du now accepts the --threshold=SIZE option to restrict the output to entries
- with such a minimum SIZE (or a maximum SIZE if it is negative).
- du recognizes -t SIZE as equivalent, for compatibility with FreeBSD.
- timeout now accepts the --preserve-status option to always propagate the exit
- status, useful for commands that can run for an indeterminate amount of time.
- ** Bug fixes
- cp --no-preserve=mode now no longer exits non-zero.
- [bug introduced in coreutils-8.20]
- cut with a range like "N-" no longer allocates N/8 bytes. That buffer
- would never be used, and allocation failure could cause cut to fail.
- [bug introduced in coreutils-8.10]
- cut no longer accepts the invalid range 0-, which made it print empty lines.
- Instead, cut now fails and emits an appropriate diagnostic.
- [This bug was present in "the beginning".]
- cut now handles overlapping to-EOL ranges properly. Before, it would
- interpret "-b2-,3-" like "-b3-". Now it's treated like "-b2-".
- [This bug was present in "the beginning".]
- cut no longer prints extraneous delimiters when a to-EOL range subsumes
- another range. Before, "echo 123|cut --output-delim=: -b2-,3" would print
- "2:3". Now it prints "23". [bug introduced in 5.3.0]
- cut -f no longer inspects input line N+1 before fully outputting line N,
- which avoids delayed output for intermittent input.
- [bug introduced in TEXTUTILS-1_8b]
- factor no longer loops infinitely on 32 bit powerpc or sparc systems.
- [bug introduced in coreutils-8.20]
- install -m M SOURCE DEST no longer has a race condition where DEST's
- permissions are temporarily derived from SOURCE instead of from M.
- pr -n no longer crashes when passed values >= 32. Also, line numbers are
- consistently padded with spaces, rather than with zeros for certain widths.
- [bug introduced in TEXTUTILS-1_22i]
- seq -w ensures that for numbers input in scientific notation,
- the output numbers are properly aligned and of the correct width.
- [This bug was present in "the beginning".]
- seq -w ensures correct alignment when the step value includes a precision
- while the start value does not, and the number sequence narrows.
- [This bug was present in "the beginning".]
- seq -s no longer prints an erroneous newline after the first number, and
- outputs a newline after the last number rather than a trailing separator.
- Also seq no longer ignores a specified step value when the end value is 1.
- [bugs introduced in coreutils-8.20]
- timeout now ensures that blocking of ALRM signals is not inherited from
- its parent, which would cause timeouts to be ignored.
- [the bug dates back to the initial implementation]
- ** Changes in behavior
- df --total now prints '-' into the target column (mount point) of the
- summary line, accommodating the --output option where the target field
- can be in any column. If there is no source column, then df prints
- 'total' in the target column.
- df now properly outputs file system information with bind mounts present on
- the system by skipping duplicate entries (identified by the device number).
- Consequently, df also elides the early-boot pseudo file system type "rootfs".
- cut -d$'\n' no longer outputs lines identified in the --fields list,
- to align with other implementations and to avoid delayed output of lines.
- nl no longer supports the --page-increment option, which has been
- deprecated since coreutils-7.5. Use --line-increment instead.
- ** Improvements
- readlink now supports multiple arguments, and a complementary
- -z, --zero option to delimit output items with the NUL character.
- stat and tail now know about CEPH. stat -f --format=%T now reports the file
- system type, and tail -f uses polling for files on CEPH file systems.
- stty now supports configuring DTR/DSR hardware flow control where available.
- ** Build-related
- Perl is now more of a prerequisite. It has long been required in order
- to run (not skip) a significant percentage of the tests. Now, it is
- also required in order to generate proper man pages, via help2man. The
- generated man/*.1 man pages are no longer distributed. Building without
- perl, you would create stub man pages. Thus, while perl is not an
- official prerequisite (build and "make check" will still succeed), any
- resulting man pages would be inferior. In addition, this fixes a bug
- in distributed (not from clone) Makefile.in that could cause parallel
- build failure when building from modified sources, as is common practice
- for a patched distribution package.
- factor now builds on x86_64 with x32 ABI, 32 bit MIPS, and all HPPA systems,
- by avoiding incompatible asm. [bug introduced in coreutils-8.20]
- A root-only test predicate would always fail. Its job was to determine
- whether our dummy user, $NON_ROOT_USERNAME, was able to run binaries from
- the build directory. As a result, all dependent tests were always skipped.
- Now, those tests may be run once again. [bug introduced in coreutils-8.20]
- * Noteworthy changes in release 8.20 (2012-10-23) [stable]
- ** New features
- dd now accepts 'status=none' to suppress all informational output.
- md5sum now accepts the --tag option to print BSD-style output with GNU
- file name escaping. This also affects sha1sum, sha224sum, sha256sum,
- sha384sum and sha512sum.
- ** Bug fixes
- cp could read from freed memory and could even make corrupt copies.
- This could happen with a very fragmented and sparse input file,
- on GNU/Linux file systems supporting fiemap extent scanning.
- This bug also affects mv when it resorts to copying, and install.
- [bug introduced in coreutils-8.11]
- cp --no-preserve=mode now no longer preserves the original file's
- permissions but correctly sets mode specified by 0666 & ~umask
- du no longer emits a "disk-corrupted"-style diagnostic when it detects
- a directory cycle that is due to a bind-mounted directory. Instead,
- it detects this precise type of cycle, diagnoses it as such and
- eventually exits nonzero.
- factor (when using gmp) would mistakenly declare some composite numbers
- to be prime, e.g., 465658903, 2242724851, 6635692801 and many more.
- The fix makes factor somewhat slower (~25%) for ranges of consecutive
- numbers, and up to 8 times slower for some worst-case individual numbers.
- [bug introduced in coreutils-7.0, with GNU MP support]
- ls now correctly colors dangling symlinks when listing their containing
- directories, with orphaned symlink coloring disabled in LS_COLORS.
- [bug introduced in coreutils-8.14]
- rm -i -d now prompts the user then removes an empty directory, rather
- than ignoring the -d option and failing with an 'Is a directory' error.
- [bug introduced in coreutils-8.19, with the addition of --dir (-d)]
- rm -r S/ (where S is a symlink-to-directory) no longer gives the invalid
- "Too many levels of symbolic links" diagnostic.
- [bug introduced in coreutils-8.6]
- seq now handles arbitrarily long non-negative whole numbers when the
- increment is 1 and when no format-changing option is specified.
- Before, this would infloop:
- b=100000000000000000000; seq $b $b
- [the bug dates back to the initial implementation]
- ** Changes in behavior
- nproc now diagnoses with an error, non option command line parameters.
- ** Improvements
- factor's core has been rewritten for speed and increased range.
- It can now factor numbers up to 2^128, even without GMP support.
- Its speed is from a few times better (for small numbers) to over
- 10,000 times better (just below 2^64). The new code also runs a
- deterministic primality test for each prime factor, not just a
- probabilistic test.
- seq is now up to 70 times faster than it was in coreutils-8.19 and prior,
- but only with non-negative whole numbers, an increment of 1, and no
- format-changing options.
- stat and tail know about ZFS, VZFS and VMHGFS. stat -f --format=%T now
- reports the file system type, and tail -f now uses inotify for files on
- ZFS and VZFS file systems, rather than the default (for unknown file
- system types) of issuing a warning and reverting to polling. tail -f
- still uses polling for files on VMHGFS file systems.
- ** Build-related
- root-only tests now check for permissions of our dummy user,
- $NON_ROOT_USERNAME, before trying to run binaries from the build directory.
- Before, we would get hard-to-diagnose reports of failing root-only tests.
- Now, those tests are skipped with a useful diagnostic when the root tests
- are run without following the instructions in README.
- We now build most directories using non-recursive make rules. I.e.,
- rather than running make in man/, lib/, src/, tests/, instead, the top
- level Makefile.am includes a $dir/local.mk that describes how to build
- the targets in the corresponding directory. Two directories remain
- unconverted: po/, gnulib-tests/. One nice side-effect is that the more
- accurate dependencies have eliminated a nagging occasional failure that
- was seen when running parallel "make syntax-check".
- * Noteworthy changes in release 8.19 (2012-08-20) [stable]
- ** Bug fixes
- df now fails when the list of mounted file systems (/etc/mtab) cannot
- be read, yet the file system type information is needed to process
- certain options like -a, -l, -t and -x.
- [This bug was present in "the beginning".]
- sort -u could fail to output one or more result lines.
- For example, this command would fail to print "1":
- (yes 7 | head -11; echo 1) | sort --p=1 -S32b -u
- [bug introduced in coreutils-8.6]
- sort -u could read freed memory.
- For example, this evokes a read from freed memory:
- perl -le 'print "a\n"."0"x900'|valgrind sort --p=1 -S32b -u>/dev/null
- [bug introduced in coreutils-8.6]
- ** New features
- rm now accepts the --dir (-d) option which makes it remove empty directories.
- Since removing empty directories is relatively safe, this option can be
- used as a part of the alias rm='rm --dir'. This improves compatibility
- with Mac OS X and BSD systems which also honor the -d option.
- * Noteworthy changes in release 8.18 (2012-08-12) [stable]
- ** Bug fixes
- cksum now prints checksums atomically so that concurrent
- processes will not intersperse their output.
- [the bug dates back to the initial implementation]
- date -d "$(printf '\xb0')" would print 00:00:00 with today's date
- rather than diagnosing the invalid input. Now it reports this:
- date: invalid date '\260'
- [This bug was present in "the beginning".]
- df no longer outputs control characters present in the mount point name.
- Such characters are replaced with '?', so for example, scripts consuming
- lines output by df, can work reliably.
- [This bug was present in "the beginning".]
- df --total now exits with an appropriate diagnostic and error code, when
- file system --type options do not lead to a processed file system.
- [This bug dates back to when --total was added in coreutils-7.0]
- head --lines=-N (-n-N) now resets the read pointer of a seekable input file.
- This means that "head -n-3" no longer consumes all of its input, and lines
- not output by head may be processed by other programs. For example, this
- command now prints the final line, 2, while before it would print nothing:
- seq 2 > k; (head -n-1 > /dev/null; cat) < k
- [This bug was present in "the beginning".]
- ls --color would mis-color relative-named symlinks in /
- [bug introduced in coreutils-8.17]
- split now ensures it doesn't overwrite the input file with generated output.
- [the bug dates back to the initial implementation]
- stat and df now report the correct file system usage,
- in all situations on GNU/Linux, by correctly determining the block size.
- [df bug since coreutils-5.0.91, stat bug since the initial implementation]
- tail -f no longer tries to use inotify on AUFS or PanFS file systems
- [you might say this was introduced in coreutils-7.5, along with inotify
- support, but even now, its magic number isn't in the usual place.]
- ** New features
- stat -f recognizes the new remote file system types: aufs, panfs.
- ** Changes in behavior
- su: this program has been removed. We stopped installing "su" by
- default with the release of coreutils-6.9.90 on 2007-12-01. Now,
- that the util-linux package has the union of the Suse and Fedora
- patches as well as enough support to build on the Hurd, we no longer
- have any reason to include it here.
- ** Improvements
- sort avoids redundant processing in the presence of inaccessible inputs,
- or unwritable output. Sort now diagnoses certain errors at start-up,
- rather than after potentially expensive processing.
- sort now allocates no more than 75% of physical memory by default,
- to better share system resources, and thus operate more efficiently.
- [The default max memory usage changed from 50% to 100% in coreutils-8.16]
- * Noteworthy changes in release 8.17 (2012-05-10) [stable]
- ** Bug fixes
- id and groups, when invoked with no user name argument, would print
- the default group ID listed in the password database, and sometimes
- that ID would be neither real nor effective. For example, when run
- set-GID, or in a session for which the default group has just been
- changed, the new group ID would be listed, even though it is not
- yet effective. [bug introduced in coreutils-8.1]
- cp S D is no longer subject to a race: if an existing D were removed
- between the initial stat and subsequent open-without-O_CREATE, cp would
- fail with a confusing diagnostic saying that the destination, D, was not
- found. Now, in this unusual case, it retries the open (but with O_CREATE),
- and hence usually succeeds. With NFS attribute caching, the condition
- was particularly easy to trigger, since there, the removal of D could
- precede the initial stat. [This bug was present in "the beginning".]
- split --number=C /dev/null no longer appears to infloop on GNU/Hurd
- [bug introduced in coreutils-8.8]
- stat no longer reports a negative file size as a huge positive number.
- [bug present since 'stat' was introduced in fileutils-4.1.9]
- ** New features
- split and truncate now allow any seekable files in situations where
- the file size is needed, instead of insisting on regular files.
- fmt now accepts the --goal=WIDTH (-g) option.
- stat -f recognizes new file system types: bdevfs, inodefs, qnx6
- ** Changes in behavior
- cp,mv,install,cat,split: now read and write a minimum of 64KiB at a time.
- This was previously 32KiB and increasing to 64KiB was seen to increase
- throughput by about 10% when reading cached files on 64 bit GNU/Linux.
- cp --attributes-only no longer truncates any existing destination file,
- allowing for more general copying of attributes from one file to another.
- * Noteworthy changes in release 8.16 (2012-03-26) [stable]
- ** New features
- As a GNU extension, 'chmod', 'mkdir', and 'install' now accept operators
- '-', '+', '=' followed by octal modes; for example, 'chmod +40 FOO' enables
- and 'chmod -40 FOO' disables FOO's group-read permissions. Operator
- numeric modes can be combined with symbolic modes by separating them with
- commas; for example, =0,u+r clears all permissions except for enabling
- user-read permissions. Unlike ordinary numeric modes, operator numeric
- modes do not preserve directory setuid and setgid bits; for example,
- 'chmod =0 FOO' clears all of FOO's permissions, including setuid and setgid.
- Also, ordinary numeric modes with five or more digits no longer preserve
- setuid and setgid bits, so that 'chmod 00755 FOO' now clears FOO's setuid
- and setgid bits. This allows scripts to be portable to other systems which
- lack the GNU extension mentioned previously, and where ordinary numeric
- modes do not preserve directory setuid and setgid bits.
- dd now accepts the count_bytes, skip_bytes iflags and the seek_bytes
- oflag, to more easily allow processing portions of a file.
- dd now accepts the conv=sparse flag to attempt to create sparse
- output, by seeking rather than writing to the output file.
- ln now accepts the --relative option, to generate a relative
- symbolic link to a target, irrespective of how the target is specified.
- split now accepts an optional "from" argument to --numeric-suffixes,
- which changes the start number from the default of 0.
- split now accepts the --additional-suffix option, to append an
- additional static suffix to output file names.
- basename now supports the -a and -s options, which allow processing
- of more than one argument at a time. Also the complementary
- -z option was added to delimit output items with the NUL character.
- dirname now supports more than one argument. Also the complementary
- -z option was added to delimit output items with the NUL character.
- ** Bug fixes
- du --one-file-system (-x) would ignore any non-directory specified on
- the command line. For example, "touch f; du -x f" would print nothing.
- [bug introduced in coreutils-8.15]
- mv now lets you move a symlink onto a same-inode destination file that
- has two or more hard links. Before, it would reject that, saying that
- they are the same, implicitly warning you that the move would result in
- data loss. In this unusual case, when not moving the symlink onto its
- referent, there is no risk of data loss, since the symlink will
- typically still point to one of the hard links.
- "mv A B" could succeed, yet A would remain. This would happen only when
- both A and B were hard links to the same symlink, and with a kernel for
- which rename("A","B") does nothing and returns 0 (POSIX mandates this
- surprising rename no-op behavior). Now, mv handles this case by skipping
- the usually-useless rename and simply unlinking A.
- realpath no longer mishandles a root directory. This was most
- noticeable on platforms where // is a different directory than /,
- but could also be observed with --relative-base=/ or
- --relative-to=/. [bug since the beginning, in 8.15]
- ** Improvements
- ls can be much more efficient, especially with large directories on file
- systems for which getfilecon-, ACL-check- and XATTR-check-induced syscalls
- fail with ENOTSUP or similar.
- 'realpath --relative-base=dir' in isolation now implies '--relative-to=dir'
- instead of causing a usage failure.
- split now supports an unlimited number of split files as default behavior.
- * Noteworthy changes in release 8.15 (2012-01-06) [stable]
- ** New programs
- realpath: print resolved file names.
- ** Bug fixes
- du -x no longer counts root directories of other file systems.
- [bug introduced in coreutils-5.1.0]
- ls --color many-entry-directory was uninterruptible for too long
- [bug introduced in coreutils-5.2.1]
- ls's -k option no longer affects how ls -l outputs file sizes.
- It now affects only the per-directory block counts written by -l,
- and the sizes written by -s. This is for compatibility with BSD
- and with POSIX 2008. Because -k is no longer equivalent to
- --block-size=1KiB, a new long option --kibibyte stands for -k.
- [bug introduced in coreutils-4.5.4]
- ls -l would leak a little memory (security context string) for each
- nonempty directory listed on the command line, when using SELinux.
- [bug probably introduced in coreutils-6.10 with SELinux support]
- rm -rf DIR would fail with "Device or resource busy" on Cygwin with NWFS
- and NcFsd file systems. This did not affect Unix/Linux-based kernels.
- [bug introduced in coreutils-8.0, when rm began using fts]
- split -n 1/2 FILE no longer fails when operating on a growing file, or
- (on some systems) when operating on a non-regular file like /dev/zero.
- It would report "/dev/zero: No such file or directory" even though
- the file obviously exists. Same for -n l/2.
- [bug introduced in coreutils-8.8, with the addition of the -n option]
- stat -f now recognizes the FhGFS and PipeFS file system types.
- tac no longer fails to handle two or more non-seekable inputs
- [bug introduced in coreutils-5.3.0]
- tail -f no longer tries to use inotify on GPFS or FhGFS file systems
- [you might say this was introduced in coreutils-7.5, along with inotify
- support, but the new magic numbers weren't in the usual places then.]
- ** Changes in behavior
- df avoids long UUID-including file system names in the default listing.
- With recent enough kernel/tools, these long names would be used, pushing
- second and subsequent columns far to the right. Now, when a long name
- refers to a symlink, and no file systems are specified, df prints the
- usually-short referent instead.
- tail -f now uses polling (not inotify) when any of its file arguments
- resides on a file system of unknown type. In addition, for each such
- argument, tail -f prints a warning with the FS type magic number and a
- request to report it to the bug-reporting address.
- * Noteworthy changes in release 8.14 (2011-10-12) [stable]
- ** Bug fixes
- ls --dereference no longer outputs erroneous "argetm" strings for
- dangling symlinks when an 'ln=target' entry is in $LS_COLORS.
- [bug introduced in fileutils-4.0]
- ls -lL symlink once again properly prints "+" when the referent has an ACL.
- [bug introduced in coreutils-8.13]
- sort -g no longer infloops for certain inputs containing NaNs
- [bug introduced in coreutils-8.5]
- ** Improvements
- md5sum --check now supports the -r format from the corresponding BSD tool.
- This also affects sha1sum, sha224sum, sha384sum and sha512sum.
- pwd now works also on systems without openat. On such systems, pwd
- would fail when run from a directory whose absolute name contained
- more than PATH_MAX / 3 components. The df, stat and readlink programs
- are also affected due to their use of the canonicalize_* functions.
- ** Changes in behavior
- timeout now only processes the first signal received from the set
- it is handling (SIGTERM, SIGINT, ...). This is to support systems that
- implicitly create threads for some timer functions (like GNU/kFreeBSD).
- ** Build-related
- "make dist" no longer builds .tar.gz files.
- xz is portable enough and in wide-enough use that distributing
- only .tar.xz files is enough.
- * Noteworthy changes in release 8.13 (2011-09-08) [stable]
- ** Bug fixes
- chown and chgrp with the -v --from= options, now output the correct owner.
- I.e., for skipped files, the original ownership is output, not the new one.
- [bug introduced in sh-utils-2.0g]
- cp -r could mistakenly change the permissions of an existing destination
- directory. [bug introduced in coreutils-6.8]
- cp -u -p would fail to preserve one hard link for each up-to-date copy
- of a src-hard-linked name in the destination tree. I.e., if s/a and s/b
- are hard-linked and dst/s/a is up to date, "cp -up s dst" would copy s/b
- to dst/s/b rather than simply linking dst/s/b to dst/s/a.
- [This bug appears to have been present in "the beginning".]
- fts-using tools (rm, du, chmod, chgrp, chown, chcon) no longer use memory
- proportional to the number of entries in each directory they process.
- Before, rm -rf 4-million-entry-directory would consume about 1GiB of memory.
- Now, it uses less than 30MB, no matter how many entries there are.
- [this bug was inherent in the use of fts: thus, for rm the bug was
- introduced in coreutils-8.0. The prior implementation of rm did not use
- as much memory. du, chmod, chgrp and chown started using fts in 6.0.
- chcon was added in coreutils-6.9.91 with fts support. ]
- pr -T no longer ignores a specified LAST_PAGE to stop at.
- [bug introduced in textutils-1.19q]
- printf '%d' '"' no longer accesses out-of-bounds memory in the diagnostic.
- [bug introduced in sh-utils-1.16]
- split --number l/... no longer creates extraneous files in certain cases.
- [bug introduced in coreutils-8.8]
- timeout now sends signals to commands that create their own process group.
- timeout is no longer confused when starting off with a child process.
- [bugs introduced in coreutils-7.0]
- unexpand -a now aligns correctly when there are spaces spanning a tabstop,
- followed by a tab. In that case a space was dropped, causing misalignment.
- We also now ensure that a space never precedes a tab.
- [bug introduced in coreutils-5.3.0]
- ** Changes in behavior
- chmod, chown and chgrp now output the original attributes in messages,
- when -v or -c specified.
- cp -au (where --preserve=links is implicit) may now replace newer
- files in the destination, to mirror hard links from the source.
- ** New features
- date now accepts ISO 8601 date-time strings with "T" as the
- separator. It has long parsed dates like "2004-02-29 16:21:42"
- with a space between the date and time strings. Now it also parses
- "2004-02-29T16:21:42" and fractional-second and time-zone-annotated
- variants like "2004-02-29T16:21:42.333-07:00"
- md5sum accepts the new --strict option. With --check, it makes the
- tool exit non-zero for any invalid input line, rather than just warning.
- This also affects sha1sum, sha224sum, sha384sum and sha512sum.
- split accepts a new --filter=CMD option. With it, split filters output
- through CMD. CMD may use the $FILE environment variable, which is set to
- the nominal output file name for each invocation of CMD. For example, to
- split a file into 3 approximately equal parts, which are then compressed:
- split -n3 --filter='xz > $FILE.xz' big
- Note the use of single quotes, not double quotes.
- That creates files named xaa.xz, xab.xz and xac.xz.
- timeout accepts a new --foreground option, to support commands not started
- directly from a shell prompt, where the command is interactive or needs to
- receive signals initiated from the terminal.
- ** Improvements
- cp -p now copies trivial NSFv4 ACLs on Solaris 10. Before, it would
- mistakenly apply a non-trivial ACL to the destination file.
- cp and ls now support HP-UX 11.11's ACLs, thanks to improved support
- in gnulib.
- df now supports disk partitions larger than 4 TiB on MacOS X 10.5
- or newer and on AIX 5.2 or newer.
- join --check-order now prints "join: FILE:LINE_NUMBER: bad_line" for an
- unsorted input, rather than e.g., "join: file 1 is not in sorted order".
- shuf outputs small subsets of large permutations much more efficiently.
- For example 'shuf -i1-$((2**32-1)) -n2' no longer exhausts memory.
- stat -f now recognizes the GPFS, MQUEUE and PSTOREFS file system types.
- timeout now supports sub-second timeouts.
- ** Build-related
- Changes inherited from gnulib address a build failure on HP-UX 11.11
- when using /opt/ansic/bin/cc.
- Numerous portability and build improvements inherited via gnulib.
- * Noteworthy changes in release 8.12 (2011-04-26) [stable]
- ** Bug fixes
- tail's --follow=name option no longer implies --retry on systems
- with inotify support. [bug introduced in coreutils-7.5]
- ** Changes in behavior
- cp's extent-based (FIEMAP) copying code is more reliable in the face
- of varying and undocumented file system semantics:
- - it no longer treats unwritten extents specially
- - a FIEMAP-based extent copy always uses the FIEMAP_FLAG_SYNC flag.
- Before, it would incur the performance penalty of that sync only
- for 2.6.38 and older kernels. We thought all problems would be
- resolved for 2.6.39.
- - it now attempts a FIEMAP copy only on a file that appears sparse.
- Sparse files are relatively unusual, and the copying code incurs
- the performance penalty of the now-mandatory sync only for them.
- ** Portability
- dd once again compiles on AIX 5.1 and 5.2
- * Noteworthy changes in release 8.11 (2011-04-13) [stable]
- ** Bug fixes
- cp -a --link would not create a hardlink to a symlink, instead
- copying the symlink and then not preserving its timestamp.
- [bug introduced in coreutils-8.0]
- cp now avoids FIEMAP issues with BTRFS before Linux 2.6.38,
- which could result in corrupt copies of sparse files.
- [bug introduced in coreutils-8.10]
- cut could segfault when invoked with a user-specified output
- delimiter and an unbounded range like "-f1234567890-".
- [bug introduced in coreutils-5.3.0]
- du would infloop when given --files0-from=DIR
- [bug introduced in coreutils-7.1]
- sort no longer spawns 7 worker threads to sort 16 lines
- [bug introduced in coreutils-8.6]
- touch built on Solaris 9 would segfault when run on Solaris 10
- [bug introduced in coreutils-8.8]
- wc would dereference a NULL pointer upon an early out-of-memory error
- [bug introduced in coreutils-7.1]
- ** New features
- dd now accepts the 'nocache' flag to the iflag and oflag options,
- which will discard any cache associated with the files, or
- processed portion thereof.
- dd now warns that 'iflag=fullblock' should be used,
- in various cases where partial reads can cause issues.
- ** Changes in behavior
- cp now avoids syncing files when possible, when doing a FIEMAP copy.
- The sync is only needed on Linux kernels before 2.6.39.
- [The sync was introduced in coreutils-8.10]
- cp now copies empty extents efficiently, when doing a FIEMAP copy.
- It no longer reads the zero bytes from the input, and also can efficiently
- create a hole in the output file when --sparse=always is specified.
- df now aligns columns consistently, and no longer wraps entries
- with longer device identifiers, over two lines.
- install now rejects its long-deprecated --preserve_context option.
- Use --preserve-context instead.
- test now accepts "==" as a synonym for "="
- * Noteworthy changes in release 8.10 (2011-02-04) [stable]
- ** Bug fixes
- du would abort with a failed assertion when two conditions are met:
- part of the hierarchy being traversed is moved to a higher level in the
- directory tree, and there is at least one more command line directory
- argument following the one containing the moved sub-tree.
- [bug introduced in coreutils-5.1.0]
- join --header now skips the ordering check for the first line
- even if the other file is empty. [bug introduced in coreutils-8.5]
- join -v2 now ensures the default output format prints the match field
- at the start of the line when it is different to the match field for
- the first file. [bug present in "the beginning".]
- rm -f no longer fails for EINVAL or EILSEQ on file systems that
- reject file names invalid for that file system.
- uniq -f NUM no longer tries to process fields after end of line.
- [bug introduced in coreutils-7.0]
- ** New features
- cp now copies sparse files efficiently on file systems with FIEMAP
- support (ext4, btrfs, xfs, ocfs2). Before, it had to read 2^20 bytes
- when copying a 1MiB sparse file. Now, it copies bytes only for the
- non-sparse sections of a file. Similarly, to induce a hole in the
- output file, it had to detect a long sequence of zero bytes. Now,
- it knows precisely where each hole in an input file is, and can
- reproduce them efficiently in the output file. mv also benefits
- when it resorts to copying, e.g., between file systems.
- join now supports -o 'auto' which will automatically infer the
- output format from the first line in each file, to ensure
- the same number of fields are output for each line.
- ** Changes in behavior
- join no longer reports disorder when one of the files is empty.
- This allows one to use join as a field extractor like:
- join -a1 -o 1.3,1.1 - /dev/null
- * Noteworthy changes in release 8.9 (2011-01-04) [stable]
- ** Bug fixes
- split no longer creates files with a suffix length that
- is dependent on the number of bytes or lines per file.
- [bug introduced in coreutils-8.8]
- * Noteworthy changes in release 8.8 (2010-12-22) [stable]
- ** Bug fixes
- cp -u no longer does unnecessary copying merely because the source
- has finer-grained timestamps than the destination.
- od now prints floating-point numbers without losing information, and
- it no longer omits spaces between floating-point columns in some cases.
- sort -u with at least two threads could attempt to read through a
- corrupted pointer. [bug introduced in coreutils-8.6]
- sort with at least two threads and with blocked output would busy-loop
- (spinlock) all threads, often using 100% of available CPU cycles to
- do no work. I.e., "sort < big-file | less" could waste a lot of power.
- [bug introduced in coreutils-8.6]
- sort with at least two threads no longer segfaults due to use of pointers
- into the stack of an expired thread. [bug introduced in coreutils-8.6]
- sort --compress no longer mishandles subprocesses' exit statuses,
- no longer hangs indefinitely due to a bug in waiting for subprocesses,
- and no longer generates many more than NMERGE subprocesses.
- sort -m -o f f ... f no longer dumps core when file descriptors are limited.
- ** Changes in behavior
- sort will not create more than 8 threads by default due to diminishing
- performance gains. Also the --parallel option is no longer restricted
- to the number of available processors.
- ** New features
- split accepts the --number/-n option to generate a specific number of
- files, as well as the --elide-empty-files/-e and --unbuffered/-u
- options to fine-tune the resulting output.
- * Noteworthy changes in release 8.7 (2010-11-13) [stable]
- ** Bug fixes
- cp, install, mv, and touch no longer crash when setting file times
- on Solaris 10 Update 9 [Solaris PatchID 144488 and newer expose a
- latent bug introduced in coreutils 8.1, and possibly a second latent
- bug going at least as far back as coreutils 5.97]
- csplit no longer corrupts heap when writing more than 999 files,
- nor does it leak memory for every chunk of input processed
- [the bugs were present in the initial implementation]
- tail -F once again notices changes in a currently unavailable
- remote directory [bug introduced in coreutils-7.5]
- ** Changes in behavior
- cp --attributes-only now completely overrides --reflink.
- Previously a reflink was needlessly attempted.
- stat's %X, %Y, and %Z directives once again print only the integer
- part of seconds since the epoch. This reverts a change from
- coreutils-8.6, that was deemed unnecessarily disruptive.
- To obtain a nanosecond-precision timestamp for %X use %.X;
- if you want (say) just 3 fractional digits, use %.3X.
- Likewise for %Y and %Z.
- stat's new %W format directive would print floating point seconds.
- However, with the above change to %X, %Y and %Z, we've made %W work
- the same way as the others.
- stat gained support for several printf-style flags, such as %'s for
- listing sizes with the current locale's thousands separator.
- * Noteworthy changes in release 8.6 (2010-10-15) [stable]
- ** Bug fixes
- du no longer multiply counts a file that is a directory or whose
- link count is 1, even if the file is reached multiple times by
- following symlinks or via multiple arguments.
- du -H and -L now consistently count pointed-to files instead of
- symbolic links, and correctly diagnose dangling symlinks.
- du --ignore=D now ignores directory D even when that directory is
- found to be part of a directory cycle. Before, du would issue a
- "NOTIFY YOUR SYSTEM MANAGER" diagnostic and fail.
- split now diagnoses read errors rather than silently exiting.
- [bug introduced in coreutils-4.5.8]
- tac would perform a double-free when given an input line longer than 16KiB.
- [bug introduced in coreutils-8.3]
- tail -F once again notices changes in a currently unavailable directory,
- and works around a Linux kernel bug where inotify runs out of resources.
- [bugs introduced in coreutils-7.5]
- tr now consistently handles case conversion character classes.
- In some locales, valid conversion specifications caused tr to abort,
- while in all locales, some invalid specifications were undiagnosed.
- [bugs introduced in coreutils 6.9.90 and 6.9.92]
- ** New features
- cp now accepts the --attributes-only option to not copy file data,
- which is useful for efficiently modifying files.
- du recognizes -d N as equivalent to --max-depth=N, for compatibility
- with FreeBSD.
- sort now accepts the --debug option, to highlight the part of the
- line significant in the sort, and warn about questionable options.
- sort now supports -d, -f, -i, -R, and -V in any combination.
- stat now accepts the %m format directive to output the mount point
- for a file. It also accepts the %w and %W format directives for
- outputting the birth time of a file, if one is available.
- ** Changes in behavior
- df now consistently prints the device name for a bind mounted file,
- rather than its aliased target.
- du now uses less than half as much memory when operating on trees
- with many hard-linked files. With --count-links (-l), or when
- operating on trees with no hard-linked files, there is no change.
- ls -l now uses the traditional three field time style rather than
- the wider two field numeric ISO style, in locales where a style has
- not been specified. The new approach has nicer behavior in some
- locales, including English, which was judged to outweigh the disadvantage
- of generating less-predictable and often worse output in poorly-configured
- locales where there is an onus to specify appropriate non-default styles.
- [The old behavior was introduced in coreutils-6.0 and had been removed
- for English only using a different method since coreutils-8.1]
- rm's -d now evokes an error; before, it was silently ignored.
- sort -g now uses long doubles for greater range and precision.
- sort -h no longer rejects numbers with leading or trailing ".", and
- no longer accepts numbers with multiple ".". It now considers all
- zeros to be equal.
- sort now uses the number of available processors to parallelize
- the sorting operation. The number of sorts run concurrently can be
- limited with the --parallel option or with external process
- control like taskset for example.
- stat now provides translated output when no format is specified.
- stat no longer accepts the --context (-Z) option. Initially it was
- merely accepted and ignored, for compatibility. Starting two years
- ago, with coreutils-7.0, its use evoked a warning. Printing the
- SELinux context of a file can be done with the %C format directive,
- and the default output when no format is specified now automatically
- includes %C when context information is available.
- stat no longer accepts the %C directive when the --file-system
- option is in effect, since security context is a file attribute
- rather than a file system attribute.
- stat now outputs the full sub-second resolution for the atime,
- mtime, and ctime values since the Epoch, when using the %X, %Y, and
- %Z directives of the --format option. This matches the fact that
- %x, %y, and %z were already doing so for the human-readable variant.
- touch's --file option is no longer recognized. Use --reference=F (-r)
- instead. --file has not been documented for 15 years, and its use has
- elicited a warning since coreutils-7.1.
- truncate now supports setting file sizes relative to a reference file.
- Also errors are no longer suppressed for unsupported file types, and
- relative sizes are restricted to supported file types.
- * Noteworthy changes in release 8.5 (2010-04-23) [stable]
- ** Bug fixes
- cp and mv once again support preserving extended attributes.
- [bug introduced in coreutils-8.4]
- cp now preserves "capabilities" when also preserving file ownership.
- ls --color once again honors the 'NORMAL' dircolors directive.
- [bug introduced in coreutils-6.11]
- sort -M now handles abbreviated months that are aligned using blanks
- in the locale database. Also locales with 8 bit characters are
- handled correctly, including multi byte locales with the caveat
- that multi byte characters are matched case sensitively.
- sort again handles obsolescent key formats (+POS -POS) correctly.
- Previously if -POS was specified, 1 field too many was used in the sort.
- [bug introduced in coreutils-7.2]
- ** New features
- join now accepts the --header option, to treat the first line of each
- file as a header line to be joined and printed unconditionally.
- timeout now accepts the --kill-after option which sends a kill
- signal to the monitored command if it's still running the specified
- duration after the initial signal was sent.
- who: the "+/-" --mesg (-T) indicator of whether a user/tty is accepting
- messages could be incorrectly listed as "+", when in fact, the user was
- not accepting messages (mesg no). Before, who would examine only the
- permission bits, and not consider the group of the TTY device file.
- Thus, if a login tty's group would change somehow e.g., to "root",
- that would make it unwritable (via write(1)) by normal users, in spite
- of whatever the permission bits might imply. Now, when configured
- using the --with-tty-group[=NAME] option, who also compares the group
- of the TTY device with NAME (or "tty" if no group name is specified).
- ** Changes in behavior
- ls --color no longer emits the final 3-byte color-resetting escape
- sequence when it would be a no-op.
- join -t '' no longer emits an error and instead operates on
- each line as a whole (even if they contain NUL characters).
- * Noteworthy changes in release 8.4 (2010-01-13) [stable]
- ** Bug fixes
- nproc --all is now guaranteed to be as large as the count
- of available processors, which may not have been the case
- on GNU/Linux systems with neither /proc nor /sys available.
- [bug introduced in coreutils-8.1]
- ** Build-related
- Work around a build failure when using buggy <sys/capability.h>.
- Alternatively, configure with --disable-libcap.
- Compilation would fail on systems using glibc-2.7..2.9 due to changes in
- gnulib's wchar.h that tickled a bug in at least those versions of glibc's
- own <wchar.h> header. Now, gnulib works around the bug in those older
- glibc <wchar.h> headers.
- Building would fail with a link error (cp/copy.o) when XATTR headers
- were installed without the corresponding library. Now, configure
- detects that and disables xattr support, as one would expect.
- * Noteworthy changes in release 8.3 (2010-01-07) [stable]
- ** Bug fixes
- cp -p, install -p, mv, and touch -c could trigger a spurious error
- message when using new glibc coupled with an old kernel.
- [bug introduced in coreutils-6.12].
- ls -l --color no longer prints "argetm" in front of dangling
- symlinks when the 'LINK target' directive was given to dircolors.
- [bug introduced in fileutils-4.0]
- pr's page header was improperly formatted for long file names.
- [bug introduced in coreutils-7.2]
- rm -r --one-file-system works once again.
- The rewrite to make rm use fts introduced a regression whereby
- a commmand of the above form would fail for all subdirectories.
- [bug introduced in coreutils-8.0]
- stat -f recognizes more file system types: k-afs, fuseblk, gfs/gfs2, ocfs2,
- and rpc_pipefs. Also Minix V3 is displayed correctly as minix3, not minux3.
- [bug introduced in coreutils-8.1]
- tail -f (inotify-enabled) once again works with remote files.
- The use of inotify with remote files meant that any changes to those
- files that was not done from the local system would go unnoticed.
- [bug introduced in coreutils-7.5]
- tail -F (inotify-enabled) would abort when a tailed file is repeatedly
- renamed-aside and then recreated.
- [bug introduced in coreutils-7.5]
- tail -F (inotify-enabled) could fail to follow renamed files.
- E.g., given a "tail -F a b" process, running "mv a b" would
- make tail stop tracking additions to "b".
- [bug introduced in coreutils-7.5]
- touch -a and touch -m could trigger bugs in some file systems, such
- as xfs or ntfs-3g, and fail to update timestamps.
- [bug introduced in coreutils-8.1]
- wc now prints counts atomically so that concurrent
- processes will not intersperse their output.
- [the issue dates back to the initial implementation]
- * Noteworthy changes in release 8.2 (2009-12-11) [stable]
- ** Bug fixes
- id's use of mgetgroups no longer writes beyond the end of a malloc'd buffer
- [bug introduced in coreutils-8.1]
- id no longer crashes on systems without supplementary group support.
- [bug introduced in coreutils-8.1]
- rm once again handles zero-length arguments properly.
- The rewrite to make rm use fts introduced a regression whereby
- a command like "rm a '' b" would fail to remove "a" and "b", due to
- the presence of the empty string argument.
- [bug introduced in coreutils-8.0]
- sort is now immune to the signal handling of its parent.
- Specifically sort now doesn't exit with an error message
- if it uses helper processes for compression and its parent
- ignores CHLD signals. [bug introduced in coreutils-6.9]
- tail without -f no longer accesses uninitialized memory
- [bug introduced in coreutils-7.6]
- timeout is now immune to the signal handling of its parent.
- Specifically timeout now doesn't exit with an error message
- if its parent ignores CHLD signals. [bug introduced in coreutils-7.6]
- a user running "make distcheck" in the coreutils source directory,
- with TMPDIR unset or set to the name of a world-writable directory,
- and with a malicious user on the same system
- was vulnerable to arbitrary code execution
- [bug introduced in coreutils-5.0]
- * Noteworthy changes in release 8.1 (2009-11-18) [stable]
- ** Bug fixes
- chcon no longer exits immediately just because SELinux is disabled.
- Even then, chcon may still be useful.
- [bug introduced in coreutils-8.0]
- chcon, chgrp, chmod, chown and du now diagnose an ostensible directory cycle
- and arrange to exit nonzero. Before, they would silently ignore the
- offending directory and all "contents."
- env -u A=B now fails, rather than silently adding A to the
- environment. Likewise, printenv A=B silently ignores the invalid
- name. [the bugs date back to the initial implementation]
- ls --color now handles files with capabilities correctly. Previously
- files with capabilities were often not colored, and also sometimes, files
- without capabilites were colored in error. [bug introduced in coreutils-7.0]
- md5sum now prints checksums atomically so that concurrent
- processes will not intersperse their output.
- This also affected sum, sha1sum, sha224sum, sha384sum and sha512sum.
- [the bug dates back to the initial implementation]
- mktemp no longer leaves a temporary file behind if it was unable to
- output the name of the file to stdout.
- [the bug dates back to the initial implementation]
- nice -n -1 PROGRAM now runs PROGRAM even when its internal setpriority
- call fails with errno == EACCES.
- [the bug dates back to the initial implementation]
- nice, nohup, and su now refuse to execute the subsidiary program if
- they detect write failure in printing an otherwise non-fatal warning
- message to stderr.
- stat -f recognizes more file system types: afs, cifs, anon-inode FS,
- btrfs, cgroupfs, cramfs-wend, debugfs, futexfs, hfs, inotifyfs, minux3,
- nilfs, securityfs, selinux, xenfs
- tail -f (inotify-enabled) now avoids a race condition.
- Before, any data appended in the tiny interval between the initial
- read-to-EOF and the inotify watch initialization would be ignored
- initially (until more data was appended), or forever, if the file
- were first renamed or unlinked or never modified.
- [The race was introduced in coreutils-7.5]
- tail -F (inotify-enabled) now consistently tails a file that has been
- replaced via renaming. That operation provokes either of two sequences
- of inotify events. The less common sequence is now handled as well.
- [The bug came with the implementation change in coreutils-7.5]
- timeout now doesn't exit unless the command it is monitoring does,
- for any specified signal. [bug introduced in coreutils-7.0].
- ** Changes in behavior
- chroot, env, nice, and su fail with status 125, rather than 1, on
- internal error such as failure to parse command line arguments; this
- is for consistency with stdbuf and timeout, and avoids ambiguity
- with the invoked command failing with status 1. Likewise, nohup
- fails with status 125 instead of 127.
- du (due to a change in gnulib's fts) can now traverse NFSv4 automounted
- directories in which the stat'd device number of the mount point differs
- during a traversal. Before, it would fail, because such a mismatch would
- usually represent a serious error or a subversion attempt.
- echo and printf now interpret \e as the Escape character (0x1B).
- rm -f /read-only-fs/nonexistent now succeeds and prints no diagnostic
- on systems with an unlinkat syscall that sets errno to EROFS in that case.
- Before, it would fail with a "Read-only file system" diagnostic.
- Also, "rm /read-only-fs/nonexistent" now reports "file not found" rather
- than the less precise "Read-only file system" error.
- ** New programs
- nproc: Print the number of processing units available to a process.
- ** New features
- env and printenv now accept the option --null (-0), as a means to
- avoid ambiguity with newlines embedded in the environment.
- md5sum --check now also accepts openssl-style checksums.
- So do sha1sum, sha224sum, sha384sum and sha512sum.
- mktemp now accepts the option --suffix to provide a known suffix
- after the substitution in the template. Additionally, uses such as
- "mktemp fileXXXXXX.txt" are able to infer an appropriate --suffix.
- touch now accepts the option --no-dereference (-h), as a means to
- change symlink timestamps on platforms with enough support.
- * Noteworthy changes in release 8.0 (2009-10-06) [beta]
- ** Bug fixes
- cp --preserve=xattr and --archive now preserve extended attributes even
- when the source file doesn't have write access.
- [bug introduced in coreutils-7.1]
- touch -t [[CC]YY]MMDDhhmm[.ss] now accepts a timestamp string ending in .60,
- to accommodate leap seconds.
- [the bug dates back to the initial implementation]
- ls --color now reverts to the color of a base file type consistently
- when the color of a more specific type is disabled.
- [bug introduced in coreutils-5.90]
- ls -LR exits with status 2, not 0, when it encounters a cycle
- "ls -is" is now consistent with ls -lis in ignoring values returned
- from a failed stat/lstat. For example ls -Lis now prints "?", not "0",
- for the inode number and allocated size of a dereferenced dangling symlink.
- tail --follow --pid now avoids a race condition where data written
- just before the process dies might not have been output by tail.
- Also, tail no longer delays at all when the specified pid is not live.
- [The race was introduced in coreutils-7.5,
- and the unnecessary delay was present since textutils-1.22o]
- ** Portability
- On Solaris 9, many commands would mistakenly treat file/ the same as
- file. Now, even on such a system, path resolution obeys the POSIX
- rules that a trailing slash ensures that the preceding name is a
- directory or a symlink to a directory.
- ** Changes in behavior
- id no longer prints SELinux " context=..." when the POSIXLY_CORRECT
- environment variable is set.
- readlink -f now ignores a trailing slash when deciding if the
- last component (possibly via a dangling symlink) can be created,
- since mkdir will succeed in that case.
- ** New features
- ln now accepts the options --logical (-L) and --physical (-P),
- added by POSIX 2008. The default behavior is -P on systems like
- GNU/Linux where link(2) creates hard links to symlinks, and -L on
- BSD systems where link(2) follows symlinks.
- stat: without -f, a command-line argument of "-" now means standard input.
- With --file-system (-f), an argument of "-" is now rejected.
- If you really must operate on a file named "-", specify it as
- "./-" or use "--" to separate options from arguments.
- ** Improvements
- rm: rewrite to use gnulib's fts
- This makes rm -rf significantly faster (400-500%) in some pathological
- cases, and slightly slower (20%) in at least one pathological case.
- rm -r deletes deep hierarchies more efficiently. Before, execution time
- was quadratic in the depth of the hierarchy, now it is merely linear.
- However, this improvement is not as pronounced as might be expected for
- very deep trees, because prior to this change, for any relative name
- length longer than 8KiB, rm -r would sacrifice official conformance to
- avoid the disproportionate quadratic performance penalty. Leading to
- another improvement:
- rm -r is now slightly more standards-conformant when operating on
- write-protected files with relative names longer than 8KiB.
- * Noteworthy changes in release 7.6 (2009-09-11) [stable]
- ** Bug fixes
- cp, mv now ignore failure to preserve a symlink timestamp, when it is
- due to their running on a kernel older than what was implied by headers
- and libraries tested at configure time.
- [bug introduced in coreutils-7.5]
- cp --reflink --preserve now preserves attributes when cloning a file.
- [bug introduced in coreutils-7.5]
- cp --preserve=xattr no longer leaks resources on each preservation failure.
- [bug introduced in coreutils-7.1]
- dd now exits with non-zero status when it encounters a write error while
- printing a summary to stderr.
- [bug introduced in coreutils-6.11]
- dd cbs=N conv=unblock would fail to print a final newline when the size
- of the input was not a multiple of N bytes.
- [the non-conforming behavior dates back to the initial implementation]
- df no longer requires that each command-line argument be readable
- [bug introduced in coreutils-7.3]
- ls -i now prints consistent inode numbers also for mount points.
- This makes ls -i DIR less efficient on systems with dysfunctional readdir,
- because ls must stat every file in order to obtain a guaranteed-valid
- inode number. [bug introduced in coreutils-6.0]
- tail -f (inotify-enabled) now flushes any initial output before blocking.
- Before, this would print nothing and wait: stdbuf -o 4K tail -f /etc/passwd
- Note that this bug affects tail -f only when its standard output is buffered,
- which is relatively unusual.
- [bug introduced in coreutils-7.5]
- tail -f once again works with standard input. inotify-enabled tail -f
- would fail when operating on a nameless stdin. I.e., tail -f < /etc/passwd
- would say "tail: cannot watch `-': No such file or directory", yet the
- relatively baroque tail -f /dev/stdin < /etc/passwd would work. Now, the
- offending usage causes tail to revert to its conventional sleep-based
- (i.e., not inotify-based) implementation.
- [bug introduced in coreutils-7.5]
- ** Portability
- ln, link: link f z/ would mistakenly succeed on Solaris 10, given an
- existing file, f, and nothing named "z". ln -T f z/ has the same problem.
- Each would mistakenly create "z" as a link to "f". Now, even on such a
- system, each command reports the error, e.g.,
- link: cannot create link `z/' to `f': Not a directory
- ** New features
- cp --reflink accepts a new "auto" parameter which falls back to
- a standard copy if creating a copy-on-write clone is not possible.
- ** Changes in behavior
- tail -f now ignores "-" when stdin is a pipe or FIFO.
- tail-with-no-args now ignores -f unconditionally when stdin is a pipe or FIFO.
- Before, it would ignore -f only when no file argument was specified,
- and then only when POSIXLY_CORRECT was set. Now, :|tail -f - terminates
- immediately. Before, it would block indefinitely.
- * Noteworthy changes in release 7.5 (2009-08-20) [stable]
- ** Bug fixes
- dd's oflag=direct option now works even when the size of the input
- is not a multiple of e.g., 512 bytes.
- dd now handles signals consistently even when they're received
- before data copying has started.
- install runs faster again with SELinux enabled
- [introduced in coreutils-7.0]
- ls -1U (with two or more arguments, at least one a nonempty directory)
- would print entry names *before* the name of the containing directory.
- Also fixed incorrect output of ls -1RU and ls -1sU.
- [introduced in coreutils-7.0]
- sort now correctly ignores fields whose ending position is specified
- before the start position. Previously in numeric mode the remaining
- part of the line after the start position was used as the sort key.
- [This bug appears to have been present in "the beginning".]
- truncate -s failed to skip all whitespace in the option argument in
- some locales.
- ** New programs
- stdbuf: A new program to run a command with modified stdio buffering
- for its standard streams.
- ** Changes in behavior
- ls --color: files with multiple hard links are no longer colored differently
- by default. That can be enabled by changing the LS_COLORS environment
- variable. You can control that using the MULTIHARDLINK dircolors input
- variable which corresponds to the 'mh' LS_COLORS item. Note these variables
- were renamed from 'HARDLINK' and 'hl' which were available since
- coreutils-7.1 when this feature was introduced.
- ** Deprecated options
- nl --page-increment: deprecated in favor of --line-increment, the new option
- maintains the previous semantics and the same short option, -i.
- ** New features
- chroot now accepts the options --userspec and --groups.
- cp accepts a new option, --reflink: create a lightweight copy
- using copy-on-write (COW). This is currently only supported within
- a btrfs file system.
- cp now preserves timestamps on symbolic links, when possible
- sort accepts a new option, --human-numeric-sort (-h): sort numbers
- while honoring human readable suffixes like KiB and MB etc.
- tail --follow now uses inotify when possible, to be more responsive
- to file changes and more efficient when monitoring many files.
- * Noteworthy changes in release 7.4 (2009-05-07) [stable]
- ** Bug fixes
- date -d 'next mon', when run on a Monday, now prints the date
- 7 days in the future rather than the current day. Same for any other
- day-of-the-week name, when run on that same day of the week.
- [This bug appears to have been present in "the beginning". ]
- date -d tuesday, when run on a Tuesday -- using date built from the 7.3
- release tarball, not from git -- would print the date 7 days in the future.
- Now, it works properly and prints the current date. That was due to
- human error (including not-committed changes in a release tarball)
- and the fact that there is no check to detect when the gnulib/ git
- submodule is dirty.
- ** Build-related
- make check: two tests have been corrected
- ** Portability
- There have been some ACL-related portability fixes for *BSD,
- inherited from gnulib.
- * Noteworthy changes in release 7.3 (2009-05-01) [stable]
- ** Bug fixes
- cp now diagnoses failure to preserve selinux/xattr attributes when
- --preserve=context,xattr is specified in combination with -a.
- Also, cp no longer suppresses attribute-preservation diagnostics
- when preserving SELinux context was explicitly requested.
- ls now aligns output correctly in the presence of abbreviated month
- names from the locale database that have differing widths.
- ls -v and sort -V now order names like "#.b#" properly
- mv: do not print diagnostics when failing to preserve xattr's on file
- systems without xattr support.
- sort -m no longer segfaults when its output file is also an input file.
- E.g., with this, touch 1; sort -m -o 1 1, sort would segfault.
- [introduced in coreutils-7.2]
- ** Changes in behavior
- shred, sort, shuf: now use an internal pseudorandom generator by default.
- This is mainly noticeable in shred where the 3 random passes it does by
- default should proceed at the speed of the disk. Previously /dev/urandom
- was used if available, which is relatively slow on GNU/Linux systems.
- ** Improved robustness
- cp would exit successfully after copying less than the full contents
- of a file larger than ~4000 bytes from a linux-/proc file system to a
- destination file system with a fundamental block size of 4KiB or greater.
- Reading into a 4KiB-or-larger buffer, cp's "read" syscall would return
- a value smaller than 4096, and cp would interpret that as EOF (POSIX
- allows this). This optimization, now removed, saved 50% of cp's read
- syscalls when copying small files. Affected linux kernels: at least
- 2.6.9 through 2.6.29.
- [the optimization was introduced in coreutils-6.0]
- ** Portability
- df now pre-mounts automountable directories even with automounters for
- which stat-like syscalls no longer provoke mounting. Now, df uses open.
- 'id -G $USER' now works correctly even on Darwin and NetBSD. Previously it
- would either truncate the group list to 10, or go into an infinite loop,
- due to their non-standard getgrouplist implementations.
- [truncation introduced in coreutils-6.11]
- [infinite loop introduced in coreutils-7.1]
- * Noteworthy changes in release 7.2 (2009-03-31) [stable]
- ** New features
- pwd now accepts the options --logical (-L) and --physical (-P). For
- compatibility with existing scripts, -P is the default behavior
- unless POSIXLY_CORRECT is requested.
- ** Bug fixes
- cat once again immediately outputs data it has processed.
- Previously it would have been buffered and only output if enough
- data was read, or on process exit.
- [bug introduced in coreutils-6.0]
- comm's new --check-order option would fail to detect disorder on any pair
- of lines where one was a prefix of the other. For example, this would
- fail to report the disorder: printf 'Xb\nX\n'>k; comm --check-order k k
- [bug introduced in coreutils-7.0]
- cp once again diagnoses the invalid "cp -rl dir dir" right away,
- rather than after creating a very deep dir/dir/dir/... hierarchy.
- The bug strikes only with both --recursive (-r, -R) and --link (-l).
- [bug introduced in coreutils-7.1]
- ls --sort=version (-v) sorted names beginning with "." inconsistently.
- Now, names that start with "." are always listed before those that don't.
- pr: fix the bug whereby --indent=N (-o) did not indent header lines
- [bug introduced in coreutils-6.9.90]
- sort now handles specified key ends correctly.
- Previously -k1,1b would have caused leading space from field 2 to be
- included in the sort while -k2,3.0 would have not included field 3.
- ** Changes in behavior
- cat,cp,install,mv,split: these programs now read and write a minimum
- of 32KiB at a time. This was seen to double throughput when reading
- cached files on GNU/Linux-based systems.
- cp -a now tries to preserve extended attributes (xattr), but does not
- diagnose xattr-preservation failure. However, cp --preserve=all still does.
- ls --color: hard link highlighting can be now disabled by changing the
- LS_COLORS environment variable. To disable it you can add something like
- this to your profile: eval `dircolors | sed s/hl=[^:]*:/hl=:/`
- * Noteworthy changes in release 7.1 (2009-02-21) [stable]
- ** New features
- Add extended attribute support available on certain filesystems like ext2
- and XFS.
- cp: Tries to copy xattrs when --preserve=xattr or --preserve=all specified
- mv: Always tries to copy xattrs
- install: Never copies xattrs
- cp and mv accept a new option, --no-clobber (-n): silently refrain
- from overwriting any existing destination file
- dd accepts iflag=cio and oflag=cio to open the file in CIO (concurrent I/O)
- mode where this feature is available.
- install accepts a new option, --compare (-C): compare each pair of source
- and destination files, and if the destination has identical content and
- any specified owner, group, permissions, and possibly SELinux context, then
- do not modify the destination at all.
- ls --color now highlights hard linked files, too
- stat -f recognizes the Lustre file system type
- ** Bug fixes
- chgrp, chmod, chown --silent (--quiet, -f) no longer print some diagnostics
- [bug introduced in coreutils-5.1]
- cp uses much less memory in some situations
- cp -a now correctly tries to preserve SELinux context (announced in 6.9.90),
- doesn't inform about failure, unlike with --preserve=all
- du --files0-from=FILE no longer reads all of FILE into RAM before
- processing the first file name
- seq 9223372036854775807 9223372036854775808 now prints only two numbers
- on systems with extended long double support and good library support.
- Even with this patch, on some systems, it still produces invalid output,
- from 3 to at least 1026 lines long. [bug introduced in coreutils-6.11]
- seq -w now accounts for a decimal point added to the last number
- to correctly print all numbers to the same width.
- wc --files0-from=FILE no longer reads all of FILE into RAM, before
- processing the first file name, unless the list of names is known
- to be small enough.
- ** Changes in behavior
- cp and mv: the --reply={yes,no,query} option has been removed.
- Using it has elicited a warning for the last three years.
- dd: user specified offsets that are too big are handled better.
- Previously, erroneous parameters to skip and seek could result
- in redundant reading of the file with no warnings or errors.
- du: -H (initially equivalent to --si) is now equivalent to
- --dereference-args, and thus works as POSIX requires
- shred: now does 3 overwrite passes by default rather than 25.
- ls -l now marks SELinux-only files with the less obtrusive '.',
- rather than '+'. A file with any other combination of MAC and ACL
- is still marked with a '+'.
- * Noteworthy changes in release 7.0 (2008-10-05) [beta]
- ** New programs
- timeout: Run a command with bounded time.
- truncate: Set the size of a file to a specified size.
- ** New features
- chgrp, chmod, chown, chcon, du, rm: now all display linear performance,
- even when operating on million-entry directories on ext3 and ext4 file
- systems. Before, they would exhibit O(N^2) performance, due to linear
- per-entry seek time cost when operating on entries in readdir order.
- Rm was improved directly, while the others inherit the improvement
- from the newer version of fts in gnulib.
- comm now verifies that the inputs are in sorted order. This check can
- be turned off with the --nocheck-order option.
- comm accepts new option, --output-delimiter=STR, that allows specification
- of an output delimiter other than the default single TAB.
- cp and mv: the deprecated --reply=X option is now also undocumented.
- dd accepts iflag=fullblock to make it accumulate full input blocks.
- With this new option, after a short read, dd repeatedly calls read,
- until it fills the incomplete block, reaches EOF, or encounters an error.
- df accepts a new option --total, which produces a grand total of all
- arguments after all arguments have been processed.
- If the GNU MP library is available at configure time, factor and
- expr support arbitrarily large numbers. Pollard's rho algorithm is
- used to factor large numbers.
- install accepts a new option --strip-program to specify the program used to
- strip binaries.
- ls now colorizes files with capabilities if libcap is available
- ls -v now uses filevercmp function as sort predicate (instead of strverscmp)
- md5sum now accepts the new option, --quiet, to suppress the printing of
- 'OK' messages. sha1sum, sha224sum, sha384sum, and sha512sum accept it, too.
- sort accepts a new option, --files0-from=F, that specifies a file
- containing a null-separated list of files to sort. This list is used
- instead of filenames passed on the command-line to avoid problems with
- maximum command-line (argv) length.
- sort accepts a new option --batch-size=NMERGE, where NMERGE
- represents the maximum number of inputs that will be merged at once.
- When processing more than NMERGE inputs, sort uses temporary files.
- sort accepts a new option --version-sort (-V, --sort=version),
- specifying that ordering is to be based on filevercmp.
- ** Bug fixes
- chcon --verbose now prints a newline after each message
- od no longer suffers from platform bugs in printf(3). This is
- probably most noticeable when using 'od -tfL' to print long doubles.
- seq -0.1 0.1 2 now prints 2,0 when locale's decimal point is ",".
- Before, it would mistakenly omit the final number in that example.
- shuf honors the --zero-terminated (-z) option, even with --input-range=LO-HI
- shuf --head-count is now correctly documented. The documentation
- previously claimed it was called --head-lines.
- ** Improvements
- Improved support for access control lists (ACLs): On MacOS X, Solaris 7..10,
- HP-UX 11, Tru64, AIX, IRIX 6.5, and Cygwin, "ls -l" now displays the presence
- of an ACL on a file via a '+' sign after the mode, and "cp -p" copies ACLs.
- join has significantly better performance due to better memory management
- ls now uses constant memory when not sorting and using one_per_line format,
- no matter how many files are in a given directory. I.e., to list a directory
- with very many files, ls -1U is much more efficient.
- od now aligns fields across lines when printing multiple -t
- specifiers, and no longer prints fields that resulted entirely from
- padding the input out to the least common multiple width.
- ** Changes in behavior
- stat's --context (-Z) option has always been a no-op.
- Now it evokes a warning that it is obsolete and will be removed.
- * Noteworthy changes in release 6.12 (2008-05-31) [stable]
- ** New features
- cp, install, mv, and touch now preserve nanosecond resolution on
- file timestamps, on platforms that have the 'utimensat' and
- 'futimens' system calls.
- ** Bug fixes
- chcon, runcon: --help output now includes the bug-reporting address
- cp -p copies permissions more portably. For example, on MacOS X 10.5,
- "cp -p some-fifo some-file" no longer fails while trying to copy the
- permissions from the some-fifo argument.
- id with no options now prints the SELinux context only when invoked
- with no USERNAME argument.
- id and groups once again print the AFS-specific nameless group-ID (PAG).
- Printing of such large-numbered, kernel-only (not in /etc/group) group-IDs
- was suppressed in 6.11 due to ignorance that they are useful.
- uniq: avoid subtle field-skipping malfunction due to isblank misuse.
- In some locales on some systems, isblank(240) (aka  ) is nonzero.
- On such systems, uniq --skip-fields=N would fail to skip the proper
- number of fields for some inputs.
- tac: avoid segfault with --regex (-r) and multiple files, e.g.,
- "echo > x; tac -r x x". [bug present at least in textutils-1.8b, from 1992]
- ** Changes in behavior
- install once again sets SELinux context, when possible
- [it was deliberately disabled in 6.9.90]
- * Noteworthy changes in release 6.11 (2008-04-19) [stable]
- ** Bug fixes
- configure --enable-no-install-program=groups now works.
- "cp -fR fifo E" now succeeds with an existing E. Before this fix, using
- -fR to copy a fifo or "special" file onto an existing file would fail
- with EEXIST. Now, it once again unlinks the destination before trying
- to create the destination file. [bug introduced in coreutils-5.90]
- dd once again works with unnecessary options like if=/dev/stdin and
- of=/dev/stdout. [bug introduced in fileutils-4.0h]
- id now uses getgrouplist, when possible. This results in
- much better performance when there are many users and/or groups.
- ls no longer segfaults on files in /proc when linked with an older version
- of libselinux. E.g., ls -l /proc/sys would dereference a NULL pointer.
- md5sum would segfault for invalid BSD-style input, e.g.,
- echo 'MD5 (' | md5sum -c - Now, md5sum ignores that line.
- sha1sum, sha224sum, sha384sum, and sha512sum are affected, too.
- [bug introduced in coreutils-5.1.0]
- md5sum -c would accept a NUL-containing checksum string like "abcd\0..."
- and would unnecessarily read and compute the checksum of the named file,
- and then compare that checksum to the invalid one: guaranteed to fail.
- Now, it recognizes that the line is not valid and skips it.
- sha1sum, sha224sum, sha384sum, and sha512sum are affected, too.
- [bug present in the original version, in coreutils-4.5.1, 1995]
- "mkdir -Z x dir" no longer segfaults when diagnosing invalid context "x"
- mkfifo and mknod would fail similarly. Now they're fixed.
- mv would mistakenly unlink a destination file before calling rename,
- when the destination had two or more hard links. It no longer does that.
- [bug introduced in coreutils-5.3.0]
- "paste -d'\' file" no longer overruns memory (heap since coreutils-5.1.2,
- stack before then) [bug present in the original version, in 1992]
- "pr -e" with a mix of backspaces and TABs no longer corrupts the heap
- [bug present in the original version, in 1992]
- "ptx -F'\' long-file-name" would overrun a malloc'd buffer and corrupt
- the heap. That was triggered by a lone backslash (or odd number of them)
- at the end of the option argument to --flag-truncation=STRING (-F),
- --word-regexp=REGEXP (-W), or --sentence-regexp=REGEXP (-S).
- "rm -r DIR" would mistakenly declare to be "write protected" -- and
- prompt about -- full DIR-relative names longer than MIN (PATH_MAX, 8192).
- "rmdir --ignore-fail-on-non-empty" detects and ignores the failure
- in more cases when a directory is empty.
- "seq -f % 1" would issue the erroneous diagnostic "seq: memory exhausted"
- rather than reporting the invalid string format.
- [bug introduced in coreutils-6.0]
- ** New features
- join now verifies that the inputs are in sorted order. This check can
- be turned off with the --nocheck-order option.
- sort accepts the new option --sort=WORD, where WORD can be one of
- general-numeric, month, numeric or random. These are equivalent to the
- options --general-numeric-sort/-g, --month-sort/-M, --numeric-sort/-n
- and --random-sort/-R, resp.
- ** Improvements
- id and groups work around an AFS-related bug whereby those programs
- would print an invalid group number, when given no user-name argument.
- ls --color no longer outputs unnecessary escape sequences
- seq gives better diagnostics for invalid formats.
- ** Portability
- rm now works properly even on systems like BeOS and Haiku,
- which have negative errno values.
- ** Consistency
- install, mkdir, rmdir and split now write --verbose output to stdout,
- not to stderr.
- * Noteworthy changes in release 6.10 (2008-01-22) [stable]
- ** Bug fixes
- Fix a non-portable use of sed in configure.ac.
- [bug introduced in coreutils-6.9.92]
- * Noteworthy changes in release 6.9.92 (2008-01-12) [beta]
- ** Bug fixes
- cp --parents no longer uses uninitialized memory when restoring the
- permissions of a just-created destination directory.
- [bug introduced in coreutils-6.9.90]
- tr's case conversion would fail in a locale with differing numbers
- of lower case and upper case characters. E.g., this would fail:
- env LC_CTYPE=en_US.ISO-8859-1 tr '[:upper:]' '[:lower:]'
- [bug introduced in coreutils-6.9.90]
- ** Improvements
- "touch -d now writable-but-owned-by-someone-else" now succeeds
- whenever that same command would succeed without "-d now".
- Before, it would work fine with no -d option, yet it would
- fail with the ostensibly-equivalent "-d now".
- * Noteworthy changes in release 6.9.91 (2007-12-15) [beta]
- ** Bug fixes
- "ls -l" would not output "+" on SELinux hosts unless -Z was also given.
- "rm" would fail to unlink a non-directory when run in an environment
- in which the user running rm is capable of unlinking a directory.
- [bug introduced in coreutils-6.9]
- * Noteworthy changes in release 6.9.90 (2007-12-01) [beta]
- ** New programs
- arch: equivalent to uname -m, not installed by default
- But don't install this program on Solaris systems.
- chcon: change the SELinux security context of a file
- mktemp: create a temporary file or directory (or names)
- runcon: run a program in a different SELinux security context
- ** Programs no longer installed by default
- hostname, su
- ** Changes in behavior
- cp, by default, refuses to copy through a dangling destination symlink
- Set POSIXLY_CORRECT if you require the old, risk-prone behavior.
- pr -F no longer suppresses the footer or the first two blank lines in
- the header. This is for compatibility with BSD and POSIX.
- tr now warns about an unescaped backslash at end of string.
- The tr from coreutils-5.2.1 and earlier would fail for such usage,
- and Solaris' tr ignores that final byte.
- ** New features
- Add SELinux support, based on the patch from Fedora:
- * cp accepts new --preserve=context option.
- * "cp -a" works with SELinux:
- Now, cp -a attempts to preserve context, but failure to do so does
- not change cp's exit status. However "cp --preserve=context" is
- similar, but failure *does* cause cp to exit with nonzero status.
- * install accepts new "-Z, --context=C" option.
- * id accepts new "-Z" option.
- * stat honors the new %C format directive: SELinux security context string
- * ls accepts a slightly modified -Z option.
- * ls: contrary to Fedora version, does not accept --lcontext and --scontext
- The following commands and options now support the standard size
- suffixes kB, M, MB, G, GB, and so on for T, P, Y, Z, and Y:
- head -c, head -n, od -j, od -N, od -S, split -b, split -C,
- tail -c, tail -n.
- cp -p tries to preserve the GID of a file even if preserving the UID
- is not possible.
- uniq accepts a new option: --zero-terminated (-z). As with the sort
- option of the same name, this makes uniq consume and produce
- NUL-terminated lines rather than newline-terminated lines.
- wc no longer warns about character decoding errors in multibyte locales.
- This means for example that "wc /bin/sh" now produces normal output
- (though the word count will have no real meaning) rather than many
- error messages.
- ** New build options
- By default, "make install" no longer attempts to install (or even build) su.
- To change that, use ./configure --enable-install-program=su.
- If you also want to install the new "arch" program, do this:
- ./configure --enable-install-program=arch,su.
- You can inhibit the compilation and installation of selected programs
- at configure time. For example, to avoid installing "hostname" and
- "uptime", use ./configure --enable-no-install-program=hostname,uptime
- Note: currently, "make check" passes, even when arch and su are not
- built (that's the new default). However, if you inhibit the building
- and installation of other programs, don't be surprised if some parts
- of "make check" fail.
- ** Remove deprecated options
- df no longer accepts the --kilobytes option.
- du no longer accepts the --kilobytes or --megabytes options.
- ls no longer accepts the --kilobytes option.
- ptx longer accepts the --copyright option.
- who no longer accepts -i or --idle.
- ** Improved robustness
- ln -f can no longer silently clobber a just-created hard link.
- In some cases, ln could be seen as being responsible for data loss.
- For example, given directories a, b, c, and files a/f and b/f, we
- should be able to do this safely: ln -f a/f b/f c && rm -f a/f b/f
- However, before this change, ln would succeed, and thus cause the
- loss of the contents of a/f.
- stty no longer silently accepts certain invalid hex values
- in its 35-colon command-line argument
- ** Bug fixes
- chmod no longer ignores a dangling symlink. Now, chmod fails
- with a diagnostic saying that it cannot operate on such a file.
- [bug introduced in coreutils-5.1.0]
- cp attempts to read a regular file, even if stat says it is empty.
- Before, "cp /proc/cpuinfo c" would create an empty file when the kernel
- reports stat.st_size == 0, while "cat /proc/cpuinfo > c" would "work",
- and create a nonempty one. [bug introduced in coreutils-6.0]
- cp --parents no longer mishandles symlinks to directories in file
- name components in the source, e.g., "cp --parents symlink/a/b d"
- no longer fails. Also, 'cp' no longer considers a destination
- symlink to be the same as the referenced file when copying links
- or making backups. For example, if SYM is a symlink to FILE,
- "cp -l FILE SYM" now reports an error instead of silently doing
- nothing. The behavior of 'cp' is now better documented when the
- destination is a symlink.
- "cp -i --update older newer" no longer prompts; same for mv
- "cp -i" now detects read errors on standard input, and no longer consumes
- too much seekable input; same for ln, install, mv, and rm.
- cut now diagnoses a range starting with zero (e.g., -f 0-2) as invalid;
- before, it would treat it as if it started with 1 (-f 1-2).
- "cut -f 2-0" now fails; before, it was equivalent to "cut -f 2-"
- cut now diagnoses the '-' in "cut -f -" as an invalid range, rather
- than interpreting it as the unlimited range, "1-".
- date -d now accepts strings of the form e.g., 'YYYYMMDD +N days',
- in addition to the usual 'YYYYMMDD N days'.
- du -s now includes the size of any stat'able-but-inaccessible directory
- in the total size.
- du (without -s) prints whatever it knows of the size of an inaccessible
- directory. Before, du would print nothing for such a directory.
- ls -x DIR would sometimes output the wrong string in place of the
- first entry. [introduced in coreutils-6.8]
- ls --color would mistakenly color a dangling symlink as if it were
- a regular symlink. This would happen only when the dangling symlink
- was not a command-line argument and in a directory with d_type support.
- [introduced in coreutils-6.0]
- ls --color, (with a custom LS_COLORS envvar value including the
- ln=target attribute) would mistakenly output the string "target"
- before the name of each symlink. [introduced in coreutils-6.0]
- od's --skip (-j) option now works even when the kernel says that a
- nonempty regular file has stat.st_size = 0. This happens at least
- with files in /proc and linux-2.6.22.
- "od -j L FILE" had a bug: when the number of bytes to skip, L, is exactly
- the same as the length of FILE, od would skip *no* bytes. When the number
- of bytes to skip is exactly the sum of the lengths of the first N files,
- od would skip only the first N-1 files. [introduced in textutils-2.0.9]
- ./printf %.10000000f 1 could get an internal ENOMEM error and generate
- no output, yet erroneously exit with status 0. Now it diagnoses the error
- and exits with nonzero status. [present in initial implementation]
- seq no longer mishandles obvious cases like "seq 0 0.000001 0.000003",
- so workarounds like "seq 0 0.000001 0.0000031" are no longer needed.
- seq would mistakenly reject some valid format strings containing %%,
- and would mistakenly accept some invalid ones. e.g., %g%% and %%g, resp.
- "seq .1 .1" would mistakenly generate no output on some systems
- Obsolete sort usage with an invalid ordering-option character, e.g.,
- "env _POSIX2_VERSION=199209 sort +1x" no longer makes sort free an
- invalid pointer [introduced in coreutils-6.5]
- sorting very long lines (relative to the amount of available memory)
- no longer provokes unaligned memory access
- split --line-bytes=N (-C N) no longer creates an empty file
- [this bug is present at least as far back as textutils-1.22 (Jan, 1997)]
- tr -c no longer aborts when translating with Set2 larger than the
- complement of Set1. [present in the original version, in 1992]
- tr no longer rejects an unmatched [:lower:] or [:upper:] in SET1.
- [present in the original version]
- * Noteworthy changes in release 6.9 (2007-03-22) [stable]
- ** Bug fixes
- cp -x (--one-file-system) would fail to set mount point permissions
- The default block size and output format for df -P are now unaffected by
- the DF_BLOCK_SIZE, BLOCK_SIZE, and BLOCKSIZE environment variables. It
- is still affected by POSIXLY_CORRECT, though.
- Using pr -m -s (i.e., merging files, with TAB as the output separator)
- no longer inserts extraneous spaces between output columns.
- * Noteworthy changes in release 6.8 (2007-02-24) [not-unstable]
- ** Bug fixes
- chgrp, chmod, and chown now honor the --preserve-root option.
- Before, they would warn, yet continuing traversing and operating on /.
- chmod no longer fails in an environment (e.g., a chroot) with openat
- support but with insufficient /proc support.
- "cp --parents F/G D" no longer creates a directory D/F when F is not
- a directory (and F/G is therefore invalid).
- "cp --preserve=mode" would create directories that briefly had
- too-generous permissions in some cases. For example, when copying a
- directory with permissions 777 the destination directory might
- temporarily be setgid on some file systems, which would allow other
- users to create subfiles with the same group as the directory. Fix
- similar problems with 'install' and 'mv'.
- cut no longer dumps core for usage like "cut -f2- f1 f2" with two or
- more file arguments. This was due to a double-free bug, introduced
- in coreutils-5.3.0.
- dd bs= operands now silently override any later ibs= and obs=
- operands, as POSIX and tradition require.
- "ls -FRL" always follows symbolic links on Linux. Introduced in
- coreutils-6.0.
- A cross-partition "mv /etc/passwd ~" (by non-root) now prints
- a reasonable diagnostic. Before, it would print this:
- "mv: cannot remove `/etc/passwd': Not a directory".
- pwd and "readlink -e ." no longer fail unnecessarily when a parent
- directory is unreadable.
- rm (without -f) could prompt when it shouldn't, or fail to prompt
- when it should, when operating on a full name longer than 511 bytes
- and getting an ENOMEM error while trying to form the long name.
- rm could mistakenly traverse into the wrong directory under unusual
- conditions: when a full name longer than 511 bytes specifies a search-only
- directory, and when forming that name fails with ENOMEM, rm would attempt
- to open a truncated-to-511-byte name with the first five bytes replaced
- with "[...]". If such a directory were to actually exist, rm would attempt
- to remove it.
- "rm -rf /etc/passwd" (run by non-root) now prints a diagnostic.
- Before it would print nothing.
- "rm --interactive=never F" no longer prompts for an unwritable F
- "rm -rf D" would emit a misleading diagnostic when failing to
- remove a symbolic link within the unwritable directory, D.
- Introduced in coreutils-6.0. Similarly, when a cross-partition
- "mv" fails because the source directory is unwritable, it now gives
- a reasonable diagnostic. Before, this would print
- $ mkdir /tmp/x; touch /tmp/x/y; chmod -w /tmp/x;
- $ test $(stat -c %d /tmp/x) -ne $(stat -c %d .) && mv /tmp/x/y .
- mv: cannot remove `/tmp/x/y': Not a directory
- Now it prints this:
- mv: cannot remove `/tmp/x/y': Permission denied.
- ** New features
- sort's new --compress-program=PROG option specifies a compression
- program to use when writing and reading temporary files.
- This can help save both time and disk space when sorting large inputs.
- sort accepts the new option -C, which acts like -c except no diagnostic
- is printed. Its --check option now accepts an optional argument, and
- --check=quiet and --check=silent are now aliases for -C, while
- --check=diagnose-first is an alias for -c or plain --check.
- * Noteworthy changes in release 6.7 (2006-12-08) [stable]
- ** Bug fixes
- When cp -p copied a file with special mode bits set, the same bits
- were set on the copy even when ownership could not be preserved.
- This could result in files that were setuid to the wrong user.
- To fix this, special mode bits are now set in the copy only if its
- ownership is successfully preserved. Similar problems were fixed
- with mv when copying across file system boundaries. This problem
- affects all versions of coreutils through 6.6.
- cp --preserve=ownership would create output files that temporarily
- had too-generous permissions in some cases. For example, when
- copying a file with group A and mode 644 into a group-B sticky
- directory, the output file was briefly readable by group B.
- Fix similar problems with cp options like -p that imply
- --preserve=ownership, with install -d when combined with either -o
- or -g, and with mv when copying across file system boundaries.
- This bug affects all versions of coreutils through 6.6.
- du --one-file-system (-x) would skip subdirectories of any directory
- listed as second or subsequent command line argument. This bug affects
- coreutils-6.4, 6.5 and 6.6.
- * Noteworthy changes in release 6.6 (2006-11-22) [stable]
- ** Bug fixes
- ls would segfault (dereference a NULL pointer) for a file with a
- nameless group or owner. This bug was introduced in coreutils-6.5.
- A bug in the latest official m4/gettext.m4 (from gettext-0.15)
- made configure fail to detect gettext support, due to the unusual
- way in which coreutils uses AM_GNU_GETTEXT.
- ** Improved robustness
- Now, du (and the other fts clients: chmod, chgrp, chown) honor a
- trailing slash in the name of a symlink-to-directory even on
- Solaris 9, by working around its buggy fstatat implementation.
- * Major changes in release 6.5 (2006-11-19) [stable]
- ** Bug fixes
- du (and the other fts clients: chmod, chgrp, chown) would exit early
- when encountering an inaccessible directory on a system with native
- openat support (i.e., linux-2.6.16 or newer along with glibc-2.4
- or newer). This bug was introduced with the switch to gnulib's
- openat-based variant of fts, for coreutils-6.0.
- "ln --backup f f" now produces a sensible diagnostic
- ** New features
- rm accepts a new option: --one-file-system
- * Major changes in release 6.4 (2006-10-22) [stable]
- ** Bug fixes
- chgrp and chown would malfunction when invoked with both -R and -H and
- with one or more of the following: --preserve-root, --verbose, --changes,
- --from=o:g (chown only). This bug was introduced with the switch to
- gnulib's openat-based variant of fts, for coreutils-6.0.
- cp --backup dir1 dir2, would rename an existing dir2/dir1 to dir2/dir1~.
- This bug was introduced in coreutils-6.0.
- With --force (-f), rm no longer fails for ENOTDIR.
- For example, "rm -f existing-non-directory/anything" now exits
- successfully, ignoring the error about a nonexistent file.
- * Major changes in release 6.3 (2006-09-30) [stable]
- ** Improved robustness
- pinky no longer segfaults on Darwin 7.9.0 (MacOS X 10.3.9) due to a
- buggy native getaddrinfo function.
- rm works around a bug in Darwin 7.9.0 (MacOS X 10.3.9) that would
- sometimes keep it from removing all entries in a directory on an HFS+
- or NFS-mounted partition.
- sort would fail to handle very large input (around 40GB) on systems with a
- mkstemp function that returns a file descriptor limited to 32-bit offsets.
- ** Bug fixes
- chmod would fail unnecessarily in an unusual case: when an initially-
- inaccessible argument is rendered accessible by chmod's action on a
- preceding command line argument. This bug also affects chgrp, but
- it is harder to demonstrate. It does not affect chown. The bug was
- introduced with the switch from explicit recursion to the use of fts
- in coreutils-5.1.0 (2003-10-15).
- cp -i and mv -i occasionally neglected to prompt when the copy or move
- action was bound to fail. This bug dates back to before fileutils-4.0.
- With --verbose (-v), cp and mv would sometimes generate no output,
- or neglect to report file removal.
- For the "groups" command:
- "groups" no longer prefixes the output with "user :" unless more
- than one user is specified; this is for compatibility with BSD.
- "groups user" now exits nonzero when it gets a write error.
- "groups" now processes options like --help more compatibly.
- shuf would infloop, given 8KB or more of piped input
- ** Portability
- Versions of chmod, chown, chgrp, du, and rm (tools that use openat etc.)
- compiled for Solaris 8 now also work when run on Solaris 10.
- * Major changes in release 6.2 (2006-09-18) [stable candidate]
- ** Changes in behavior
- mkdir -p and install -d (or -D) now use a method that forks a child
- process if the working directory is unreadable and a later argument
- uses a relative file name. This avoids some race conditions, but it
- means you may need to kill two processes to stop these programs.
- rm now rejects attempts to remove the root directory, e.g., 'rm -fr /'
- now fails without removing anything. Likewise for any file name with
- a final './' or '../' component.
- tail now ignores the -f option if POSIXLY_CORRECT is set, no file
- operand is given, and standard input is any FIFO; formerly it did
- this only for pipes.
- ** Infrastructure changes
- Coreutils now uses gnulib via the gnulib-tool script.
- If you check the source out from CVS, then follow the instructions
- in README-cvs. Although this represents a large change to the
- infrastructure, it should cause no change in how the tools work.
- ** Bug fixes
- cp --backup no longer fails when the last component of a source file
- name is "." or "..".
- "ls --color" would highlight other-writable and sticky directories
- no differently than regular directories on a file system with
- dirent.d_type support.
- "mv -T --verbose --backup=t A B" now prints the " (backup: B.~1~)"
- suffix when A and B are directories as well as when they are not.
- mv and "cp -r" no longer fail when invoked with two arguments
- where the first one names a directory and the second name ends in
- a slash and doesn't exist. E.g., "mv dir B/", for nonexistent B,
- now succeeds, once more. This bug was introduced in coreutils-5.3.0.
- * Major changes in release 6.1 (2006-08-19) [unstable]
- ** Changes in behavior
- df now considers BSD "kernfs" file systems to be dummies
- ** New features
- printf now supports the 'I' flag on hosts whose underlying printf
- implementations support 'I', e.g., "printf %Id 2".
- ** Bug fixes
- cp --sparse preserves sparseness at the end of a file, even when
- the file's apparent size is not a multiple of its block size.
- [introduced with the original design, in fileutils-4.0r, 2000-04-29]
- df (with a command line argument) once again prints its header
- [introduced in coreutils-6.0]
- ls -CF would misalign columns in some cases involving non-stat'able files
- [introduced in coreutils-6.0]
- * Major changes in release 6.0 (2006-08-15) [unstable]
- ** Improved robustness
- df: if the file system claims to have more available than total blocks,
- report the number of used blocks as being "total - available"
- (a negative number) rather than as garbage.
- dircolors: a new autoconf run-test for AIX's buggy strndup function
- prevents malfunction on that system; may also affect cut, expand,
- and unexpand.
- fts no longer changes the current working directory, so its clients
- (chmod, chown, chgrp, du) no longer malfunction under extreme conditions.
- pwd and other programs using lib/getcwd.c work even on file systems
- where dirent.d_ino values are inconsistent with those from stat.st_ino.
- rm's core is now reentrant: rm --recursive (-r) now processes
- hierarchies without changing the working directory at all.
- ** Changes in behavior
- basename and dirname now treat // as different from / on platforms
- where the two are distinct.
- chmod, install, and mkdir now preserve a directory's set-user-ID and
- set-group-ID bits unless you explicitly request otherwise. E.g.,
- 'chmod 755 DIR' and 'chmod u=rwx,go=rx DIR' now preserve DIR's
- set-user-ID and set-group-ID bits instead of clearing them, and
- similarly for 'mkdir -m 755 DIR' and 'mkdir -m u=rwx,go=rx DIR'. To
- clear the bits, mention them explicitly in a symbolic mode, e.g.,
- 'mkdir -m u=rwx,go=rx,-s DIR'. To set them, mention them explicitly
- in either a symbolic or a numeric mode, e.g., 'mkdir -m 2755 DIR',
- 'mkdir -m u=rwx,go=rx,g+s' DIR. This change is for convenience on
- systems where these bits inherit from parents. Unfortunately other
- operating systems are not consistent here, and portable scripts
- cannot assume the bits are set, cleared, or preserved, even when the
- bits are explicitly mentioned. For example, OpenBSD 3.9 'mkdir -m
- 777 D' preserves D's setgid bit but 'chmod 777 D' clears it.
- Conversely, Solaris 10 'mkdir -m 777 D', 'mkdir -m g-s D', and
- 'chmod 0777 D' all preserve D's setgid bit, and you must use
- something like 'chmod g-s D' to clear it.
- 'cp --link --no-dereference' now works also on systems where the
- link system call cannot create a hard link to a symbolic link.
- This change has no effect on systems with a Linux-based kernel.
- csplit and nl now use POSIX syntax for regular expressions, not
- Emacs syntax. As a result, character classes like [[:print:]] and
- interval expressions like A\{1,9\} now have their usual meaning,
- . no longer matches the null character, and \ must precede the + and
- ? operators.
- date: a command like date -d '2006-04-23 21 days ago' would print
- the wrong date in some time zones. (see the test for an example)
- df changes:
- df now considers "none" and "proc" file systems to be dummies and
- therefore does not normally display them. Also, inaccessible file
- systems (which can be caused by shadowed mount points or by
- chrooted bind mounts) are now dummies, too.
- df now fails if it generates no output, so you can inspect the
- exit status of a command like "df -t ext3 -t reiserfs DIR" to test
- whether DIR is on a file system of type "ext3" or "reiserfs".
- expr no longer complains about leading ^ in a regular expression
- (the anchor is ignored), or about regular expressions like A** (the
- second "*" is ignored). expr now exits with status 2 (not 3) for
- errors it detects in the expression's values; exit status 3 is now
- used only for internal errors (such as integer overflow, which expr
- now checks for).
- install and mkdir now implement the X permission symbol correctly,
- e.g., 'mkdir -m a+X dir'; previously the X was ignored.
- install now creates parent directories with mode u=rwx,go=rx (755)
- instead of using the mode specified by the -m option; and it does
- not change the owner or group of parent directories. This is for
- compatibility with BSD and closes some race conditions.
- ln now uses different (and we hope clearer) diagnostics when it fails.
- ln -v now acts more like FreeBSD, so it generates output only when
- successful and the output is easier to parse.
- ls now defaults to --time-style='locale', not --time-style='posix-long-iso'.
- However, the 'locale' time style now behaves like 'posix-long-iso'
- if your locale settings appear to be messed up. This change
- attempts to have the default be the best of both worlds.
- mkfifo and mknod no longer set special mode bits (setuid, setgid,
- and sticky) with the -m option.
- nohup's usual diagnostic now more precisely specifies the I/O
- redirections, e.g., "ignoring input and appending output to
- nohup.out". Also, nohup now redirects stderr to nohup.out (or
- $HOME/nohup.out) if stdout is closed and stderr is a tty; this is in
- response to Open Group XCU ERN 71.
- rm --interactive now takes an optional argument, although the
- default of using no argument still acts like -i.
- rm no longer fails to remove an empty, unreadable directory
- seq changes:
- seq defaults to a minimal fixed point format that does not lose
- information if seq's operands are all fixed point decimal numbers.
- You no longer need the '-f%.f' in 'seq -f%.f 1048575 1024 1050623',
- for example, since the default format now has the same effect.
- seq now lets you use %a, %A, %E, %F, and %G formats.
- seq now uses long double internally rather than double.
- sort now reports incompatible options (e.g., -i and -n) rather than
- silently ignoring one of them.
- stat's --format=FMT option now works the way it did before 5.3.0:
- FMT is automatically newline terminated. The first stable release
- containing this change was 5.92.
- stat accepts the new option --printf=FMT, where FMT is *not*
- automatically newline terminated.
- stat: backslash escapes are interpreted in a format string specified
- via --printf=FMT, but not one specified via --format=FMT. That includes
- octal (\ooo, at most three octal digits), hexadecimal (\xhh, one or
- two hex digits), and the standard sequences (\a, \b, \f, \n, \r, \t,
- \v, \", \\).
- With no operand, 'tail -f' now silently ignores the '-f' only if
- standard input is a FIFO or pipe and POSIXLY_CORRECT is set.
- Formerly, it ignored the '-f' when standard input was a FIFO, pipe,
- or socket.
- ** Scheduled for removal
- ptx's --copyright (-C) option is scheduled for removal in 2007, and
- now evokes a warning. Use --version instead.
- rm's --directory (-d) option is scheduled for removal in 2006. This
- option has been silently ignored since coreutils 5.0. On systems
- that support unlinking of directories, you can use the "unlink"
- command to unlink a directory.
- Similarly, we are considering the removal of ln's --directory (-d,
- -F) option in 2006. Please write to <bug-coreutils@gnu.org> if this
- would cause a problem for you. On systems that support hard links
- to directories, you can use the "link" command to create one.
- ** New programs
- base64: base64 encoding and decoding (RFC 3548) functionality.
- sha224sum: print or check a SHA224 (224-bit) checksum
- sha256sum: print or check a SHA256 (256-bit) checksum
- sha384sum: print or check a SHA384 (384-bit) checksum
- sha512sum: print or check a SHA512 (512-bit) checksum
- shuf: Shuffle lines of text.
- ** New features
- chgrp now supports --preserve-root, --no-preserve-root (default),
- as it was documented to do, and just as chmod, chown, and rm do.
- New dd iflag= and oflag= flags:
- 'directory' causes dd to fail unless the file is a directory, on
- hosts that support this (e.g., Linux kernels, version 2.1.126 and
- later). This has limited utility but is present for completeness.
- 'noatime' causes dd to read a file without updating its access
- time, on hosts that support this (e.g., Linux kernels, version
- 2.6.8 and later).
- 'nolinks' causes dd to fail if the file has multiple hard links,
- on hosts that support this (e.g., Solaris 10 and later).
- ls accepts the new option --group-directories-first, to make it
- list directories before files.
- rm now accepts the -I (--interactive=once) option. This new option
- prompts once if rm is invoked recursively or if more than three
- files are being deleted, which is less intrusive than -i prompting
- for every file, but provides almost the same level of protection
- against mistakes.
- shred and sort now accept the --random-source option.
- sort now accepts the --random-sort (-R) option and 'R' ordering option.
- sort now supports obsolete usages like "sort +1 -2" unless
- POSIXLY_CORRECT is set. However, when conforming to POSIX
- 1003.1-2001 "sort +1" still sorts the file named "+1".
- wc accepts a new option --files0-from=FILE, where FILE contains a
- list of NUL-terminated file names.
- ** Bug fixes
- cat with any of the options, -A -v -e -E -T, when applied to a
- file in /proc or /sys (linux-specific), would truncate its output,
- usually printing nothing.
- cp -p would fail in a /proc-less chroot, on some systems
- When 'cp -RL' encounters the same directory more than once in the
- hierarchy beneath a single command-line argument, it no longer confuses
- them with hard-linked directories.
- fts-using tools (chmod, chown, chgrp, du) no longer fail due to
- a double-free bug -- it could be triggered by making a directory
- inaccessible while e.g., du is traversing the hierarchy under it.
- fts-using tools (chmod, chown, chgrp, du) no longer misinterpret
- a very long symlink chain as a dangling symlink. Before, such a
- misinterpretation would cause these tools not to diagnose an ELOOP error.
- ls --indicator-style=file-type would sometimes stat a symlink
- unnecessarily.
- ls --file-type worked like --indicator-style=slash (-p),
- rather than like --indicator-style=file-type.
- mv: moving a symlink into the place of an existing non-directory is
- now done atomically; before, mv would first unlink the destination.
- mv -T DIR EMPTY_DIR no longer fails unconditionally. Also, mv can
- now remove an empty destination directory: mkdir -p a b/a; mv a b
- rm (on systems with openat) can no longer exit before processing
- all command-line arguments.
- rm is no longer susceptible to a few low-probability memory leaks.
- rm -r no longer fails to remove an inaccessible and empty directory
- rm -r's cycle detection code can no longer be tricked into reporting
- a false positive (introduced in fileutils-4.1.9).
- shred --remove FILE no longer segfaults on Gentoo systems
- sort would fail for large inputs (~50MB) on systems with a buggy
- mkstemp function. sort and tac now use the replacement mkstemp
- function, and hence are no longer subject to limitations (of 26 or 32,
- on the maximum number of files from a given template) on HP-UX 10.20,
- SunOS 4.1.4, Solaris 2.5.1 and OSF1/Tru64 V4.0F&V5.1.
- tail -f once again works on a file with the append-only
- attribute (affects at least Linux ext2, ext3, xfs file systems)
- * Major changes in release 5.97 (2006-06-24) [stable]
- * Major changes in release 5.96 (2006-05-22) [stable]
- * Major changes in release 5.95 (2006-05-12) [stable]
- * Major changes in release 5.94 (2006-02-13) [stable]
- [see the b5_9x branch for details]
- * Major changes in release 5.93 (2005-11-06) [stable]
- ** Bug fixes
- dircolors no longer segfaults upon an attempt to use the new
- STICKY_OTHER_WRITABLE (OWT) attribute.
- du no longer overflows a counter when processing a file larger than
- 2^31-1 on some 32-bit systems (at least some AIX 5.1 configurations).
- md5sum once again defaults to using the ' ' non-binary marker
- (rather than the '*' binary marker) by default on Unix-like systems.
- mkdir -p and install -d no longer exit nonzero when asked to create
- a directory like 'nonexistent/.'
- rm emits a better diagnostic when (without -r) it fails to remove
- a directory on e.g., Solaris 9/10 systems.
- tac now works when stdin is a tty, even on non-Linux systems.
- "tail -c 2 FILE" and "touch 0101000000" now operate as POSIX
- 1003.1-2001 requires, even when coreutils is conforming to older
- POSIX standards, as the newly-required behavior is upward-compatible
- with the old.
- The documentation no longer mentions rm's --directory (-d) option.
- ** Build-related bug fixes
- installing .mo files would fail
- * Major changes in release 5.92 (2005-10-22) [stable]
- ** Bug fixes
- chmod now diagnoses an invalid mode string starting with an octal digit
- dircolors now properly quotes single-quote characters
- * Major changes in release 5.91 (2005-10-17) [stable candidate]
- ** Bug fixes
- "mkdir -p /a/b/c" no longer fails merely because a leading prefix
- directory (e.g., /a or /a/b) exists on a read-only file system.
- ** Removed options
- tail's --allow-missing option has been removed. Use --retry instead.
- stat's --link and -l options have been removed.
- Use --dereference (-L) instead.
- ** Deprecated options
- Using ls, du, or df with the --kilobytes option now evokes a warning
- that the long-named option is deprecated. Use '-k' instead.
- du's long-named --megabytes option now evokes a warning.
- Use -m instead.
- * Major changes in release 5.90 (2005-09-29) [unstable]
- ** Bring back support for 'head -NUM', 'tail -NUM', etc. even when
- conforming to POSIX 1003.1-2001. The following changes apply only
- when conforming to POSIX 1003.1-2001; there is no effect when
- conforming to older POSIX versions.
- The following usages now behave just as when conforming to older POSIX:
- date -I
- expand -TAB1[,TAB2,...]
- fold -WIDTH
- head -NUM
- join -j FIELD
- join -j1 FIELD
- join -j2 FIELD
- join -o FIELD_NAME1 FIELD_NAME2...
- nice -NUM
- od -w
- pr -S
- split -NUM
- tail -[NUM][bcl][f] [FILE]
- The following usages no longer work, due to the above changes:
- date -I TIMESPEC (use 'date -ITIMESPEC' instead)
- od -w WIDTH (use 'od -wWIDTH' instead)
- pr -S STRING (use 'pr -SSTRING' instead)
- A few usages still have behavior that depends on which POSIX standard is
- being conformed to, and portable applications should beware these
- problematic usages. These include:
- Problematic Standard-conforming replacement, depending on
- usage whether you prefer the behavior of:
- POSIX 1003.2-1992 POSIX 1003.1-2001
- sort +4 sort -k 5 sort ./+4
- tail +4 tail -n +4 tail ./+4
- tail - f tail f [see (*) below]
- tail -c 4 tail -c 10 ./4 tail -c4
- touch 12312359 f touch -t 12312359 f touch ./12312359 f
- uniq +4 uniq -s 4 uniq ./+4
- (*) "tail - f" does not conform to POSIX 1003.1-2001; to read
- standard input and then "f", use the command "tail -- - f".
- These changes are in response to decisions taken in the January 2005
- Austin Group standardization meeting. For more details, please see
- "Utility Syntax Guidelines" in the Minutes of the January 2005
- Meeting <https://www.opengroup.org/austin/docs/austin_239.html>.
- ** Binary input and output are now implemented more consistently.
- These changes affect only platforms like MS-DOS that distinguish
- between binary and text files.
- The following programs now always use text input/output:
- expand unexpand
- The following programs now always use binary input/output to copy data:
- cp install mv shred
- The following programs now always use binary input/output to copy
- data, except for stdin and stdout when it is a terminal.
- head tac tail tee tr
- (cat behaves similarly, unless one of the options -bensAE is used.)
- cat's --binary or -B option has been removed. It existed only on
- MS-DOS-like platforms, and didn't work as documented there.
- md5sum and sha1sum now obey the -b or --binary option, even if
- standard input is a terminal, and they no longer report files to be
- binary if they actually read them in text mode.
- ** Changes for better conformance to POSIX
- cp, ln, mv, rm changes:
- Leading white space is now significant in responses to yes-or-no questions.
- For example, if "rm" asks "remove regular file `foo'?" and you respond
- with " y" (i.e., space before "y"), it counts as "no".
- dd changes:
- On a QUIT or PIPE signal, dd now exits without printing statistics.
- On hosts lacking the INFO signal, dd no longer treats the USR1
- signal as if it were INFO when POSIXLY_CORRECT is set.
- If the file F is non-seekable and contains fewer than N blocks,
- then before copying "dd seek=N of=F" now extends F with zeroed
- blocks until F contains N blocks.
- fold changes:
- When POSIXLY_CORRECT is set, "fold file -3" is now equivalent to
- "fold file ./-3", not the obviously-erroneous "fold file ./-w3".
- ls changes:
- -p now marks only directories; it is equivalent to the new option
- --indicator-style=slash. Use --file-type or
- --indicator-style=file-type to get -p's old behavior.
- nice changes:
- Documentation and diagnostics now refer to "nicenesses" (commonly
- in the range -20...19) rather than "nice values" (commonly 0...39).
- nohup changes:
- nohup now ignores the umask when creating nohup.out.
- nohup now closes stderr if it is a terminal and stdout is closed.
- nohup now exits with status 127 (not 1) when given an invalid option.
- pathchk changes:
- It now rejects the empty name in the normal case. That is,
- "pathchk -p ''" now fails, and "pathchk ''" fails unless the
- current host (contra POSIX) allows empty file names.
- The new -P option checks whether a file name component has leading "-",
- as suggested in interpretation "Austin-039:XCU:pathchk:pathchk -p"
- <https://collaboration.opengroup.org/austin/interps/documents.php?action=show&gdid=6232>.
- It also rejects the empty name even if the current host accepts it; see
- <https://collaboration.opengroup.org/austin/interps/documents.php?action=show&gdid=6233>.
- The --portability option is now equivalent to -p -P.
- ** Bug fixes
- chmod, mkdir, mkfifo, and mknod formerly mishandled rarely-used symbolic
- permissions like =xX and =u, and did not properly diagnose some invalid
- strings like g+gr, ug,+x, and +1. These bugs have been fixed.
- csplit could produce corrupt output, given input lines longer than 8KB
- dd now computes statistics using a realtime clock (if available)
- rather than the time-of-day clock, to avoid glitches if the
- time-of-day is changed while dd is running. Also, it avoids
- using unsafe code in signal handlers; this fixes some core dumps.
- expr and test now correctly compare integers of unlimited magnitude.
- expr now detects integer overflow when converting strings to integers,
- rather than silently wrapping around.
- ls now refuses to generate timestamps containing more than 1000 bytes, to
- foil potential denial-of-service attacks on hosts with very large stacks.
- "mkdir -m =+x dir" no longer ignores the umask when evaluating "+x",
- and similarly for mkfifo and mknod.
- "mkdir -p /tmp/a/b dir" no longer attempts to create the '.'-relative
- directory, dir (in /tmp/a), when, after creating /tmp/a/b, it is unable
- to return to its initial working directory. Similarly for "install -D
- file /tmp/a/b/file".
- "pr -D FORMAT" now accepts the same formats that "date +FORMAT" does.
- stat now exits nonzero if a file operand does not exist
- ** Improved robustness
- Date no longer needs to allocate virtual memory to do its job,
- so it can no longer fail due to an out-of-memory condition,
- no matter how large the result.
- ** Improved portability
- hostid now prints exactly 8 hexadecimal digits, possibly with leading zeros,
- and without any spurious leading "fff..." on 64-bit hosts.
- nice now works on Darwin 7.7.0 in spite of its invalid definition of NZERO.
- 'rm -r' can remove all entries in a directory even when it is on a
- file system for which readdir is buggy and that was not checked by
- coreutils' old configure-time run-test.
- sleep no longer fails when resumed after being suspended on linux-2.6.8.1,
- in spite of that kernel's buggy nanosleep implementation.
- ** New features
- chmod -w now complains if its behavior differs from what chmod a-w
- would do, and similarly for chmod -r, chmod -x, etc.
- cp and mv: the --reply=X option is deprecated
- date accepts the new option --rfc-3339=TIMESPEC. The old --iso-8601 (-I)
- option is deprecated; it still works, but new applications should avoid it.
- date, du, ls, and pr's time formats now support new %:z, %::z, %:::z
- specifiers for numeric time zone offsets like -07:00, -07:00:00, and -07.
- dd has new iflag= and oflag= flags "binary" and "text", which have an
- effect only on nonstandard platforms that distinguish text from binary I/O.
- dircolors now supports SETUID, SETGID, STICKY_OTHER_WRITABLE,
- OTHER_WRITABLE, and STICKY, with ls providing default colors for these
- categories if not specified by dircolors.
- du accepts new options: --time[=TYPE] and --time-style=STYLE
- join now supports a NUL field separator, e.g., "join -t '\0'".
- join now detects and reports incompatible options, e.g., "join -t x -t y",
- ls no longer outputs an extra space between the mode and the link count
- when none of the listed files has an ACL.
- md5sum --check now accepts multiple input files, and similarly for sha1sum.
- If stdin is a terminal, nohup now redirects it from /dev/null to
- prevent the command from tying up an OpenSSH session after you logout.
- "rm -FOO" now suggests "rm ./-FOO" if the file "-FOO" exists and
- "-FOO" is not a valid option.
- stat -f -c %S outputs the fundamental block size (used for block counts).
- stat -f's default output format has been changed to output this size as well.
- stat -f recognizes file systems of type XFS and JFS
- "touch -" now touches standard output, not a file named "-".
- uname -a no longer generates the -p and -i outputs if they are unknown.
- * Major changes in release 5.3.0 (2005-01-08) [unstable]
- ** Bug fixes
- Several fixes to chgrp and chown for compatibility with POSIX and BSD:
- Do not affect symbolic links by default.
- Now, operate on whatever a symbolic link points to, instead.
- To get the old behavior, use --no-dereference (-h).
- --dereference now works, even when the specified owner
- and/or group match those of an affected symlink.
- Check for incompatible options. When -R and --dereference are
- both used, then either -H or -L must also be used. When -R and -h
- are both used, then -P must be in effect.
- -H, -L, and -P have no effect unless -R is also specified.
- If -P and -R are both specified, -h is assumed.
- Do not optimize away the chown() system call when the file's owner
- and group already have the desired value. This optimization was
- incorrect, as it failed to update the last-changed time and reset
- special permission bits, as POSIX requires.
- "chown : file", "chown '' file", and "chgrp '' file" now succeed
- without changing the uid or gid, instead of reporting an error.
- Do not report an error if the owner or group of a
- recursively-encountered symbolic link cannot be updated because
- the file system does not support it.
- chmod now accepts multiple mode-like options, e.g., "chmod -r -w f".
- chown is no longer subject to a race condition vulnerability, when
- used with --from=O:G and without the (-h) --no-dereference option.
- cut's --output-delimiter=D option works with abutting byte ranges.
- dircolors's documentation now recommends that shell scripts eval
- "`dircolors`" rather than `dircolors`, to avoid shell expansion pitfalls.
- du no longer segfaults when a subdirectory of an operand
- directory is removed while du is traversing that subdirectory.
- Since the bug was in the underlying fts.c module, it also affected
- chown, chmod, and chgrp.
- du's --exclude-from=FILE and --exclude=P options now compare patterns
- against the entire name of each file, rather than against just the
- final component.
- echo now conforms to POSIX better. It supports the \0ooo syntax for
- octal escapes, and \c now terminates printing immediately. If
- POSIXLY_CORRECT is set and the first argument is not "-n", echo now
- outputs all option-like arguments instead of treating them as options.
- expand and unexpand now conform to POSIX better. They check for
- blanks (which can include characters other than space and tab in
- non-POSIX locales) instead of spaces and tabs. Unexpand now
- preserves some blanks instead of converting them to tabs or spaces.
- "ln x d/" now reports an error if d/x is a directory and x a file,
- instead of incorrectly creating a link to d/x/x.
- ls no longer segfaults on systems for which SIZE_MAX != (size_t) -1.
- md5sum and sha1sum now report an error when given so many input
- lines that their line counter overflows, instead of silently
- reporting incorrect results.
- Fixes for "nice":
- If it fails to lower the niceness due to lack of permissions,
- it goes ahead and runs the command anyway, as POSIX requires.
- It no longer incorrectly reports an error if the current niceness
- happens to be -1.
- It no longer assumes that nicenesses range from -20 through 19.
- It now consistently adjusts out-of-range nicenesses to the
- closest values in range; formerly it sometimes reported an error.
- pathchk no longer accepts trailing options, e.g., "pathchk -p foo -b"
- now treats -b as a file name to check, not as an invalid option.
- 'pr --columns=N' was not equivalent to 'pr -N' when also using
- either -s or -w.
- pr now supports page numbers up to 2**64 on most hosts, and it
- detects page number overflow instead of silently wrapping around.
- pr now accepts file names that begin with "+" so long as the rest of
- the file name does not look like a page range.
- printf has several changes:
- It now uses 'intmax_t' (not 'long int') to format integers, so it
- can now format 64-bit integers on most modern hosts.
- On modern hosts it now supports the C99-inspired %a, %A, %F conversion
- specs, the "'" and "0" flags, and the ll, j, t, and z length modifiers
- (this is compatible with recent Bash versions).
- The printf command now rejects invalid conversion specifications
- like %#d, instead of relying on undefined behavior in the underlying
- printf function.
- ptx now diagnoses invalid values for its --width=N (-w)
- and --gap-size=N (-g) options.
- mv (when moving between partitions) no longer fails when
- operating on too many command-line-specified nonempty directories.
- "readlink -f" is more compatible with prior implementations
- rm (without -f) no longer hangs when attempting to remove a symlink
- to a file on an off-line NFS-mounted partition.
- rm no longer gets a failed assertion under some unusual conditions.
- rm no longer requires read access to the current directory.
- "rm -r" would mistakenly fail to remove files under a directory
- for some types of errors (e.g., read-only file system, I/O error)
- when first encountering the directory.
- "sort" fixes:
- "sort -o -" now writes to a file named "-" instead of to standard
- output; POSIX requires this.
- An unlikely race condition has been fixed where "sort" could have
- mistakenly removed a temporary file belonging to some other process.
- "sort" no longer has O(N**2) behavior when it creates many temporary files.
- tac can now handle regular, nonseekable files like Linux's
- /proc/modules. Before, it would produce no output for such a file.
- tac would exit immediately upon I/O or temp-file creation failure.
- Now it continues on, processing any remaining command line arguments.
- "tail -f" no longer mishandles pipes and fifos. With no operands,
- tail now ignores -f if standard input is a pipe, as POSIX requires.
- When conforming to POSIX 1003.2-1992, tail now supports the SUSv2 b
- modifier (e.g., "tail -10b file") and it handles some obscure cases
- more correctly, e.g., "tail +cl" now reads the file "+cl" rather
- than reporting an error, "tail -c file" no longer reports an error,
- and "tail - file" no longer reads standard input.
- tee now exits when it gets a SIGPIPE signal, as POSIX requires.
- To get tee's old behavior, use the shell command "(trap '' PIPE; tee)".
- Also, "tee -" now writes to standard output instead of to a file named "-".
- "touch -- MMDDhhmm[yy] file" is now equivalent to
- "touch MMDDhhmm[yy] file" even when conforming to pre-2001 POSIX.
- tr no longer mishandles a second operand with leading "-".
- who now prints user names in full instead of truncating them after 8 bytes.
- The following commands now reject unknown options instead of
- accepting them as operands, so that users are properly warned that
- options may be added later. Formerly they accepted unknown options
- as operands; e.g., "basename -a a" acted like "basename -- -a a".
- basename dirname factor hostname link nohup sync unlink yes
- ** New features
- For efficiency, 'sort -m' no longer copies input to a temporary file
- merely because the input happens to come from a pipe. As a result,
- some relatively-contrived examples like 'cat F | sort -m -o F - G'
- are no longer safe, as 'sort' might start writing F before 'cat' is
- done reading it. This problem cannot occur unless '-m' is used.
- When outside the default POSIX locale, the 'who' and 'pinky'
- commands now output timestamps like "2004-06-21 13:09" instead of
- the traditional "Jun 21 13:09".
- pwd now works even when run from a working directory whose name
- is longer than PATH_MAX.
- cp, install, ln, and mv have a new --no-target-directory (-T) option,
- and -t is now a short name for their --target-directory option.
- cp -pu and mv -u (when copying) now don't bother to update the
- destination if the resulting timestamp would be no newer than the
- preexisting timestamp. This saves work in the common case when
- copying or moving multiple times to the same destination in a file
- system with a coarse timestamp resolution.
- cut accepts a new option, --complement, to complement the set of
- selected bytes, characters, or fields.
- dd now also prints the number of bytes transferred, the time, and the
- transfer rate. The new "status=noxfer" operand suppresses this change.
- dd has new conversions for the conv= option:
- nocreat do not create the output file
- excl fail if the output file already exists
- fdatasync physically write output file data before finishing
- fsync likewise, but also write metadata
- dd has new iflag= and oflag= options with the following flags:
- append append mode (makes sense for output file only)
- direct use direct I/O for data
- dsync use synchronized I/O for data
- sync likewise, but also for metadata
- nonblock use non-blocking I/O
- nofollow do not follow symlinks
- noctty do not assign controlling terminal from file
- stty now provides support (iutf8) for setting UTF-8 input mode.
- With stat, a specified format is no longer automatically newline terminated.
- If you want a newline at the end of your output, append '\n' to the format
- string.
- 'df', 'du', and 'ls' now take the default block size from the
- BLOCKSIZE environment variable if the BLOCK_SIZE, DF_BLOCK_SIZE,
- DU_BLOCK_SIZE, and LS_BLOCK_SIZE environment variables are not set.
- Unlike the other variables, though, BLOCKSIZE does not affect
- values like 'ls -l' sizes that are normally displayed as bytes.
- This new behavior is for compatibility with BSD.
- du accepts a new option --files0-from=FILE, where FILE contains a
- list of NUL-terminated file names.
- Date syntax as used by date -d, date -f, and touch -d has been
- changed as follows:
- Dates like 'January 32' with out-of-range components are now rejected.
- Dates can have fractional timestamps like 2004-02-27 14:19:13.489392193.
- Dates can be entered via integer counts of seconds since 1970 when
- prefixed by '@'. For example, '@321' represents 1970-01-01 00:05:21 UTC.
- Time zone corrections can now separate hours and minutes with a colon,
- and can follow standard abbreviations like "UTC". For example,
- "UTC +0530" and "+05:30" are supported, and are both equivalent to "+0530".
- Date values can now have leading TZ="..." assignments that override
- the environment only while that date is being processed. For example,
- the following shell command converts from Paris to New York time:
- TZ="America/New_York" date --date='TZ="Europe/Paris" 2004-10-31 06:30'
- 'date' has a new option --iso-8601=ns that outputs
- nanosecond-resolution timestamps.
- echo -e '\xHH' now outputs a byte whose hexadecimal value is HH,
- for compatibility with bash.
- ls now exits with status 1 on minor problems, 2 if serious trouble.
- ls has a new --hide=PATTERN option that behaves like
- --ignore=PATTERN, except that it is overridden by -a or -A.
- This can be useful for aliases, e.g., if lh is an alias for
- "ls --hide='*~'", then "lh -A" lists the file "README~".
- In the following cases POSIX allows the default GNU behavior,
- so when POSIXLY_CORRECT is set:
- false, printf, true, unlink, and yes all support --help and --option.
- ls supports TABSIZE.
- pr no longer depends on LC_TIME for the date format in non-POSIX locales.
- printf supports \u, \U, \x.
- tail supports two or more files when using the obsolete option syntax.
- The usual '--' operand is now supported by chroot, hostid, hostname,
- pwd, sync, and yes.
- 'od' now conforms to POSIX better, and is more compatible with BSD:
- The older syntax "od [-abcdfilosx]... [FILE] [[+]OFFSET[.][b]]" now works
- even without --traditional. This is a change in behavior if there
- are one or two operands and the last one begins with +, or if
- there are two operands and the latter one begins with a digit.
- For example, "od foo 10" and "od +10" now treat the last operand as
- an offset, not as a file name.
- -h is no longer documented, and may be withdrawn in future versions.
- Use -x or -t x2 instead.
- -i is now equivalent to -t dI (not -t d2), and
- -l is now equivalent to -t dL (not -t d4).
- -s is now equivalent to -t d2. The old "-s[NUM]" or "-s NUM"
- option has been renamed to "-S NUM".
- The default output format is now -t oS, not -t o2, i.e., short int
- rather than two-byte int. This makes a difference only on hosts like
- Cray systems where the C short int type requires more than two bytes.
- readlink accepts new options: --canonicalize-existing (-e)
- and --canonicalize-missing (-m).
- The stat option --filesystem has been renamed to --file-system, for
- consistency with POSIX "file system" and with cp and du --one-file-system.
- ** Removed features
- md5sum and sha1sum's undocumented --string option has been removed.
- tail's undocumented --max-consecutive-size-changes option has been removed.
- * Major changes in release 5.2.1 (2004-03-12) [stable]
- ** Bug fixes
- mv could mistakenly fail to preserve hard links when moving two
- or more arguments between partitions.
- 'cp --sparse=always F /dev/hdx' no longer tries to use lseek to create
- holes in the destination.
- nohup now sets the close-on-exec flag for its copy of the stderr file
- descriptor. This avoids some nohup-induced hangs. For example, before
- this change, if you ran 'ssh localhost', then 'nohup sleep 600 </dev/null &',
- and then exited that remote shell, the ssh session would hang until the
- 10-minute sleep terminated. With the fixed nohup, the ssh session
- terminates immediately.
- 'expr' now conforms to POSIX better:
- Integers like -0 and 00 are now treated as zero.
- The '|' operator now returns 0, not its first argument, if both
- arguments are null or zero. E.g., 'expr "" \| ""' now returns 0,
- not the empty string.
- The '|' and '&' operators now use short-circuit evaluation, e.g.,
- 'expr 1 \| 1 / 0' no longer reports a division by zero.
- ** New features
- 'chown user.group file' now has its traditional meaning even when
- conforming to POSIX 1003.1-2001, so long as no user has a name
- containing '.' that happens to equal 'user.group'.
- * Major changes in release 5.2.0 (2004-02-19) [stable]
- ** Bug fixes
- none
- * Major changes in release 5.1.3 (2004-02-08): candidate to become stable 5.2.0
- ** Bug fixes
- 'cp -d' now works as required even on systems like OSF V5.1 that
- declare stat and lstat as 'static inline' functions.
- timestamps output by stat now include actual fractional seconds,
- when available -- or .0000000 for files without that information.
- seq no longer infloops when printing 2^31 or more numbers.
- For reference, seq `echo 2^31|bc` > /dev/null takes about one hour
- on a 1.6 GHz Athlon 2000 XP. Now it can output 2^53-1 numbers before
- misbehaving.
- * Major changes in release 5.1.2 (2004-01-25):
- ** Bug fixes
- rmdir -p exits with status 1 on error; formerly it sometimes exited
- with status 0 when given more than one argument.
- nohup now always exits with status 127 when it finds an error,
- as POSIX requires; formerly it sometimes exited with status 1.
- Several programs (including cut, date, dd, env, hostname, nl, pr,
- stty, and tr) now always exit with status 1 when they find an error;
- formerly they sometimes exited with status 2.
- factor no longer reports a usage error if stdin has the wrong format.
- paste no longer infloops on ppc systems (bug introduced in 5.1.1)
- * Major changes in release 5.1.1 (2004-01-17):
- ** Configuration option
- You can select the default level of POSIX conformance at configure-time,
- e.g., by ./configure DEFAULT_POSIX2_VERSION=199209
- ** Bug fixes
- fold -s works once again on systems with differing sizes for int
- and size_t (bug introduced in 5.1.0)
- ** New features
- touch -r now specifies the origin for any relative times in the -d
- operand, if both options are given. For example, "touch -r FOO -d
- '-5 seconds' BAR" sets BAR's modification time to be five seconds
- before FOO's.
- join: The obsolete options "-j1 FIELD", "-j2 FIELD", and
- "-o LIST1 LIST2..." are no longer supported on POSIX 1003.1-2001 systems.
- Portable scripts should use "-1 FIELD", "-2 FIELD", and
- "-o LIST1,LIST2..." respectively. If join was compiled on a
- POSIX 1003.1-2001 system, you may enable the old behavior
- by setting _POSIX2_VERSION=199209 in your environment.
- [This change was reverted in coreutils 5.3.1.]
- * Major changes in release 5.1.0 (2003-12-21):
- ** New features
- chgrp, chmod, and chown can now process (with -R) hierarchies of virtually
- unlimited depth. Before, they would fail to operate on any file they
- encountered with a relative name of length PATH_MAX (often 4096) or longer.
- chgrp, chmod, chown, and rm accept the new options:
- --preserve-root, --no-preserve-root (default)
- chgrp and chown now accept POSIX-mandated -L, -H, and -P options
- du can now process hierarchies of virtually unlimited depth.
- Before, du was limited by the user's stack size and it would get a
- stack overflow error (often a segmentation fault) when applied to
- a hierarchy of depth around 30,000 or larger.
- du works even when run from an inaccessible directory
- du -D now dereferences all symlinks specified on the command line,
- not just the ones that reference directories
- du now accepts -P (--no-dereference), for compatibility with du
- of NetBSD and for consistency with e.g., chown and chgrp
- du's -H option will soon have the meaning required by POSIX
- (--dereference-args, aka -D) rather then the current meaning of --si.
- Now, using -H elicits a warning to that effect.
- When given -l and similar options, ls now adjusts the output column
- widths to fit the data, so that output lines are shorter and have
- columns that line up better. This may adversely affect shell
- scripts that expect fixed-width columns, but such shell scripts were
- not portable anyway, even with old GNU ls where the columns became
- ragged when a datum was too wide.
- du accepts a new option, -0/--null, to make it produce NUL-terminated
- output lines
- ** Bug fixes
- printf, seq, tail, and sleep now parse floating-point operands
- and options in the C locale. POSIX requires this for printf.
- od -c -w9999999 no longer segfaults
- csplit no longer reads from freed memory (dumping core on some systems)
- csplit would mistakenly exhaust virtual memory in some cases
- ls --width=N (for very large N) is no longer subject to an address
- arithmetic bug that could result in bounds violations.
- ls --width=N (with -x or -C) no longer allocates more space
- (potentially much more) than necessary for a given directory.
- dd 'unblock' and 'sync' may now be combined (e.g., dd conv=unblock,sync)
- * Major changes in release 5.0.91 (2003-09-08):
- ** New features
- date accepts a new option --rfc-2822, an alias for --rfc-822.
- split accepts a new option -d or --numeric-suffixes.
- cp, install, mv, and touch now preserve microsecond resolution on
- file timestamps, on platforms that have the 'utimes' system call.
- Unfortunately there is no system call yet to preserve file
- timestamps to their full nanosecond resolution; microsecond
- resolution is the best we can do right now.
- sort now supports the zero byte (NUL) as a field separator; use -t '\0'.
- The -t '' option, which formerly had no effect, is now an error.
- sort option order no longer matters for the options -S, -d, -i, -o, and -t.
- Stronger options override weaker, and incompatible options are diagnosed.
- 'sha1sum --check' now accepts the BSD format for SHA1 message digests
- in addition to the BSD format for MD5 ones.
- who -l now means 'who --login', not 'who --lookup', per POSIX.
- who's -l option has been eliciting an unconditional warning about
- this impending change since sh-utils-2.0.12 (April 2002).
- ** Bug fixes
- Mistakenly renaming a file onto itself, e.g., via 'mv B b' when 'B' is
- the same directory entry as 'b' no longer destroys the directory entry
- referenced by both 'b' and 'B'. Note that this would happen only on
- file systems like VFAT where two different names may refer to the same
- directory entry, usually due to lower->upper case mapping of file names.
- Now, the above can happen only on file systems that perform name mapping and
- that support hard links (stat.st_nlink > 1). This mitigates the problem
- in two ways: few file systems appear to be affected (hpfs and ntfs are),
- when the bug is triggered, mv no longer removes the last hard link to a file.
- *** ATTENTION ***: if you know how to distinguish the following two cases
- without writing to the file system in question, please let me know:
- 1) B and b refer to the same directory entry on a file system like NTFS
- (B may well have a link count larger than 1)
- 2) B and b are hard links to the same file
- stat no longer overruns a buffer for format strings ending in '%'
- fold -s -wN would infloop for N < 8 with TABs in the input.
- E.g., this would not terminate: printf 'a\t' | fold -w2 -s
- 'split -a0', although of questionable utility, is accepted once again.
- 'df DIR' used to hang under some conditions on OSF/1 5.1. Now it doesn't.
- seq's --width (-w) option now works properly even when the endpoint
- requiring the larger width is negative and smaller than the other endpoint.
- seq's default step is 1, even if LAST < FIRST.
- paste no longer mistakenly outputs 0xFF bytes for a nonempty input file
- without a trailing newline.
- 'tail -n0 -f FILE' and 'tail -c0 -f FILE' no longer perform what amounted
- to a busy wait, rather than sleeping between iterations.
- tail's long-undocumented --allow-missing option now elicits a warning
- * Major changes in release 5.0.90 (2003-07-29):
- ** New features
- sort is now up to 30% more CPU-efficient in some cases
- 'test' is now more compatible with Bash and POSIX:
- 'test -t', 'test --help', and 'test --version' now silently exit
- with status 0. To test whether standard output is a terminal, use
- 'test -t 1'. To get help and version info for 'test', use
- '[ --help' and '[ --version'.
- 'test' now exits with status 2 (not 1) if there is an error.
- wc count field widths now are heuristically adjusted depending on the input
- size, if known. If only one count is printed, it is guaranteed to
- be printed without leading spaces.
- Previously, wc did not align the count fields if POSIXLY_CORRECT was set,
- but POSIX did not actually require this undesirable behavior, so it
- has been removed.
- ** Bug fixes
- kill no longer tries to operate on argv[0] (introduced in 5.0.1)
- Why wasn't this noticed? Although many tests use kill, none of
- them made an effort to avoid using the shell's built-in kill.
- '[' invoked with no arguments no longer evokes a segfault
- rm without --recursive (aka -r or -R) no longer prompts regarding
- unwritable directories, as required by POSIX.
- uniq -c now uses a SPACE, not a TAB between the count and the
- corresponding line, as required by POSIX.
- expr now exits with status 2 if the expression is syntactically valid,
- and with status 3 if an error occurred. POSIX requires this.
- expr now reports trouble if string comparison fails due to a collation error.
- split now generates suffixes properly on EBCDIC hosts.
- split -a0 now works, as POSIX requires.
- 'sort --version' and 'sort --help' fail, as they should
- when their output is redirected to /dev/full.
- 'su --version > /dev/full' now fails, as it should.
- ** Fewer arbitrary limitations
- cut requires 97% less memory when very large field numbers or
- byte offsets are specified.
- * Major changes in release 5.0.1 (2003-07-15):
- ** New programs
- - new program: '[' (much like 'test')
- ** New features
- - head now accepts --lines=-N (--bytes=-N) to print all but the
- N lines (bytes) at the end of the file
- - md5sum --check now accepts the output of the BSD md5sum program, e.g.,
- MD5 (f) = d41d8cd98f00b204e9800998ecf8427e
- - date -d DATE can now parse a DATE string like May-23-2003
- - chown: '.' is no longer recognized as a separator in the OWNER:GROUP
- specifier on POSIX 1003.1-2001 systems. If chown *was not* compiled
- on such a system, then it still accepts '.', by default. If chown
- was compiled on a POSIX 1003.1-2001 system, then you may enable the
- old behavior by setting _POSIX2_VERSION=199209 in your environment.
- - chown no longer tries to preserve set-user-ID and set-group-ID bits;
- on some systems, the chown syscall resets those bits, and previous
- versions of the chown command would call chmod to restore the original,
- pre-chown(2) settings, but that behavior is problematic.
- 1) There was a window whereby a malicious user, M, could subvert a
- chown command run by some other user and operating on files in a
- directory where M has write access.
- 2) Before (and even now, on systems with chown(2) that doesn't reset
- those bits), an unwary admin. could use chown unwittingly to create e.g.,
- a set-user-ID root copy of /bin/sh.
- ** Bug fixes
- - chown --dereference no longer leaks a file descriptor per symlink processed
- - 'du /' once again prints the '/' on the last line
- - split's --verbose option works once again [broken in 4.5.10 and 5.0]
- - tail -f is no longer subject to a race condition that could make it
- delay displaying the last part of a file that had stopped growing. That
- bug could also make tail -f give an unwarranted 'file truncated' warning.
- - du no longer runs out of file descriptors unnecessarily
- - df and 'readlink --canonicalize' no longer corrupt the heap on
- non-glibc, non-solaris systems
- - 'env -u UNSET_VARIABLE' no longer dumps core on non-glibc systems
- - readlink's --canonicalize option now works on systems like Solaris that
- lack the canonicalize_file_name function but do have resolvepath.
- - mv now removes 'a' in this example on all systems: touch a; ln a b; mv a b
- This behavior is contrary to POSIX (which requires that the mv command do
- nothing and exit successfully), but I suspect POSIX will change.
- - date's %r format directive now honors locale settings
- - date's '-' (no-pad) format flag now affects the space-padded-by-default
- conversion specifiers, %e, %k, %l
- - fmt now diagnoses invalid obsolescent width specifications like '-72x'
- - fmt now exits nonzero when unable to open an input file
- - tsort now fails when given an odd number of input tokens,
- as required by POSIX. Before, it would act as if the final token
- appeared one additional time.
- ** Fewer arbitrary limitations
- - tail's byte and line counts are no longer limited to OFF_T_MAX.
- Now the limit is UINTMAX_MAX (usually 2^64).
- - split can now handle --bytes=N and --lines=N with N=2^31 or more.
- ** Portability
- - 'kill -t' now prints signal descriptions (rather than '?') on systems
- like Tru64 with __sys_siglist but no strsignal function.
- - stat.c now compiles on Ultrix systems
- - sleep now works on AIX systems that lack support for clock_gettime
- - rm now works around Darwin6.5's broken readdir function
- Before 'rm -rf DIR' would fail to remove all files in DIR
- if there were more than 338.
- * Major changes in release 5.0 (2003-04-02):
- - false --help now exits nonzero
- [4.5.12]
- * printf no longer treats \x specially when POSIXLY_CORRECT is set
- * printf avoids buffer overrun with format ending in a backslash and
- * printf avoids buffer overrun with incomplete conversion specifier
- * printf accepts multiple flags in a single conversion specifier
- [4.5.11]
- * seq no longer requires that a field width be specified
- * seq no longer fails when given a field width of '0'
- * seq now accepts " " and "'" as valid format flag characters
- * df now shows a HOSTNAME: prefix for each remote-mounted file system on AIX 5.1
- * portability tweaks for HP-UX, AIX 5.1, DJGPP
- [4.5.10]
- * printf no longer segfaults for a negative field width or precision
- * shred now always enables --exact for non-regular files
- * du no longer lists hard-linked files more than once
- * du no longer dumps core on some systems due to "infinite" recursion
- via nftw's use of the buggy replacement function in getcwd.c
- * portability patches for a few vendor compilers and 64-bit systems
- * du -S *really* now works like it did before the change in 4.5.5
- [4.5.9]
- * du no longer truncates file sizes or sums to fit in 32-bit size_t
- * work around Linux kernel bug in getcwd (fixed in 2.4.21-pre4), so that pwd
- now fails if the name of the working directory is so long that getcwd
- truncates it. Before it would print the truncated name and exit successfully.
- * 'df /some/mount-point' no longer hangs on a GNU libc system when another
- hard-mounted NFS file system (preceding /some/mount-point in /proc/mounts)
- is inaccessible.
- * rm -rf now gives an accurate diagnostic when failing to remove a file
- under certain unusual conditions
- * mv and 'cp --preserve=links' now preserve multiple hard links even under
- certain unusual conditions where they used to fail
- [4.5.8]
- * du -S once again works like it did before the change in 4.5.5
- * stat accepts a new file format, %B, for the size of each block reported by %b
- * du accepts new option: --apparent-size
- * du --bytes (-b) works the same way it did in fileutils-3.16 and before
- * du reports proper sizes for directories (not zero) (broken in 4.5.6 or 4.5.7)
- * df now always displays under 'Filesystem', the device file name
- corresponding to the listed mount point. Before, for a block- or character-
- special file command line argument, df would display that argument. E.g.,
- 'df /dev/hda' would list '/dev/hda' as the 'Filesystem', rather than say
- /dev/hda3 (the device on which '/' is mounted), as it does now.
- * test now works properly when invoked from a set user ID or set group ID
- context and when testing access to files subject to alternate protection
- mechanisms. For example, without this change, a set-UID program that invoked
- 'test -w F' (to see if F is writable) could mistakenly report that it *was*
- writable, even though F was on a read-only file system, or F had an ACL
- prohibiting write access, or F was marked as immutable.
- [4.5.7]
- * du would fail with more than one DIR argument when any but the last did not
- contain a slash (due to a bug in ftw.c)
- [4.5.6]
- * du no longer segfaults on Solaris systems (fixed heap-corrupting bug in ftw.c)
- * du --exclude=FILE works once again (this was broken by the rewrite for 4.5.5)
- * du no longer gets a failed assertion for certain hierarchy lay-outs
- involving hard-linked directories
- * 'who -r' no longer segfaults when using non-C-locale messages
- * df now displays a mount point (usually '/') for non-mounted
- character-special and block files
- [4.5.5]
- * ls --dired produces correct byte offset for file names containing
- nonprintable characters in a multibyte locale
- * du has been rewritten to use a variant of GNU libc's ftw.c
- * du now counts the space associated with a directory's directory entry,
- even if it cannot list or chdir into that subdirectory.
- * du -S now includes the st_size of each entry corresponding to a subdirectory
- * rm on FreeBSD can once again remove directories from NFS-mounted file systems
- * ls has a new option --dereference-command-line-symlink-to-dir, which
- corresponds to the new default behavior when none of -d, -l -F, -H, -L
- has been specified.
- * ls dangling-symlink now prints 'dangling-symlink'.
- Before, it would fail with 'no such file or directory'.
- * ls -s symlink-to-non-dir and ls -i symlink-to-non-dir now print
- attributes of 'symlink', rather than attributes of their referents.
- * Fix a bug introduced in 4.5.4 that made it so that ls --color would no
- longer highlight the names of files with the execute bit set when not
- specified on the command line.
- * shred's --zero (-z) option no longer gobbles up any following argument.
- Before, 'shred --zero file' would produce 'shred: missing file argument',
- and worse, 'shred --zero f1 f2 ...' would appear to work, but would leave
- the first file untouched.
- * readlink: new program
- * cut: new feature: when used to select ranges of byte offsets (as opposed
- to ranges of fields) and when --output-delimiter=STRING is specified,
- output STRING between ranges of selected bytes.
- * rm -r can no longer be tricked into mistakenly reporting a cycle.
- * when rm detects a directory cycle, it no longer aborts the entire command,
- but rather merely stops processing the affected command line argument.
- [4.5.4]
- * cp no longer fails to parse options like this: --preserve=mode,ownership
- * 'ls --color -F symlink-to-dir' works properly
- * ls is much more efficient on directories with valid dirent.d_type.
- * stty supports all baud rates defined in linux-2.4.19.
- * 'du symlink-to-dir/' would improperly remove the trailing slash
- * 'du ""' would evoke a bounds violation.
- * In the unlikely event that running 'du /' resulted in 'stat ("/", ...)'
- failing, du would give a diagnostic about '' (empty string) rather than '/'.
- * printf: a hexadecimal escape sequence has at most two hex. digits, not three.
- * The following features have been added to the --block-size option
- and similar environment variables of df, du, and ls.
- - A leading "'" generates numbers with thousands separators.
- For example:
- $ ls -l --block-size="'1" file
- -rw-rw-r-- 1 eggert src 47,483,707 Sep 24 23:40 file
- - A size suffix without a leading integer generates a suffix in the output.
- For example:
- $ ls -l --block-size="K"
- -rw-rw-r-- 1 eggert src 46371K Sep 24 23:40 file
- * ls's --block-size option now affects file sizes in all cases, not
- just for --block-size=human-readable and --block-size=si. Fractional
- sizes are now always rounded up, for consistency with df and du.
- * df now displays the block size using powers of 1000 if the requested
- block size seems to be a multiple of a power of 1000.
- * nl no longer gets a segfault when run like this 'yes|nl -s%n'
- [4.5.3]
- * du --dereference-args (-D) no longer fails in certain cases
- * 'ln --target-dir=DIR' no longer fails when given a single argument
- [4.5.2]
- * 'rm -i dir' (without --recursive (-r)) no longer recurses into dir
- * 'tail -c N FILE' now works with files of size >= 4GB
- * 'mkdir -p' can now create very deep (e.g. 40,000-component) directories
- * rmdir -p dir-with-trailing-slash/ no longer fails
- * printf now honors the '--' command line delimiter
- * od's 8-byte formats x8, o8, and u8 now work
- * tail now accepts fractional seconds for its --sleep-interval=S (-s) option
- [4.5.1]
- * du and ls now report sizes of symbolic links (before they'd always report 0)
- * uniq now obeys the LC_COLLATE locale, as per POSIX 1003.1-2001 TC1.
- ========================================================================
- Here are the NEWS entries made from fileutils-4.1 until the
- point at which the packages merged to form the coreutils:
- [4.1.11]
- * 'rm symlink-to-unwritable' doesn't prompt [introduced in 4.1.10]
- [4.1.10]
- * rm once again gives a reasonable diagnostic when failing to remove a file
- owned by someone else in a sticky directory [introduced in 4.1.9]
- * df now rounds all quantities up, as per POSIX.
- * New ls time style: long-iso, which generates YYYY-MM-DD HH:MM.
- * Any time style can be preceded by "posix-"; this causes "ls" to
- use traditional timestamp format when in the POSIX locale.
- * The default time style is now posix-long-iso instead of posix-iso.
- Set TIME_STYLE="posix-iso" to revert to the behavior of 4.1.1 through 4.1.9.
- * 'rm dangling-symlink' doesn't prompt [introduced in 4.1.9]
- * stat: remove support for --secure/-s option and related %S and %C format specs
- * stat: rename --link/-l to --dereference/-L.
- The old options will continue to work for a while.
- [4.1.9]
- * rm can now remove very deep hierarchies, in spite of any limit on stack size
- * new programs: link, unlink, and stat
- * New ls option: --author (for the Hurd).
- * 'touch -c no-such-file' no longer fails, per POSIX
- [4.1.8]
- * mv no longer mistakenly creates links to preexisting destination files
- that aren't moved
- [4.1.7]
- * rm: close a hole that would allow a running rm process to be subverted
- [4.1.6]
- * New cp option: --copy-contents.
- * cp -r is now equivalent to cp -R. Use cp -R -L --copy-contents to get the
- traditional (and rarely desirable) cp -r behavior.
- * ls now accepts --time-style=+FORMAT, where +FORMAT works like date's format
- * The obsolete usage 'touch [-acm] MMDDhhmm[YY] FILE...' is no longer
- supported on systems conforming to POSIX 1003.1-2001. Use touch -t instead.
- * cp and inter-partition mv no longer give a misleading diagnostic in some
- unusual cases
- [4.1.5]
- * cp -r no longer preserves symlinks
- * The block size notation is now compatible with SI and with IEC 60027-2.
- For example, --block-size=1MB now means --block-size=1000000,
- whereas --block-size=1MiB now means --block-size=1048576.
- A missing 'B' (e.g. '1M') has the same meaning as before.
- A trailing 'B' now means decimal, not binary; this is a silent change.
- The nonstandard 'D' suffix (e.g. '1MD') is now obsolescent.
- * -H or --si now outputs the trailing 'B', for consistency with the above.
- * Programs now output trailing 'K' (not 'k') to mean 1024, as per IEC 60027-2.
- * New df, du short option -B is short for --block-size.
- * You can omit an integer '1' before a block size suffix,
- e.g. 'df -BG' is equivalent to 'df -B 1G' and to 'df --block-size=1G'.
- * The following options are now obsolescent, as their names are
- incompatible with IEC 60027-2:
- df, du: -m or --megabytes (use -BM or --block-size=1M)
- df, du, ls: --kilobytes (use --block-size=1K)
- [4.1.4]
- * df --local no longer lists smbfs file systems whose name starts with //
- * dd now detects the Linux/tape/lseek bug at run time and warns about it.
- [4.1.3]
- * ls -R once again outputs a blank line between per-directory groups of files.
- This was broken by the cycle-detection change in 4.1.1.
- * dd once again uses 'lseek' on character devices like /dev/mem and /dev/kmem.
- On systems with the linux kernel (at least up to 2.4.16), dd must still
- resort to emulating 'skip=N' behavior using reads on tape devices, because
- lseek has no effect, yet appears to succeed. This may be a kernel bug.
- [4.1.2]
- * cp no longer fails when two or more source files are the same;
- now it just gives a warning and doesn't copy the file the second time.
- E.g., cp a a d/ produces this:
- cp: warning: source file `a' specified more than once
- * chmod would set the wrong bit when given symbolic mode strings like
- these: g=o, o=g, o=u. E.g., 'chmod a=,o=w,ug=o f' would give a mode
- of --w-r---w- rather than --w--w--w-.
- [4.1.1]
- * mv (likewise for cp), now fails rather than silently clobbering one of
- the source files in the following example:
- rm -rf a b c; mkdir a b c; touch a/f b/f; mv a/f b/f c
- * ls -R detects directory cycles, per POSIX. It warns and doesn't infloop.
- * cp's -P option now means the same as --no-dereference, per POSIX.
- Use --parents to get the old meaning.
- * When copying with the -H and -L options, cp can preserve logical
- links between source files with --preserve=links
- * cp accepts new options:
- --preserve[={mode,ownership,timestamps,links,all}]
- --no-preserve={mode,ownership,timestamps,links,all}
- * cp's -p and --preserve options remain unchanged and are equivalent
- to '--preserve=mode,ownership,timestamps'
- * mv and cp accept a new option: --reply={yes,no,query}; provides a consistent
- mechanism to control whether one is prompted about certain existing
- destination files. Note that cp's and mv's -f options don't have the
- same meaning: cp's -f option no longer merely turns off '-i'.
- * remove portability limitations (e.g., PATH_MAX on the Hurd, fixes for
- 64-bit systems)
- * mv now prompts before overwriting an existing, unwritable destination file
- when stdin is a tty, unless --force (-f) is specified, as per POSIX.
- * mv: fix the bug whereby 'mv -uf source dest' would delete source,
- even though it's older than dest.
- * chown's --from=CURRENT_OWNER:CURRENT_GROUP option now works
- * cp now ensures that the set-user-ID and set-group-ID bits are cleared for
- the destination file when when copying and not preserving permissions.
- * 'ln -f --backup k k' gives a clearer diagnostic
- * ls no longer truncates user names or group names that are longer
- than 8 characters.
- * ls's new --dereference-command-line option causes it to dereference
- symbolic links on the command-line only. It is the default unless
- one of the -d, -F, or -l options are given.
- * ls -H now means the same as ls --dereference-command-line, as per POSIX.
- * ls -g now acts like ls -l, except it does not display owner, as per POSIX.
- * ls -n now implies -l, as per POSIX.
- * ls can now display dates and times in one of four time styles:
- - The 'full-iso' time style gives full ISO-style timestamps like
- '2001-05-14 23:45:56.477817180 -0700'.
- - The 'iso' time style gives ISO-style timestamps like '2001-05-14 '
- and '05-14 23:45'.
- - The 'locale' time style gives locale-dependent timestamps like
- 'touko 14 2001' and 'touko 14 23:45' (in a Finnish locale).
- - The 'posix-iso' time style gives traditional POSIX-locale
- timestamps like 'May 14 2001' and 'May 14 23:45' unless the user
- specifies a non-POSIX locale, in which case it uses ISO-style dates.
- This is the default.
- You can specify a time style with an option like --time-style='iso'
- or with an environment variable like TIME_STYLE='iso'. GNU Emacs 21
- and later can parse ISO dates, but older Emacs versions cannot, so
- if you are using an older version of Emacs outside the default POSIX
- locale, you may need to set TIME_STYLE="locale".
- * --full-time is now an alias for "-l --time-style=full-iso".
- ========================================================================
- Here are the NEWS entries made from sh-utils-2.0 until the
- point at which the packages merged to form the coreutils:
- [2.0.15]
- * date no longer accepts e.g., September 31 in the MMDDhhmm syntax
- * fix a bug in this package's .m4 files and in configure.ac
- [2.0.14]
- * nohup's behavior is changed as follows, to conform to POSIX 1003.1-2001:
- - nohup no longer adjusts scheduling priority; use "nice" for that.
- - nohup now redirects stderr to stdout, if stderr is not a terminal.
- - nohup exit status is now 126 if command was found but not invoked,
- 127 if nohup failed or if command was not found.
- [2.0.13]
- * uname and uptime work better on *BSD systems
- * pathchk now exits nonzero for a path with a directory component
- that specifies a non-directory
- [2.0.12]
- * kill: new program
- * who accepts new options: --all (-a), --boot (-b), --dead (-d), --login,
- --process (-p), --runlevel (-r), --short (-s), --time (-t), --users (-u).
- The -u option now produces POSIX-specified results and is the same as
- the long option '--users'. --idle is no longer the same as -u.
- * The following changes apply on systems conforming to POSIX 1003.1-2001:
- - 'date -I' is no longer supported. Instead, use 'date --iso-8601'.
- - 'nice -NUM' is no longer supported. Instead, use 'nice -n NUM'.
- [This change was reverted in coreutils 5.3.1.]
- * New 'uname' options -i or --hardware-platform, and -o or --operating-system.
- 'uname -a' now outputs -i and -o information at the end.
- New uname option --kernel-version is an alias for -v.
- Uname option --release has been renamed to --kernel-release,
- and --sysname has been renamed to --kernel-name;
- the old options will work for a while, but are no longer documented.
- * 'expr' now uses the LC_COLLATE locale for string comparison, as per POSIX.
- * 'expr' now requires '+' rather than 'quote' to quote tokens;
- this removes an incompatibility with POSIX.
- * date -d 'last friday' would print a date/time that was one hour off
- (e.g., 23:00 on *thursday* rather than 00:00 of the preceding friday)
- when run such that the current time and the target date/time fall on
- opposite sides of a daylight savings time transition.
- This problem arose only with relative date strings like 'last monday'.
- It was not a problem with strings that include absolute dates.
- * factor is twice as fast, for large numbers
- [2.0.11]
- * setting the date now works properly, even when using -u
- * 'date -f - < /dev/null' no longer dumps core
- * some DOS/Windows portability changes
- [2.0j]
- * 'date -d DATE' now parses certain relative DATEs correctly
- [2.0i]
- * fixed a bug introduced in 2.0h that made many programs fail with a
- 'write error' when invoked with the --version option
- [2.0h]
- * all programs fail when printing --help or --version output to a full device
- * printf exits nonzero upon write failure
- * yes now detects and terminates upon write failure
- * date --rfc-822 now always emits day and month names from the 'C' locale
- * portability tweaks for Solaris8, Ultrix, and DOS
- [2.0g]
- * date now handles two-digit years with leading zeros correctly.
- * printf interprets unicode, \uNNNN \UNNNNNNNN, on systems with the
- required support; from Bruno Haible.
- * stty's rprnt attribute now works on HPUX 10.20
- * seq's --equal-width option works more portably
- [2.0f]
- * fix build problems with ut_name vs. ut_user
- [2.0e]
- * stty: fix long-standing bug that caused test failures on at least HPUX
- systems when COLUMNS was set to zero
- * still more portability fixes
- * unified lib/: now that directory and most of the configuration framework
- is common between fileutils, textutils, and sh-utils
- [2.0d]
- * fix portability problem with sleep vs lib/strtod.c's requirement for -lm
- [2.0c]
- * fix portability problems with nanosleep.c and with the new code in sleep.c
- [2.0b]
- * Regenerate lib/Makefile.in so that nanosleep.c is distributed.
- [2.0a]
- * sleep accepts floating point arguments on command line
- * sleep's clock continues counting down when sleep is suspended
- * when a suspended sleep process is resumed, it continues sleeping if
- there is any time remaining
- * who once again prints whatever host information it has, even without --lookup
- ========================================================================
- For older NEWS entries for the fileutils, textutils, and sh-utils
- packages, see ./old/*/NEWS.
- This package began as the union of the following:
- textutils-2.1, fileutils-4.1.11, sh-utils-2.0.15.
- ========================================================================
- Copyright (C) 2001-2018 Free Software Foundation, Inc.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.3 or
- any later version published by the Free Software Foundation; with no
- Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
- Texts. A copy of the license is included in the "GNU Free
- Documentation License" file as part of this distribution.
|